Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Williams2019-02-20 14:57:49 +0000
committerEric Williams2019-02-20 14:57:49 +0000
commit8540e746179ae6f69e9f415f37179feca80a3bb0 (patch)
treec2751568018141862062a176b38cce8e9ecf006c
parent72191938554b57292601233aad8a7c38895760a1 (diff)
downloadeclipse.platform.swt-8540e746179ae6f69e9f415f37179feca80a3bb0.tar.gz
eclipse.platform.swt-8540e746179ae6f69e9f415f37179feca80a3bb0.tar.xz
eclipse.platform.swt-8540e746179ae6f69e9f415f37179feca80a3bb0.zip
Bug 436085: setTabs method in Text widget is ignored when style includes
SWT.SINGLE Enable setTabs() to work with Text widgets of style SWT.SINGLE. Previously this was not implemented, and SWT was just retuning for all SWT.SINGLE Text widgets. Additionally, the automated JUnit tests for such functionality were limited to Win32 only -- I have now enabled them to run on Linux as well. A reproducer snippet is also attached to this commit. Change-Id: I259a4226475296ff2514c016590668e4d90be1c2 Signed-off-by: Eric Williams <ericwill@redhat.com>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c10
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java13
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java7
-rw-r--r--tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug436085_TextEntryTabs.java36
-rw-r--r--tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java2
7 files changed, 67 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
index e14febf0bf..37473e69d2 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
@@ -5414,6 +5414,16 @@ fail:
}
#endif
+#ifndef NO__1gtk_1entry_1set_1tabs
+JNIEXPORT void JNICALL GTK_NATIVE(_1gtk_1entry_1set_1tabs)
+ (JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+ GTK_NATIVE_ENTER(env, that, _1gtk_1entry_1set_1tabs_FUNC);
+ gtk_entry_set_tabs((GtkEntry *)arg0, (PangoTabArray *)arg1);
+ GTK_NATIVE_EXIT(env, that, _1gtk_1entry_1set_1tabs_FUNC);
+}
+#endif
+
#ifndef NO__1gtk_1entry_1set_1text
JNIEXPORT void JNICALL GTK_NATIVE(_1gtk_1entry_1set_1text)
(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1)
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
index 074c536763..9acda3e557 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
@@ -498,6 +498,7 @@ char * GTK_nativeFunctionNames[] = {
"_1gtk_1entry_1set_1invisible_1char",
"_1gtk_1entry_1set_1max_1length",
"_1gtk_1entry_1set_1placeholder_1text",
+ "_1gtk_1entry_1set_1tabs",
"_1gtk_1entry_1set_1text",
"_1gtk_1entry_1set_1visibility",
"_1gtk_1entry_1set_1width_1chars",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
index 78c85a71be..130e9204c9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
@@ -496,6 +496,7 @@ typedef enum {
_1gtk_1entry_1set_1invisible_1char_FUNC,
_1gtk_1entry_1set_1max_1length_FUNC,
_1gtk_1entry_1set_1placeholder_1text_FUNC,
+ _1gtk_1entry_1set_1tabs_FUNC,
_1gtk_1entry_1set_1text_FUNC,
_1gtk_1entry_1set_1visibility_FUNC,
_1gtk_1entry_1set_1width_1chars_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java
index 2c3b3687b1..a684afde7a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java
@@ -2161,6 +2161,19 @@ public class GTK extends OS {
}
/**
* @param entry cast=(GtkEntry *)
+ * @param tabs cast=(PangoTabArray *)
+ */
+ public static final native void _gtk_entry_set_tabs(long /*int*/ entry, long /*int*/ tabs);
+ public static final void gtk_entry_set_tabs(long /*int*/ entry, long /*int*/ tabs) {
+ lock.lock();
+ try {
+ _gtk_entry_set_tabs(entry, tabs);
+ } finally {
+ lock.unlock();
+ }
+ }
+ /**
+ * @param entry cast=(GtkEntry *)
* @param text cast=(const gchar *)
*/
public static final native void _gtk_entry_set_text(long /*int*/ entry, byte[] text);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
index bab8233166..892f65dd7a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
@@ -2571,11 +2571,14 @@ public void setTabs (int tabs) {
}
void setTabStops (int tabs) {
- if ((style & SWT.SINGLE) != 0) return;
int tabWidth = getTabWidth (tabs);
long /*int*/ tabArray = OS.pango_tab_array_new (1, false);
OS.pango_tab_array_set_tab (tabArray, 0, OS.PANGO_TAB_LEFT, tabWidth);
- GTK.gtk_text_view_set_tabs (handle, tabArray);
+ if ((style & SWT.SINGLE) != 0) {
+ GTK.gtk_entry_set_tabs (handle, tabArray);
+ } else {
+ GTK.gtk_text_view_set_tabs (handle, tabArray);
+ }
OS.pango_tab_array_free (tabArray);
}
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug436085_TextEntryTabs.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug436085_TextEntryTabs.java
new file mode 100644
index 0000000000..b75da0e6c6
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug436085_TextEntryTabs.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.tests.gtk.snippets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class Bug436085_TextEntryTabs {
+
+ public static void main (String [] args) {
+ Display display = new Display ();
+ Shell shell = new Shell(display);
+ Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);
+ text.setBounds (10, 10, 1000, 60);
+ text.setTabs(1);
+ text.append("1\t12\t123\t1234\t12345\t123456\t1234567\t12345678\t12345678");
+ shell.open ();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) display.sleep();
+ }
+ display.dispose();
+}
+}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
index 361b41b4f1..cf8c36329f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
@@ -613,7 +613,7 @@ public void test_getSelectionText() {
@Test
public void test_getTabs() {
- if (SWT.getPlatform().equals("win32")) {
+ if (SWT.getPlatform().equals("win32") || SWT.getPlatform().equals("gtk")) {
// API not supported on all platforms
text.setTabs(1);
assertTrue(":a:", text.getTabs() == 1);

Back to the top