diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
index ad2b253..0bc8371 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
@@ -7151,7 +7151,7 @@
  * 
  * @since 3.103
  */
-public boolean isSelected() {
+public boolean isTextSelected() {
 	checkWidget();
 	if (blockSelection && blockXLocation != -1) {
 		Rectangle rect = getBlockSelectionPosition();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
index 9107daf..9fcf8cc 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
@@ -4413,14 +4413,14 @@
 	text.showSelection();
 }
 
-public void test_isSelected() {
+public void test_isTextSelected() {
 	// Empty selection
 	text.setText("Sample Text Selection");
-	assertFalse(text.isSelected());
+	assertFalse(text.isTextSelected());
 	
 	// Set selection
 	text.setSelection(0, text.getCharCount());
-	assertTrue(text.isSelected());
+	assertTrue(text.isTextSelected());
 	
 	// Set block selection
 	StringBuilder buffer = new StringBuilder();
@@ -4431,14 +4431,14 @@
 	text.setSize(100, 10000);
 	text.setBlockSelection(true);
 	text.setBlockSelectionBounds(0, 0, 100, 10000);
-	assertTrue(text.isSelected());
+	assertTrue(text.isTextSelected());
 	
 	// Set block selection on new line
 	text.setText(System.getProperty("line.separator"));
 	text.setSize(100, 100);
 	text.setBlockSelection(true);
 	text.setBlockSelectionBounds(0, 0, 100, 100);
-	assertTrue(text.isSelected());
+	assertTrue(text.isTextSelected());
 }
 
 public static Test suite() {
@@ -4508,7 +4508,7 @@
 	methodNames.addElement("test_getWordWrap");
 	methodNames.addElement("test_insertLjava_lang_String");
 	methodNames.addElement("test_invokeActionI");
-	methodNames.addElement("test_isSelected");
+	methodNames.addElement("test_isTextSelected");
 	methodNames.addElement("test_paste");
 	methodNames.addElement("test_print");
 	methodNames.addElement("test_printLorg_eclipse_swt_printing_Printer");
@@ -4621,7 +4621,7 @@
 	else if (getName().equals("test_getWordWrap")) test_getWordWrap();
 	else if (getName().equals("test_insertLjava_lang_String")) test_insertLjava_lang_String();
 	else if (getName().equals("test_invokeActionI")) test_invokeActionI();
-	else if (getName().equals("test_isSelected")) test_isSelected();
+	else if (getName().equals("test_isTextSelected")) test_isTextSelected();
 	else if (getName().equals("test_paste")) test_paste();
 	else if (getName().equals("test_print")) test_print();
 	else if (getName().equals("test_printLorg_eclipse_swt_printing_Printer")) test_printLorg_eclipse_swt_printing_Printer();
