From 7a6302745ea3f07c4d4670a0297a2eaa7a2348ae Mon Sep 17 00:00:00 2001 From: Anatoly Spektor Date: Mon, 20 May 2013 18:06:15 -0400 Subject: Solves gsinal invalidation errors when run ControlExample with GLIB 2.36 --- .../gtk/org/eclipse/swt/widgets/Button.java | 4 +- .../gtk/org/eclipse/swt/widgets/Combo.java | 16 +++---- .../gtk/org/eclipse/swt/widgets/Control.java | 54 +++++++++++----------- .../gtk/org/eclipse/swt/widgets/Display.java | 17 +++++-- .../gtk/org/eclipse/swt/widgets/ExpandItem.java | 12 ++--- .../gtk/org/eclipse/swt/widgets/Group.java | 2 +- .../gtk/org/eclipse/swt/widgets/Label.java | 2 +- .../gtk/org/eclipse/swt/widgets/Menu.java | 6 +-- .../gtk/org/eclipse/swt/widgets/MenuItem.java | 6 +-- .../gtk/org/eclipse/swt/widgets/ScrollBar.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/Shell.java | 14 +++--- .../gtk/org/eclipse/swt/widgets/TabItem.java | 4 +- .../gtk/org/eclipse/swt/widgets/TableColumn.java | 6 +-- .../gtk/org/eclipse/swt/widgets/ToolItem.java | 20 ++++---- .../gtk/org/eclipse/swt/widgets/ToolTip.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/TrayItem.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/TreeColumn.java | 8 ++-- .../gtk/org/eclipse/swt/widgets/Widget.java | 20 ++++---- 18 files changed, 110 insertions(+), 105 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java index 9f92a459f6..28d47a5b1f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java @@ -529,10 +529,10 @@ long /*int*/ gtk_key_press_event (long /*int*/ widget, long /*int*/ event) { void hookEvents () { super.hookEvents(); if (NEW_CLOSURES) { - OS.g_signal_connect_closure (handle, OS.clicked, getClosure(CLICKED, display.windowProc2, Widget.CLICKED), false); + OS.g_signal_connect_closure (handle, OS.clicked, getClosure(CLICKED, display.windowProc2), false); if (labelHandle != 0) { - OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3, Widget.MNEMONIC_ACTIVATE), false); + OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), false); } } else { OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java index 7e57a841ad..0cabb683d7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java @@ -666,9 +666,9 @@ void hookEvents(long /*int*/ [] handles) { /* Connect the mouse signals */ OS.gtk_widget_add_events (eventHandle, eventMask); if (NEW_CLOSURES){ - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3, Widget.BUTTON_PRESS_EVENT), false); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT, display.windowProc3, Widget.BUTTON_RELEASE_EVENT), false); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT, display.windowProc3, Widget.MOTION_NOTIFY_EVENT), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT, display.windowProc3), false); /* * Feature in GTK. Events such as mouse move are propagated up * the widget hierarchy and are seen by the parent. This is the @@ -676,16 +676,16 @@ void hookEvents(long /*int*/ [] handles) { * hook a signal after and stop the propagation using a negative * event number to distinguish this case. */ - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT_INVERSE, display.windowProc3, Widget.BUTTON_PRESS_EVENT_INVERSE), true); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT_INVERSE, display.windowProc3, Widget.BUTTON_RELEASE_EVENT_INVERSE), true); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT_INVERSE, display.windowProc3, Widget.MOTION_NOTIFY_EVENT_INVERSE), true); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT_INVERSE, display.windowProc3), true); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT_INVERSE, display.windowProc3), true); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT_INVERSE, display.windowProc3), true); /* Connect the event_after signal for both key and mouse */ if (eventHandle != focusHandle ()) { - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3, Widget.EVENT_AFTER), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false); } if (OS.G_OBJECT_TYPE (eventHandle) == OS.GTK_TYPE_MENU ()) { - OS.g_signal_connect_closure(eventHandle, OS.selection_done, getClosure(SELECTION_DONE, display.windowProc2, Widget.SELECTION_DONE), true); + OS.g_signal_connect_closure(eventHandle, OS.selection_done, getClosure(SELECTION_DONE, display.windowProc2), true); } } else { OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index d0605f394b..b51f34e929 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -284,29 +284,29 @@ void hookEvents () { long /*int*/ focusHandle = focusHandle (); int focusMask = OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK | OS.GDK_FOCUS_CHANGE_MASK; OS.gtk_widget_add_events (focusHandle, focusMask); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [POPUP_MENU], 0, getClosure(POPUP_MENU, display.windowProc2, Widget.POPUP_MENU), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [SHOW_HELP], 0, getClosure(SHOW_HELP, display.windowProc3, Widget.SHOW_HELP), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_PRESS_EVENT], 0, getClosure(KEY_PRESS_EVENT, display.windowProc3, Widget.KEY_PRESS_EVENT), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_RELEASE_EVENT], 0, getClosure(KEY_RELEASE_EVENT, display.windowProc3, Widget.KEY_RELEASE_EVENT), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS], 0, getClosure(FOCUS, display.windowProc3, Widget.FOCUS), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_IN_EVENT], 0, getClosure(FOCUS_IN_EVENT, display.windowProc3, Widget.FOCUS_IN_EVENT), false); - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_OUT_EVENT], 0, getClosure(FOCUS_OUT_EVENT, display.windowProc3, Widget.FOCUS_OUT_EVENT), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [POPUP_MENU], 0, getClosure(POPUP_MENU, display.windowProc2), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [SHOW_HELP], 0, getClosure(SHOW_HELP, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_PRESS_EVENT], 0, getClosure(KEY_PRESS_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_RELEASE_EVENT], 0, getClosure(KEY_RELEASE_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS], 0, getClosure(FOCUS, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_IN_EVENT], 0, getClosure(FOCUS_IN_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_OUT_EVENT], 0, getClosure(FOCUS_OUT_EVENT, display.windowProc3), false); /* Connect the mouse signals */ long /*int*/ eventHandle = eventHandle (); int eventMask = OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK | OS.GDK_BUTTON_RELEASE_MASK | OS.GDK_SCROLL_MASK | OS.GDK_SMOOTH_SCROLL_MASK; OS.gtk_widget_add_events (eventHandle, eventMask); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3, Widget.BUTTON_PRESS_EVENT), false); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT, display.windowProc3, Widget.BUTTON_RELEASE_EVENT), false); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT, display.windowProc3, Widget.MOTION_NOTIFY_EVENT), false); - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [SCROLL_EVENT], 0, getClosure(SCROLL_EVENT, display.windowProc3, Widget.SCROLL_EVENT), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [SCROLL_EVENT], 0, getClosure(SCROLL_EVENT, display.windowProc3), false); /* Connect enter/exit signals */ long /*int*/ enterExitHandle = enterExitHandle (); int enterExitMask = OS.GDK_ENTER_NOTIFY_MASK | OS.GDK_LEAVE_NOTIFY_MASK; OS.gtk_widget_add_events (enterExitHandle, enterExitMask); - OS.g_signal_connect_closure_by_id (enterExitHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3, Widget.ENTER_NOTIFY_EVENT), false); - OS.g_signal_connect_closure_by_id (enterExitHandle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, getClosure(LEAVE_NOTIFY_EVENT, display.windowProc3, Widget.LEAVE_NOTIFY_EVENT), false); + OS.g_signal_connect_closure_by_id (enterExitHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (enterExitHandle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, getClosure(LEAVE_NOTIFY_EVENT, display.windowProc3), false); /* * Feature in GTK. Events such as mouse move are propagate up @@ -319,14 +319,14 @@ void hookEvents () { * lightweight widgets. */ long /*int*/ blockHandle = fixedHandle != 0 ? fixedHandle : eventHandle; - OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT_INVERSE, display.windowProc3, Widget.BUTTON_PRESS_EVENT_INVERSE), true); - OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT_INVERSE, display.windowProc3, Widget.BUTTON_RELEASE_EVENT_INVERSE), true); - OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT_INVERSE, display.windowProc3, Widget.MOTION_NOTIFY_EVENT_INVERSE), true); + OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT_INVERSE, display.windowProc3), true); + OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, getClosure(BUTTON_RELEASE_EVENT_INVERSE, display.windowProc3), true); + OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, getClosure(MOTION_NOTIFY_EVENT_INVERSE, display.windowProc3), true); /* Connect the event_after signal for both key and mouse */ - OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3, Widget.EVENT_AFTER), false); + OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false); if (focusHandle != eventHandle) { - OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3, Widget.EVENT_AFTER), false); + OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false); } /* Connect the paint signal */ @@ -334,30 +334,30 @@ void hookEvents () { int paintMask = OS.GDK_EXPOSURE_MASK | OS.GDK_VISIBILITY_NOTIFY_MASK; OS.gtk_widget_add_events (paintHandle, paintMask); - OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, getClosure(EXPOSE_EVENT_INVERSE, display.windowProc3, Widget.EXPOSE_EVENT_INVERSE), false); + OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, getClosure(EXPOSE_EVENT_INVERSE, display.windowProc3), false); /* * As of GTK 2.17.11, obscured controls no longer send expose * events. It is no longer necessary to track visiblity notify * events. */ if (OS.GTK_VERSION < OS.VERSION (2, 17, 11)) { - OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [VISIBILITY_NOTIFY_EVENT], 0, getClosure(VISIBILITY_NOTIFY_EVENT, display.windowProc3, Widget.VISIBILITY_NOTIFY_EVENT), false); + OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [VISIBILITY_NOTIFY_EVENT], 0, getClosure(VISIBILITY_NOTIFY_EVENT, display.windowProc3), false); } - OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, getClosure(EXPOSE_EVENT, display.windowProc3, Widget.EXPOSE_EVENT), true); + OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, getClosure(EXPOSE_EVENT, display.windowProc3), true); /* Connect the Input Method signals */ - OS.g_signal_connect_closure_by_id (handle, display.signalIds [REALIZE], 0, getClosure(REALIZE, display.windowProc2, Widget.REALIZE), true); - OS.g_signal_connect_closure_by_id (handle, display.signalIds [UNREALIZE], 0, getClosure(UNREALIZE, display.windowProc2, Widget.UNREALIZE), false); + OS.g_signal_connect_closure_by_id (handle, display.signalIds [REALIZE], 0, getClosure(REALIZE, display.windowProc2), true); + OS.g_signal_connect_closure_by_id (handle, display.signalIds [UNREALIZE], 0, getClosure(UNREALIZE, display.windowProc2), false); long /*int*/ imHandle = imHandle (); if (imHandle != 0) { - OS.g_signal_connect_closure (imHandle, OS.commit, getClosure(COMMIT, display.windowProc3, Widget.COMMIT), false); - OS.g_signal_connect_closure (imHandle, OS.preedit_changed, getClosure(PREEDIT_CHANGED, display.windowProc2, Widget.PREEDIT_CHANGED), false); + OS.g_signal_connect_closure (imHandle, OS.commit, getClosure(COMMIT, display.windowProc3), false); + OS.g_signal_connect_closure (imHandle, OS.preedit_changed, getClosure(PREEDIT_CHANGED, display.windowProc2), false); } - OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [STYLE_SET], 0, getClosure(STYLE_SET, display.windowProc3, Widget.STYLE_SET), false); + OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [STYLE_SET], 0, getClosure(STYLE_SET, display.windowProc3), false); long /*int*/ topHandle = topHandle (); - OS.g_signal_connect_closure_by_id (topHandle, display.signalIds [MAP], 0, getClosure(MAP, display.windowProc2, Widget.MAP), true); + OS.g_signal_connect_closure_by_id (topHandle, display.signalIds [MAP], 0, getClosure(MAP, display.windowProc2), true); } else { /* Connect the keyboard signals */ long /*int*/ focusHandle = focusHandle (); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index 810e919914..fe73bb0240 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java @@ -11,6 +11,9 @@ package org.eclipse.swt.widgets; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.swt.*; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.cairo.*; @@ -152,7 +155,10 @@ public class Display extends Device { boolean ignoreActivate, ignoreFocus; Tracker tracker; - + + Map closure_map = new HashMap (); + Integer n_notifier = new Integer(0); + /* Input method resources */ Control imControl; long /*int*/ preeditWindow, preeditLabel; @@ -3493,11 +3499,12 @@ void releaseDisplay () { caretCallback = null; /* Release closures */ - for (int i = 0; i < Widget.LAST_SIGNAL; i++) { - if (closures [i] != 0) OS.g_closure_unref (closures [i]); + if (OS.GLIB_VERSION < OS.VERSION(2, 36, 0)){ + for (int i = 0; i < Widget.LAST_SIGNAL; i++) { + if (closures [i] != 0) OS.g_closure_unref (closures [i]); + } + if (shellMapProcClosure != 0) OS.g_closure_unref (shellMapProcClosure); } - if (shellMapProcClosure != 0) OS.g_closure_unref (shellMapProcClosure); - /* Dispose the timer callback */ if (timerIds != null) { for (int i=0; i= OS.VERSION (2, 10, 0)) { - OS.g_signal_connect_closure (handle, OS.activate, getClosure(ACTIVATE, display.windowProc2, Widget.ACTIVATE), false); - OS.g_signal_connect_closure (handle, OS.popup_menu, getClosure(STATUS_ICON_POPUP_MENU, display.windowProc4, Widget.STATUS_ICON_POPUP_MENU), false); + OS.g_signal_connect_closure (handle, OS.activate, getClosure(ACTIVATE, display.windowProc2), false); + OS.g_signal_connect_closure (handle, OS.popup_menu, getClosure(STATUS_ICON_POPUP_MENU, display.windowProc4), false); } else { int eventMask = OS.GDK_BUTTON_PRESS_MASK; OS.gtk_widget_add_events (handle, eventMask); - OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3, Widget.BUTTON_PRESS_EVENT), false); - OS.g_signal_connect_closure_by_id (imageHandle, display.signalIds [SIZE_ALLOCATE], 0, getClosure(SIZE_ALLOCATE, display.windowProc3, Widget.SIZE_ALLOCATE), false); + OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (imageHandle, display.signalIds [SIZE_ALLOCATE], 0, getClosure(SIZE_ALLOCATE, display.windowProc3), false); } } else { if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java index 54f447e266..4d81a1df96 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java @@ -398,12 +398,12 @@ long /*int*/ gtk_size_allocate (long /*int*/ widget, long /*int*/ allocation) { void hookEvents () { super.hookEvents (); if (NEW_CLOSURES) { - OS.g_signal_connect_closure (handle, OS.clicked, getClosure(CLICKED, display.windowProc2, Widget.CLICKED), false); + OS.g_signal_connect_closure (handle, OS.clicked, getClosure(CLICKED, display.windowProc2), false); if (buttonHandle != 0) { - OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [SIZE_ALLOCATE], 0, getClosure(SIZE_ALLOCATE, display.windowProc3, Widget.SIZE_ALLOCATE), false); - OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3, Widget.EVENT_AFTER), false); + OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [SIZE_ALLOCATE], 0, getClosure(SIZE_ALLOCATE, display.windowProc3), false); + OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false); } - if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3, Widget.MNEMONIC_ACTIVATE), false); + if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), false); } else { OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false); if (buttonHandle != 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java index aa401418d4..c9f22dc83f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java @@ -2188,24 +2188,22 @@ void gtk_widget_get_preferred_size (long /*int*/ widget, GtkRequisition requisit } public boolean NEW_CLOSURES = true; -Map closure_map = new HashMap (); -Integer n_notifier = new Integer(0); -long /*int*/ getClosure(int closure_id, long windowProcNum, int closure) { + +long /*int*/ getClosure(int closure, long windowProcNum) { - Integer closureId = new Integer(closure_id); + Integer closureId = new Integer(closure); - if (closure_map.containsKey(closureId)){ - n_notifier = Integer.valueOf(n_notifier.intValue() + 1); + if (display.closure_map.containsKey(closureId)){ + display.n_notifier = Integer.valueOf(display.n_notifier.intValue() + 1); } - closure_map.put(closureId, n_notifier); + display.closure_map.put(closureId, display.n_notifier); - if (closure == 0 || n_notifier.intValue() > 255) { - display.closures[closure_id] = OS.g_cclosure_new (windowProcNum, closure, 0); - System.out.println("ATTENTION: "+n_notifier.intValue()); + if (closure == 0 || display.n_notifier.intValue() > 255) { + display.closures[closure] = OS.g_cclosure_new (windowProcNum, closure, 0); } - return display.closures [closure_id]; + return display.closures [closure]; } } -- cgit