Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul D'Pong2021-02-10 21:30:43 +0000
committerAlexander Kurtakov2021-02-11 07:30:47 +0000
commitfedbd2a6a71520962407de6b44f89af693fc37cd (patch)
treee9d1df63a53c2b4434f5f6856de6a5d92bf41058
parent732cd3f8010ea1a883b0444462207ddc4e96f6c9 (diff)
downloadeclipse.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.java32
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java32
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;
+ }
+}
}

Back to the top