Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXi Yan2018-11-30 14:51:10 +0000
committerXi Yan2018-11-30 17:03:35 +0000
commit59b0f429a75003d153116d1b4753427591e69bad (patch)
tree2f9ee7fdcb765f096a11a80ecdb73e478e582bb7
parentdb9131e14b7cb99cd8dee07a6180f52878177708 (diff)
downloadeclipse.platform.swt-59b0f429a75003d153116d1b4753427591e69bad.tar.gz
eclipse.platform.swt-59b0f429a75003d153116d1b4753427591e69bad.tar.xz
eclipse.platform.swt-59b0f429a75003d153116d1b4753427591e69bad.zip
Bug 541720 - [Gtk3] Regression: TableColumn.pack() clears header in 4.9
Previous patch (https://git.eclipse.org/r/#/c/126904/ )fixes table appearing as thin line by always showing the table before getting the preferred size, and hiding it afterwards. This caused a regression that when the second time pack() is called, it always hides the header. This patch fixes this by only hiding the header when it is not suppose to be visible. Change-Id: I7cbe06cb36a7ae7b18a52010361f5c575d88ff0b Signed-off-by: Xi Yan <xixiyan@redhat.com>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java5
-rw-r--r--tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug541720_PackClear.java83
2 files changed, 87 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
index 089e231984..af97760002 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
@@ -443,10 +443,13 @@ public void pack () {
checkWidget();
int width = 0;
if (buttonHandle != 0) {
+ boolean hideHeader = !GTK.gtk_widget_get_visible(buttonHandle);
GtkRequisition requisition = new GtkRequisition ();
GTK.gtk_widget_show(buttonHandle);
gtk_widget_get_preferred_size (buttonHandle, requisition);
- GTK.gtk_widget_hide(buttonHandle);
+ if (hideHeader) {
+ GTK.gtk_widget_hide(buttonHandle);
+ }
width = requisition.width;
}
if ((parent.style & SWT.VIRTUAL) != 0) {
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug541720_PackClear.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug541720_PackClear.java
new file mode 100644
index 0000000000..260f915b31
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug541720_PackClear.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Red Hat and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt). The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html. If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ *
+ * Contributors:
+ * Red Hat - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.tests.gtk.snippets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+public class Bug541720_PackClear {
+
+ private static final int NUM_ROW = 4;
+ private static final int NUM_COL = 5;
+
+ public static void main(String[] args) {
+ Display display = new Display();
+ String gtkVersion = System.getProperty("org.eclipse.swt.internal.gtk.version");
+ Shell shell = new Shell(display);
+ shell.setText("Table Column packing gtk " + gtkVersion);
+
+ shell.setLayout(new FillLayout());
+
+ final int style = SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION;
+ Table table = new Table(shell, style);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ for (int col = 0; col < NUM_COL; col++) {
+ TableColumn column = new TableColumn(table, SWT.CENTER);
+ column.setText("Column " + col);
+ column.pack();
+ }
+ for (int row = 0; row < NUM_ROW; row++) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ for (int col = 0; col < 5; col++) {
+ item.setText(col, "Text for Row " + row + " Column " + col);
+ }
+ }
+ table.setItemCount(NUM_ROW);
+ table.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ Point pt = new Point(e.x, e.y);
+ TableItem item = table.getItem(pt);
+ if (item == null) {
+ return;
+ }
+ for (int col = 0; col < NUM_COL; col++) {
+ if (item.getBounds(col).contains(pt)) {
+ TableColumn column = table.getColumns()[col];
+ column.pack();
+ }
+ }
+ }
+ });
+ shell.pack();
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ display.dispose();
+ }
+} \ No newline at end of file

Back to the top