Skip to content

Commit fdd99a8

Browse files
committed
[Gtk4] gdk_event_handler_set is gone
It was called in Gtk 4 codepaths luckily not causing crashes. Uncovers that eventProc is only used on Gtk 3 so there could be no efforts to make calls in it Gtk 4 safe.
1 parent ae58361 commit fdd99a8

2 files changed

Lines changed: 13 additions & 14 deletions

File tree

  • bundles/org.eclipse.swt
    • Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk
    • Eclipse SWT/gtk/org/eclipse/swt/widgets

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ public class GDK extends OS {
540540
/**
541541
* @method flags=dynamic
542542
*/
543-
// TODO GTK4 function removed
543+
/* [GTK3 only, if-def'd in os.h] */
544544
public static final native void gdk_event_handler_set(long func, long data, long notify);
545545
/* [GTK3 only, if-def'd in os.h] */
546546
public static final native long gdk_event_new(int type);

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

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,9 +1305,11 @@ void createDisplay (DeviceData data) {
13051305
GTK.gtk_widget_realize (shellHandle);
13061306

13071307
/* Initialize the filter and event callback */
1308-
eventCallback = new Callback (this, "eventProc", 2); //$NON-NLS-1$
1309-
eventProc = eventCallback.getAddress ();
1310-
GDK.gdk_event_handler_set (eventProc, 0, 0);
1308+
if (!GTK.GTK4) {
1309+
eventCallback = new Callback (this, "eventProc", 2); //$NON-NLS-1$
1310+
eventProc = eventCallback.getAddress ();
1311+
GDK.gdk_event_handler_set (eventProc, 0, 0);
1312+
}
13111313

13121314
signalCallback = new Callback (this, "signalProc", 3); //$NON-NLS-1$
13131315
signalProc = signalCallback.getAddress ();
@@ -1577,6 +1579,7 @@ void error (int code) {
15771579
SWT.error (code);
15781580
}
15791581

1582+
// Used on GTK 3 only
15801583
long eventProc (long event, long data) {
15811584
/*
15821585
* Use gdk_event_get_time() rather than event.time or
@@ -1589,8 +1592,7 @@ long eventProc (long event, long data) {
15891592
int time = GDK.gdk_event_get_time (event);
15901593
if (time != 0) lastEventTime = time;
15911594

1592-
int eventType = GTK.GTK4 ? GDK.gdk_event_get_event_type(event) : GDK.GDK_EVENT_TYPE (event);
1593-
Control.fixGdkEventTypeValues(eventType);
1595+
int eventType = GDK.gdk_event_get_event_type(event);
15941596
switch (eventType) {
15951597
case GDK.GDK_BUTTON_PRESS:
15961598
case GDK.GDK_KEY_PRESS:
@@ -1607,12 +1609,7 @@ long eventProc (long event, long data) {
16071609
}
16081610
}
16091611
if (!dispatch) {
1610-
long copiedEvent;
1611-
if (GTK.GTK4) {
1612-
copiedEvent = GDK.gdk_event_ref (event);
1613-
} else {
1614-
copiedEvent = GDK.gdk_event_copy (event);
1615-
}
1612+
long copiedEvent = GDK.gdk_event_copy (event);
16161613

16171614
addGdkEvent (copiedEvent);
16181615
return 0;
@@ -4772,8 +4769,10 @@ void releaseDisplay () {
47724769
COLOR_TOGGLE_BUTTON_FOREGROUND_RGBA = null;
47734770

47744771
/* Dispose the event callback */
4775-
GDK.gdk_event_handler_set (0, 0, 0);
4776-
eventCallback.dispose (); eventCallback = null;
4772+
if (!GTK.GTK4) {
4773+
GDK.gdk_event_handler_set (0, 0, 0);
4774+
eventCallback.dispose (); eventCallback = null;
4775+
}
47774776

47784777
/* Dispose the hidden shell */
47794778
if (shellHandle != 0) {

0 commit comments

Comments
 (0)