Skip to content

Commit 3c7a3f7

Browse files
committed
[GTK] Fire settings event on Gtk theme change
Listen for notify::gtk-theme-name signal and fire SWT.Settings even in this case.
1 parent 9baef58 commit 3c7a3f7

File tree

2 files changed

+22
-1
lines changed
  • bundles/org.eclipse.swt
    • Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk
    • Eclipse SWT/gtk/org/eclipse/swt/widgets

2 files changed

+22
-1
lines changed

bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ public static String getEnvironmentalVariable (String envVarName) {
338338
public static final byte[] mnemonic_activate = ascii("mnemonic-activate");
339339
public static final byte[] month_changed = ascii("month-changed");
340340
public static final byte[] next_month = ascii("next-month");
341+
public static final byte[] notify_gtk_theme = ascii("notify::gtk-theme-name");
341342
public static final byte[] prev_month = ascii("prev-month");
342343
public static final byte[] next_year = ascii("next-year");
343344
public static final byte[] prev_year = ascii("prev-year");

bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,10 @@ public void stop() {
497497
long keysChangedProc;
498498
Callback keysChangedCallback;
499499

500+
/* Settings "changed" callback */
501+
long settingsChangedProc;
502+
Callback settingsChangedCallback;
503+
500504
/* Multiple Displays. */
501505
static Display Default;
502506
static Display [] Displays = new Display [1];
@@ -1323,7 +1327,11 @@ void createDisplay (DeviceData data) {
13231327
} else {
13241328
keymap = GDK.gdk_keymap_get_for_display(display);
13251329
OS.g_signal_connect (keymap, OS.keys_changed, keysChangedProc, 0);
1326-
}
1330+
}
1331+
1332+
settingsChangedCallback = new Callback (this, "settingsChangedProc", 3); //$NON-NLS-1$
1333+
settingsChangedProc = settingsChangedCallback.getAddress ();
1334+
OS.g_signal_connect (GTK.gtk_settings_get_default(), OS.notify_gtk_theme, settingsChangedProc, 0);
13271335
}
13281336

13291337
/**
@@ -1403,6 +1411,14 @@ long keysChangedProc (long keymap, long user_data) {
14031411
return 0;
14041412
}
14051413

1414+
/**
1415+
* GtkSettings 'changed' event handler.
1416+
*/
1417+
long settingsChangedProc (long settings, long key, long user_data) {
1418+
settingsChanged = true;
1419+
return 0;
1420+
}
1421+
14061422
Image createImage (String name) {
14071423
byte[] buffer = Converter.wcsToMbcs(name, true);
14081424

@@ -4818,6 +4834,10 @@ void releaseDisplay () {
48184834
keysChangedCallback.dispose(); keysChangedCallback = null;
48194835
keysChangedProc = 0;
48204836

4837+
/* Dispose the settings "changed" callback */
4838+
settingsChangedCallback.dispose(); settingsChangedCallback = null;
4839+
settingsChangedProc = 0;
4840+
48214841
/* Dispose subclass */
48224842
if (!GTK.GTK4) {
48234843
long pangoLayoutType = OS.PANGO_TYPE_LAYOUT ();

0 commit comments

Comments
 (0)