summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnatoly Spektor <aspektor@redhat.com>2013-05-22 17:10:25 -0400
committerAnatoly Spektor <aspektor@redhat.com>2013-05-22 17:10:25 -0400
commit146fcd204f6173428bbe11fa6103c32de022fc8a (patch)
tree4c43704e5e3c84df39f7d6be87f95f8a88dd4e67
parentf1f45c74fe38a901552d12f65eebf46b85a192dd (diff)
downloadeclipse.platform.swt-gsignal.tar.gz
eclipse.platform.swt-gsignal.tar.xz
eclipse.platform.swt-gsignal.zip
Gsignal closures implementation that fixes invalidate_notifier errorsgsignal
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java16
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java57
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java17
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java12
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java14
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java20
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java17
18 files changed, 119 insertions, 96 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 8282c908b3..2455f8c8fd 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
@@ -528,9 +528,9 @@ long /*int*/ gtk_key_press_event (long /*int*/ widget, long /*int*/ event) {
void hookEvents () {
super.hookEvents();
- OS.g_signal_connect_closure (handle, OS.clicked, display.closures [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, display.closures [MNEMONIC_ACTIVATE], false);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), 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 7833301184..dda7477969 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
@@ -665,9 +665,9 @@ void hookEvents(long /*int*/ [] handles) {
if (eventHandle != 0) {
/* Connect the mouse signals */
OS.gtk_widget_add_events (eventHandle, eventMask);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [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
@@ -675,16 +675,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, display.closures [BUTTON_PRESS_EVENT_INVERSE], true);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT_INVERSE], true);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [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, display.closures [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, display.closures[SELECTION_DONE], true);
+ OS.g_signal_connect_closure(eventHandle, OS.selection_done, getClosure(SELECTION_DONE, display.windowProc2), true);
}
}
}
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 12219c962e..4c8bde68b4 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
@@ -283,29 +283,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, display.closures [POPUP_MENU], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [SHOW_HELP], 0, display.closures [SHOW_HELP], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_PRESS_EVENT], 0, display.closures [KEY_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [KEY_RELEASE_EVENT], 0, display.closures [KEY_RELEASE_EVENT], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS], 0, display.closures [FOCUS], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_IN_EVENT], 0, display.closures [FOCUS_IN_EVENT], false);
- OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [FOCUS_OUT_EVENT], 0, display.closures [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, display.closures [BUTTON_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [MOTION_NOTIFY_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [SCROLL_EVENT], 0, display.closures [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, display.closures [ENTER_NOTIFY_EVENT], false);
- OS.g_signal_connect_closure_by_id (enterExitHandle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, display.closures [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
@@ -318,14 +318,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, display.closures [BUTTON_PRESS_EVENT_INVERSE], true);
- OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT_INVERSE], true);
- OS.g_signal_connect_closure_by_id (blockHandle, display.signalIds [MOTION_NOTIFY_EVENT], 0, display.closures [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, display.closures [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, display.closures [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 */
@@ -333,31 +333,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, display.closures [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, display.closures [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, display.closures [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, display.closures [REALIZE], true);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [UNREALIZE], 0, display.closures [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, display.closures [COMMIT], false);
- OS.g_signal_connect_closure (imHandle, OS.preedit_changed, display.closures [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, display.closures [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, display.closures [MAP], true);
+ OS.g_signal_connect_closure_by_id (topHandle, display.signalIds [MAP], 0, getClosure(MAP, display.windowProc2), true);
}
boolean hooksPaint () {
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<timerIds.length; i++) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java
index cf65c83111..743c288a37 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java
@@ -346,12 +346,12 @@ boolean hasFocus () {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
- OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE_INVERSE], true);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [FOCUS_OUT_EVENT], 0, display.closures [FOCUS_OUT_EVENT], false);
- OS.g_signal_connect_closure (clientHandle, OS.size_allocate, display.closures [SIZE_ALLOCATE], true);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [ENTER_NOTIFY_EVENT], 0, display.closures [ENTER_NOTIFY_EVENT], false);
+ OS.g_signal_connect_closure (handle, OS.activate, getClosure(ACTIVATE, display.windowProc2), false);
+ OS.g_signal_connect_closure (handle, OS.activate, getClosure(ACTIVATE_INVERSE, display.windowProc2), true);
+ 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 (handle, display.signalIds [FOCUS_OUT_EVENT], 0, getClosure(FOCUS_OUT_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure (clientHandle, OS.size_allocate, getClosure(SIZE_ALLOCATE, display.windowProc3), true);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3), false);
}
void redraw () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java
index c84d4e4ee2..3c0d9a39e8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java
@@ -193,7 +193,7 @@ public String getText () {
void hookEvents () {
super.hookEvents();
if (labelHandle != 0) {
- OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), false);
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java
index 6192bb829c..aeb1514e37 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java
@@ -328,7 +328,7 @@ public String getText () {
void hookEvents () {
super.hookEvents();
if (labelHandle != 0) {
- OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), false);
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
index fbc2776b82..2f0fdb1ae5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
@@ -686,9 +686,9 @@ long /*int*/ gtk_show_help (long /*int*/ widget, long /*int*/ helpType) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW], 0, display.closures [SHOW], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [HIDE], 0, display.closures [HIDE], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW_HELP], 0, display.closures [SHOW_HELP], false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW], 0, getClosure(SHOW, display.windowProc2), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [HIDE], 0, getClosure(HIDE, display.windowProc2), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW_HELP], 0, getClosure(SHOW_HELP, display.windowProc3), false);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java
index 4f2a77114e..a39ac4b4bd 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java
@@ -468,9 +468,9 @@ long /*int*/ gtk_show_help (long /*int*/ widget, long /*int*/ helpType) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
- OS.g_signal_connect_closure (handle, OS.select, display.closures [SELECT], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW_HELP], 0, display.closures [SHOW_HELP], false);
+ OS.g_signal_connect_closure (handle, OS.activate, getClosure(ACTIVATE, display.windowProc2), false);
+ OS.g_signal_connect_closure (handle, OS.select, getClosure(SELECT, display.windowProc2), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [SHOW_HELP], 0, getClosure(SHOW_HELP, display.windowProc3), false);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
index 6891f4e187..569ce28052 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
@@ -531,10 +531,10 @@ long /*int*/ gtk_event_after (long /*int*/ widget, long /*int*/ gdkEvent) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure (handle, OS.change_value, display.closures [CHANGE_VALUE], false);
- OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed, display.closures [VALUE_CHANGED], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
+ OS.g_signal_connect_closure (handle, OS.change_value, getClosure(CHANGE_VALUE, display.windowProc5), false);
+ OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed, getClosure(VALUE_CHANGED, display.windowProc2), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
index 6cd7da57ac..bc69ece921 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
@@ -824,14 +824,14 @@ boolean hasBorder () {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [KEY_PRESS_EVENT], 0, display.closures [KEY_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [WINDOW_STATE_EVENT], 0, display.closures [WINDOW_STATE_EVENT], false);
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [SIZE_ALLOCATE], 0, display.closures [SIZE_ALLOCATE], false);
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [CONFIGURE_EVENT], 0, display.closures [CONFIGURE_EVENT], false);
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [DELETE_EVENT], 0, display.closures [DELETE_EVENT], false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [KEY_PRESS_EVENT], 0, getClosure(KEY_PRESS_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [WINDOW_STATE_EVENT], 0, getClosure(WINDOW_STATE_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [SIZE_ALLOCATE], 0, getClosure(SIZE_ALLOCATE, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [CONFIGURE_EVENT], 0, getClosure(CONFIGURE_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [DELETE_EVENT], 0, getClosure(DELETE_EVENT, display.windowProc3), false);
OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [MAP_EVENT], 0, display.shellMapProcClosure, false);
- OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, display.closures [ENTER_NOTIFY_EVENT], false);
- OS.g_signal_connect_closure (shellHandle, OS.move_focus, display.closures [MOVE_FOCUS], false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure (shellHandle, OS.move_focus, getClosure(MOVE_FOCUS, display.windowProc3), false);
if (!OS.GTK3) {
long /*int*/ window = gtk_widget_get_window (shellHandle);
OS.gdk_window_add_filter (window, display.filterProc, shellHandle);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java
index 3cf0aba18d..8063773fef 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java
@@ -219,8 +219,8 @@ long /*int*/ gtk_mnemonic_activate (long /*int*/ widget, long /*int*/ arg1) {
void hookEvents () {
super.hookEvents ();
- if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [ENTER_NOTIFY_EVENT], 0, display.closures [ENTER_NOTIFY_EVENT], false);
+ if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, getClosure(MNEMONIC_ACTIVATE, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3), false);
}
void register () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
index 38f78eb8bc..a27c414c4e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
@@ -397,10 +397,10 @@ void hookEvents () {
super.hookEvents ();
OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false);
if (buttonHandle != 0) {
- OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [SIZE_ALLOCATE], 0, display.closures [SIZE_ALLOCATE], false);
- OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [EVENT_AFTER], 0, display.closures [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, display.closures [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);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java
index ad21ebb3e7..c4f73ffbc2 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java
@@ -672,7 +672,7 @@ long /*int*/ gtk_mnemonic_activate (long /*int*/ widget, long /*int*/ arg1) {
void hookEvents () {
super.hookEvents ();
if ((style & SWT.SEPARATOR) != 0) return;
- OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false);
+ OS.g_signal_connect_closure (handle, OS.clicked, getClosure(CLICKED, display.windowProc2), false);
/*
* Feature in GTK. GtkToolItem does not respond to basic listeners
* such as button-press, enter-notify to it. The fix is to assign
@@ -682,14 +682,14 @@ void hookEvents () {
if ((style & SWT.DROP_DOWN) != 0) {
long /*int*/ list = OS.gtk_container_get_children(eventHandle);
eventHandle = OS.g_list_nth_data(list, 0);
- if (arrowHandle != 0) OS.g_signal_connect_closure (arrowHandle, OS.clicked, display.closures [CLICKED], false);
+ if (arrowHandle != 0) OS.g_signal_connect_closure (arrowHandle, OS.clicked, getClosure(CLICKED, display.windowProc2), false);
}
- OS.g_signal_connect_closure (handle, OS.create_menu_proxy, display.closures [CREATE_MENU_PROXY], false);
+ OS.g_signal_connect_closure (handle, OS.create_menu_proxy, getClosure(CREATE_MENU_PROXY, display.windowProc2), false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, display.closures [ENTER_NOTIFY_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, display.closures [LEAVE_NOTIFY_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [FOCUS_IN_EVENT], 0, display.closures [FOCUS_IN_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [FOCUS_OUT_EVENT], 0, display.closures [FOCUS_OUT_EVENT], false);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [ENTER_NOTIFY_EVENT], 0, getClosure(ENTER_NOTIFY_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, getClosure(LEAVE_NOTIFY_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [FOCUS_IN_EVENT], 0, getClosure(FOCUS_IN_EVENT, display.windowProc3), false);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [FOCUS_OUT_EVENT], 0, getClosure(FOCUS_OUT_EVENT, display.windowProc3), false);
/*
* Feature in GTK. Usually, GTK widgets propagate all events to their
* parent when they are done their own processing. However, in contrast
@@ -705,9 +705,9 @@ void hookEvents () {
OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK |
OS.GDK_FOCUS_CHANGE_MASK;
OS.gtk_widget_add_events (eventHandle, mask);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT], false);
- OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, display.closures[EVENT_AFTER], 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 [EVENT_AFTER], 0, getClosure(EVENT_AFTER, display.windowProc3), false);
long /*int*/ topHandle = topHandle ();
OS.g_signal_connect_closure_by_id (topHandle, display.signalIds [MAP], 0, display.closures [MAP], true);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
index 56a4232c78..d29b58021d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
@@ -619,16 +619,16 @@ long /*int*/ gtk_size_allocate (long /*int*/ widget, long /*int*/ allocation) {
void hookEvents () {
if ((style & SWT.BALLOON) != 0) {
- OS.g_signal_connect_closure_by_id (handle, display.signalIds [EXPOSE_EVENT], 0, display.closures [EXPOSE_EVENT], true);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [EXPOSE_EVENT], 0, getClosure(EXPOSE_EVENT, display.windowProc3), true);
OS.gtk_widget_add_events (handle, OS.GDK_BUTTON_PRESS_MASK);
- OS.g_signal_connect_closure (handle, OS.button_press_event, display.closures [BUTTON_PRESS_EVENT], false);
+ OS.g_signal_connect_closure (handle, OS.button_press_event, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false);
} else {
if (OS.GTK_VERSION < OS.VERSION (2, 12, 0)) {
long /*int*/ tipWindow = OS.GTK_TOOLTIPS_TIP_WINDOW (handle);
if (tipWindow != 0) {
- OS.g_signal_connect_closure (tipWindow, OS.size_allocate, display.closures [SIZE_ALLOCATE], false);
+ OS.g_signal_connect_closure (tipWindow, OS.size_allocate, getClosure(SIZE_ALLOCATE, display.windowProc3), false);
OS.gtk_widget_add_events (tipWindow, OS.GDK_BUTTON_PRESS_MASK);
- OS.g_signal_connect_closure (tipWindow, OS.button_press_event, display.closures [BUTTON_PRESS_EVENT], false);
+ OS.g_signal_connect_closure (tipWindow, OS.button_press_event, getClosure(BUTTON_PRESS_EVENT, display.windowProc3), false);
}
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java
index 2b28c146b5..1fb46edbb0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java
@@ -364,13 +364,13 @@ long /*int*/ gtk_status_icon_popup_menu (long /*int*/ widget, long /*int*/ butto
void hookEvents () {
if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
- OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
- OS.g_signal_connect_closure (handle, OS.popup_menu, display.closures [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, display.closures [BUTTON_PRESS_EVENT], false);
- OS.g_signal_connect_closure_by_id (imageHandle, display.signalIds [SIZE_ALLOCATE], 0, display.closures [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);
}
}
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 1148d8a700..bdc9a23622 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
@@ -397,12 +397,12 @@ long /*int*/ gtk_size_allocate (long /*int*/ widget, long /*int*/ allocation) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect_closure (handle, OS.clicked, display.closures [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, display.closures [SIZE_ALLOCATE], false);
- OS.g_signal_connect_closure_by_id (buttonHandle, display.signalIds [EVENT_AFTER], 0, display.closures [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, display.closures [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);
}
/**
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 bb2684cd7b..9f279d79f1 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
@@ -2184,4 +2184,21 @@ void gtk_widget_get_preferred_size (long /*int*/ widget, GtkRequisition requisit
OS.gtk_widget_size_request (widget, requisition);
}
}
+
+long /*int*/ getClosure(int closure, long windowProcNum) {
+
+ Integer closureId = new Integer(closure);
+
+ if (display.closure_map.containsKey(closureId)){
+ display.n_notifier = Integer.valueOf(display.n_notifier.intValue() + 1);
+ }
+
+ display.closure_map.put(closureId, display.n_notifier);
+
+ if (closure == 0 || display.n_notifier.intValue() > 255) {
+ display.closures[closure] = OS.g_cclosure_new (windowProcNum, closure, 0);
+ }
+
+ return display.closures [closure];
+}
}