diff options
author | Paul D'Pong | 2021-02-10 21:30:43 +0000 |
---|---|---|
committer | Alexander Kurtakov | 2021-02-11 07:30:47 +0000 |
commit | fedbd2a6a71520962407de6b44f89af693fc37cd (patch) | |
tree | e9d1df63a53c2b4434f5f6856de6a5d92bf41058 | |
parent | 732cd3f8010ea1a883b0444462207ddc4e96f6c9 (diff) | |
download | eclipse.platform.swt-fedbd2a6a71520962407de6b44f89af693fc37cd.tar.gz eclipse.platform.swt-fedbd2a6a71520962407de6b44f89af693fc37cd.tar.xz eclipse.platform.swt-fedbd2a6a71520962407de6b44f89af693fc37cd.zip |
Bug 571102 - [GTK] Table/Tree Header Background does not apply when
there are no columns
- Apply header background/foreground css when columnCount == 0
- SWT initially creates a column in the treeview to allow for a header
to appear
Change-Id: I4a7a9699b9086743f831abfbac3c9ab2057a792b
Signed-off-by: Paul D'Pong <sdamrong@redhat.com>
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java | 32 | ||||
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java | 32 |
2 files changed, 58 insertions, 6 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java index 91e7aeeaf7..911f237cd3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java @@ -97,6 +97,8 @@ public class Table extends Composite { boolean boundsChangedSinceLastDraw, headerVisible, wasScrolled; boolean rowActivated; + private long headerCSSProvider; + static final int CHECKED_COLUMN = 0; static final int GRAYED_COLUMN = 1; static final int FOREGROUND_COLUMN = 2; @@ -3596,9 +3598,23 @@ void updateHeaderCSS() { } css.append("}\n"); - for (TableColumn column : columns) { - if (column != null) { - column.setHeaderCSS(css.toString()); + if (columnCount == 0) { + long buttonHandle = GTK.gtk_tree_view_column_get_button(GTK.gtk_tree_view_get_column(handle, 0)); + if (headerCSSProvider == 0) { + headerCSSProvider = GTK.gtk_css_provider_new(); + GTK.gtk_style_context_add_provider(GTK.gtk_widget_get_style_context(buttonHandle), headerCSSProvider, GTK.GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + + if (GTK.GTK4) { + GTK.gtk_css_provider_load_from_data(headerCSSProvider, Converter.javaStringToCString(css.toString()), -1); + } else { + GTK.gtk_css_provider_load_from_data(headerCSSProvider, Converter.javaStringToCString(css.toString()), -1, null); + } + } else { + for (TableColumn column : columns) { + if (column != null) { + column.setHeaderCSS(css.toString()); + } } } } @@ -4279,4 +4295,14 @@ void checkSetDataInProcessBeforeRemoval(int start, int end) { } } } + +@Override +public void dispose() { + super.dispose(); + + if (headerCSSProvider != 0) { + OS.g_object_unref(headerCSSProvider); + headerCSSProvider = 0; + } +} } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java index c6215d3b06..0c95d6ebd3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java @@ -106,6 +106,8 @@ public class Tree extends Composite { boolean boundsChangedSinceLastDraw, wasScrolled; boolean rowActivated; + private long headerCSSProvider; + static final int ID_COLUMN = 0; static final int CHECKED_COLUMN = 1; static final int GRAYED_COLUMN = 2; @@ -3738,9 +3740,23 @@ void updateHeaderCSS() { } css.append("}\n"); - for (TreeColumn column : columns) { - if (column != null) { - column.setHeaderCSS(css.toString()); + if (columnCount == 0) { + long buttonHandle = GTK.gtk_tree_view_column_get_button(GTK.gtk_tree_view_get_column(handle, 0)); + if (headerCSSProvider == 0) { + headerCSSProvider = GTK.gtk_css_provider_new(); + GTK.gtk_style_context_add_provider(GTK.gtk_widget_get_style_context(buttonHandle), headerCSSProvider, GTK.GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + + if (GTK.GTK4) { + GTK.gtk_css_provider_load_from_data(headerCSSProvider, Converter.javaStringToCString(css.toString()), -1); + } else { + GTK.gtk_css_provider_load_from_data(headerCSSProvider, Converter.javaStringToCString(css.toString()), -1, null); + } + } else { + for (TreeColumn column : columns) { + if (column != null) { + column.setHeaderCSS(css.toString()); + } } } } @@ -4294,4 +4310,14 @@ private void throwCannotRemoveItem(int i) { String message = "Cannot remove item with index " + i + "."; throw new SWTException(message); } + +@Override +public void dispose() { + super.dispose(); + + if (headerCSSProvider != 0) { + OS.g_object_unref(headerCSSProvider); + headerCSSProvider = 0; + } +} } |