diff options
| author | Eric Williams | 2019-02-20 14:57:49 +0000 |
|---|---|---|
| committer | Eric Williams | 2019-02-20 14:57:49 +0000 |
| commit | 8540e746179ae6f69e9f415f37179feca80a3bb0 (patch) | |
| tree | c2751568018141862062a176b38cce8e9ecf006c | |
| parent | 72191938554b57292601233aad8a7c38895760a1 (diff) | |
| download | eclipse.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>
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); |
