summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBilly Biggs <bbiggs>2005-10-24 15:27:23 +0000
committerBilly Biggs <bbiggs>2005-10-24 15:27:23 +0000
commit365d9e3002ce9e8ba155a42ea16cecffc7fe94e0 (patch)
tree3bfc104c85168a351740790417bfb9fc03d9f283
parente0b7cd93e54471ca04ad72c9d78b6b054ad5f27b (diff)
downloadeclipse.platform.swt-365d9e3002ce9e8ba155a42ea16cecffc7fe94e0.tar.gz
eclipse.platform.swt-365d9e3002ce9e8ba155a42ea16cecffc7fe94e0.tar.xz
eclipse.platform.swt-365d9e3002ce9e8ba155a42ea16cecffc7fe94e0.zip
76804 - Improve SWT performance over GTK window system
-rw-r--r--bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties26
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c74
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c10
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java54
-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.java32
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java55
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java124
-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/List.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java24
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java16
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java6
-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/Text.java22
-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/TrayItem.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java12
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java115
30 files changed, 460 insertions, 198 deletions
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
index 12e654c331..3e591a8dc7 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
@@ -603,6 +603,8 @@ OS__GTK_STOCK_OK=flags=const
OS__GTK_TYPE_FIXED=flags=const
+OS__GTK_TYPE_WIDGET=flags=const
+
OS__GTK_WIDGET_FLAGS=
OS__GTK_WIDGET_FLAGS_0=
@@ -822,6 +824,17 @@ OS__XWarpPointer_6=
OS__XWarpPointer_7=
OS__XWarpPointer_8=
+OS__g_cclosure_new=
+OS__g_cclosure_new_0=cast=(GCallback)
+OS__g_cclosure_new_1=cast=(gpointer)
+OS__g_cclosure_new_2=cast=(GClosureNotify)
+
+OS__g_closure_ref=
+OS__g_closure_ref_0=cast=(GClosure *)
+
+OS__g_closure_unref=
+OS__g_closure_unref_0=cast=(GClosure *)
+
OS__g_filename_from_uri=
OS__g_filename_from_uri_0=cast=(const char *)
OS__g_filename_from_uri_1=cast=(char **)
@@ -1033,6 +1046,19 @@ OS__g_signal_connect_after_1=cast=(const gchar *),flags=no_out
OS__g_signal_connect_after_2=cast=(GCallback)
OS__g_signal_connect_after_3=cast=(gpointer)
+OS__g_signal_connect_closure=
+OS__g_signal_connect_closure_0=cast=(gpointer)
+OS__g_signal_connect_closure_1=cast=(const gchar *)
+OS__g_signal_connect_closure_2=cast=(GClosure *)
+OS__g_signal_connect_closure_3=cast=(gboolean)
+
+OS__g_signal_connect_closure_by_id=
+OS__g_signal_connect_closure_by_id_0=cast=(gpointer)
+OS__g_signal_connect_closure_by_id_1=cast=(guint)
+OS__g_signal_connect_closure_by_id_2=cast=(GQuark)
+OS__g_signal_connect_closure_by_id_3=cast=(GClosure *)
+OS__g_signal_connect_closure_by_id_4=cast=(gboolean)
+
OS__1g_1signal_1emit_1by_1name__I_3B=
OS__1g_1signal_1emit_1by_1name__I_3B_0=cast=(gpointer)
OS__1g_1signal_1emit_1by_1name__I_3B_1=cast=(const gchar *),flags=no_out
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
index de121e969f..53f72fd082 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
@@ -1053,6 +1053,18 @@ JNIEXPORT jint JNICALL OS_NATIVE(_1GTK_1TYPE_1FIXED)
}
#endif
+#ifndef NO__1GTK_1TYPE_1WIDGET
+JNIEXPORT jint JNICALL OS_NATIVE(_1GTK_1TYPE_1WIDGET)
+ (JNIEnv *env, jclass that)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1GTK_1TYPE_1WIDGET_FUNC);
+ rc = (jint)GTK_TYPE_WIDGET;
+ OS_NATIVE_EXIT(env, that, _1GTK_1TYPE_1WIDGET_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO__1GTK_1WIDGET_1FLAGS
JNIEXPORT jint JNICALL OS_NATIVE(_1GTK_1WIDGET_1FLAGS)
(JNIEnv *env, jclass that, jint arg0)
@@ -1781,6 +1793,40 @@ JNIEXPORT jint JNICALL OS_NATIVE(_1XWarpPointer)
}
#endif
+#ifndef NO__1g_1cclosure_1new
+JNIEXPORT jint JNICALL OS_NATIVE(_1g_1cclosure_1new)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1g_1cclosure_1new_FUNC);
+ rc = (jint)g_cclosure_new((GCallback)arg0, (gpointer)arg1, (GClosureNotify)arg2);
+ OS_NATIVE_EXIT(env, that, _1g_1cclosure_1new_FUNC);
+ return rc;
+}
+#endif
+
+#ifndef NO__1g_1closure_1ref
+JNIEXPORT jint JNICALL OS_NATIVE(_1g_1closure_1ref)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1g_1closure_1ref_FUNC);
+ rc = (jint)g_closure_ref((GClosure *)arg0);
+ OS_NATIVE_EXIT(env, that, _1g_1closure_1ref_FUNC);
+ return rc;
+}
+#endif
+
+#ifndef NO__1g_1closure_1unref
+JNIEXPORT void JNICALL OS_NATIVE(_1g_1closure_1unref)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ OS_NATIVE_ENTER(env, that, _1g_1closure_1unref_FUNC);
+ g_closure_unref((GClosure *)arg0);
+ OS_NATIVE_EXIT(env, that, _1g_1closure_1unref_FUNC);
+}
+#endif
+
#ifndef NO__1g_1filename_1from_1uri
JNIEXPORT jint JNICALL OS_NATIVE(_1g_1filename_1from_1uri)
(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2)
@@ -2431,6 +2477,34 @@ fail:
}
#endif
+#ifndef NO__1g_1signal_1connect_1closure
+JNIEXPORT jint JNICALL OS_NATIVE(_1g_1signal_1connect_1closure)
+ (JNIEnv *env, jclass that, jint arg0, jbyteArray arg1, jint arg2, jboolean arg3)
+{
+ jbyte *lparg1=NULL;
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1g_1signal_1connect_1closure_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+ rc = (jint)g_signal_connect_closure((gpointer)arg0, (const gchar *)lparg1, (GClosure *)arg2, (gboolean)arg3);
+fail:
+ if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+ OS_NATIVE_EXIT(env, that, _1g_1signal_1connect_1closure_FUNC);
+ return rc;
+}
+#endif
+
+#ifndef NO__1g_1signal_1connect_1closure_1by_1id
+JNIEXPORT jint JNICALL OS_NATIVE(_1g_1signal_1connect_1closure_1by_1id)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jboolean arg4)
+{
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1g_1signal_1connect_1closure_1by_1id_FUNC);
+ rc = (jint)g_signal_connect_closure_by_id((gpointer)arg0, (guint)arg1, (GQuark)arg2, (GClosure *)arg3, (gboolean)arg4);
+ OS_NATIVE_EXIT(env, that, _1g_1signal_1connect_1closure_1by_1id_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO__1g_1signal_1emit_1by_1name__I_3B
JNIEXPORT void JNICALL OS_NATIVE(_1g_1signal_1emit_1by_1name__I_3B)
(JNIEnv *env, jclass that, jint arg0, jbyteArray arg1)
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
index 4287d4b4fc..2431df2bf6 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
@@ -18,8 +18,8 @@
#ifdef NATIVE_STATS
-int OS_nativeFunctionCount = 1017;
-int OS_nativeFunctionCallCount[1017];
+int OS_nativeFunctionCount = 1023;
+int OS_nativeFunctionCallCount[1023];
char * OS_nativeFunctionNames[] = {
"Call",
"GDK_1WINDOWING_1X11",
@@ -109,6 +109,7 @@ char * OS_nativeFunctionNames[] = {
"_1GTK_1STOCK_1CANCEL",
"_1GTK_1STOCK_1OK",
"_1GTK_1TYPE_1FIXED",
+ "_1GTK_1TYPE_1WIDGET",
"_1GTK_1WIDGET_1FLAGS",
"_1GTK_1WIDGET_1HAS_1DEFAULT",
"_1GTK_1WIDGET_1HAS_1FOCUS",
@@ -157,6 +158,9 @@ char * OS_nativeFunctionNames[] = {
"_1XTestFakeKeyEvent",
"_1XTestFakeMotionEvent",
"_1XWarpPointer",
+ "_1g_1cclosure_1new",
+ "_1g_1closure_1ref",
+ "_1g_1closure_1unref",
"_1g_1filename_1from_1uri",
"_1g_1filename_1from_1utf8",
"_1g_1filename_1to_1uri",
@@ -205,6 +209,8 @@ char * OS_nativeFunctionNames[] = {
"_1g_1set_1prgname",
"_1g_1signal_1connect",
"_1g_1signal_1connect_1after",
+ "_1g_1signal_1connect_1closure",
+ "_1g_1signal_1connect_1closure_1by_1id",
"_1g_1signal_1emit_1by_1name__I_3B",
"_1g_1signal_1emit_1by_1name__I_3BI",
"_1g_1signal_1emit_1by_1name__I_3BII",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
index 837503a76f..d72d02d72c 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
@@ -113,6 +113,7 @@ typedef enum {
_1GTK_1STOCK_1CANCEL_FUNC,
_1GTK_1STOCK_1OK_FUNC,
_1GTK_1TYPE_1FIXED_FUNC,
+ _1GTK_1TYPE_1WIDGET_FUNC,
_1GTK_1WIDGET_1FLAGS_FUNC,
_1GTK_1WIDGET_1HAS_1DEFAULT_FUNC,
_1GTK_1WIDGET_1HAS_1FOCUS_FUNC,
@@ -161,6 +162,9 @@ typedef enum {
_1XTestFakeKeyEvent_FUNC,
_1XTestFakeMotionEvent_FUNC,
_1XWarpPointer_FUNC,
+ _1g_1cclosure_1new_FUNC,
+ _1g_1closure_1ref_FUNC,
+ _1g_1closure_1unref_FUNC,
_1g_1filename_1from_1uri_FUNC,
_1g_1filename_1from_1utf8_FUNC,
_1g_1filename_1to_1uri_FUNC,
@@ -209,6 +213,8 @@ typedef enum {
_1g_1set_1prgname_FUNC,
_1g_1signal_1connect_FUNC,
_1g_1signal_1connect_1after_FUNC,
+ _1g_1signal_1connect_1closure_FUNC,
+ _1g_1signal_1connect_1closure_1by_1id_FUNC,
_1g_1signal_1emit_1by_1name__I_3B_FUNC,
_1g_1signal_1emit_1by_1name__I_3BI_FUNC,
_1g_1signal_1emit_1by_1name__I_3BII_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index 1bc24d284b..ff81b39c95 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -1076,6 +1076,15 @@ public static final int /*long*/ GTK_TYPE_FIXED() {
lock.unlock();
}
}
+public static final native int /*long*/ _GTK_TYPE_WIDGET();
+public static final int /*long*/ GTK_TYPE_WIDGET() {
+ lock.lock();
+ try {
+ return _GTK_TYPE_WIDGET();
+ } finally {
+ lock.unlock();
+ }
+}
public static final native int _GTK_WIDGET_FLAGS(int /*long*/ wid);
public static final int GTK_WIDGET_FLAGS(int /*long*/ wid) {
lock.lock();
@@ -1238,6 +1247,33 @@ public static final int /*long*/ PANGO_TYPE_FONT_DESCRIPTION() {
lock.unlock();
}
}
+public static final native int /*long*/ _g_cclosure_new(int /*long*/ callback_func, int /*long*/ user_data, int /*long*/ destroy_data);
+public static final int /*long*/ g_cclosure_new(int /*long*/ callback_func, int /*long*/ user_data, int /*long*/ destroy_data) {
+ lock.lock();
+ try {
+ return _g_cclosure_new(callback_func, user_data, destroy_data);
+ } finally {
+ lock.unlock();
+ }
+}
+public static final native int /*long*/ _g_closure_ref(int /*long*/ closure);
+public static final int /*long*/ g_closure_ref(int /*long*/ closure) {
+ lock.lock();
+ try {
+ return _g_closure_ref(closure);
+ } finally {
+ lock.unlock();
+ }
+}
+public static final native void _g_closure_unref(int /*long*/ closure);
+public static final void g_closure_unref(int /*long*/ closure) {
+ lock.lock();
+ try {
+ _g_closure_unref(closure);
+ } finally {
+ lock.unlock();
+ }
+}
public static final native boolean _g_main_context_acquire(int /*long*/ context);
public static final boolean g_main_context_acquire(int /*long*/ context) {
lock.lock();
@@ -1662,6 +1698,24 @@ public static final int g_signal_connect(int /*long*/ instance, byte[] detailed_
lock.unlock();
}
}
+public static final native int _g_signal_connect_closure(int /*long*/ instance, byte[] detailed_signal, int /*long*/ closure, boolean after);
+public static final int g_signal_connect_closure(int /*long*/ instance, byte[] detailed_signal, int /*long*/ closure, boolean after) {
+ lock.lock();
+ try {
+ return _g_signal_connect_closure(instance, detailed_signal, closure, after);
+ } finally {
+ lock.unlock();
+ }
+}
+public static final native int _g_signal_connect_closure_by_id(int /*long*/ instance, int signal_id, int detail, int /*long*/ closure, boolean after);
+public static final int g_signal_connect_closure_by_id(int /*long*/ instance, int signal_id, int detail, int /*long*/ closure, boolean after) {
+ lock.lock();
+ try {
+ return _g_signal_connect_closure_by_id(instance, signal_id, detail, closure, after);
+ } finally {
+ lock.unlock();
+ }
+}
public static final native int _g_signal_connect_after(int /*long*/ instance, byte[] detailed_signal, int /*long*/ proc, int /*long*/ data);
public static final int g_signal_connect_after(int /*long*/ instance, byte[] detailed_signal, int /*long*/ proc, int /*long*/ data) {
lock.lock();
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 720124c721..4a27f2d030 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
@@ -406,9 +406,9 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ event) {
void hookEvents () {
super.hookEvents();
- OS.g_signal_connect (handle, OS.clicked, display.windowProc2, CLICKED);
+ OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false);
if (labelHandle != 0) {
- OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], 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 e366315936..2cc864905f 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
@@ -498,14 +498,10 @@ boolean hasFocus () {
void hookEvents () {
//TODO - fix multiple enter/exit
super.hookEvents ();
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- int /*long*/ windowProc4 = display.windowProc4;
- int /*long*/ windowProc5 = display.windowProc5;
- OS.g_signal_connect_after (entryHandle, OS.changed, windowProc2, CHANGED);
- OS.g_signal_connect (entryHandle, OS.insert_text, windowProc5, INSERT_TEXT);
- OS.g_signal_connect (entryHandle, OS.delete_text, windowProc4, DELETE_TEXT);
- OS.g_signal_connect (entryHandle, OS.activate, windowProc2, ACTIVATE);
+ OS.g_signal_connect_closure (entryHandle, OS.changed, display.closures [CHANGED], true);
+ OS.g_signal_connect_closure (entryHandle, OS.insert_text, display.closures [INSERT_TEXT], false);
+ OS.g_signal_connect_closure (entryHandle, OS.delete_text, display.closures [DELETE_TEXT], false);
+ OS.g_signal_connect_closure (entryHandle, OS.activate, display.closures [ACTIVATE], false);
int eventMask = OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK |
OS.GDK_BUTTON_RELEASE_MASK | OS.GDK_ENTER_NOTIFY_MASK |
OS.GDK_LEAVE_NOTIFY_MASK;
@@ -515,11 +511,11 @@ void hookEvents () {
if (eventHandle != 0) {
/* Connect the mouse signals */
OS.gtk_widget_add_events (eventHandle, eventMask);
- OS.g_signal_connect (eventHandle, OS.button_press_event, windowProc3, BUTTON_PRESS_EVENT);
- OS.g_signal_connect (eventHandle, OS.button_release_event, windowProc3, BUTTON_RELEASE_EVENT);
- OS.g_signal_connect (eventHandle, OS.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT);
- OS.g_signal_connect (eventHandle, OS.enter_notify_event, windowProc3, ENTER_NOTIFY_EVENT);
- OS.g_signal_connect (eventHandle, OS.leave_notify_event, windowProc3, LEAVE_NOTIFY_EVENT);
+ 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 [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);
/*
* Feature in GTK. Events such as mouse move are propagated up
* the widget hierarchy and are seen by the parent. This is the
@@ -527,19 +523,19 @@ void hookEvents () {
* hook a signal after and stop the propagation using a negative
* event number to distinguish this case.
*/
- OS.g_signal_connect_after (eventHandle, OS.button_press_event, windowProc3, -BUTTON_PRESS_EVENT);
- OS.g_signal_connect_after (eventHandle, OS.button_release_event, windowProc3, -BUTTON_RELEASE_EVENT);
- OS.g_signal_connect_after (eventHandle, OS.motion_notify_event, windowProc3, -MOTION_NOTIFY_EVENT);
+ 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);
/* Connect the event_after signal for both key and mouse */
if (eventHandle != entryHandle) {
- OS.g_signal_connect (eventHandle, OS.event_after, windowProc3, EVENT_AFTER);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
}
}
}
int /*long*/ imContext = imContext ();
if (imContext != 0) {
- OS.g_signal_connect (imContext, OS.commit, windowProc3, COMMIT);
+ OS.g_signal_connect_closure (imContext, OS.commit, display.closures [COMMIT], false);
int id = OS.g_signal_lookup (OS.commit, OS.gtk_im_context_get_type ());
int blockMask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
OS.g_signal_handlers_block_matched (imContext, blockMask, id, 0, 0, 0, entryHandle);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
index 0c47ae768c..bb7c5ab163 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
@@ -638,10 +638,10 @@ void hookEvents () {
if ((state & CANVAS) != 0) {
OS.gtk_widget_add_events (handle, OS.GDK_POINTER_MOTION_HINT_MASK);
if (scrolledHandle != 0) {
- OS.g_signal_connect (scrolledHandle, OS.scroll_child, display.windowProc4, SCROLL_CHILD);
+ OS.g_signal_connect_closure (scrolledHandle, OS.scroll_child, display.closures [SCROLL_CHILD], false);
}
if ((style & SWT.NO_BACKGROUND) != 0) {
- OS.g_signal_connect (handle, OS.style_set, display.windowProc3, STYLE_SET);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [STYLE_SET], 0, display.closures [STYLE_SET], 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 8a45b0c8bd..854d5cb863 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
@@ -141,20 +141,17 @@ boolean hasFocus () {
}
void hookEvents () {
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
-
/* Connect the keyboard signals */
int /*long*/ 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 (focusHandle, OS.popup_menu, windowProc2, POPUP_MENU);
- OS.g_signal_connect (focusHandle, OS.show_help, windowProc3, SHOW_HELP);
- OS.g_signal_connect (focusHandle, OS.key_press_event, windowProc3, KEY_PRESS_EVENT);
- OS.g_signal_connect (focusHandle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT);
- OS.g_signal_connect (focusHandle, OS.focus, windowProc3, FOCUS);
- OS.g_signal_connect (focusHandle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT);
- OS.g_signal_connect (focusHandle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
+ 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);
/* Connect the mouse signals */
int /*long*/ eventHandle = eventHandle ();
@@ -162,12 +159,12 @@ void hookEvents () {
OS.GDK_BUTTON_RELEASE_MASK | OS.GDK_ENTER_NOTIFY_MASK |
OS.GDK_LEAVE_NOTIFY_MASK;
OS.gtk_widget_add_events (eventHandle, eventMask);
- OS.g_signal_connect (eventHandle, OS.button_press_event, windowProc3, BUTTON_PRESS_EVENT);
- OS.g_signal_connect (eventHandle, OS.button_release_event, windowProc3, BUTTON_RELEASE_EVENT);
- OS.g_signal_connect (eventHandle, OS.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT);
- OS.g_signal_connect (eventHandle, OS.enter_notify_event, windowProc3, ENTER_NOTIFY_EVENT);
- OS.g_signal_connect (eventHandle, OS.leave_notify_event, windowProc3, LEAVE_NOTIFY_EVENT);
- OS.g_signal_connect (eventHandle, OS.scroll_event, windowProc3, SCROLL_EVENT);
+ 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 [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 [SCROLL_EVENT], 0, display.closures [SCROLL_EVENT], false);
/*
* Feature in GTK. Events such as mouse move are propagate up
* the widget hierarchy and are seen by the parent. This is the
@@ -179,35 +176,35 @@ void hookEvents () {
* lightweight widgets.
*/
int /*long*/ blockHandle = fixedHandle != 0 ? fixedHandle : eventHandle;
- OS.g_signal_connect_after (blockHandle, OS.button_press_event, windowProc3, -BUTTON_PRESS_EVENT);
- OS.g_signal_connect_after (blockHandle, OS.button_release_event, windowProc3, -BUTTON_RELEASE_EVENT);
- OS.g_signal_connect_after (blockHandle, OS.motion_notify_event, windowProc3, -MOTION_NOTIFY_EVENT);
+ 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);
/* Connect the event_after signal for both key and mouse */
- OS.g_signal_connect (eventHandle, OS.event_after, windowProc3, EVENT_AFTER);
+ OS.g_signal_connect_closure_by_id (eventHandle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
if (focusHandle != eventHandle) {
- OS.g_signal_connect (focusHandle, OS.event_after, windowProc3, EVENT_AFTER);
+ OS.g_signal_connect_closure_by_id (focusHandle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
}
/* Connect the paint signal */
int /*long*/ paintHandle = paintHandle ();
int paintMask = OS.GDK_EXPOSURE_MASK | OS.GDK_VISIBILITY_NOTIFY_MASK;
OS.gtk_widget_add_events (paintHandle, paintMask);
- OS.g_signal_connect (paintHandle, OS.expose_event, windowProc3, -EXPOSE_EVENT);
- OS.g_signal_connect (paintHandle, OS.visibility_notify_event, windowProc3, VISIBILITY_NOTIFY_EVENT);
- OS.g_signal_connect_after (paintHandle, OS.expose_event, windowProc3, EXPOSE_EVENT);
+ 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 [VISIBILITY_NOTIFY_EVENT], 0, display.closures [VISIBILITY_NOTIFY_EVENT], false);
+ OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, display.closures [EXPOSE_EVENT], true);
/* Connect the Input Method signals */
- OS.g_signal_connect_after (handle, OS.realize, windowProc2, REALIZE);
- OS.g_signal_connect (handle, OS.unrealize, windowProc2, UNREALIZE);
+ 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);
int /*long*/ imHandle = imHandle ();
if (imHandle != 0) {
- OS.g_signal_connect (imHandle, OS.commit, windowProc3, COMMIT);
- OS.g_signal_connect (imHandle, OS.preedit_changed, windowProc2, PREEDIT_CHANGED);
+ 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);
}
int /*long*/ topHandle = topHandle ();
- OS.g_signal_connect_after (topHandle, OS.map, windowProc2, MAP);
+ OS.g_signal_connect_closure_by_id (topHandle, display.signalIds [MAP], 0, display.closures [MAP], true);
}
int /*long*/ hoverProc (int /*long*/ widget) {
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 5c9bfd68f2..0b32f9f95c 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
@@ -111,6 +111,9 @@ public class Display extends Device {
static String APP_NAME = "SWT";
static final String DISPATCH_EVENT_KEY = "org.eclipse.swt.internal.gtk.dispatchEvent";
static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget";
+ int /*long*/ [] closures;
+ int [] signalIds;
+ int /*long*/ shellMapProcClosure;
/* Widget Table */
int freeSlot;
@@ -2053,22 +2056,124 @@ protected void init () {
}
void initializeCallbacks () {
+ closures = new int /*long*/ [Widget.LAST_SIGNAL];
+ signalIds = new int [Widget.LAST_SIGNAL];
+
+ /* Cache signals for GtkWidget */
+ signalIds [Widget.BUTTON_PRESS_EVENT] = OS.g_signal_lookup (OS.button_press_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.BUTTON_RELEASE_EVENT] = OS.g_signal_lookup (OS.button_release_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.CONFIGURE_EVENT] = OS.g_signal_lookup (OS.configure_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.DELETE_EVENT] = OS.g_signal_lookup (OS.delete_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.ENTER_NOTIFY_EVENT] = OS.g_signal_lookup (OS.enter_notify_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.EVENT] = OS.g_signal_lookup (OS.event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.EVENT_AFTER] = OS.g_signal_lookup (OS.event_after, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.EXPOSE_EVENT] = OS.g_signal_lookup (OS.expose_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.FOCUS] = OS.g_signal_lookup (OS.focus, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.FOCUS_IN_EVENT] = OS.g_signal_lookup (OS.focus_in_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.FOCUS_OUT_EVENT] = OS.g_signal_lookup (OS.focus_out_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.GRAB_FOCUS] = OS.g_signal_lookup (OS.grab_focus, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.HIDE] = OS.g_signal_lookup (OS.hide, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.KEY_PRESS_EVENT] = OS.g_signal_lookup (OS.key_press_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.KEY_RELEASE_EVENT] = OS.g_signal_lookup (OS.key_release_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.LEAVE_NOTIFY_EVENT] = OS.g_signal_lookup (OS.leave_notify_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.MAP] = OS.g_signal_lookup (OS.map, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.MAP_EVENT] = OS.g_signal_lookup (OS.map_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.MNEMONIC_ACTIVATE] = OS.g_signal_lookup (OS.mnemonic_activate, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.MOTION_NOTIFY_EVENT] = OS.g_signal_lookup (OS.motion_notify_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.POPUP_MENU] = OS.g_signal_lookup (OS.popup_menu, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.REALIZE] = OS.g_signal_lookup (OS.realize, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.SCROLL_EVENT] = OS.g_signal_lookup (OS.scroll_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.SHOW] = OS.g_signal_lookup (OS.show, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.SHOW_HELP] = OS.g_signal_lookup (OS.show_help, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.SIZE_ALLOCATE] = OS.g_signal_lookup (OS.size_allocate, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.STYLE_SET] = OS.g_signal_lookup (OS.style_set, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.UNMAP] = OS.g_signal_lookup (OS.unmap, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.UNMAP_EVENT] = OS.g_signal_lookup (OS.unmap_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.UNREALIZE] = OS.g_signal_lookup (OS.realize, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.VISIBILITY_NOTIFY_EVENT] = OS.g_signal_lookup (OS.visibility_notify_event, OS.GTK_TYPE_WIDGET ());
+ signalIds [Widget.WINDOW_STATE_EVENT] = OS.g_signal_lookup (OS.window_state_event, OS.GTK_TYPE_WIDGET ());
+
windowCallback2 = new Callback (this, "windowProc", 2);
windowProc2 = windowCallback2.getAddress ();
if (windowProc2 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
+
+ closures [Widget.ACTIVATE] = OS.g_cclosure_new (windowProc2, Widget.ACTIVATE, 0);
+ closures [Widget.CHANGED] = OS.g_cclosure_new (windowProc2, Widget.CHANGED, 0);
+ closures [Widget.CLICKED] = OS.g_cclosure_new (windowProc2, Widget.CLICKED, 0);
+ closures [Widget.HIDE] = OS.g_cclosure_new (windowProc2, Widget.HIDE, 0);
+ closures [Widget.GRAB_FOCUS] = OS.g_cclosure_new (windowProc2, Widget.GRAB_FOCUS, 0);
+ closures [Widget.MAP] = OS.g_cclosure_new (windowProc2, Widget.MAP, 0);
+ closures [Widget.OUTPUT] = OS.g_cclosure_new (windowProc2, Widget.OUTPUT, 0);
+ closures [Widget.POPUP_MENU] = OS.g_cclosure_new (windowProc2, Widget.POPUP_MENU, 0);
+ closures [Widget.PREEDIT_CHANGED] = OS.g_cclosure_new (windowProc2, Widget.PREEDIT_CHANGED, 0);
+ closures [Widget.REALIZE] = OS.g_cclosure_new (windowProc2, Widget.REALIZE, 0);
+ closures [Widget.SELECT] = OS.g_cclosure_new (windowProc2, Widget.SELECT, 0);
+ closures [Widget.SHOW] = OS.g_cclosure_new (windowProc2, Widget.SHOW, 0);
+ closures [Widget.VALUE_CHANGED] = OS.g_cclosure_new (windowProc2, Widget.VALUE_CHANGED, 0);
+ closures [Widget.UNMAP] = OS.g_cclosure_new (windowProc2, Widget.UNMAP, 0);
+ closures [Widget.UNREALIZE] = OS.g_cclosure_new (windowProc2, Widget.UNREALIZE, 0);
+
windowCallback3 = new Callback (this, "windowProc", 3);
windowProc3 = windowCallback3.getAddress ();
if (windowProc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
+
+ closures [Widget.BUTTON_PRESS_EVENT] = OS.g_cclosure_new (windowProc3, Widget.BUTTON_PRESS_EVENT, 0);
+ closures [Widget.BUTTON_PRESS_EVENT_INVERSE] = OS.g_cclosure_new (windowProc3, Widget.BUTTON_PRESS_EVENT_INVERSE, 0);
+ closures [Widget.BUTTON_RELEASE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.BUTTON_RELEASE_EVENT, 0);
+ closures [Widget.BUTTON_RELEASE_EVENT_INVERSE] = OS.g_cclosure_new (windowProc3, Widget.BUTTON_RELEASE_EVENT_INVERSE, 0);
+ closures [Widget.COMMIT] = OS.g_cclosure_new (windowProc3, Widget.COMMIT, 0);
+ closures [Widget.CONFIGURE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.CONFIGURE_EVENT, 0);
+ closures [Widget.DELETE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.DELETE_EVENT, 0);
+ closures [Widget.ENTER_NOTIFY_EVENT] = OS.g_cclosure_new (windowProc3, Widget.ENTER_NOTIFY_EVENT, 0);
+ closures [Widget.EVENT] = OS.g_cclosure_new (windowProc3, Widget.EVENT, 0);
+ closures [Widget.EVENT_AFTER] = OS.g_cclosure_new (windowProc3, Widget.EVENT_AFTER, 0);
+ closures [Widget.EXPOSE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.EXPOSE_EVENT, 0);
+ closures [Widget.EXPOSE_EVENT_INVERSE] = OS.g_cclosure_new (windowProc3, Widget.EXPOSE_EVENT_INVERSE, 0);
+ closures [Widget.FOCUS] = OS.g_cclosure_new (windowProc3, Widget.FOCUS, 0);
+ closures [Widget.FOCUS_IN_EVENT] = OS.g_cclosure_new (windowProc3, Widget.FOCUS_IN_EVENT, 0);
+ closures [Widget.FOCUS_OUT_EVENT] = OS.g_cclosure_new (windowProc3, Widget.FOCUS_OUT_EVENT, 0);
+ closures [Widget.KEY_PRESS_EVENT] = OS.g_cclosure_new (windowProc3, Widget.KEY_PRESS_EVENT, 0);
+ closures [Widget.KEY_RELEASE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.KEY_RELEASE_EVENT, 0);
+ closures [Widget.INPUT] = OS.g_cclosure_new (windowProc3, Widget.INPUT, 0);
+ closures [Widget.LEAVE_NOTIFY_EVENT] = OS.g_cclosure_new (windowProc3, Widget.LEAVE_NOTIFY_EVENT, 0);
+ closures [Widget.MAP_EVENT] = OS.g_cclosure_new (windowProc3, Widget.MAP_EVENT, 0);
+ closures [Widget.MNEMONIC_ACTIVATE] = OS.g_cclosure_new (windowProc3, Widget.MNEMONIC_ACTIVATE, 0);
+ closures [Widget.MOTION_NOTIFY_EVENT] = OS.g_cclosure_new (windowProc3, Widget.MOTION_NOTIFY_EVENT, 0);
+ closures [Widget.MOTION_NOTIFY_EVENT_INVERSE] = OS.g_cclosure_new (windowProc3, Widget.MOTION_NOTIFY_EVENT_INVERSE, 0);
+ closures [Widget.MOVE_FOCUS] = OS.g_cclosure_new (windowProc3, Widget.MOVE_FOCUS, 0);
+ closures [Widget.SCROLL_EVENT] = OS.g_cclosure_new (windowProc3, Widget.SCROLL_EVENT, 0);
+ closures [Widget.SHOW_HELP] = OS.g_cclosure_new (windowProc3, Widget.SHOW_HELP, 0);
+ closures [Widget.SIZE_ALLOCATE] = OS.g_cclosure_new (windowProc3, Widget.SIZE_ALLOCATE, 0);
+ closures [Widget.STYLE_SET] = OS.g_cclosure_new (windowProc3, Widget.STYLE_SET, 0);
+ closures [Widget.TOGGLED] = OS.g_cclosure_new (windowProc3, Widget.TOGGLED, 0);
+ closures [Widget.UNMAP_EVENT] = OS.g_cclosure_new (windowProc3, Widget.UNMAP_EVENT, 0);
+ closures [Widget.VISIBILITY_NOTIFY_EVENT] = OS.g_cclosure_new (windowProc3, Widget.VISIBILITY_NOTIFY_EVENT, 0);
+ closures [Widget.WINDOW_STATE_EVENT] = OS.g_cclosure_new (windowProc3, Widget.WINDOW_STATE_EVENT, 0);
+
windowCallback4 = new Callback (this, "windowProc", 4);
windowProc4 = windowCallback4.getAddress ();
if (windowProc4 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
+
+ closures [Widget.DELETE_RANGE] = OS.g_cclosure_new (windowProc4, Widget.DELETE_RANGE, 0);
+ closures [Widget.DELETE_TEXT] = OS.g_cclosure_new (windowProc4, Widget.DELETE_TEXT, 0);
+ closures [Widget.ROW_ACTIVATED] = OS.g_cclosure_new (windowProc4, Widget.ROW_ACTIVATED, 0);
+ closures [Widget.SCROLL_CHILD] = OS.g_cclosure_new (windowProc4, Widget.SCROLL_CHILD, 0);
+ closures [Widget.SWITCH_PAGE] = OS.g_cclosure_new (windowProc4, Widget.SWITCH_PAGE, 0);
+ closures [Widget.TEST_COLLAPSE_ROW] = OS.g_cclosure_new (windowProc4, Widget.TEST_COLLAPSE_ROW, 0);
+ closures [Widget.TEST_EXPAND_ROW] = OS.g_cclosure_new (windowProc4, Widget.TEST_EXPAND_ROW, 0);
+
windowCallback5 = new Callback (this, "windowProc", 5);
windowProc5 = windowCallback5.getAddress ();
if (windowProc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
+
+ closures [Widget.CHANGE_VALUE] = OS.g_cclosure_new (windowProc5, Widget.CHANGE_VALUE, 0);
+ closures [Widget.EXPAND_COLLAPSE_CURSOR_ROW] = OS.g_cclosure_new (windowProc5, Widget.EXPAND_COLLAPSE_CURSOR_ROW, 0);
+ closures [Widget.INSERT_TEXT] = OS.g_cclosure_new (windowProc5, Widget.INSERT_TEXT, 0);
+
+ for (int i = 0; i < Widget.LAST_SIGNAL; i++) {
+ if (closures [i] != 0) OS.g_closure_ref (closures [i]);
+ }
+
timerCallback = new Callback (this, "timerProc", 1);
timerProc = timerCallback.getAddress ();
if (timerProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
@@ -2092,7 +2197,10 @@ void initializeCallbacks () {
shellMapCallback = new Callback(this, "shellMapProc", 3);
shellMapProc = shellMapCallback.getAddress();
if (shellMapProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
-
+
+ shellMapProcClosure = OS.g_cclosure_new (shellMapProc, 0, 0);
+ OS.g_closure_ref (shellMapProcClosure);
+
treeSelectionCallback = new Callback(this, "treeSelectionProc", 4);
treeSelectionProc = treeSelectionCallback.getAddress();
if (treeSelectionProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
@@ -2742,6 +2850,12 @@ void releaseDisplay () {
caretCallback.dispose ();
caretCallback = null;
+ /* Release closures */
+ 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);
+
/* 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/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java
index 69d91d6187..5e3138a895 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
@@ -181,7 +181,7 @@ public String getText () {
void hookEvents () {
super.hookEvents();
if (labelHandle != 0) {
- OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], 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 0170370afa..4803a4f618 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
@@ -279,7 +279,7 @@ public String getText () {
void hookEvents () {
super.hookEvents();
if (labelHandle != 0) {
- OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
index b3a1e2bca7..6d9c55045d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
@@ -754,8 +754,8 @@ int /*long*/ gtk_row_activated (int /*long*/ tree, int /*long*/ path, int /*long
void hookEvents () {
super.hookEvents();
int /*long*/ selection = OS.gtk_tree_view_get_selection(handle);
- OS.g_signal_connect (selection, OS.changed, display.windowProc2, CHANGED);
- OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED);
+ OS.g_signal_connect_closure (selection, OS.changed, display.closures [CHANGED], false);
+ OS.g_signal_connect_closure (handle, OS.row_activated, display.closures [ROW_ACTIVATED], 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 ad67d74609..9846552332 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
@@ -593,11 +593,9 @@ int /*long*/ gtk_show_help (int /*long*/ widget, int /*long*/ helpType) {
void hookEvents () {
super.hookEvents ();
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.show, windowProc2, SHOW);
- OS.g_signal_connect (handle, OS.hide, windowProc2, HIDE);
- OS.g_signal_connect (handle, OS.show_help, windowProc3, SHOW_HELP);
+ 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);
}
/**
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 200c8e1cb8..dc07b150ac 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
@@ -452,11 +452,9 @@ int /*long*/ gtk_show_help (int /*long*/ widget, int /*long*/ helpType) {
void hookEvents () {
super.hookEvents ();
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.activate, windowProc2, ACTIVATE);
- OS.g_signal_connect (handle, OS.select, windowProc2, SELECT);
- OS.g_signal_connect (handle, OS.show_help, windowProc3, SHOW_HELP);
+ 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);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java
index f661984026..66e78021bb 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java
@@ -133,7 +133,7 @@ void createHandle (int index) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect (handle, OS.value_changed, display.windowProc2, VALUE_CHANGED);
+ OS.g_signal_connect_closure (handle, OS.value_changed, display.closures [VALUE_CHANGED], 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 c4d8bb8398..4f660d16d2 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
@@ -373,9 +373,9 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
void hookEvents () {
super.hookEvents ();
if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
- OS.g_signal_connect (handle, OS.change_value, display.windowProc5, CHANGE_VALUE);
+ OS.g_signal_connect_closure (handle, OS.change_value, display.closures [CHANGE_VALUE], false);
}
- OS.g_signal_connect (adjustmentHandle, OS.value_changed, display.windowProc2, VALUE_CHANGED);
+ OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed, display.closures [VALUE_CHANGED], 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 45a7f24ffd..44f8080058 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
@@ -586,19 +586,17 @@ boolean hasBorder () {
void hookEvents () {
super.hookEvents ();
- int /*long*/ shellMapProc = display.shellMapProc;
- int /*long*/ windowProc3 = display.windowProc3;
- OS.g_signal_connect (shellHandle, OS.map_event, windowProc3, MAP_EVENT);
- OS.g_signal_connect (shellHandle, OS.unmap_event, windowProc3, UNMAP_EVENT);
- OS.g_signal_connect (shellHandle, OS.window_state_event, windowProc3, WINDOW_STATE_EVENT);
- OS.g_signal_connect (shellHandle, OS.size_allocate, windowProc3, SIZE_ALLOCATE);
- OS.g_signal_connect (shellHandle, OS.configure_event, windowProc3, CONFIGURE_EVENT);
- OS.g_signal_connect (shellHandle, OS.delete_event, windowProc3, DELETE_EVENT);
- OS.g_signal_connect (shellHandle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT);
- OS.g_signal_connect (shellHandle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
- OS.g_signal_connect (shellHandle, OS.map_event, shellMapProc, 0);
- OS.g_signal_connect (shellHandle, OS.enter_notify_event, windowProc3, ENTER_NOTIFY_EVENT);
- OS.g_signal_connect (shellHandle, OS.move_focus, windowProc3, MOVE_FOCUS);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [MAP_EVENT], 0, display.closures [MAP_EVENT], false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [UNMAP_EVENT], 0, display.closures [UNMAP_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 [FOCUS_IN_EVENT], 0, display.closures [FOCUS_IN_EVENT], false);
+ OS.g_signal_connect_closure_by_id (shellHandle, display.signalIds [FOCUS_OUT_EVENT], 0, display.closures [FOCUS_OUT_EVENT], 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);
}
public boolean isEnabled () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java
index bea0d96e0a..2b8b9250e8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java
@@ -194,9 +194,9 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
void hookEvents () {
super.hookEvents ();
if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
- OS.g_signal_connect (handle, OS.change_value, display.windowProc5, CHANGE_VALUE);
+ OS.g_signal_connect_closure (handle, OS.change_value, display.closures [CHANGE_VALUE], false);
}
- OS.g_signal_connect (handle, OS.value_changed, display.windowProc2, VALUE_CHANGED);
+ OS.g_signal_connect_closure (handle, OS.value_changed, display.closures [VALUE_CHANGED], false);
}
void register () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
index 1fe4e64843..7b2137e984 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
@@ -634,18 +634,14 @@ int /*long*/ gtk_value_changed (int /*long*/ widget) {
void hookEvents () {
super.hookEvents();
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- int /*long*/ windowProc4 = display.windowProc4;
- int /*long*/ windowProc5 = display.windowProc5;
- OS.g_signal_connect_after (handle, OS.changed, windowProc2, CHANGED);
- OS.g_signal_connect (handle, OS.insert_text, windowProc5, INSERT_TEXT);
- OS.g_signal_connect (handle, OS.delete_text, windowProc4, DELETE_TEXT);
- OS.g_signal_connect (handle, OS.value_changed, windowProc2, VALUE_CHANGED);
- OS.g_signal_connect (handle, OS.activate, windowProc2, ACTIVATE);
+ OS.g_signal_connect_closure (handle, OS.changed, display.closures [CHANGED], true);
+ OS.g_signal_connect_closure (handle, OS.insert_text, display.closures [INSERT_TEXT], false);
+ OS.g_signal_connect_closure (handle, OS.delete_text, display.closures [DELETE_TEXT], false);
+ OS.g_signal_connect_closure (handle, OS.value_changed, display.closures [VALUE_CHANGED], false);
+ OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
int /*long*/ imContext = imContext ();
if (imContext != 0) {
- OS.g_signal_connect (imContext, OS.commit, windowProc3, COMMIT);
+ OS.g_signal_connect_closure (imContext, OS.commit, display.closures [COMMIT], false);
int id = OS.g_signal_lookup (OS.commit, OS.gtk_im_context_get_type ());
int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
OS.g_signal_handlers_block_matched (imContext, mask, id, 0, 0, 0, handle);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
index f403708a97..3197f4aff4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
@@ -407,7 +407,7 @@ int /*long*/ gtk_switch_page (int /*long*/ widget, int /*long*/ page, int /*long
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect (handle, OS.switch_page, display.windowProc4, SWITCH_PAGE);
+ OS.g_signal_connect_closure (handle, OS.switch_page, display.closures [SWITCH_PAGE], false);
}
/**
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 cfa402f026..95c9a73694 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
@@ -185,7 +185,7 @@ int /*long*/ gtk_mnemonic_activate (int /*long*/ widget, int /*long*/ arg1) {
void hookEvents () {
super.hookEvents ();
- if (labelHandle != 0) OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
}
void register () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index 10f91e25ed..8ffa44629e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
@@ -1726,10 +1726,10 @@ void hideFirstColumn () {
void hookEvents () {
super.hookEvents ();
int /*long*/ selection = OS.gtk_tree_view_get_selection(handle);
- OS.g_signal_connect (selection, OS.changed, display.windowProc2, CHANGED);
- OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED);
+ OS.g_signal_connect_closure (selection, OS.changed, display.closures [CHANGED], false);
+ OS.g_signal_connect_closure (handle, OS.row_activated, display.closures [ROW_ACTIVATED], false);
if (checkRenderer != 0) {
- OS.g_signal_connect (checkRenderer, OS.toggled, display.windowProc3, TOGGLED);
+ OS.g_signal_connect_closure (checkRenderer, OS.toggled, display.closures [TOGGLED], false);
}
}
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 0fdbd143ec..70dfd114ec 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
@@ -354,9 +354,9 @@ int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect (handle, OS.clicked, display.windowProc2, CLICKED);
- if (buttonHandle != 0) OS.g_signal_connect (buttonHandle, OS.size_allocate, display.windowProc3, SIZE_ALLOCATE);
- if (labelHandle != 0) OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ 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);
+ if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], false);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
index b364e5aabe..07485d4d52 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
@@ -1200,24 +1200,20 @@ int /*long*/ gtk_popup_menu (int /*long*/ widget) {
void hookEvents () {
super.hookEvents();
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- int /*long*/ windowProc4 = display.windowProc4;
- int /*long*/ windowProc5 = display.windowProc5;
if ((style & SWT.SINGLE) != 0) {
- OS.g_signal_connect_after (handle, OS.changed, windowProc2, CHANGED);
- OS.g_signal_connect (handle, OS.insert_text, windowProc5, INSERT_TEXT);
- OS.g_signal_connect (handle, OS.delete_text, windowProc4, DELETE_TEXT);
- OS.g_signal_connect (handle, OS.activate, windowProc2, ACTIVATE);
- OS.g_signal_connect (handle, OS.grab_focus, windowProc2, GRAB_FOCUS);
+ OS.g_signal_connect_closure (handle, OS.changed, display.closures [CHANGED], true);
+ OS.g_signal_connect_closure (handle, OS.insert_text, display.closures [INSERT_TEXT], false);
+ OS.g_signal_connect_closure (handle, OS.delete_text, display.closures [DELETE_TEXT], false);
+ OS.g_signal_connect_closure (handle, OS.activate, display.closures [ACTIVATE], false);
+ OS.g_signal_connect_closure (handle, OS.grab_focus, display.closures [GRAB_FOCUS], false);
} else {
- OS.g_signal_connect (bufferHandle, OS.changed, windowProc2, CHANGED);
- OS.g_signal_connect (bufferHandle, OS.insert_text, windowProc5, INSERT_TEXT);
- OS.g_signal_connect (bufferHandle, OS.delete_range, windowProc4, DELETE_RANGE);
+ OS.g_signal_connect_closure (bufferHandle, OS.changed, display.closures [CHANGED], false);
+ OS.g_signal_connect_closure (bufferHandle, OS.insert_text, display.closures [INSERT_TEXT], false);
+ OS.g_signal_connect_closure (bufferHandle, OS.delete_range, display.closures [DELETE_RANGE], false);
}
int /*long*/ imContext = imContext ();
if (imContext != 0) {
- OS.g_signal_connect (imContext, OS.commit, windowProc3, COMMIT);
+ OS.g_signal_connect_closure (imContext, OS.commit, display.closures [COMMIT], false);
int id = OS.g_signal_lookup (OS.commit, OS.gtk_im_context_get_type ());
int mask = OS.G_SIGNAL_MATCH_DATA | OS.G_SIGNAL_MATCH_ID;
OS.g_signal_handlers_block_matched (imContext, mask, id, 0, 0, 0, handle);
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 d5015273af..7bc2ea8c8f 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
@@ -602,14 +602,12 @@ boolean hasFocus () {
void hookEvents () {
super.hookEvents ();
if ((style & SWT.SEPARATOR) != 0) return;
- int /*long*/ windowProc2 = display.windowProc2;
- int /*long*/ windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.clicked, windowProc2, CLICKED);
- OS.g_signal_connect (handle, OS.enter_notify_event, windowProc3, ENTER_NOTIFY_EVENT);
- OS.g_signal_connect (handle, OS.leave_notify_event, windowProc3, LEAVE_NOTIFY_EVENT);
- if (labelHandle != 0) OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ OS.g_signal_connect_closure (handle, OS.clicked, display.closures [CLICKED], false);
+ 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_by_id (handle, display.signalIds [LEAVE_NOTIFY_EVENT], 0, display.closures [LEAVE_NOTIFY_EVENT], 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 (handle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [FOCUS_OUT_EVENT], 0, display.closures [FOCUS_OUT_EVENT], false);
/*
* Feature in GTK. Usually, GTK widgets propagate all events to their
@@ -626,12 +624,12 @@ void hookEvents () {
OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK |
OS.GDK_FOCUS_CHANGE_MASK;
OS.gtk_widget_add_events (handle, mask);
- OS.g_signal_connect (handle, OS.button_press_event, windowProc3, BUTTON_PRESS_EVENT);
- OS.g_signal_connect (handle, OS.button_release_event, windowProc3, BUTTON_RELEASE_EVENT);
- OS.g_signal_connect (handle, OS.event_after, windowProc3, EVENT_AFTER);
+ 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 [BUTTON_RELEASE_EVENT], 0, display.closures [BUTTON_RELEASE_EVENT], false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [EVENT_AFTER], 0, display.closures[EVENT_AFTER], false);
int /*long*/ topHandle = topHandle ();
- OS.g_signal_connect_after (topHandle, OS.map, windowProc2, MAP);
+ 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/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java
index e6d5d683e1..ad6139e2b5 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
@@ -230,8 +230,8 @@ int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) {
void hookEvents () {
int eventMask = OS.GDK_BUTTON_PRESS_MASK;
OS.gtk_widget_add_events (handle, eventMask);
- OS.g_signal_connect (handle, OS.button_press_event, display.windowProc3, BUTTON_PRESS_EVENT);
- OS.g_signal_connect (imageHandle, OS.size_allocate, display.windowProc3, SIZE_ALLOCATE);
+ 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);
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index 337aec404b..96d3a0c179 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
@@ -1715,13 +1715,13 @@ void hideFirstColumn () {
void hookEvents () {
super.hookEvents ();
int /*long*/ selection = OS.gtk_tree_view_get_selection(handle);
- OS.g_signal_connect (selection, OS.changed, display.windowProc2, CHANGED);
- OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED);
- OS.g_signal_connect (handle, OS.test_expand_row, display.windowProc4, TEST_EXPAND_ROW);
- OS.g_signal_connect (handle, OS.test_collapse_row, display.windowProc4, TEST_COLLAPSE_ROW);
- OS.g_signal_connect (handle, OS.expand_collapse_cursor_row, display.windowProc5, EXPAND_COLLAPSE_CURSOR_ROW);
+ OS.g_signal_connect_closure (selection, OS.changed, display.closures [CHANGED], false);
+ OS.g_signal_connect_closure (handle, OS.row_activated, display.closures [ROW_ACTIVATED], false);
+ OS.g_signal_connect_closure (handle, OS.test_expand_row, display.closures [TEST_EXPAND_ROW], false);
+ OS.g_signal_connect_closure (handle, OS.test_collapse_row, display.closures [TEST_COLLAPSE_ROW], false);
+ OS.g_signal_connect_closure (handle, OS.expand_collapse_cursor_row, display.closures [EXPAND_COLLAPSE_CURSOR_ROW], false);
if (checkRenderer != 0) {
- OS.g_signal_connect (checkRenderer, OS.toggled, display.windowProc3, TOGGLED);
+ OS.g_signal_connect_closure (checkRenderer, OS.toggled, display.closures [TOGGLED], 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 c561b455d4..643b815bd6 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
@@ -355,9 +355,9 @@ int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) {
void hookEvents () {
super.hookEvents ();
- OS.g_signal_connect (handle, OS.clicked, display.windowProc2, CLICKED);
- if (buttonHandle != 0) OS.g_signal_connect (buttonHandle, OS.size_allocate, display.windowProc3, SIZE_ALLOCATE);
- if (labelHandle != 0) OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE);
+ 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);
+ if (labelHandle != 0) OS.g_signal_connect_closure_by_id (labelHandle, display.signalIds [MNEMONIC_ACTIVATE], 0, display.closures [MNEMONIC_ACTIVATE], 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 f8973e604c..26ec9fdddf 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
@@ -96,57 +96,62 @@ public abstract class Widget {
/* GTK signals data */
static final int ACTIVATE = 1;
static final int BUTTON_PRESS_EVENT = 2;
- static final int BUTTON_RELEASE_EVENT = 3;
- static final int CHANGED = 4;
- static final int CHANGE_VALUE = 5;
- static final int CLICKED = 6;
- static final int COMMIT = 7;
- static final int CONFIGURE_EVENT = 8;
- static final int DELETE_EVENT = 9;
- static final int DELETE_RANGE = 10;
- static final int DELETE_TEXT = 11;
- static final int ENTER_NOTIFY_EVENT = 12;
- static final int EVENT = 13;
- static final int EVENT_AFTER = 14;
- static final int EXPAND_COLLAPSE_CURSOR_ROW = 15;
- static final int EXPOSE_EVENT = 16;
- static final int FOCUS = 17;
- static final int FOCUS_IN_EVENT = 18;
- static final int FOCUS_OUT_EVENT = 19;
- static final int GRAB_FOCUS = 20;
- static final int HIDE = 21;
- static final int INPUT = 22;
- static final int INSERT_TEXT = 23;
- static final int KEY_PRESS_EVENT = 24;
- static final int KEY_RELEASE_EVENT = 25;
- static final int LEAVE_NOTIFY_EVENT = 26;
- static final int MAP = 27;
- static final int MAP_EVENT = 28;
- static final int MNEMONIC_ACTIVATE = 29;
- static final int MOTION_NOTIFY_EVENT = 30;
- static final int MOVE_FOCUS = 31;
- static final int OUTPUT = 32;
- static final int POPUP_MENU = 33;
- static final int PREEDIT_CHANGED = 34;
- static final int REALIZE = 35;
- static final int ROW_ACTIVATED = 36;
- static final int SCROLL_CHILD = 37;
- static final int SCROLL_EVENT = 38;
- static final int SELECT = 39;
- static final int SHOW = 40;
- static final int SHOW_HELP = 41;
- static final int SIZE_ALLOCATE = 42;
- static final int STYLE_SET = 43;
- static final int SWITCH_PAGE = 44;
- static final int TEST_COLLAPSE_ROW = 45;
- static final int TEST_EXPAND_ROW = 46;
- static final int TOGGLED = 47;
- static final int UNMAP = 48;
- static final int UNMAP_EVENT = 49;
- static final int UNREALIZE = 50;
- static final int VALUE_CHANGED = 51;
- static final int VISIBILITY_NOTIFY_EVENT = 52;
- static final int WINDOW_STATE_EVENT = 53;
+ static final int BUTTON_PRESS_EVENT_INVERSE = 3;
+ static final int BUTTON_RELEASE_EVENT = 4;
+ static final int BUTTON_RELEASE_EVENT_INVERSE = 5;
+ static final int CHANGED = 6;
+ static final int CHANGE_VALUE = 7;
+ static final int CLICKED = 8;
+ static final int COMMIT = 9;
+ static final int CONFIGURE_EVENT = 10;
+ static final int DELETE_EVENT = 11;
+ static final int DELETE_RANGE = 12;
+ static final int DELETE_TEXT = 13;
+ static final int ENTER_NOTIFY_EVENT = 14;
+ static final int EVENT = 15;
+ static final int EVENT_AFTER = 16;
+ static final int EXPAND_COLLAPSE_CURSOR_ROW = 17;
+ static final int EXPOSE_EVENT = 18;
+ static final int EXPOSE_EVENT_INVERSE = 19;
+ static final int FOCUS = 20;
+ static final int FOCUS_IN_EVENT = 21;
+ static final int FOCUS_OUT_EVENT = 22;
+ static final int GRAB_FOCUS = 23;
+ static final int HIDE = 24;
+ static final int INPUT = 25;
+ static final int INSERT_TEXT = 26;
+ static final int KEY_PRESS_EVENT = 27;
+ static final int KEY_RELEASE_EVENT = 28;
+ static final int LEAVE_NOTIFY_EVENT = 29;
+ static final int MAP = 30;
+ static final int MAP_EVENT = 31;
+ static final int MNEMONIC_ACTIVATE = 32;
+ static final int MOTION_NOTIFY_EVENT = 33;
+ static final int MOTION_NOTIFY_EVENT_INVERSE = 34;
+ static final int MOVE_FOCUS = 35;
+ static final int OUTPUT = 36;
+ static final int POPUP_MENU = 37;
+ static final int PREEDIT_CHANGED = 38;
+ static final int REALIZE = 39;
+ static final int ROW_ACTIVATED = 40;
+ static final int SCROLL_CHILD = 41;
+ static final int SCROLL_EVENT = 42;
+ static final int SELECT = 43;
+ static final int SHOW = 44;
+ static final int SHOW_HELP = 45;
+ static final int SIZE_ALLOCATE = 46;
+ static final int STYLE_SET = 47;
+ static final int SWITCH_PAGE = 48;
+ static final int TEST_COLLAPSE_ROW = 49;
+ static final int TEST_EXPAND_ROW = 50;
+ static final int TOGGLED = 51;
+ static final int UNMAP = 52;
+ static final int UNMAP_EVENT = 53;
+ static final int UNREALIZE = 54;
+ static final int VALUE_CHANGED = 55;
+ static final int VISIBILITY_NOTIFY_EVENT = 56;
+ static final int WINDOW_STATE_EVENT = 57;
+ static final int LAST_SIGNAL = 58;
/**
* Prevents uninitialized instances from being created outside the package.
@@ -1368,7 +1373,7 @@ int /*long*/ windowProc (int /*long*/ handle, int /*long*/ user_data) {
int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ user_data) {
switch ((int)/*64*/user_data) {
- case -EXPOSE_EVENT: {
+ case EXPOSE_EVENT_INVERSE: {
GdkEventExpose gdkEvent = new GdkEventExpose ();
OS.memmove (gdkEvent, arg0, GdkEventExpose.sizeof);
int /*long*/ paintWindow = paintWindow();
@@ -1376,9 +1381,9 @@ int /*long*/ windowProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ us
if (window != paintWindow) return 0;
return (state & OBSCURED) != 0 ? 1 : 0;
}
- case -BUTTON_PRESS_EVENT:
- case -BUTTON_RELEASE_EVENT:
- case -MOTION_NOTIFY_EVENT: {
+ case BUTTON_PRESS_EVENT_INVERSE:
+ case BUTTON_RELEASE_EVENT_INVERSE:
+ case MOTION_NOTIFY_EVENT_INVERSE: {
return 1;
}
case BUTTON_PRESS_EVENT: return gtk_button_press_event (handle, arg0);