Skip to content

Commit a4b81de

Browse files
Merge branch 'master' into master-376
2 parents 345aa4b + 20d18aa commit a4b81de

File tree

5 files changed

+63
-29
lines changed

5 files changed

+63
-29
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 ();

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,12 @@ void createRenderers (long columnHandle, int modelIndex, boolean check, int colu
839839
GTK.gtk_tree_view_column_add_attribute (columnHandle, checkRenderer, OS.cell_background_rgba, BACKGROUND_COLUMN);
840840
}
841841
}
842-
long pixbufRenderer = ownerDraw ? OS.g_object_new (display.gtk_cell_renderer_pixbuf_get_type (), 0) : GTK.gtk_cell_renderer_pixbuf_new ();
842+
long pixbufRenderer ;
843+
if (GTK.GTK4) {
844+
pixbufRenderer = GTK.gtk_cell_renderer_pixbuf_new ();
845+
} else {
846+
pixbufRenderer = ownerDraw ? OS.g_object_new (display.gtk_cell_renderer_pixbuf_get_type (), 0) : GTK.gtk_cell_renderer_pixbuf_new ();
847+
}
843848
if (pixbufRenderer == 0) {
844849
error (SWT.ERROR_NO_HANDLES);
845850
} else {
@@ -2547,7 +2552,11 @@ void recreateRenderers () {
25472552
if (checkRenderer != 0) {
25482553
display.removeWidget (checkRenderer);
25492554
OS.g_object_unref (checkRenderer);
2550-
checkRenderer = ownerDraw ? OS.g_object_new (display.gtk_cell_renderer_toggle_get_type(), 0) : GTK.gtk_cell_renderer_toggle_new ();
2555+
if (GTK.GTK4) {
2556+
checkRenderer = GTK.gtk_cell_renderer_toggle_new ();
2557+
} else {
2558+
checkRenderer = ownerDraw ? OS.g_object_new (display.gtk_cell_renderer_toggle_get_type(), 0) : GTK.gtk_cell_renderer_toggle_new ();
2559+
}
25512560
if (checkRenderer == 0) error (SWT.ERROR_NO_HANDLES);
25522561
OS.g_object_ref (checkRenderer);
25532562
display.addWidget (checkRenderer, this);

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2823,7 +2823,11 @@ void recreateRenderers () {
28232823
if (checkRenderer != 0) {
28242824
display.removeWidget (checkRenderer);
28252825
OS.g_object_unref (checkRenderer);
2826-
checkRenderer = isOwnerDrawn ? OS.g_object_new (display.gtk_cell_renderer_toggle_get_type(), 0) : GTK.gtk_cell_renderer_toggle_new ();
2826+
if (GTK.GTK4) {
2827+
checkRenderer = GTK.gtk_cell_renderer_toggle_new ();
2828+
} else {
2829+
checkRenderer = isOwnerDrawn ? OS.g_object_new (display.gtk_cell_renderer_toggle_get_type(), 0) : GTK.gtk_cell_renderer_toggle_new ();
2830+
}
28272831
if (checkRenderer == 0) error (SWT.ERROR_NO_HANDLES);
28282832
OS.g_object_ref (checkRenderer);
28292833
display.addWidget (checkRenderer, this);

tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -540,8 +540,8 @@ private ToolItem showChevron() {
540540
*/
541541
private ToolItem getChevron(CTabFolder tabFolder) {
542542
for (Control child : tabFolder.getChildren()) {
543-
if (child instanceof ToolBar) {
544-
for (ToolItem toolItem : ((ToolBar)child).getItems()) {
543+
if (child instanceof ToolBar toolBar) {
544+
for (ToolItem toolItem : toolBar.getItems()) {
545545
if ((toolItem.getStyle() & SWT.PUSH) != 0
546546
&& toolItem.getText().isEmpty()
547547
&& SWT.getMessage("SWT_ShowList").equals(toolItem.getToolTipText())
@@ -561,25 +561,25 @@ private void checkElementOverlap(CTabFolder tabFolder) {
561561
subControls.addAll(Arrays.asList(tabFolder.getItems()));
562562
for (int i = 0; i < subControls.size(); i++) {
563563
Rectangle boundsA = null;
564-
if (subControls.get(i) instanceof Control) {
565-
if (!((Control) subControls.get(i)).isVisible())
564+
if (subControls.get(i) instanceof Control c) {
565+
if (!c.isVisible())
566566
continue;
567-
boundsA = ((Control) subControls.get(i)).getBounds();
568-
} else if (subControls.get(i) instanceof CTabItem) {
569-
if (!((CTabItem) subControls.get(i)).isShowing())
567+
boundsA = c.getBounds();
568+
} else if (subControls.get(i) instanceof CTabItem cTab) {
569+
if (!cTab.isShowing())
570570
continue;
571-
boundsA = ((CTabItem) subControls.get(i)).getBounds();
571+
boundsA = cTab.getBounds();
572572
}
573573
for (int j = i + 1; j < subControls.size(); j++) {
574574
Rectangle boundsB = null;
575-
if (subControls.get(j) instanceof Control) {
576-
if (!((Control) subControls.get(j)).isVisible())
575+
if (subControls.get(j) instanceof Control c) {
576+
if (!c.isVisible())
577577
continue;
578-
boundsB = ((Control) subControls.get(j)).getBounds();
579-
} else if (subControls.get(j) instanceof CTabItem) {
580-
if (!((CTabItem) subControls.get(j)).isShowing())
578+
boundsB = c.getBounds();
579+
} else if (subControls.get(j) instanceof CTabItem cTab) {
580+
if (!cTab.isShowing())
581581
continue;
582-
boundsB = ((CTabItem) subControls.get(j)).getBounds();
582+
boundsB = cTab.getBounds();
583583
}
584584
assertFalse("Overlap between <" + subControls.get(i) + "> and <" + subControls.get(j) + ">\n" + boundsA
585585
+ " overlaps " + boundsB, boundsA.intersects(boundsB));
@@ -608,8 +608,8 @@ private void assertTabElementsInLine() {
608608
List<Rectangle> tabBarElementBounds = new ArrayList<>();
609609
Arrays.stream(ctabFolder.getItems()).filter(CTabItem::isShowing).map(this::getBoundsInShell).forEach(tabBarElementBounds::add);
610610
for (Control child : ctabFolder.getChildren()) {
611-
if (child instanceof ToolBar) {
612-
for (ToolItem toolItem : ((ToolBar)child).getItems()) {
611+
if (child instanceof ToolBar toolBarChild) {
612+
for (ToolItem toolItem : toolBarChild.getItems()) {
613613
if (toolItem.getImage() != null) {
614614
tabBarElementBounds.add(getBoundsInShell(toolItem));
615615
}
@@ -632,15 +632,15 @@ private void assertTabElementsInLine() {
632632
private Rectangle getBoundsInShell(Widget control) {
633633
Control parent;
634634
Rectangle bounds;
635-
if (control instanceof Control) {
636-
parent = ((Control)control).getParent();
637-
bounds = ((Control)control).getBounds();
638-
} else if (control instanceof CTabItem) {
639-
parent = ((CTabItem)control).getParent();
640-
bounds = ((CTabItem)control).getBounds();
641-
} else if (control instanceof ToolItem) {
642-
parent = ((ToolItem)control).getParent();
643-
bounds = ((ToolItem)control).getBounds();
635+
if (control instanceof Control c) {
636+
parent = c.getParent();
637+
bounds = c.getBounds();
638+
} else if (control instanceof CTabItem cTab) {
639+
parent = cTab.getParent();
640+
bounds = cTab.getBounds();
641+
} else if (control instanceof ToolItem toolItem) {
642+
parent = toolItem.getParent();
643+
bounds = toolItem.getBounds();
644644
} else {
645645
throw new UnsupportedOperationException("Widget must provide bounds and parent");
646646
}

0 commit comments

Comments
 (0)