diff options
author | Silenio Quarti <silenio> | 2002-11-11 17:16:07 +0000 |
---|---|---|
committer | Silenio Quarti <silenio> | 2002-11-11 17:16:07 +0000 |
commit | ea10febb5ae3b0d1b19a13c89b6c7b27ab367f3a (patch) | |
tree | 03ae4c0bcace1c32dfbdf82895dc05a7e9c3f35b | |
parent | 4def951fc85e643080de398e85c25cb30ec79f91 (diff) | |
download | eclipse.platform.swt-ea10febb5ae3b0d1b19a13c89b6c7b27ab367f3a.tar.gz eclipse.platform.swt-ea10febb5ae3b0d1b19a13c89b6c7b27ab367f3a.tar.xz eclipse.platform.swt-ea10febb5ae3b0d1b19a13c89b6c7b27ab367f3a.zip |
callbacks restructure
24 files changed, 1461 insertions, 1384 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 dadf945aa4..446e4c40d3 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 @@ -326,15 +326,13 @@ public String getText () { return text; } -void hookEvents () { - super.hookEvents(); - Display display = getDisplay (); - int windowProc2 = display.windowProc2; - OS.g_signal_connect (handle, OS.clicked, windowProc2, SWT.Selection); +int gtk_clicked (int widget) { + postEvent (SWT.Selection); + return 0; } -int processFocusIn(int int0, int int1, int int2) { - int result = super.processFocusIn (int0, int1, int2); +int gtk_focus_in_event (int widget, int event) { + int result = super.gtk_focus_in_event (widget, event); // widget could be disposed at this point if (handle == 0) return 0; if ((style & SWT.PUSH) != 0 && OS.GTK_WIDGET_HAS_DEFAULT (handle)) { @@ -344,8 +342,8 @@ int processFocusIn(int int0, int int1, int int2) { return result; } -int processFocusOut (int int0, int int1, int int2) { - int result = super.processFocusOut (int0, int1, int2); +int gtk_focus_out_event (int widget, int event) { + int result = super.gtk_focus_out_event (widget, event); // widget could be disposed at this point if (handle == 0) return 0; if ((style & SWT.PUSH) != 0 && !OS.GTK_WIDGET_HAS_DEFAULT (handle)) { @@ -357,9 +355,10 @@ int processFocusOut (int int0, int int1, int int2) { return result; } -int processSelection (int int0, int int1, int int2) { - postEvent(SWT.Selection); - return 0; +void hookEvents () { + super.hookEvents(); + Display display = getDisplay (); + OS.g_signal_connect (handle, OS.clicked, display.windowProc2, CLICKED); } void register () { @@ -536,9 +535,9 @@ public void setImage (Image image) { public void setSelection (boolean selected) { checkWidget(); if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return; - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED); OS.gtk_toggle_button_set_active (handle, selected); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED); } /**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index d3c9a6dd56..37f0fce1a7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -89,23 +89,23 @@ public Caret getCaret () { return caret; } -int processFocusIn (int int0, int int1, int int2) { - int result = super.processFocusIn (int0, int1, int2); - if (caret != null) caret.setFocus (); +int gtk_expose_event (int widget, int event) { + boolean isFocus = caret != null && caret.isFocusCaret (); + if (isFocus) caret.killFocus (); + int result = super.gtk_expose_event (widget, event); + if (isFocus) caret.setFocus (); return result; } -int processFocusOut(int int0, int int1, int int2) { - int result = super.processFocusOut (int0, int1, int2); - if (caret != null) caret.killFocus (); +int gtk_focus_in_event (int widget, int event) { + int result = super.gtk_focus_in_event (widget, event); + if (caret != null) caret.setFocus (); return result; } -int processPaint (int callData, int int1, int int2) { - boolean isFocus = caret != null && caret.isFocusCaret (); - if (isFocus) caret.killFocus (); - int result = super.processPaint (callData, int1, int2); - if (isFocus) caret.setFocus (); +int gtk_focus_out_event (int widget, int event) { + int result = super.gtk_focus_out_event (widget, event); + if (caret != null) caret.killFocus (); return result; } 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 3a8743422e..94758d07e4 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 @@ -391,15 +391,14 @@ boolean hasFocus () { } void hookEvents () { - // TO DO - expose, enter/exit, focus in/out super.hookEvents (); Display display = getDisplay (); int windowProc2 = display.windowProc2; int windowProc3 = display.windowProc3; // TO DO - fix multiple selection events for one user action - OS.g_signal_connect (listHandle, OS.select_child, windowProc3, SWT.Selection); - OS.g_signal_connect_after (entryHandle, OS.changed, windowProc2, SWT.Modify); - OS.g_signal_connect (entryHandle, OS.activate, windowProc2, SWT.DefaultSelection); + OS.g_signal_connect (listHandle, OS.select_child, windowProc3, SELECT_CHILD); + OS.g_signal_connect_after (entryHandle, OS.changed, windowProc2, CHANGED); + OS.g_signal_connect (entryHandle, OS.activate, windowProc2, ACTIVATE); int mask = OS.GDK_POINTER_MOTION_MASK | OS.GDK_BUTTON_PRESS_MASK | OS.GDK_BUTTON_RELEASE_MASK | @@ -409,16 +408,22 @@ void hookEvents () { for (int i=0; i<handles.length; i++) { int handle = handles [i]; OS.gtk_widget_add_events (handle, mask); - OS.g_signal_connect (handle, OS.button_press_event, windowProc3, SWT.MouseDown); - OS.g_signal_connect (handle, OS.button_release_event, windowProc3, SWT.MouseUp); - OS.g_signal_connect (handle, OS.key_press_event, windowProc3, SWT.KeyDown); - OS.g_signal_connect (handle, OS.key_release_event, windowProc3, SWT.KeyUp); - OS.g_signal_connect (handle, OS.motion_notify_event, windowProc3, SWT.MouseMove); - OS.g_signal_connect_after (handle, OS.button_press_event, windowProc3, -SWT.MouseDown); - OS.g_signal_connect_after (handle, OS.button_release_event, windowProc3, -SWT.MouseUp); - OS.g_signal_connect_after (handle, OS.key_press_event, windowProc3, -SWT.KeyDown); - OS.g_signal_connect_after (handle, OS.key_release_event, windowProc3, -SWT.KeyUp); - OS.g_signal_connect_after (handle, OS.motion_notify_event, windowProc3, -SWT.MouseMove); + 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.motion_notify_event, windowProc3, MOTION_NOTIFY_EVENT); + OS.g_signal_connect (handle, OS.key_press_event, windowProc3, KEY_PRESS_EVENT); + OS.g_signal_connect (handle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT); + + /* + * Feature in GTK. Events such as mouse move are propagate up + * the widget hierarchy and are seen by the parent. This is the + * correct GTK behavior but not correct for SWT. The fix is to + * hook a signal after and stop the propagation using a negative + * event number to distinguish this case. + */ + OS.g_signal_connect_after (handle, OS.button_press_event, windowProc3, -BUTTON_PRESS_EVENT); + OS.g_signal_connect_after (handle, OS.button_release_event, windowProc3, -BUTTON_RELEASE_EVENT); + OS.g_signal_connect_after (handle, OS.motion_notify_event, windowProc3, -MOTION_NOTIFY_EVENT); } } @@ -661,6 +666,21 @@ public int getTextLimit () { return limit == 0 ? LIMIT : limit; } +int gtk_activate (int widget) { + postEvent (SWT.DefaultSelection); + return 0; +} + +int gtk_changed (int widget) { + sendEvent (SWT.Modify); + return 0; +} + +int gtk_select_child (int list, int widget) { + postEvent (SWT.Selection); + return 0; +} + /**
* Searches the receiver's list starting at the first item
* (index 0) until an item is found that is equal to the
@@ -733,21 +753,6 @@ int parentingHandle() { return fixedHandle; } -int processDefaultSelection (int int0, int int1, int int2) { - postEvent (SWT.DefaultSelection); - return 0; -} - -int processModify (int arg0, int arg1, int int2) { - sendEvent (SWT.Modify); - return 0; -} - -int processSelection (int int0, int int1, int int2) { - postEvent (SWT.Selection); - return 0; -} - void register () { super.register (); WidgetTable.put (entryHandle, this); @@ -1021,11 +1026,11 @@ void setItems (String [] items, boolean keepText, boolean keepSelection) { OS.memmove (data, buffer, buffer.length); glist = OS.g_list_append (glist, data); } - blockSignal (entryHandle, SWT.Modify); - blockSignal (listHandle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SELECT_CHILD); OS.gtk_combo_set_popdown_strings (handle, glist); - unblockSignal (entryHandle, SWT.Modify); - unblockSignal (listHandle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SELECT_CHILD); if (glist != 0) { int count = OS.g_list_length (glist); for (int i=0; i<count; i++) { @@ -1087,9 +1092,9 @@ public void setText (String string) { checkWidget(); if (string == null) error (SWT.ERROR_NULL_ARGUMENT); byte [] buffer = Converter.wcsToMbcs (null, string, true); - blockSignal (listHandle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SELECT_CHILD); OS.gtk_entry_set_text (entryHandle, buffer); - unblockSignal (listHandle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SELECT_CHILD); } /**
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 58ede2256d..c79100cbd6 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 @@ -282,6 +282,85 @@ public Control [] getTabList () { return new Control [0]; } +int gtk_button_press_event (int widget, int event) { + int result = super.gtk_button_press_event (widget, event); + if ((state & CANVAS) != 0) { + if ((style & SWT.NO_FOCUS) == 0) { + int count = 0; + int list = OS.gtk_container_get_children (handle); + if (list != 0) { + count = OS.g_list_length (list); + OS.g_list_free (list); + } + if (count == 0) OS.gtk_widget_grab_focus (handle); + } + } + return result; +} + +int gtk_expose_event (int widget, int eventPtr) { + if ((state & CANVAS) == 0) { + return super.gtk_expose_event (widget, eventPtr); + } + if ((style & SWT.NO_BACKGROUND) == 0) { + int window = paintWindow (); + int gc = OS.gdk_gc_new (window); + OS.gdk_gc_set_foreground (gc, getBackgroundColor ()); + GdkEventExpose gdkEvent = new GdkEventExpose (); + OS.memmove(gdkEvent, eventPtr, GdkEventExpose.sizeof); + int x = gdkEvent.area_x, y = gdkEvent.area_y; + int width = gdkEvent.area_width, height = gdkEvent.area_height; + OS.gdk_gc_set_clip_region (gc, gdkEvent.region); + OS.gdk_draw_rectangle (window, gc, 1, x, y, width, height); + OS.g_object_unref (gc); + } + if ((style & SWT.NO_MERGE_PAINTS) == 0) { + return super.gtk_expose_event (widget, eventPtr); + } + if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return 0; + GdkEventExpose gdkEvent = new GdkEventExpose (); + OS.memmove(gdkEvent, eventPtr, GdkEventExpose.sizeof); + int [] rectangles = new int [1]; + int [] n_rectangles = new int [1]; + OS.gdk_region_get_rectangles (gdkEvent.region, rectangles, n_rectangles); + GdkRectangle rect = new GdkRectangle (); + for (int i=0; i<n_rectangles[0]; i++) { + Event event = new Event (); + OS.memmove (rect, rectangles [0] + i * GdkRectangle.sizeof, GdkRectangle.sizeof); + event.x = rect.x; + event.y = rect.y; + event.width = rect.width; + event.height = rect.height; + GC gc = event.gc = new GC (this); + gc.setClipping (event.x, event.y, event.width, event.height); + sendEvent (SWT.Paint, event); + gc.dispose (); + event.gc = null; + } + OS.g_free (rectangles [0]); + return 0; +} + +int gtk_focus_in_event (int widget, int event) { + int result = super.gtk_focus_in_event (widget, event); + return (state & CANVAS) != 0 ? 1 : result; +} + +int gtk_focus_out_event (int widget, int event) { + int result = super.gtk_focus_out_event (widget, event); + return (state & CANVAS) != 0 ? 1 : result; +} + +int gtk_key_press_event (int widget, int event) { + int result = super.gtk_key_press_event (widget, event); + return (state & CANVAS) != 0 && result != 1 && hasFocus () ? 1 : result; +} + +int gtk_key_release_event (int widget, int event) { + int result = super.gtk_key_release_event (widget, event); + return (state & CANVAS) != 0 && result != 1 && hasFocus () ? 1 : result; +} + boolean hasBorder () { return (style & SWT.BORDER) != 0; } @@ -427,85 +506,6 @@ int parentingHandle () { return fixedHandle != 0 ? fixedHandle : handle; } -int processFocusIn(int int0, int int1, int int2) { - int result = super.processFocusIn (int0, int1, int2); - return (state & CANVAS) != 0 ? 1 : result; -} - -int processFocusOut(int int0, int int1, int int2) { - int result = super.processFocusOut (int0, int1, int2); - return (state & CANVAS) != 0 ? 1 : result; -} - -int processKeyDown (int int0, int int1, int int2) { - int result = super.processKeyDown (int0, int1, int2); - return (state & CANVAS) != 0 && result != 1 && hasFocus () ? 1 : result; -} - -int processKeyUp (int int0, int int1, int int2) { - int result = super.processKeyUp (int0, int1, int2); - return (state & CANVAS) != 0 && result != 1 && hasFocus () ? 1 : result; -} - -int processMouseDown (int callData, int arg1, int int2) { - int result = super.processMouseDown (callData, arg1, int2); - if ((state & CANVAS) != 0) { - if ((style & SWT.NO_FOCUS) == 0) { - int count = 0; - int list = OS.gtk_container_get_children (handle); - if (list != 0) { - count = OS.g_list_length (list); - OS.g_list_free (list); - } - if (count == 0) OS.gtk_widget_grab_focus (handle); - } - } - return result; -} - -int processPaint (int callData, int int1, int int2) { - if ((state & CANVAS) == 0) { - return super.processPaint (callData, int1, int2); - } - if ((style & SWT.NO_BACKGROUND) == 0) { - int window = paintWindow (); - int gc = OS.gdk_gc_new (window); - OS.gdk_gc_set_foreground (gc, getBackgroundColor ()); - GdkEventExpose gdkEvent = new GdkEventExpose (); - OS.memmove(gdkEvent, callData, GdkEventExpose.sizeof); - int x = gdkEvent.area_x, y = gdkEvent.area_y; - int width = gdkEvent.area_width, height = gdkEvent.area_height; - OS.gdk_gc_set_clip_region (gc, gdkEvent.region); - OS.gdk_draw_rectangle (window, gc, 1, x, y, width, height); - OS.g_object_unref (gc); - } - if ((style & SWT.NO_MERGE_PAINTS) == 0) { - return super.processPaint (callData, int1, int2); - } - if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return 0; - GdkEventExpose gdkEvent = new GdkEventExpose (); - OS.memmove(gdkEvent, callData, GdkEventExpose.sizeof); - int [] rectangles = new int [1]; - int [] n_rectangles = new int [1]; - OS.gdk_region_get_rectangles (gdkEvent.region, rectangles, n_rectangles); - GdkRectangle rect = new GdkRectangle (); - for (int i=0; i<n_rectangles[0]; i++) { - Event event = new Event (); - OS.memmove (rect, rectangles [0] + i * GdkRectangle.sizeof, GdkRectangle.sizeof); - event.x = rect.x; - event.y = rect.y; - event.width = rect.width; - event.height = rect.height; - GC gc = event.gc = new GC (this); - gc.setClipping (event.x, event.y, event.width, event.height); - sendEvent (SWT.Paint, event); - gc.dispose (); - event.gc = null; - } - OS.g_free (rectangles [0]); - return 0; -} - int radioGroup() { if (radioHandle == 0) { radioHandle = OS.gtk_radio_button_new (0); 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 00ac714c54..7a9f45cfae 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 @@ -92,6 +92,7 @@ GdkColor defaultForeground () { void deregister () { super.deregister (); if (fixedHandle != 0) WidgetTable.remove (fixedHandle); + if (imHandle != 0) WidgetTable.remove (imHandle); } int eventHandle () { @@ -107,6 +108,7 @@ boolean hasFocus () { } void hookEvents () { + //TO DO - get rid of enter/exit for mouse crossing border int eventHandle = eventHandle (); int mask = OS.GDK_EXPOSURE_MASK | OS.GDK_POINTER_MOTION_MASK | @@ -118,21 +120,45 @@ void hookEvents () { Display display = getDisplay (); int windowProc2 = display.windowProc2; int windowProc3 = display.windowProc3; - OS.g_signal_connect (eventHandle, OS.popup_menu, windowProc2, SWT.Show); - OS.g_signal_connect (eventHandle, OS.show_help, windowProc3, SWT.Help); - OS.g_signal_connect (eventHandle, OS.button_press_event, windowProc3, SWT.MouseDown); - OS.g_signal_connect (eventHandle, OS.button_release_event, windowProc3, SWT.MouseUp); - OS.g_signal_connect (eventHandle, OS.key_press_event, windowProc3, SWT.KeyDown); - OS.g_signal_connect (eventHandle, OS.key_release_event, windowProc3, SWT.KeyUp); - OS.g_signal_connect (eventHandle, OS.motion_notify_event, windowProc3, SWT.MouseMove); - OS.g_signal_connect (eventHandle, OS.focus_in_event, windowProc3, SWT.FocusIn); - OS.g_signal_connect (eventHandle, OS.focus_out_event, windowProc3, SWT.FocusOut); - OS.g_signal_connect_after (eventHandle, OS.button_press_event, windowProc3, -SWT.MouseDown); - OS.g_signal_connect_after (eventHandle, OS.button_release_event, windowProc3, -SWT.MouseUp); - OS.g_signal_connect_after (eventHandle, OS.motion_notify_event, windowProc3, -SWT.MouseMove); - OS.g_signal_connect_after (eventHandle, OS.enter_notify_event, windowProc3, SWT.MouseEnter); - OS.g_signal_connect_after (eventHandle, OS.leave_notify_event, windowProc3, SWT.MouseExit); - OS.g_signal_connect_after (eventHandle, OS.expose_event, windowProc3, SWT.Paint); + OS.g_signal_connect (eventHandle, OS.popup_menu, windowProc2, POPUP_MENU); + OS.g_signal_connect (eventHandle, OS.show_help, windowProc3, SHOW_HELP); + 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.key_press_event, windowProc3, KEY_PRESS_EVENT); + OS.g_signal_connect (eventHandle, OS.key_release_event, windowProc3, KEY_RELEASE_EVENT); + OS.g_signal_connect (eventHandle, OS.focus_in_event, windowProc3, FOCUS_IN_EVENT); + OS.g_signal_connect (eventHandle, OS.focus_out_event, windowProc3, FOCUS_OUT_EVENT); + OS.g_signal_connect_after (eventHandle, OS.enter_notify_event, windowProc3, ENTER_NOTIFY_EVENT); + OS.g_signal_connect_after (eventHandle, OS.leave_notify_event, windowProc3, LEAVE_NOTIFY_EVENT); + OS.g_signal_connect_after (eventHandle, OS.expose_event, windowProc3, EXPOSE_EVENT); + + /* + * Feature in GTK. Events such as mouse move are propagate up + * the widget hierarchy and are seen by the parent. This is the + * correct GTK behavior but not correct for SWT. The fix is to + * 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); +} + +int hoverProc (int widget) { + Event event = new Event (); + int [] x = new int [1], y = new int [1], mask = new int [1]; + OS.gdk_window_get_pointer (0, x, y, mask); + event.x = x [0]; + event.y = y [0]; + int eventHandle = eventHandle (); + int window = OS.GTK_WIDGET_WINDOW (eventHandle); + OS.gdk_window_get_origin (window, x, y); + event.x -= x [0]; + event.y -= y [0]; + setInputState (event, mask [0]); + postEvent (SWT.MouseHover, event); + return 0; } int topHandle() { @@ -1481,6 +1507,214 @@ public boolean getVisible () { return OS.GTK_WIDGET_VISIBLE (topHandle ()); } +int gtk_button_press_event (int widget, int event) { + Shell shell = _getShell (); + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, event, GdkEventButton.sizeof); + Display display = getDisplay (); + display.dragStartX = (int) gdkEvent.x; + display.dragStartY = (int) gdkEvent.y; + display.dragging = false; + int button = gdkEvent.button; + int type = gdkEvent.type != OS.GDK_2BUTTON_PRESS ? SWT.MouseDown : SWT.MouseDoubleClick; + sendMouseEvent (type, button, event); + if (button == 3 && gdkEvent.type == OS.GDK_BUTTON_PRESS) { + if (menu != null) menu.setVisible (true); + } + + /* + * It is possible that the shell may be + * disposed at this point. If this happens + * don't send the activate and deactivate + * events. + */ + if (!shell.isDisposed ()) { + shell.setActiveControl (this); + } + return 0; +} + +int gtk_button_release_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, event, GdkEventButton.sizeof); + sendMouseEvent (SWT.MouseUp, gdkEvent.button, event); + return 0; +} + +int gtk_commit (int imcontext, int text) { + if (text == 0) return 0; + int length = OS.strlen (text); + if (length == 0) return 0; + byte [] buffer = new byte [length]; + OS.memmove (buffer, text, length); + char [] result = Converter.mbcsToWcs (null, buffer); + int index = 0; + while (index < result.length) { + if (result [index] == 0) break; + Event event = new Event (); + event.character = result [index]; + postEvent (SWT.KeyDown, event); + index++; + } + return 0; +} + +int gtk_enter_notify_event (int widget, int event) { + GdkEventCrossing gdkEvent = new GdkEventCrossing (); + OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof); + if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0; + if (gdkEvent.subwindow != 0) return 0; + sendMouseEvent (SWT.MouseEnter, 0, event); + return 0; +} + +int gtk_expose_event (int widget, int eventPtr) { + if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return 0; + GdkEventExpose gdkEvent = new GdkEventExpose (); + OS.memmove(gdkEvent, eventPtr, GdkEventExpose.sizeof); + Event event = new Event (); + event.count = gdkEvent.count; + event.x = gdkEvent.area_x; + event.y = gdkEvent.area_y; + event.width = gdkEvent.area_width; + event.height = gdkEvent.area_height; + GC gc = event.gc = new GC (this); + Region region = Region.gtk_new (gdkEvent.region); + gc.setClipping (region); + sendEvent (SWT.Paint, event); + gc.dispose (); + event.gc = null; + return 0; +} + +int gtk_focus_in_event (int widget, int event) { + sendEvent (SWT.FocusIn); + // widget could be disposed at this point + if (handle == 0) return 0; + if (hooks (SWT.KeyDown) || hooks (SWT.KeyUp)) { + int imHandle = imHandle (); + if (imHandle != 0) OS.gtk_im_context_focus_in (imHandle); + } + + /* + * It is possible that the shell may be + * disposed at this point. If this happens + * don't send the activate and deactivate + * events. + */ + Shell shell = _getShell (); + if (!shell.isDisposed ()) { + shell.setActiveControl (this); + } + return 0; +} + +int gtk_focus_out_event (int widget, int event) { + sendEvent (SWT.FocusOut); + // widget could be disposed at this point + if (handle == 0) return 0; + if (hooks (SWT.KeyDown) || hooks (SWT.KeyUp)) { + int imHandle = imHandle (); + if (imHandle != 0) OS.gtk_im_context_focus_out (imHandle); + } + + /* + * It is possible that the shell may be + * disposed at this point. If this happens + * don't send the activate and deactivate + * events. + */ + Shell shell = _getShell (); + if (!shell.isDisposed ()) { + Display display = shell.getDisplay (); + Control control = display.getFocusControl (); + if (control == null || shell != control.getShell () ) { + shell.setActiveControl (null); + } + } + return 0; +} + +int gtk_key_press_event (int widget, int event) { + if (!hasFocus ()) return 0; + if (imHandle != 0) { + if (OS.gtk_im_context_filter_keypress (imHandle, event)) return 0; + } + GdkEventKey gdkEvent = new GdkEventKey (); + OS.memmove (gdkEvent, event, GdkEventKey.sizeof); + if (translateTraversal (gdkEvent)) return 1; + // widget could be disposed at this point + if (isDisposed ()) return 0; + sendKeyEvent (SWT.KeyDown, gdkEvent); + return 0; +} + +int gtk_key_release_event (int widget, int event) { + if (!hasFocus ()) return 0; + if (imHandle != 0) { + if (OS.gtk_im_context_filter_keypress (imHandle, event)) return 0; + } + GdkEventKey gdkEvent = new GdkEventKey (); + OS.memmove (gdkEvent, event, GdkEventKey.sizeof); + sendKeyEvent (SWT.KeyUp, gdkEvent); + return 0; +} + +int gtk_leave_notify_event (int widget, int event) { + Display display = getDisplay (); + display.removeMouseHoverTimeout (handle); + GdkEventCrossing gdkEvent = new GdkEventCrossing (); + OS.memmove (gdkEvent, event, GdkEventCrossing.sizeof); + if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0; + if (gdkEvent.subwindow != 0) return 0; + sendMouseEvent (SWT.MouseExit, 0, event); + return 0; +} + +int gtk_motion_notify_event (int widget, int event) { + Display display = getDisplay (); + if (hooks (SWT.DragDetect)) { + if (!display.dragging) { + int [] state = new int [1]; + OS.gdk_event_get_state (event, state); + if ((state [0] & OS.GDK_BUTTON1_MASK) != 0) { + double [] px = new double [1], py = new double [1]; + OS.gdk_event_get_coords (event, px, py); + if (OS.gtk_drag_check_threshold (handle, display.dragStartX, display.dragStartY, (int) px [0], (int) py [0])){ + display.dragging = true; + postEvent (SWT.DragDetect); + } + } + } + } + if (hooks (SWT.MouseHover) || filters (SWT.MouseHover)) { + display.addMouseHoverTimeout (handle); + } + sendMouseEvent (SWT.MouseMove, 0, event); + return 0; +} + +int gtk_popup_menu (int widget) { + if (menu != null) menu.setVisible(true); + return 0; +} + +int gtk_show_help (int widget, int helpType) { + sendHelpEvent (helpType); + return 0; +} + +int imHandle () { + if (imHandle != 0) return imHandle; + imHandle = OS.gtk_im_multicontext_new (); + if (imHandle == 0) error (SWT.ERROR_NO_HANDLES); + OS.gtk_im_context_set_client_window (imHandle, paintWindow ()); + WidgetTable.put (imHandle, this); + Display display = getDisplay (); + OS.g_signal_connect (imHandle, OS.commit, display.windowProc3, COMMIT); + return imHandle; +} + /**
* Invokes platform specific functionality to allocate a new GC handle.
* <p>
@@ -1657,233 +1891,6 @@ Decorations menuShell () { return parent.menuShell (); } -int processHelp (int int0, int int1, int int2) { - sendHelpEvent (int0); - return 0; -} - -int processFocusIn (int int0, int int1, int int2) { - sendEvent (SWT.FocusIn); - // widget could be disposed at this point - if (handle == 0) return 0; - processIMEFocusIn (); - - /* - * It is possible that the shell may be - * disposed at this point. If this happens - * don't send the activate and deactivate - * events. - */ - Shell shell = _getShell (); - if (!shell.isDisposed ()) { - shell.setActiveControl (this); - } - return 0; -} - -int processFocusOut (int int0, int int1, int int2) { - sendEvent (SWT.FocusOut); - // widget could be disposed at this point - if (handle == 0) return 0; - processIMEFocusOut (); - - /* - * It is possible that the shell may be - * disposed at this point. If this happens - * don't send the activate and deactivate - * events. - */ - Shell shell = _getShell (); - if (!shell.isDisposed ()) { - Display display = shell.getDisplay (); - Control control = display.getFocusControl (); - if (control == null || shell != control.getShell () ) { - shell.setActiveControl (null); - } - } - return 0; -} - -int processIMEFocusIn () { - if (!(hooks (SWT.KeyDown) || hooks (SWT.KeyUp))) return 0; - if (imHandle == 0) { - imHandle = OS.gtk_im_multicontext_new (); - if (imHandle == 0) error (SWT.ERROR_NO_HANDLES); - OS.gtk_im_context_set_client_window (imHandle, paintWindow ()); - Display display = getDisplay (); - int keyProc = display.keyProc; - OS.g_signal_connect (imHandle, OS.commit, keyProc, handle); - } - if (imHandle != 0) OS.gtk_im_context_focus_in (imHandle); - return 0; -} - -int processIMEFocusOut () { - if (!(hooks (SWT.KeyDown) || hooks (SWT.KeyUp))) return 0; - if (imHandle != 0) OS.gtk_im_context_focus_out (imHandle); - return 0; -} - -int processIMEKey (int str) { - if (str == 0) return 0; - int length = OS.strlen (str); - if (length == 0) return 0; - byte [] buffer = new byte [length]; - OS.memmove (buffer, str, length); - char [] result = Converter.mbcsToWcs (null, buffer); - int index = 0; - while (index < result.length) { - if (result [index] == 0) break; - Event event = new Event (); - event.character = result [index]; - postEvent (SWT.KeyDown, event); - index++; - } - return 0; -} - -int processKeyDown (int callData, int arg1, int int2) { - if (!hasFocus ()) return 0; - if (imHandle != 0) { - if (OS.gtk_im_context_filter_keypress (imHandle, callData)) return 0; - } - GdkEventKey event = new GdkEventKey (); - OS.memmove (event, callData, GdkEventKey.sizeof); - if (translateTraversal (event)) return 1; - // widget could be disposed at this point - if (isDisposed ()) return 0; - sendKeyEvent (SWT.KeyDown, event); - return 0; -} - -int processKeyUp (int callData, int arg1, int int2) { - if (!hasFocus ()) return 0; - if (imHandle != 0) { - if (OS.gtk_im_context_filter_keypress (imHandle, callData)) return 0; - } - GdkEventKey event = new GdkEventKey (); - OS.memmove (event, callData, GdkEventKey.sizeof); - sendKeyEvent (SWT.KeyUp, event); - return 0; -} - -int processMouseDown (int callData, int arg1, int int2) { - Shell shell = _getShell (); - GdkEventButton gdkEvent = new GdkEventButton (); - OS.memmove (gdkEvent, callData, GdkEventButton.sizeof); - Display display = getDisplay (); - display.dragStartX = (int) gdkEvent.x; - display.dragStartY = (int) gdkEvent.y; - display.dragging = false; - int button = gdkEvent.button; - int type = gdkEvent.type != OS.GDK_2BUTTON_PRESS ? SWT.MouseDown : SWT.MouseDoubleClick; - sendMouseEvent (type, button, callData); - if (button == 3 && gdkEvent.type == OS.GDK_BUTTON_PRESS) { - if (menu != null) menu.setVisible (true); - } - - /* - * It is possible that the shell may be - * disposed at this point. If this happens - * don't send the activate and deactivate - * events. - */ - if (!shell.isDisposed ()) { - shell.setActiveControl (this); - } - return 0; -} - -int processMouseEnter (int callData, int arg1, int int2) { - GdkEventCrossing gdkEvent = new GdkEventCrossing (); - OS.memmove (gdkEvent, callData, GdkEventCrossing.sizeof); - if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0; - if (gdkEvent.subwindow != 0) return 0; - sendMouseEvent (SWT.MouseEnter, 0, callData); - return 0; -} - -int processMouseExit (int callData, int arg1, int int2) { - Display display = getDisplay (); - display.removeMouseHoverTimeout (handle); - GdkEventCrossing gdkEvent = new GdkEventCrossing (); - OS.memmove (gdkEvent, callData, GdkEventCrossing.sizeof); - if (gdkEvent.mode != OS.GDK_CROSSING_NORMAL) return 0; - if (gdkEvent.subwindow != 0) return 0; - sendMouseEvent (SWT.MouseExit, 0, callData); - return 0; -} - -int processMouseHover (int id) { - Event event = new Event (); - int [] x = new int [1], y = new int [1], mask = new int [1]; - OS.gdk_window_get_pointer (0, x, y, mask); - event.x = x [0]; - event.y = y [0]; - int eventHandle = eventHandle (); - int window = OS.GTK_WIDGET_WINDOW (eventHandle); - OS.gdk_window_get_origin (window, x, y); - event.x -= x [0]; - event.y -= y [0]; - setInputState (event, mask [0]); - postEvent (SWT.MouseHover, event); - return 0; -} - -int processMouseUp (int callData, int arg1, int int2) { - GdkEventButton gdkEvent = new GdkEventButton (); - OS.memmove (gdkEvent, callData, GdkEventButton.sizeof); - sendMouseEvent (SWT.MouseUp, gdkEvent.button, callData); - return 0; -} - -int processMouseMove (int callData, int arg1, int int2) { - Display display = getDisplay (); - if (hooks (SWT.DragDetect)) { - if (!display.dragging) { - int [] state = new int [1]; - OS.gdk_event_get_state (callData, state); - if ((state [0] & OS.GDK_BUTTON1_MASK) != 0) { - double [] px = new double [1], py = new double [1]; - OS.gdk_event_get_coords (callData, px, py); - if (OS.gtk_drag_check_threshold (handle, display.dragStartX, display.dragStartY, (int) px [0], (int) py [0])){ - display.dragging = true; - postEvent (SWT.DragDetect); - } - } - } - } - if (hooks (SWT.MouseHover) || filters (SWT.MouseHover)) { - display.addMouseHoverTimeout (handle); - } - sendMouseEvent (SWT.MouseMove, 0, callData); - return 0; -} - -int processPaint (int callData, int int2, int int3) { - if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return 0; - GdkEventExpose gdkEvent = new GdkEventExpose (); - OS.memmove(gdkEvent, callData, GdkEventExpose.sizeof); - Event event = new Event (); - event.count = gdkEvent.count; - event.x = gdkEvent.area_x; - event.y = gdkEvent.area_y; - event.width = gdkEvent.area_width; - event.height = gdkEvent.area_height; - GC gc = event.gc = new GC (this); - Region region = Region.gtk_new (gdkEvent.region); - gc.setClipping (region); - sendEvent (SWT.Paint, event); - gc.dispose (); - event.gc = null; - return 0; -} - -int processShow (int int0, int int1, int int2) { - if (menu != null) menu.setVisible(true); - return 0; -} - void register () { super.register (); if (fixedHandle != 0) WidgetTable.put (fixedHandle, this); @@ -1955,9 +1962,9 @@ void releaseHandle () { void releaseWidget () { Display display = getDisplay (); display.removeMouseHoverTimeout (handle); + super.releaseWidget (); if (imHandle != 0) OS.g_object_unref (imHandle); imHandle = 0; - super.releaseWidget (); toolTipText = null; parent = null; menu = null; 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 88686e6372..4c1063dc79 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 @@ -91,8 +91,8 @@ public class Display extends Device { /* Events Dispatching and Callback */ Event [] eventQueue; - int windowProc2, windowProc3, windowProc4, windowProc5, keyProc; - Callback windowCallback2, windowCallback3, windowCallback4, windowCallback5, keyCallback; + int windowProc2, windowProc3, windowProc4, windowProc5; + Callback windowCallback2, windowCallback3, windowCallback4, windowCallback5; EventTable eventTable, filterTable; /* Sync/Async Widget Communication */ @@ -122,8 +122,8 @@ public class Display extends Device { /* GtkTreeView callbacks */ int[] treeSelection; int treeSelectionLength; - int treeSelectionProc, treeColumnSelectionProc, treeToggleProc; - Callback treeSelectionCallback, treeColumnSelectionCallback, treeToggleCallback; + int treeSelectionProc; + Callback treeSelectionCallback; /* Drag Detect */ int dragStartX,dragStartY; @@ -1115,10 +1115,6 @@ protected void init () { } void initializeCallbacks () { - keyCallback = new Callback (this, "keyProc", 3); - keyProc = keyCallback.getAddress (); - if (keyProc == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); - windowCallback2 = new Callback (this, "windowProc", 2); windowProc2 = windowCallback2.getAddress (); if (windowProc2 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); @@ -1135,33 +1131,25 @@ void initializeCallbacks () { windowProc5 = windowCallback5.getAddress (); if (windowProc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS); - timerCallback = new Callback (this, "timerProc", 2); + timerCallback = new Callback (this, "timerProc", 1); timerProc = timerCallback.getAddress (); if (timerProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); - windowTimerCallback = new Callback (this, "windowTimerProc", 2); + windowTimerCallback = new Callback (this, "windowTimerProc", 1); windowTimerProc = windowTimerCallback.getAddress (); if (windowTimerProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); - mouseHoverCallback = new Callback (this, "mouseHoverProc", 2); + mouseHoverCallback = new Callback (this, "mouseHoverProc", 1); mouseHoverProc = mouseHoverCallback.getAddress (); if (mouseHoverProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); - caretCallback = new Callback(this, "caretProc", 2); + caretCallback = new Callback(this, "caretProc", 1); caretProc = caretCallback.getAddress(); if (caretProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); treeSelectionCallback = new Callback(this, "treeSelectionProc", 4); treeSelectionProc = treeSelectionCallback.getAddress(); if (treeSelectionProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); - - treeColumnSelectionCallback = new Callback(this, "treeColumnSelectionProc", 2); - treeColumnSelectionProc = treeColumnSelectionCallback.getAddress(); - if (treeColumnSelectionProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); - - treeToggleCallback = new Callback(this, "treeToggleProc", 3); - treeToggleProc = treeToggleCallback.getAddress(); - if (treeToggleProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); } /**
@@ -1215,10 +1203,10 @@ boolean isValidThread () { return thread == Thread.currentThread (); } -int mouseHoverProc (int handle, int id) { +int mouseHoverProc (int handle) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processMouseHover (id); + return widget.hoverProc (handle); } void postEvent (Event event) { @@ -1322,7 +1310,6 @@ protected void release () { } void releaseDisplay () { - keyCallback.dispose (); keyCallback = null; windowCallback2.dispose (); windowCallback2 = null; windowCallback3.dispose (); windowCallback3 = null; windowCallback4.dispose (); windowCallback4 = null; @@ -1331,10 +1318,6 @@ void releaseDisplay () { /* Dispose GtkTreeView callbacks */ treeSelectionCallback.dispose (); treeSelectionCallback = null; treeSelectionProc = 0; - treeColumnSelectionCallback.dispose (); treeColumnSelectionCallback = null; - treeColumnSelectionProc = 0; - treeToggleCallback.dispose (); treeToggleCallback = null; - treeToggleProc = 0; /* Dispose the caret callback */ if (caretId != 0) OS.gtk_timeout_remove (caretId); @@ -1364,7 +1347,7 @@ void releaseDisplay () { mouseHoverCallback = null; thread = null; - windowProc2 = windowProc3 = windowProc4 = windowProc5 = keyProc = 0; + windowProc2 = windowProc3 = windowProc4 = windowProc5 = 0; /* Dispose the default font */ if (defaultFont != 0) OS.pango_font_description_free (defaultFont); @@ -1706,7 +1689,7 @@ public void timerExec (int milliseconds, Runnable runnable) { } } -int timerProc (int index, int id) { +int timerProc (int index) { if (timerList == null) return 0; if (0 <= index && index < timerList.length) { Runnable runnable = timerList [index]; @@ -1717,7 +1700,7 @@ int timerProc (int index, int id) { return 0; } -int caretProc (int clientData, int id) { +int caretProc (int clientData) { caretId = 0; if (currentCaret == null) { return 0; @@ -1731,22 +1714,10 @@ int caretProc (int clientData, int id) { return 0; } -int treeColumnSelectionProc (int column, int data) { - Widget widget = WidgetTable.get (data); - if (widget == null) return 0; - return widget.processTreeColumnSelection (column); -} - int treeSelectionProc (int model, int path, int iter, int data) { Widget widget = WidgetTable.get (data); if (widget == null) return 0; - return widget.processTreeSelection (model, path, iter, treeSelection, treeSelectionLength++); -} - -int treeToggleProc (int renderer, int arg1, int data) { - Widget widget = WidgetTable.get (data); - if (widget == null) return 0; - return widget.processTreeToggle (renderer, arg1); + return widget.treeSelectionProc (model, path, iter, treeSelection, treeSelectionLength++); } void sendEvent (int eventType, Event event) { @@ -1832,40 +1803,34 @@ public void wake () { if (thread == Thread.currentThread ()) return; } -int keyProc (int handle, int int0, int user_data) { - Widget widget = WidgetTable.get (user_data); - if (widget == null) return 0; - return widget.processIMEKey (int0); -} - int windowProc (int handle, int user_data) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processEvent (user_data, 0, 0, 0); + return widget.windowProc (handle, user_data); } -int windowProc (int handle, int int0, int user_data) { +int windowProc (int handle, int arg0, int user_data) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processEvent (user_data, int0, 0, 0); + return widget.windowProc (handle, arg0, user_data); } -int windowProc (int handle, int int0, int int1, int user_data) { +int windowProc (int handle, int arg0, int arg1, int user_data) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processEvent (user_data, int0, int1, 0); + return widget.windowProc (handle, arg0, arg1, user_data); } -int windowProc (int handle, int int0, int int1, int int2, int user_data) { +int windowProc (int handle, int arg0, int arg1, int arg2, int user_data) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processEvent (user_data, int0, int1, int2); + return widget.windowProc (handle, arg0, arg1, arg2, user_data); } -int windowTimerProc (int handle, int id) { +int windowTimerProc (int handle) { Widget widget = WidgetTable.get (handle); if (widget == null) return 0; - return widget.processTimer (id); + return widget.timerProc (handle); } } 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 19a94798ce..3703f3ce83 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 @@ -259,16 +259,7 @@ public String getText () { return text; } -void hookEvents () { - super.hookEvents(); - if (labelHandle != 0) { - Display display = getDisplay (); - int windowProc3 = display.windowProc3; - OS.g_signal_connect (labelHandle, OS.mnemonic_activate, windowProc3, SWT.Activate); - } -} - -int processActivate (int int0, int int1, int int2) { +int gtk_mnemonic_activate (int widget, int arg1) { Composite control = this.parent; while (control != null) { Control [] children = control._getChildren (); @@ -286,6 +277,14 @@ int processActivate (int int0, int int1, int int2) { return 1; } +void hookEvents () { + super.hookEvents(); + if (labelHandle != 0) { + Display display = getDisplay (); + OS.g_signal_connect (labelHandle, OS.mnemonic_activate, display.windowProc3, MNEMONIC_ACTIVATE); + } +} + void register () { super.register (); if (frameHandle != 0) WidgetTable.put (frameHandle, this); 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 f5f9291a2b..1fe952e393 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 @@ -252,11 +252,11 @@ public void deselect (int index) { checkWidget(); if (!(0 <= index && index < OS.gtk_tree_model_iter_n_children (modelHandle, 0))) return; int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_unselect_iter (selection, iter); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -281,13 +281,13 @@ public void deselect (int start, int end) { start = Math.min (count - 1, Math.max (0, start)); end = Math.min (count - 1, Math.max (0, end)); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int index=start; index<=end; index++) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_unselect_iter (selection, iter); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -313,7 +313,7 @@ public void deselect (int [] indices) { if (indices == null) error (SWT.ERROR_NULL_ARGUMENT); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); int count = OS.gtk_tree_model_iter_n_children (modelHandle, 0); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int i=0; i<indices.length; i++) { int index = indices [i]; @@ -321,7 +321,7 @@ public void deselect (int [] indices) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_unselect_iter (selection, iter); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -335,10 +335,10 @@ public void deselect (int [] indices) { */ public void deselectAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_unselect_all (selection); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } GdkColor getBackgroundColor () { @@ -627,13 +627,44 @@ public int getTopIndex () { return index [0]; } +int gtk_changed (int widget) { + postEvent (SWT.Selection); + return 0; +} + +int gtk_key_press_event (int widget, int eventPtr) { + int result = super.gtk_key_press_event (widget, eventPtr); + if (result != 0) return result; + + /* + * Feature in GTK. When an item is default selected using + * the return key, GTK does not issue notification. The fix is + * to issue this notification when the return key is pressed. + */ + GdkEventKey keyEvent = new GdkEventKey (); + OS.memmove (keyEvent, eventPtr, GdkEventKey.sizeof); + int key = keyEvent.keyval; + switch (key) { + case OS.GDK_Return: + case OS.GDK_KP_Enter: { + postEvent (SWT.DefaultSelection); + break; + } + } + return result; +} + +int gtk_row_activated (int tree, int path, int column) { + postEvent (SWT.DefaultSelection); + return 0; +} + void hookEvents () { - //TO DO - get rid of enter/exit for mouse crossing border super.hookEvents(); Display display = getDisplay (); int selection = OS.gtk_tree_view_get_selection(handle); - OS.g_signal_connect (selection, OS.changed, display.windowProc2, SWT.Selection); - OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, SWT.DefaultSelection); + OS.g_signal_connect (selection, OS.changed, display.windowProc2, CHANGED); + OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED); } /**
@@ -720,50 +751,6 @@ int paintWindow () { return OS.gtk_tree_view_get_bin_window (handle); } -int processDefaultSelection (int int0, int int1, int int2) { - postEvent (SWT.DefaultSelection); - return 0; -} - -int processKeyDown (int callData, int arg1, int int2) { - int result = super.processKeyDown (callData, arg1, int2); - if (result != 0) return result; - - /* - * Feature in GTK. When an item is default selected using - * the return key, GTK does not issue notification. The fix is - * to issue this notification when the return key is pressed. - */ - GdkEventKey keyEvent = new GdkEventKey (); - OS.memmove (keyEvent, callData, GdkEventKey.sizeof); - int key = keyEvent.keyval; - switch (key) { - case OS.GDK_Return: - case OS.GDK_KP_Enter: { - postEvent (SWT.DefaultSelection); - break; - } - } - return result; -} - -int processSelection (int int0, int int1, int int2) { - postEvent (SWT.Selection); - return 0; -} - -int processTreeSelection (int model, int path, int iter, int[] selection, int length) { - if (selection != null) { - int indices = OS.gtk_tree_path_get_indices (path); - if (indices != 0) { - int [] index = new int [1]; - OS.memmove (index, indices, 4); - selection [length] = index [0]; - } - } - return 0; -} - void register () { super.register (); WidgetTable.put (OS.gtk_tree_view_get_selection (handle), this); @@ -799,9 +786,9 @@ public void remove (int index) { } int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_list_store_remove (modelHandle, iter); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -831,12 +818,12 @@ public void remove (int start, int end) { error (SWT.ERROR_INVALID_RANGE); } int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); for (int index=start; index<=end; index++) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_list_store_remove (modelHandle, iter); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -890,7 +877,7 @@ public void remove (int [] indices) { System.arraycopy (indices, 0, newIndices, 0, indices.length); sort (newIndices); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int last = -1; for (int i=0; i<newIndices.length; i++) { int index = newIndices [i]; @@ -900,7 +887,7 @@ public void remove (int [] indices) { last = index; } } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -914,9 +901,9 @@ public void remove (int [] indices) { */ public void removeAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_list_store_clear (modelHandle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /**
@@ -960,11 +947,11 @@ public void select (int index) { checkWidget(); if (!(0 <= index && index < OS.gtk_tree_model_iter_n_children (modelHandle, 0))) return; int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_select_iter (selection, iter); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -988,13 +975,13 @@ public void select (int start, int end) { start = Math.min (count - 1, Math.max (0, start)); end = Math.min (count - 1, Math.max (0, end)); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int index=start; index<=end; index++) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_select_iter (selection, iter); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -1020,7 +1007,7 @@ public void select (int [] indices) { if (indices == null) error (SWT.ERROR_NULL_ARGUMENT); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); int count = OS.gtk_tree_model_iter_n_children (modelHandle, 0); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int i=0; i<indices.length; i++) { int index = indices [i]; @@ -1028,7 +1015,7 @@ public void select (int [] indices) { OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index); OS.gtk_tree_selection_select_iter (selection, iter); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (iter); } @@ -1042,10 +1029,10 @@ public void select (int [] indices) { */ public void selectAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_select_all (selection); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } void setBackgroundColor (GdkColor color) { @@ -1109,9 +1096,9 @@ public void setItem (int index, String string) { public void setItems (String [] items) { checkWidget(); if (items == null) error (SWT.ERROR_NULL_ARGUMENT); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_list_store_clear (modelHandle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); if (iter == 0) error (SWT.ERROR_ITEM_NOT_ADDED); for (int i=0; i<items.length; i++) { @@ -1285,4 +1272,16 @@ public void showSelection () { OS.g_free (iter); } +int treeSelectionProc (int model, int path, int iter, int[] selection, int length) { + if (selection != null) { + int indices = OS.gtk_tree_path_get_indices (path); + if (indices != 0) { + int [] index = new int [1]; + OS.memmove (index, indices, 4); + selection [length] = index [0]; + } + } + return 0; +} + } 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 8c6885dc71..3eb997483e 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 @@ -450,14 +450,30 @@ int GtkMenuPositionFunc (int menu, int x, int y, int push_in, int user_data) { return 0;
}
+int gtk_hide (int widget) {
+ sendEvent (SWT.Hide);
+ return 0;
+}
+
+int gtk_show (int widget) {
+ if ((style & SWT.POP_UP) != 0) return 0;
+ sendEvent (SWT.Show);
+ return 0;
+}
+
+int gtk_show_help (int widget, int helpType) {
+ if (sendHelpEvent (helpType)) OS.gtk_menu_shell_deactivate (handle);
+ return 0;
+}
+
void hookEvents () {
super.hookEvents ();
Display display = getDisplay ();
int windowProc2 = display.windowProc2;
int windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.show, windowProc2, SWT.Show);
- OS.g_signal_connect (handle, OS.hide, windowProc2, SWT.Hide);
- OS.g_signal_connect (handle, OS.show_help, windowProc3, SWT.Help);
+ 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);
}
/** @@ -526,22 +542,6 @@ public boolean isVisible () { return getVisible ();
}
-int processHelp (int int0, int int1, int int2) {
- if (sendHelpEvent (int0)) OS.gtk_menu_shell_deactivate (handle);
- return 0;
-}
-
-int processHide (int int0, int int1, int int2) {
- sendEvent (SWT.Hide);
- return 0;
-}
-
-int processShow (int int0, int int1, int int2) {
- if ((style & SWT.POP_UP) != 0) return 0;
- sendEvent (SWT.Show);
- return 0;
-}
-
void releaseChild () {
super.releaseChild ();
if (cascade != null) cascade.setMenu (null);
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 545d2bd911..4b69ad15a2 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 @@ -348,53 +348,7 @@ public boolean getSelection () { return OS.gtk_check_menu_item_get_active(handle);
}
-void hookEvents () {
- super.hookEvents ();
- Display display = getDisplay ();
- int windowProc2 = display.windowProc2;
- int windowProc3 = display.windowProc3;
- OS.g_signal_connect (handle, OS.activate, windowProc2, SWT.Selection);
- OS.g_signal_connect (handle, OS.select, windowProc2, SWT.Arm);
- OS.g_signal_connect (handle, OS.show_help, windowProc3, SWT.Help);
-}
-
-/**
- * Returns <code>true</code> if the receiver is enabled and all
- * of the receiver's ancestors are enabled, and <code>false</code>
- * otherwise. A disabled control is typically not selectable from the
- * user interface and draws with an inactive or "grayed" look.
- *
- * @return the receiver's enabled state
- *
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see #getEnabled
- */ -public boolean isEnabled () {
- return getEnabled ();
-}
-
-int processArm (int int0, int int1, int int2) {
- parent.selectedItem = this;
- postEvent (SWT.Arm);
- return 0;
-}
-
-int processHelp (int int0, int int1, int int2) {
- boolean hooks = hooks (SWT.Help);
- if (hooks) {
- postEvent (SWT.Help);
- } else {
- hooks = parent.sendHelpEvent (int0);
- }
- if (hooks) OS.gtk_menu_shell_deactivate (parent.handle);
- return 0;
-}
-
-int processSelection (int int0, int int1, int int2) {
+int gtk_activate (int widget) {
if ((style & SWT.CASCADE) != 0 && menu != null) return 0;
Event event = new Event ();
int ptr = OS.gtk_get_current_event ();
@@ -424,6 +378,52 @@ int processSelection (int int0, int int1, int int2) { return 0;
}
+int gtk_select (int item) {
+ parent.selectedItem = this;
+ postEvent (SWT.Arm);
+ return 0;
+}
+
+int gtk_show_help (int widget, int helpType) {
+ boolean hooks = hooks (SWT.Help);
+ if (hooks) {
+ postEvent (SWT.Help);
+ } else {
+ hooks = parent.sendHelpEvent (helpType);
+ }
+ if (hooks) OS.gtk_menu_shell_deactivate (parent.handle);
+ return 0;
+}
+
+void hookEvents () {
+ super.hookEvents ();
+ Display display = getDisplay ();
+ int windowProc2 = display.windowProc2;
+ int 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);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled control is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getEnabled
+ */ +public boolean isEnabled () {
+ return getEnabled ();
+}
+
void releaseChild () {
super.releaseChild ();
if (menu != null) {
@@ -683,9 +683,9 @@ boolean setRadioSelection (boolean value) { public void setSelection (boolean selected) {
checkWidget();
if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
- blockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ACTIVATE);
OS.gtk_check_menu_item_set_active (handle, selected);
- unblockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ACTIVATE);
}
public void setText (String string) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java index 4ead9346de..b40ee9116a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java @@ -134,13 +134,6 @@ public int getSelection () { return value; } -int processTimer (int id) { - OS.gtk_progress_bar_pulse (handle); - Display display = getDisplay (); - timerId = OS.gtk_timeout_add (DELAY, display.windowTimerProc, handle); - return 0; -} - void releaseWidget () { super.releaseWidget (); if (timerId != 0) OS.gtk_timeout_remove (timerId); @@ -210,6 +203,11 @@ public void setSelection (int x) { updateBar (value, min, max); } +int timerProc (int widget) { + OS.gtk_progress_bar_pulse (handle); + return 1; +} + void updateBar (int selection, int minimum, int maximum) { double fraction = minimum == maximum ? 1 : (double)(selection - minimum) / (maximum - minimum); OS.gtk_progress_bar_set_fraction (handle, fraction); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java index 936b9098cb..e45c8c6def 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java @@ -151,27 +151,29 @@ void drawBand (int x, int y, int width, int height) { OS.g_object_unref (gc); } -int processMouseDown (int callData, int int1, int int2) { - super.processMouseDown (callData, int1, int2); +int gtk_button_press_event (int widget, int eventPtr) { + int result = super.gtk_button_press_event (widget, eventPtr); GdkEventButton gdkEvent = new GdkEventButton (); - OS.memmove (gdkEvent, callData, GdkEventButton.sizeof); + OS.memmove (gdkEvent, eventPtr, GdkEventButton.sizeof); int button = gdkEvent.button; if (button != 1) return 0; - double[] px = new double [1], py = new double [1]; - OS.gdk_event_get_coords (callData, px, py); - startX = (int)px [0]; startY = (int) py [0]; + startX = (int) gdkEvent.x; + startY = (int) gdkEvent.y; int border = 0; int x = OS.GTK_WIDGET_X (handle); int y = OS.GTK_WIDGET_Y (handle); int width = OS.GTK_WIDGET_WIDTH (handle); int height = OS.GTK_WIDGET_HEIGHT (handle); - lastX = x - border; lastY = y - border; + lastX = x - border; + lastY = y - border; /* The event must be sent because its doit flag is used. */ Event event = new Event (); event.detail = SWT.DRAG; - event.time = OS.gdk_event_get_time (callData); - event.x = lastX; event.y = lastY; - event.width = width; event.height = height; + event.time = gdkEvent.time; + event.x = lastX; + event.y = lastY; + event.width = width; + event.height = height; /* * It is possible (but unlikely) that client code could have disposed * the widget in the selection event. If this happens end the processing @@ -184,13 +186,36 @@ int processMouseDown (int callData, int int1, int int2) { // OS.XmUpdateDisplay (handle); drawBand (lastX = event.x, lastY = event.y, width, height); } - return 0; + return result; +} + +int gtk_button_release_event (int widget, int eventPtr) { + int result = super.gtk_button_release_event (widget, eventPtr); + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, eventPtr, GdkEventButton.sizeof); + int button = gdkEvent.button; + if (button != 1) return 0; + if (!dragging) return 0; + dragging = false; + int width = OS.GTK_WIDGET_WIDTH (handle); + int height = OS.GTK_WIDGET_HEIGHT (handle); + /* The event must be sent because its doit flag is used. */ + Event event = new Event (); + event.time = gdkEvent.time; + event.x = lastX; + event.y = lastY; + event.width = width; + event.height = height; + drawBand (lastX, lastY, width, height); + sendEvent (SWT.Selection, event); + /* widget could be disposed here */ + return result; } -int processMouseMove (int callData, int int1, int int2) { - super.processMouseMove (callData, int1, int2); +int gtk_motion_notify_event (int widget, int eventPtr) { + int result = super.gtk_motion_notify_event (widget, eventPtr); int [] state = new int [1]; - OS.gdk_event_get_state (callData, state); + OS.gdk_event_get_state (eventPtr, state); if (!dragging || (state [0] & OS.GDK_BUTTON1_MASK) == 0) return 0; int x = OS.GTK_WIDGET_X (handle); int y = OS.GTK_WIDGET_Y (handle); @@ -200,7 +225,7 @@ int processMouseMove (int callData, int int1, int int2) { int parentWidth = OS.GTK_WIDGET_WIDTH (parent.handle); int parentHeight = OS.GTK_WIDGET_WIDTH (parent.handle); double[] px = new double [1], py = new double [1]; - OS.gdk_event_get_coords (callData, px, py); + OS.gdk_event_get_coords (eventPtr, px, py); int newX = lastX, newY = lastY; if ((style & SWT.VERTICAL) != 0) { newX = Math.min (Math.max (0, (int)px [0] + x - startX - parentBorder), parentWidth - width); @@ -212,7 +237,7 @@ int processMouseMove (int callData, int int1, int int2) { /* The event must be sent because its doit flag is used. */ Event event = new Event (); event.detail = SWT.DRAG; - event.time = OS.gdk_event_get_time (callData); + event.time = OS.gdk_event_get_time (eventPtr); event.x = newX; event.y = newY; event.width = width; event.height = height; /* @@ -227,28 +252,7 @@ int processMouseMove (int callData, int int1, int int2) { // OS.XmUpdateDisplay (handle); drawBand (lastX, lastY, width, height); } - return 0; -} - -int processMouseUp (int callData, int int1, int int2) { - super.processMouseUp (callData, int1, int2); - GdkEventButton gdkEvent = new GdkEventButton (); - OS.memmove (gdkEvent, callData, GdkEventButton.sizeof); - int button = gdkEvent.button; - if (button != 1) return 0; - if (!dragging) return 0; - dragging = false; - int width = OS.GTK_WIDGET_WIDTH (handle); - int height = OS.GTK_WIDGET_HEIGHT (handle); - /* The event must be sent because its doit flag is used. */ - Event event = new Event (); - event.time = OS.gdk_event_get_time (callData); - event.x = lastX; event.y = lastY; - event.width = width; event.height = height; - drawBand (lastX, lastY, width, height); - sendEvent (SWT.Selection, event); - /* widget could be disposed here */ - return 0; + return result; } void releaseWidget () { 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 c179dc40d5..13c111406d 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 @@ -132,9 +132,8 @@ void createHandle (int index) { void hookEvents () { super.hookEvents (); Display display = getDisplay (); - int windowProc2 = display.windowProc2; int hAdjustment = OS.gtk_range_get_adjustment (handle); - OS.g_signal_connect (hAdjustment, OS.value_changed, windowProc2, SWT.Selection); + OS.g_signal_connect (hAdjustment, OS.value_changed, display.windowProc2, VALUE_CHANGED); } void register () { @@ -147,11 +146,6 @@ void deregister () { super.deregister (); int hAdjustment = OS.gtk_range_get_adjustment (handle); WidgetTable.remove (hAdjustment); - /* - * This code is intentionally commented. - */ -// OS.gtk_object_unref (hAdjustment); -// OS.gtk_object_destroy (hAdjustment); } /** @@ -248,7 +242,7 @@ public int getSelection () { return (int) adjustment.value; } -int processSelection (int int0, int int1, int int2) { +int gtk_value_changed (int adjustment) { postEvent (SWT.Selection); return 0; } @@ -299,9 +293,9 @@ public void setIncrement (int value) { OS.memmove (adjustment, hAdjustment); adjustment.step_increment = (float) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -324,9 +318,9 @@ public void setMaximum (int value) { OS.memmove (adjustment, hAdjustment); adjustment.upper = (float) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -349,9 +343,9 @@ public void setMinimum (int value) { OS.memmove (adjustment, hAdjustment); adjustment.lower = (float) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -375,9 +369,9 @@ public void setPageIncrement (int value) { OS.memmove (adjustment, hAdjustment); adjustment.page_increment = (float) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -396,9 +390,9 @@ public void setSelection (int value) { checkWidget(); if (value < 0) return; int hAdjustment = OS.gtk_range_get_adjustment (handle); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_set_value (hAdjustment, value); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } } 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 07d126c27d..b49ec2d0e6 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 @@ -346,11 +346,15 @@ public boolean getVisible () { } } +int gtk_value_changed (int adjustment) { + postEvent (SWT.Selection); + return 0; +} + void hookEvents () { super.hookEvents (); Display display = getDisplay (); - int windowProc2 = display.windowProc2; - OS.g_signal_connect (handle, OS.value_changed, windowProc2, SWT.Selection); + OS.g_signal_connect (handle, OS.value_changed, display.windowProc2, VALUE_CHANGED); } /** @@ -392,11 +396,6 @@ public boolean isVisible () { return getVisible () && getParent ().isVisible (); } -int processSelection (int int0, int int1, int int2) { - postEvent (SWT.Selection); - return 0; -} - void releaseChild () { super.releaseChild (); if (parent.horizontalBar == this) parent.horizontalBar = null; @@ -477,9 +476,9 @@ public void setIncrement (int value) { OS.memmove (adjustment, handle); adjustment.step_increment = (float) value; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -501,9 +500,9 @@ public void setMaximum (int value) { OS.memmove (adjustment, handle); adjustment.upper = (float) value; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -525,9 +524,9 @@ public void setMinimum (int value) { OS.memmove (adjustment, handle); adjustment.lower = (float) value; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -550,9 +549,9 @@ public void setPageIncrement (int value) { OS.memmove (adjustment, handle); adjustment.page_increment = (float) value; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -570,9 +569,9 @@ public void setPageIncrement (int value) { public void setSelection (int value) { checkWidget (); if (value < 0) return; - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_set_value (handle, value); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -596,9 +595,9 @@ public void setThumb (int value) { OS.memmove (adjustment, handle); adjustment.page_size = (float) value; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -640,10 +639,10 @@ public void setValues (int selection, int minimum, int maximum, int thumb, int i adjustment.page_size = thumb; adjustment.value = selection; OS.memmove (handle, adjustment); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (handle); OS.gtk_adjustment_value_changed (handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** 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 4be8b0f803..f79c88641a 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 @@ -495,12 +495,12 @@ void hookEvents () { super.hookEvents (); Display display = getDisplay (); int windowProc3 = display.windowProc3; - OS.g_signal_connect (shellHandle, OS.map_event, windowProc3, SWT.Deiconify); - OS.g_signal_connect (shellHandle, OS.unmap_event, windowProc3, SWT.Iconify); - OS.g_signal_connect (shellHandle, OS.size_allocate, windowProc3, SWT.Resize); - OS.g_signal_connect (shellHandle, OS.configure_event, windowProc3, SWT.Move); - OS.g_signal_connect (shellHandle, OS.delete_event, windowProc3, SWT.Dispose); - OS.g_signal_connect (shellHandle, OS.event_after, windowProc3, SWT.Activate); + 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.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.event_after, windowProc3, EVENT_AFTER); } public boolean isVisible () { @@ -619,76 +619,41 @@ public Shell [] getShells () { return result; } -/** - * Moves the receiver to the top of the drawing order for - * the display on which it was created (so that all other - * shells on that display, which are not the receiver's - * children will be drawn behind it), marks it visible, - * and sets focus to its default button (if it has one) - * and asks the window manager to make the shell active. - * - * @exception SWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @see Control#moveAbove - * @see Control#setFocus - * @see Control#setVisible - * @see Display#getActiveShell - * @see Decorations#setDefaultButton - * @see Shell#setActive - * @see Shell#forceActive -*/ -public void open () { - checkWidget (); - setVisible (true); - bringToTop (false); - int focusHandle = OS.gtk_window_get_focus (shellHandle); - if (focusHandle == 0 || focusHandle == handle) traverseGroup (true); -} - -int processDeiconify (int int0, int int1, int int2) { - minimized = false; - sendEvent (SWT.Deiconify); +int gtk_configure_event (int widget, int event) { + int [] x = new int [1], y = new int [1]; + OS.gtk_window_get_position (shellHandle, x, y); + if (oldX != x [0] || oldY != y [0]) { + oldX = x [0]; + oldY = y [0]; + sendEvent (SWT.Move); + } return 0; } -int processDispose (int int0, int int1, int int2) { +int gtk_delete_event (int widget, int event) { closeWidget (); return 1; } -int processActivate (int int0, int int1, int int2) { +int gtk_event_after (int widget, int event) { GdkEvent gdkEvent = new GdkEvent (); - OS.memmove (gdkEvent, int0, GdkEvent.sizeof); + OS.memmove (gdkEvent, event, GdkEvent.sizeof); if (gdkEvent.type == OS.GDK_FOCUS_CHANGE) { GdkEventFocus focusEvent = new GdkEventFocus (); - OS.memmove (focusEvent, int0, GdkEventFocus.sizeof); + OS.memmove (focusEvent, event, GdkEventFocus.sizeof); hasFocus = focusEvent.in != 0; postEvent (hasFocus ? SWT.Activate : SWT.Deactivate); } return 0; } -int processIconify (int int0, int int1, int int2) { - minimized = true; - sendEvent (SWT.Iconify); - return 0; -} - -int processMove (int int0, int int1, int int2) { - int [] x = new int [1], y = new int [1]; - OS.gtk_window_get_position (shellHandle, x, y); - if (oldX != x [0] || oldY != y [0]) { - oldX = x [0]; - oldY = y [0]; - sendEvent (SWT.Move); - } +int gtk_map_event (int widget, int event) { + minimized = false; + sendEvent (SWT.Deiconify); return 0; } -int processResize (int int0, int int1, int int2) { +int gtk_size_allocate (int widget, int allocation) { int [] width = new int [1], height = new int [1]; OS.gtk_window_get_size (shellHandle, width, height); if (oldWidth != width [0] || oldHeight != height [0]) { @@ -699,6 +664,41 @@ int processResize (int int0, int int1, int int2) { return 0; } +int gtk_unmap_event (int widget, int event) { + minimized = true; + sendEvent (SWT.Iconify); + return 0; +} + +/** + * Moves the receiver to the top of the drawing order for + * the display on which it was created (so that all other + * shells on that display, which are not the receiver's + * children will be drawn behind it), marks it visible, + * and sets focus to its default button (if it has one) + * and asks the window manager to make the shell active. + * + * @exception SWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * </ul> + * + * @see Control#moveAbove + * @see Control#setFocus + * @see Control#setVisible + * @see Display#getActiveShell + * @see Decorations#setDefaultButton + * @see Shell#setActive + * @see Shell#forceActive +*/ +public void open () { + checkWidget (); + setVisible (true); + bringToTop (false); + int focusHandle = OS.gtk_window_get_focus (shellHandle); + if (focusHandle == 0 || focusHandle == handle) traverseGroup (true); +} + /** * Removes the listener from the collection of listeners who will * be notified when operations are performed on the receiver. 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 5cea91393c..dc7634fa0b 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 @@ -159,12 +159,16 @@ void createHandle (int index) { OS.gtk_widget_show (handle); } +int gtk_value_changed (int adjustment) { + postEvent (SWT.Selection); + return 0; +} + void hookEvents () { super.hookEvents (); Display display = getDisplay (); - int windowProc2 = display.windowProc2; int hAdjustment = OS.gtk_range_get_adjustment (handle); - OS.g_signal_connect (hAdjustment, OS.value_changed, windowProc2, SWT.Selection); + OS.g_signal_connect (hAdjustment, OS.value_changed, display.windowProc2, VALUE_CHANGED); } void register () { @@ -177,11 +181,6 @@ void deregister () { super.deregister (); int hAdjustment = OS.gtk_range_get_adjustment (handle); WidgetTable.remove (hAdjustment); - /* - * This code is intentionally commented. - */ -// OS.gtk_object_unref (hAdjustment); -// OS.gtk_object_destroy (hAdjustment); } public Point computeSize (int wHint, int hHint, boolean changed) { @@ -308,11 +307,6 @@ public int getThumb () { return (int) adjustment.page_size; } -int processSelection (int int0, int int1, int int2) { - postEvent (SWT.Selection); - return 0; -} - /** * Removes the listener from the collection of listeners who will * be notified when the receiver's value changes. @@ -359,9 +353,9 @@ public void setIncrement (int value) { OS.memmove (adjustment, hAdjustment); adjustment.step_increment = (double) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -384,9 +378,9 @@ public void setMaximum (int value) { OS.memmove (adjustment, hAdjustment); adjustment.upper = (double) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -409,9 +403,9 @@ public void setMinimum (int value) { OS.memmove (adjustment, hAdjustment); adjustment.lower = (double) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -435,9 +429,9 @@ public void setPageIncrement (int value) { OS.memmove (adjustment, hAdjustment); adjustment.page_increment = (double) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -456,9 +450,9 @@ public void setSelection (int value) { checkWidget (); if (value < 0) return; int hAdjustment = OS.gtk_range_get_adjustment (handle); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_set_value (hAdjustment, value); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -483,9 +477,9 @@ public void setThumb (int value) { OS.memmove (adjustment, hAdjustment); adjustment.page_size = (double) value; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } /** @@ -528,10 +522,10 @@ public void setValues (int selection, int minimum, int maximum, int thumb, int i adjustment.step_increment = (double) increment; adjustment.page_increment = (double) pageIncrement; OS.memmove (hAdjustment, adjustment); - blockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_block_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); OS.gtk_adjustment_changed (hAdjustment); OS.gtk_adjustment_value_changed (hAdjustment); - unblockSignal (hAdjustment, SWT.Selection); + OS.g_signal_handlers_unblock_matched (hAdjustment, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED); } } 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 5c6debd284..eae8d622cb 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 @@ -208,9 +208,9 @@ void createItem (TabItem item, int index) { OS.gtk_container_add (boxHandle, labelHandle);
int pageHandle = OS.gtk_fixed_new ();
if (pageHandle == 0) error (SWT.ERROR_NO_HANDLES);
- blockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
OS.gtk_notebook_insert_page (handle, pageHandle, boxHandle, index);
- unblockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
OS.gtk_widget_show (boxHandle);
OS.gtk_widget_show (labelHandle);
OS.gtk_widget_show (pageHandle);
@@ -241,7 +241,7 @@ void fixPage () { */
// int index = OS.gtk_notebook_get_current_page (handle);
// if (index != -1) return;
- blockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
int flags = OS.GTK_WIDGET_FLAGS (handle);
OS.GTK_WIDGET_SET_FLAGS(handle, OS.GTK_VISIBLE);
GtkRequisition requisition = new GtkRequisition ();
@@ -250,7 +250,7 @@ void fixPage () { if ((flags & OS.GTK_VISIBLE) == 0) {
OS.GTK_WIDGET_UNSET_FLAGS(handle, OS.GTK_VISIBLE);
}
- unblockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
}
void destroyItem (TabItem item) {
@@ -262,9 +262,9 @@ void destroyItem (TabItem item) { }
if (index == itemCount) error (SWT.ERROR_ITEM_NOT_REMOVED);
int oldIndex = OS.gtk_notebook_get_current_page (handle);
- blockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
OS.gtk_notebook_remove_page (handle, index);
- unblockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
System.arraycopy (items, index + 1, items, index, --itemCount - index);
items [itemCount] = null;
item.handle = 0;
@@ -396,11 +396,29 @@ public int getSelectionIndex () { return OS.gtk_notebook_get_current_page (handle);
}
+int gtk_switch_page (int widget, int page, int page_num) {
+ int index = OS.gtk_notebook_get_current_page (handle);
+ if (index != -1) {
+ Control control = items [index].getControl ();
+ if (control != null && !control.isDisposed ()) {
+ control.setVisible (false);
+ }
+ }
+ Control control = items [page_num].getControl ();
+ if (control != null && !control.isDisposed ()) {
+ control.setBounds(getClientArea());
+ control.setVisible (true);
+ }
+ Event event = new Event();
+ event.item = items[page_num];
+ postEvent(SWT.Selection, event);
+ return 0;
+}
+
void hookEvents () {
super.hookEvents ();
Display display = getDisplay ();
- int windowProc4 = display.windowProc4;
- OS.g_signal_connect (handle, OS.switch_page, windowProc4, SWT.Selection);
+ OS.g_signal_connect (handle, OS.switch_page, display.windowProc4, SWITCH_PAGE);
}
/** @@ -433,25 +451,6 @@ public int indexOf (TabItem item) { return -1;
}
-int processSelection (int int0, int int1, int int2) {
- int index = OS.gtk_notebook_get_current_page (handle);
- if (index != -1) {
- Control control = items [index].getControl ();
- if (control != null && !control.isDisposed ()) {
- control.setVisible (false);
- }
- }
- Control control = items [int1].getControl ();
- if (control != null && !control.isDisposed ()) {
- control.setBounds(getClientArea());
- control.setVisible (true);
- }
- Event event = new Event();
- event.item = items[int1];
- postEvent(SWT.Selection, event);
- return 0;
-}
-
void releaseWidget () {
int count = getItemCount ();
for (int i=0; i<count; i++) {
@@ -550,9 +549,9 @@ void setSelection (int index, boolean notify) { control.setVisible (false);
}
}
- blockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
OS.gtk_notebook_set_current_page (handle, index);
- unblockSignal (handle, SWT.Selection);
+ OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE);
int newIndex = OS.gtk_notebook_get_current_page (handle);
if (newIndex != -1) {
TabItem item = items [newIndex];
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 9a239e474e..546503be1e 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 @@ -38,7 +38,7 @@ import org.eclipse.swt.events.*; * </p> */ public class Table extends Composite { - int modelHandle; + int modelHandle, checkRenderer; int itemCount, columnCount; TableItem [] items; TableColumn [] columns; @@ -155,6 +155,11 @@ void createHandle (int index) { if (modelHandle == 0) error (SWT.ERROR_NO_HANDLES); handle = OS.gtk_tree_view_new_with_model (modelHandle); if (handle == 0) error (SWT.ERROR_NO_HANDLES); + if ((style & SWT.CHECK) != 0) { + checkRenderer = OS.gtk_cell_renderer_toggle_new (); + if (checkRenderer == 0) error (SWT.ERROR_NO_HANDLES); + OS.g_object_ref (checkRenderer); + } createColumn (null, 0); int parentHandle = parent.parentingHandle (); OS.gtk_container_add (parentHandle, fixedHandle); @@ -220,8 +225,6 @@ void createColumn (TableColumn column, int index) { createRenderers (checkColumn.handle, checkColumn.modelIndex, false); } createRenderers (columnHandle, modelIndex, index == 0); - Display display = getDisplay (); - OS.g_signal_connect (columnHandle, OS.clicked, display.treeColumnSelectionProc, handle); OS.gtk_tree_view_column_set_resizable (columnHandle, true); OS.gtk_tree_view_column_set_clickable (columnHandle, true); OS.gtk_tree_view_insert_column (handle, columnHandle, index); @@ -234,12 +237,8 @@ void createColumn (TableColumn column, int index) { void createRenderers (int columnHandle, int modelIndex, boolean check) { OS.gtk_tree_view_column_clear (columnHandle); if ((style & SWT.CHECK) != 0 && check) { - int checkRenderer = OS.gtk_cell_renderer_toggle_new (); - if (checkRenderer == 0) error (SWT.ERROR_NO_HANDLES); OS.gtk_tree_view_column_pack_start (columnHandle, checkRenderer, false); OS.gtk_tree_view_column_add_attribute (columnHandle, checkRenderer, "active", 0); - Display display = getDisplay (); - OS.g_signal_connect (checkRenderer, OS.toggled, display.treeToggleProc, handle); } int pixbufRenderer = OS.gtk_cell_renderer_pixbuf_new (); if (pixbufRenderer == 0) error (SWT.ERROR_NO_HANDLES); @@ -304,6 +303,7 @@ GdkColor defaultForeground () { void deregister() { super.deregister (); WidgetTable.remove (OS.gtk_tree_view_get_selection (handle)); + if (checkRenderer != 0) WidgetTable.remove (checkRenderer); } /** @@ -321,10 +321,10 @@ void deregister() { public void deselect (int index) { checkWidget(); if (index < 0 || index >= itemCount) return; - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_unselect_iter (selection, items [index].handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -345,12 +345,12 @@ public void deselect (int index) { public void deselect (int start, int end) { checkWidget(); int selection = OS.gtk_tree_view_get_selection (handle); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); for (int index=start; index<=end; index++) { if (index < 0 || index >= itemCount) continue; OS.gtk_tree_selection_unselect_iter (selection, items [index].handle); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -374,13 +374,13 @@ public void deselect (int [] indices) { checkWidget(); if (indices == null) error (SWT.ERROR_NULL_ARGUMENT); int selection = OS.gtk_tree_view_get_selection (handle); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); for (int i=0; i<indices.length; i++) { int index = indices[i]; if (index < 0 || index >= itemCount) continue; OS.gtk_tree_selection_unselect_iter (selection, items [index].handle); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -393,10 +393,10 @@ public void deselect (int [] indices) { */ public void deselectAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_unselect_all (selection); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } void destroyItem (TableColumn column) { @@ -461,12 +461,12 @@ void destroyItem (TableItem item) { index++; } if (index == itemCount) return; - blockSignal (handle, SWT.Selection); int itemHandle = item.handle; + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_list_store_remove (modelHandle, itemHandle); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.g_free (itemHandle); item.handle = 0; - unblockSignal (handle, SWT.Selection); System.arraycopy (items, index + 1, items, index, --itemCount - index); items [itemCount] = null; } @@ -901,13 +901,120 @@ public int getTopIndex () { return index [0]; } +int gtk_button_press_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, event, GdkEventButton.sizeof); + if (gdkEvent.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; + int headerHeight = getHeaderHeight (); + gdkEvent.y += headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + int result = super.gtk_button_press_event (widget, event); + gdkEvent.y -= headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + return result; +} + +int gtk_button_release_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, event, GdkEventButton.sizeof); + if (gdkEvent.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; + int headerHeight = getHeaderHeight (); + gdkEvent.y += headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + int result = super.gtk_button_release_event (widget, event); + gdkEvent.y -= headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + return result; +} + +int gtk_changed (int widget) { + TableItem item = getFocusItem (); + if (item != null) { + Event event = new Event (); + event.item = item; + postEvent (SWT.Selection, event); + } + return 0; +} + +int gtk_key_press_event (int widget, int eventPtr) { + int result = super.gtk_key_press_event (widget, eventPtr); + if (result != 0) return result; + + /* + * Feature in GTK. When an item is default selected using + * the return key, GTK does not issue notification. The fix is + * to issue this notification when the return key is pressed. + */ + GdkEventKey keyEvent = new GdkEventKey (); + OS.memmove (keyEvent, eventPtr, GdkEventKey.sizeof); + int key = keyEvent.keyval; + switch (key) { + case OS.GDK_Return: + case OS.GDK_KP_Enter: { + Event event = new Event (); + event.item = getFocusItem (); + postEvent (SWT.DefaultSelection, event); + break; + } + } + return result; +} + +int gtk_motion_notify_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, event, GdkEventButton.sizeof); + if (gdkEvent.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; + int headerHeight = getHeaderHeight (); + gdkEvent.y += headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + int result = super.gtk_motion_notify_event (widget, event); + gdkEvent.y -= headerHeight; + OS.memmove (event, gdkEvent, GdkEventButton.sizeof); + return result; +} + +int gtk_row_activated (int tree, int path, int column) { + TableItem item = null; + int indices = OS.gtk_tree_path_get_indices (path); + if (indices != 0) { + int [] index = new int []{-1}; + OS.memmove (index, indices, 4); + item = items [index [0]]; + } + Event event = new Event (); + event.item = item; + postEvent (SWT.DefaultSelection, event); + return 0; +} + +int gtk_toggled (int renderer, int pathStr) { + int path = OS.gtk_tree_path_new_from_string (pathStr); + if (path == 0) return 0; + int indices = OS.gtk_tree_path_get_indices (path); + if (indices != 0) { + int [] index = new int [1]; + OS.memmove (index, indices, 4); + TableItem item = items [index [0]]; + item.setChecked (!item.getChecked ()); + Event event = new Event (); + event.detail = SWT.CHECK; + event.item = item; + postEvent (SWT.Selection, event); + } + OS.gtk_tree_path_free (path); + return 0; +} + void hookEvents () { - //TO DO - get rid of enter/exit for mouse crossing border super.hookEvents (); Display display = getDisplay (); int selection = OS.gtk_tree_view_get_selection(handle); - OS.g_signal_connect (selection, OS.changed, display.windowProc2, SWT.Selection); - OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, SWT.DefaultSelection); + OS.g_signal_connect (selection, OS.changed, display.windowProc2, CHANGED); + OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED); + if (checkRenderer != 0) { + OS.g_signal_connect (checkRenderer, OS.toggled, display.windowProc3, TOGGLED); + } } /** @@ -990,133 +1097,6 @@ int paintWindow () { return OS.gtk_tree_view_get_bin_window (handle); } -int processDefaultSelection (int int0, int int1, int int2) { - TableItem item = null; - int indices = OS.gtk_tree_path_get_indices (int0); - if (indices != 0) { - int [] index = new int []{-1}; - OS.memmove (index, indices, 4); - item = items [index [0]]; - } - Event event = new Event (); - event.item = item; - postEvent (SWT.DefaultSelection, event); - return 0; -} - -int processMouseDown (int int0, int int1, int int2) { - GdkEventButton e = new GdkEventButton (); - OS.memmove (e, int0, GdkEventButton.sizeof); - if (e.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; - int headerHeight = getHeaderHeight (); - e.y += headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - int result = super.processMouseDown (int0, int1, int2); - e.y -= headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - return result; -} - -int processMouseMove (int int0, int int1, int int2) { - GdkEventButton e = new GdkEventButton (); - OS.memmove (e, int0, GdkEventButton.sizeof); - if (e.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; - int headerHeight = getHeaderHeight (); - e.y += headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - int result = super.processMouseMove (int0, int1, int2); - e.y -= headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - return result; -} - -int processMouseUp (int int0, int int1, int int2) { - GdkEventButton e = new GdkEventButton (); - OS.memmove (e, int0, GdkEventButton.sizeof); - if (e.window != OS.gtk_tree_view_get_bin_window (handle)) return 0; - int headerHeight = getHeaderHeight (); - e.y += headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - int result = super.processMouseUp (int0, int1, int2); - e.y -= headerHeight; - OS.memmove (int0, e, GdkEventButton.sizeof); - return result; -} - -int processKeyDown (int callData, int arg1, int int2) { - int result = super.processKeyDown (callData, arg1, int2); - if (result != 0) return result; - - /* - * Feature in GTK. When an item is default selected using - * the return key, GTK does not issue notification. The fix is - * to issue this notification when the return key is pressed. - */ - GdkEventKey keyEvent = new GdkEventKey (); - OS.memmove (keyEvent, callData, GdkEventKey.sizeof); - int key = keyEvent.keyval; - switch (key) { - case OS.GDK_Return: - case OS.GDK_KP_Enter: { - Event event = new Event (); - event.item = getFocusItem (); - postEvent (SWT.DefaultSelection, event); - break; - } - } - return result; -} - -int processSelection (int int0, int int1, int int2) { - TableItem item = getFocusItem (); - if (item != null) { - Event event = new Event (); - event.item = item; - postEvent (SWT.Selection, event); - } - return 0; -} - -int processTreeColumnSelection (int column) { - for (int i=0; i<columnCount; i++) { - if (column == columns [i].handle) { - columns [i].postEvent (SWT.Selection); - break; - } - } - return 0; -} - -int processTreeSelection (int model, int path, int iter, int[] selection, int length) { - if (selection != null) { - int indices = OS.gtk_tree_path_get_indices (path); - if (indices != 0) { - int [] index = new int [1]; - OS.memmove (index, indices, 4); - selection [length] = index [0]; - } - } - return 0; -} - -int processTreeToggle (int renderer, int arg1) { - int path = OS.gtk_tree_path_new_from_string (arg1); - if (path == 0) return 0; - int indices = OS.gtk_tree_path_get_indices (path); - if (indices != 0) { - int [] index = new int [1]; - OS.memmove (index, indices, 4); - TableItem item = items [index [0]]; - item.setChecked (!item.getChecked ()); - Event event = new Event (); - event.detail = SWT.CHECK; - event.item = item; - postEvent (SWT.Selection, event); - } - OS.gtk_tree_path_free (path); - return 0; -} - void releaseWidget () { for (int i=0; i<columnCount; i++) { TableColumn column = columns [i]; @@ -1131,6 +1111,8 @@ void releaseWidget () { super.releaseWidget (); if (modelHandle != 0) OS.g_object_unref (modelHandle); modelHandle = 0; + if (checkRenderer != 0) OS.g_object_unref (checkRenderer); + checkRenderer = 0; if (imageList != null) { imageList.dispose (); imageList = null; @@ -1140,6 +1122,7 @@ void releaseWidget () { void register () { super.register (); WidgetTable.put (OS.gtk_tree_view_get_selection (handle), this); + if (checkRenderer != 0) WidgetTable.put (checkRenderer, this); } /** @@ -1304,10 +1287,10 @@ public void removeSelectionListener(SelectionListener listener) { public void select (int index) { checkWidget(); if (index <0 || index >= itemCount) return; - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_select_iter (selection, items [index].handle); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -1326,13 +1309,13 @@ public void select (int index) { */ public void select (int start, int end) { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int index=start; index<=end; index++) { if (index < 0 || index >= itemCount) continue; OS.gtk_tree_selection_select_iter (selection, items [index].handle); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -1355,14 +1338,14 @@ public void select (int start, int end) { public void select (int [] indices) { checkWidget(); if (indices == null) error (SWT.ERROR_NULL_ARGUMENT); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); for (int i=0; i<indices.length; i++) { int index = indices [i]; if (index < 0 || index >= itemCount) continue; OS.gtk_tree_selection_select_iter (selection, items [index].handle); } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } /** @@ -1375,10 +1358,10 @@ public void select (int [] indices) { */ public void selectAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_select_all (selection); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } void setBackgroundColor (GdkColor color) { @@ -1598,4 +1581,16 @@ public void showSelection () { OS.gtk_tree_path_free (path); } +int treeSelectionProc (int model, int path, int iter, int[] selection, int length) { + if (selection != null) { + int indices = OS.gtk_tree_path_get_indices (path); + if (indices != 0) { + int [] index = new int [1]; + OS.memmove (index, indices, 4); + selection [length] = index [0]; + } + } + return 0; +} + } 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 94387727b9..68213d847f 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 @@ -175,6 +175,11 @@ void createWidget (int index) { text = ""; } +void deregister() { + super.deregister (); + WidgetTable.remove (handle); +} + /** * Returns a value which describes the position of the * text or image in the receiver. The value will be one of @@ -248,6 +253,17 @@ public int getWidth () { return OS.gtk_tree_view_column_get_width (handle); } +int gtk_clicked (int widget) { + postEvent (SWT.Selection); + return 0; +} + +void hookEvents () { + super.hookEvents (); + Display display = getDisplay (); + OS.g_signal_connect (handle, OS.clicked, display.windowProc2, CLICKED); +} + /** * Causes the receiver to be resized to its preferred size. * For a composite, this involves computing the preferred size @@ -264,6 +280,11 @@ public void pack () { OS.gtk_tree_view_column_set_sizing (handle, OS.GTK_TREE_VIEW_COLUMN_AUTOSIZE); } +void register () { + super.register (); + WidgetTable.put (handle, this); +} + void releaseChild () { super.releaseChild (); parent.destroyItem (this); 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 c0c91062a3..df16232f12 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 @@ -789,25 +789,119 @@ public int getTopPixel () { return lineTop [0]; } +int gtk_activate (int widget) { + postEvent (SWT.DefaultSelection); + return 0; +} + +int gtk_changed (int widget) { + sendEvent (SWT.Modify); + return 0; +} + +int gtk_delete_range (int widget, int iter1, int iter2) { + if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0; + byte [] startIter = new byte [ITER_SIZEOF]; + byte [] endIter = new byte [ITER_SIZEOF]; + OS.memmove (startIter, iter1, startIter.length); + OS.memmove (endIter, iter2, endIter.length); + int start = OS.gtk_text_iter_get_offset (startIter); + int end = OS.gtk_text_iter_get_offset (endIter); + int address = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true); + byte [] buffer = new byte [end - start]; + OS.memmove (buffer, address, buffer.length); + String oldText = new String (Converter.mbcsToWcs (null, buffer)); + String newText = verifyText (oldText, start, end); + if (newText == null) { + OS.g_signal_stop_emission_by_name (bufferHandle, OS.delete_range); + } + return 0; +} + +int gtk_delete_text (int widget, int start_pos, int end_pos) { + if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0; + int address = OS.gtk_editable_get_chars (handle, start_pos, end_pos); + int length = OS.strlen (address); + byte [] buffer = new byte [length]; + OS.memmove (buffer, address, length); + OS.g_free (address); + String oldText = new String (Converter.mbcsToWcs (null, buffer)); + String newText = verifyText (oldText, start_pos, end_pos); + if (newText == null) { + OS.g_signal_stop_emission_by_name (handle, OS.delete_text); + } + return 0; +} + +int gtk_insert_text (int widget, int int0, int int1, int int2) { + if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0; + if ((style & SWT.SINGLE) != 0) { + if (int0 == 0 || int1==0) return 0; + byte [] buffer = new byte [int1]; + OS.memmove (buffer, int0, buffer.length); + String oldText = new String (Converter.mbcsToWcs (null, buffer)); + int [] position = new int [1]; + OS.memmove (position, int2, 4); + if (position [0] == -1) position [0] = getCharCount (); + String newText = verifyText (oldText, position [0], position [0]); //WRONG POSITION + if (newText == null) { + OS.g_signal_stop_emission_by_name (handle, OS.insert_text); + return 0; + } + if (newText != oldText) { + byte [] buffer3 = Converter.wcsToMbcs (null, newText, false); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT); + OS.gtk_editable_insert_text (handle, buffer3, buffer3.length, position); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT); + OS.g_signal_stop_emission_by_name (handle, OS.insert_text); + return 0; + } + } else { + byte [] iter = new byte [ITER_SIZEOF]; + OS.memmove (iter, int0, iter.length); + int start = OS.gtk_text_iter_get_offset (iter); + byte [] buffer = new byte [int2]; + OS.memmove (buffer, int1, buffer.length); + String oldText = new String (Converter.mbcsToWcs (null, buffer)); + String newText = verifyText (oldText, start, start); + if (newText == null) { + OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text); + return 0; + } + if (newText != oldText) { + byte [] buffer1 = Converter.wcsToMbcs (null, newText, false); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT); + OS.gtk_text_buffer_insert (bufferHandle, iter, buffer1, buffer1.length); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT); + OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text); + return 0; + } + } + return 0; +} + void hookEvents () { - //TO DO - get rid of enter/exit for mouse crossing border super.hookEvents(); Display display = getDisplay (); int windowProc2 = display.windowProc2; int windowProc4 = display.windowProc4; int windowProc5 = display.windowProc5; if ((style & SWT.SINGLE) != 0) { - OS.g_signal_connect_after (handle, OS.changed, windowProc2, SWT.Modify); - OS.g_signal_connect (handle, OS.insert_text, windowProc5, SWT.Verify); - OS.g_signal_connect (handle, OS.delete_text, windowProc4, SWT.Dispose); // BAD NAMING - OS.g_signal_connect (handle, OS.activate, windowProc2, SWT.DefaultSelection); + 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); } else { - OS.g_signal_connect (bufferHandle, OS.changed, windowProc2, SWT.Modify); - OS.g_signal_connect (bufferHandle, OS.insert_text, windowProc5, SWT.Verify); - OS.g_signal_connect (bufferHandle, OS.delete_range, windowProc4, SWT.Dispose); // BAD NAMING + 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); } } +int imHandle () { + return 0; +} + /** * Inserts a string. * <p> @@ -869,104 +963,6 @@ public void paste () { } } -int processDefaultSelection (int int0, int int1, int int2) { - postEvent (SWT.DefaultSelection); - return 0; -} - -int processDispose (int int0, int int1, int int2) { - if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0; - if ((style & SWT.SINGLE) != 0) { - int address = OS.gtk_editable_get_chars (handle, int0, int1); - int length = OS.strlen (address); - byte [] buffer = new byte [length]; - OS.memmove (buffer, address, length); - OS.g_free (address); - String oldText = new String (Converter.mbcsToWcs (null, buffer)); - String newText = verifyText (oldText, int0, int1); - if (newText == null) { - OS.g_signal_stop_emission_by_name (handle, OS.delete_text); - return 0; - } - } else { - byte [] startIter = new byte [ITER_SIZEOF]; - byte [] endIter = new byte [ITER_SIZEOF]; - OS.memmove (startIter, int0, startIter.length); - OS.memmove (endIter, int1, endIter.length); - int start = OS.gtk_text_iter_get_offset (startIter); - int end = OS.gtk_text_iter_get_offset (endIter); - int address = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true); - byte [] buffer = new byte [end - start]; - OS.memmove (buffer, address, buffer.length); - String oldText = new String (Converter.mbcsToWcs (null, buffer)); - String newText = verifyText (oldText, start, end); - if (newText == null) { - OS.g_signal_stop_emission_by_name (bufferHandle, OS.delete_range); - return 0; - } - } - return 0; -} - -int processIMEFocusIn () { - return 0; -} -int processIMEFocusOut () { - return 0; -} - -int processModify (int arg0, int arg1, int int2) { - sendEvent (SWT.Modify); - return 0; -} - -int processVerify (int int0, int int1, int int2) { - if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0; - if ((style & SWT.SINGLE) != 0) { - if (int0 == 0 || int1==0) return 0; - byte [] buffer = new byte [int1]; - OS.memmove (buffer, int0, buffer.length); - String oldText = new String (Converter.mbcsToWcs (null, buffer)); - int [] position = new int [1]; - OS.memmove (position, int2, 4); - if (position [0] == -1) position [0] = getCharCount (); - String newText = verifyText (oldText, position [0], position [0]); //WRONG POSITION - if (newText == null) { - OS.g_signal_stop_emission_by_name (handle, OS.insert_text); - return 0; - } - if (newText != oldText) { - byte [] buffer3 = Converter.wcsToMbcs (null, newText, false); - blockSignal (bufferHandle, SWT.Verify); - OS.gtk_editable_insert_text (handle, buffer3, buffer3.length, position); - unblockSignal (bufferHandle, SWT.Verify); - OS.g_signal_stop_emission_by_name (handle, OS.insert_text); - return 0; - } - } else { - byte [] iter = new byte [ITER_SIZEOF]; - OS.memmove (iter, int0, iter.length); - int start = OS.gtk_text_iter_get_offset (iter); - byte [] buffer = new byte [int2]; - OS.memmove (buffer, int1, buffer.length); - String oldText = new String (Converter.mbcsToWcs (null, buffer)); - String newText = verifyText (oldText, start, start); - if (newText == null) { - OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text); - return 0; - } - if (newText != oldText) { - byte [] buffer1 = Converter.wcsToMbcs (null, newText, false); - blockSignal (bufferHandle, SWT.Verify); - OS.gtk_text_buffer_insert (bufferHandle, iter, buffer1, buffer1.length); - unblockSignal (bufferHandle, SWT.Verify); - OS.g_signal_stop_emission_by_name (bufferHandle, OS.insert_text); - return 0; - } - } - return 0; -} - void register () { super.register (); if (bufferHandle != 0) WidgetTable.put (bufferHandle, this); 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 a169658ea2..3e545ae247 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 @@ -403,15 +403,95 @@ public int getWidth () { return OS.GTK_WIDGET_WIDTH (topHandle); } +int gtk_button_press_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton(); + OS.memmove(gdkEvent, event, GdkEventButton.sizeof); + double x = gdkEvent.x; + gdkEvent.x += OS.GTK_WIDGET_X(handle); + double y = gdkEvent.y; + gdkEvent.y += OS.GTK_WIDGET_Y(handle); + OS.memmove(event, gdkEvent, GdkEventButton.sizeof); + parent.gtk_button_press_event (widget, event); + gdkEvent.x = x; + gdkEvent.y = y; + OS.memmove(event, gdkEvent, GdkEventButton.sizeof); + return 0; +} + +int gtk_button_release_event (int widget, int event) { + GdkEventButton gdkEvent = new GdkEventButton(); + OS.memmove(gdkEvent, event, GdkEventButton.sizeof); + double x = gdkEvent.x; + gdkEvent.x += OS.GTK_WIDGET_X(handle); + double y = gdkEvent.y; + gdkEvent.y += OS.GTK_WIDGET_Y(handle); + OS.memmove(event, gdkEvent, GdkEventButton.sizeof); + parent.gtk_button_release_event (widget, event); + gdkEvent.x = x; + gdkEvent.y = y; + OS.memmove(event, gdkEvent, GdkEventButton.sizeof); + return 0; +} + +int gtk_clicked (int widget) { + Event event = new Event (); + if ((style & SWT.DROP_DOWN) != 0) { + int eventPtr = OS.gtk_get_current_event (); + if (eventPtr != 0) { + GdkEvent gdkEvent = new GdkEvent (); + OS.memmove (gdkEvent, eventPtr, GdkEvent.sizeof); + switch (gdkEvent.type) { + case OS.GDK_BUTTON_PRESS: + case OS.GDK_2BUTTON_PRESS: + case OS.GDK_BUTTON_RELEASE: { + double [] x_win = new double [1]; + double [] y_win = new double [1]; + OS.gdk_event_get_coords (eventPtr, x_win, y_win); + if ((int) x_win [0] > OS.GTK_WIDGET_WIDTH (boxHandle)) { + event.detail = SWT.ARROW; + } + break; + } + } + OS.gdk_event_free (eventPtr); + } + } + if ((style & SWT.RADIO) != 0) { + if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) { + selectRadio (); + } + } + postEvent (SWT.Selection, event); + return 0; +} + +int gtk_enter_notify_event (int widget, int event) { + drawHotImage = (parent.style & SWT.FLAT) != 0 && hotImage != null; + if (drawHotImage && imageHandle != 0) { + OS.gtk_image_set_from_pixmap (imageHandle, hotImage.pixmap, hotImage.mask); + } + return 0; +} + +int gtk_leave_notify_event (int widget, int event) { + if (drawHotImage) { + drawHotImage = false; + if (imageHandle != 0 && image != null) { + OS.gtk_image_set_from_pixmap (imageHandle, image.pixmap, image.mask); + } + } + return 0; +} + void hookEvents () { super.hookEvents (); if ((style & SWT.SEPARATOR) != 0) return; Display display = getDisplay (); int windowProc2 = display.windowProc2; int windowProc3 = display.windowProc3; - OS.g_signal_connect (handle, OS.clicked, windowProc2, SWT.Selection); - OS.g_signal_connect (handle, OS.enter_notify_event, windowProc3, SWT.MouseEnter); - OS.g_signal_connect (handle, OS.leave_notify_event, windowProc3, SWT.MouseExit); + 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); /* * Feature in GTK. @@ -428,8 +508,8 @@ 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, SWT.MouseDown); - OS.g_signal_connect (handle, OS.button_release_event, windowProc3, SWT.MouseUp); + 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); } /** @@ -452,80 +532,6 @@ public boolean isEnabled () { return getEnabled () && parent.isEnabled (); } -int processMouseDown (int callData, int arg1, int int2) { - GdkEventButton e = new GdkEventButton(); - OS.memmove(e, callData, GdkEventButton.sizeof); - double x_back = e.x; e.x += OS.GTK_WIDGET_X(handle); - double y_back = e.y; e.y += OS.GTK_WIDGET_Y(handle); - OS.memmove(callData, e, GdkEventButton.sizeof); - parent.processMouseDown (callData, arg1, int2); - e.x = x_back; e.y = y_back; - OS.memmove(callData, e, GdkEventButton.sizeof); - return 0; -} - -int processMouseUp (int callData, int arg1, int int2) { - GdkEventButton e = new GdkEventButton(); - OS.memmove(e, callData, GdkEventButton.sizeof); - double x_back = e.x; e.x += OS.GTK_WIDGET_X(handle); - double y_back = e.y; e.y += OS.GTK_WIDGET_Y(handle); - OS.memmove(callData, e, GdkEventButton.sizeof); - parent.processMouseUp (callData, arg1, int2); - e.x = x_back; e.y = y_back; - OS.memmove(callData, e, GdkEventButton.sizeof); - return 0; -} - -int processMouseEnter (int int0, int int1, int int2) { - drawHotImage = (parent.style & SWT.FLAT) != 0 && hotImage != null; - if (drawHotImage && imageHandle != 0) { - OS.gtk_image_set_from_pixmap (imageHandle, hotImage.pixmap, hotImage.mask); - } - return 0; -} - -int processMouseExit (int int0, int int1, int int2) { - if (drawHotImage) { - drawHotImage = false; - if (imageHandle != 0 && image != null) { - OS.gtk_image_set_from_pixmap (imageHandle, image.pixmap, image.mask); - } - } - return 0; -} - -int processSelection (int int0, int int1, int int2) { - Event event = new Event (); - if ((style & SWT.DROP_DOWN) != 0) { - int eventPtr = OS.gtk_get_current_event (); - if (eventPtr != 0) { - GdkEvent gdkEvent = new GdkEvent (); - OS.memmove (gdkEvent, eventPtr, GdkEvent.sizeof); - switch (gdkEvent.type) { - case OS.GDK_BUTTON_PRESS: - case OS.GDK_2BUTTON_PRESS: - case OS.GDK_BUTTON_RELEASE: { - double [] x_win = new double [1]; - double [] y_win = new double [1]; - OS.gdk_event_get_coords (eventPtr, x_win, y_win); - if ((int) x_win [0] > OS.GTK_WIDGET_WIDTH (boxHandle)) { - event.detail = SWT.ARROW; - } - break; - } - } - OS.gdk_event_free (eventPtr); - } - } - if ((style & SWT.RADIO) != 0) { - if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) { - selectRadio (); - } - } - postEvent (SWT.Selection, event); - return 0; -} - void releaseHandle () { super.releaseHandle (); boxHandle = arrowHandle = separatorHandle = labelHandle = imageHandle = 0; @@ -740,9 +746,9 @@ public void setSelection (boolean selected) { if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS); if (!isValidWidget ()) error (SWT.ERROR_WIDGET_DISPOSED); if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return; - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED); OS.gtk_toggle_button_set_active (handle, selected); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CLICKED); } public void setText (String string) { 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 08cfa14669..791503d2ca 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 @@ -37,7 +37,7 @@ import org.eclipse.swt.events.*; * </p> */ public class Tree extends Composite { - int modelHandle; + int modelHandle, checkRenderer; TreeItem[] items; ImageList imageList; @@ -181,12 +181,10 @@ void createHandle (int index) { int columnHandle = OS.gtk_tree_view_column_new (); if (columnHandle == 0) error (SWT.ERROR_NO_HANDLES); if ((style & SWT.CHECK) != 0) { - int checkRenderer = OS.gtk_cell_renderer_toggle_new (); + checkRenderer = OS.gtk_cell_renderer_toggle_new (); if (checkRenderer == 0) error (SWT.ERROR_NO_HANDLES); OS.gtk_tree_view_column_pack_start (columnHandle, checkRenderer, false); OS.gtk_tree_view_column_add_attribute (columnHandle, checkRenderer, "active", 5); - Display display = getDisplay (); - OS.g_signal_connect (checkRenderer, OS.toggled, display.treeToggleProc, handle); } int pixbufRenderer = OS.gtk_cell_renderer_pixbuf_new (); if (pixbufRenderer == 0) error (SWT.ERROR_NO_HANDLES); @@ -254,6 +252,7 @@ GdkColor defaultForeground () { void deregister () { super.deregister (); WidgetTable.remove (OS.gtk_tree_view_get_selection (handle)); + if (checkRenderer != 0) WidgetTable.remove (checkRenderer); } /** @@ -266,10 +265,10 @@ void deregister () { */ public void deselectAll() { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); int selection = OS.gtk_tree_view_get_selection (handle); OS.gtk_tree_selection_unselect_all (selection); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } void destroyItem (TreeItem item) { @@ -505,57 +504,18 @@ public int getSelectionCount () { return display.treeSelectionLength; } -void hookEvents () { - //TO DO - get rid of enter/exit for mouse crossing border - super.hookEvents (); - Display display = getDisplay (); - int selection = OS.gtk_tree_view_get_selection(handle); - OS.g_signal_connect_after (selection, OS.changed, display.windowProc2, SWT.Selection); - OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, SWT.DefaultSelection); - OS.g_signal_connect (handle, OS.row_expanded, display.windowProc4, SWT.Expand); - OS.g_signal_connect (handle, OS.row_collapsed, display.windowProc4, SWT.Collapse); -} - -int paintWindow () { - OS.gtk_widget_realize (handle); - return OS.gtk_tree_view_get_bin_window (handle); -} - -int processCollapse (int iter, int path, int data) { - int [] index = new int [1]; - OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); - Event event = new Event (); - event.item = items [index [0]]; - sendEvent (SWT.Collapse, event); - return 0; -} - -int processExpand (int iter, int path, int data) { - int [] index = new int [1]; - OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); - Event event = new Event (); - event.item = items [index [0]]; - sendEvent (SWT.Expand, event); - blockSignal (handle, SWT.Expand); - OS.gtk_tree_view_expand_row (handle, path, false); - unblockSignal (handle, SWT.Expand); - return 0; -} - -int processDefaultSelection (int int0, int int1, int int2) { - int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); - OS.gtk_tree_model_get_iter (modelHandle, iter, int0); - int [] index = new int [1]; - OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); - OS.g_free (iter); - Event event = new Event (); - event.item = items [index [0]]; - postEvent (SWT.DefaultSelection, event); +int gtk_changed (int widget) { + TreeItem item = getFocusItem (); + if (item != null) { + Event event = new Event (); + event.item = item; + postEvent (SWT.Selection, event); + } return 0; } -int processKeyDown (int callData, int arg1, int int2) { - int result = super.processKeyDown (callData, arg1, int2); +int gtk_key_press_event (int widget, int eventPtr) { + int result = super.gtk_key_press_event (widget, eventPtr); if (result != 0) return result; /* @@ -564,7 +524,7 @@ int processKeyDown (int callData, int arg1, int int2) { * to issue this notification when the return key is pressed. */ GdkEventKey keyEvent = new GdkEventKey (); - OS.memmove (keyEvent, callData, GdkEventKey.sizeof); + OS.memmove (keyEvent, eventPtr, GdkEventKey.sizeof); int key = keyEvent.keyval; switch (key) { case OS.GDK_Return: @@ -578,27 +538,41 @@ int processKeyDown (int callData, int arg1, int int2) { return result; } -int processSelection (int int0, int int1, int int2) { - TreeItem item = getFocusItem (); - if (item != null) { - Event event = new Event (); - event.item = item; - postEvent (SWT.Selection, event); - } +int gtk_row_activated (int tree, int path, int column) { + int iter = OS.g_malloc (OS.GtkTreeIter_sizeof ()); + OS.gtk_tree_model_get_iter (modelHandle, iter, path); + int [] index = new int [1]; + OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); + OS.g_free (iter); + Event event = new Event (); + event.item = items [index [0]]; + postEvent (SWT.DefaultSelection, event); return 0; } -int processTreeSelection (int model, int path, int iter, int[] selection, int length) { - if (selection != null) { - int [] index = new int [1]; - OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); - selection [length] = index [0]; - } +int gtk_row_collapsed (int tree, int iter, int path) { + int [] index = new int [1]; + OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); + Event event = new Event (); + event.item = items [index [0]]; + sendEvent (SWT.Collapse, event); return 0; } -int processTreeToggle (int renderer, int arg1) { - int path = OS.gtk_tree_path_new_from_string (arg1); +int gtk_row_expanded (int tree, int iter, int path) { + int [] index = new int [1]; + OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); + Event event = new Event (); + event.item = items [index [0]]; + sendEvent (SWT.Expand, event); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); + OS.gtk_tree_view_expand_row (handle, path, false); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); + return 0; +} + +int gtk_toggled (int renderer, int pathStr) { + int path = OS.gtk_tree_path_new_from_string (pathStr); if (path == 0) return 0; int iter = OS.g_malloc (OS.GtkTreeIter_sizeof()); OS.gtk_tree_model_get_iter (modelHandle, iter, path); @@ -615,9 +589,28 @@ int processTreeToggle (int renderer, int arg1) { return 0; } +void hookEvents () { + super.hookEvents (); + Display display = getDisplay (); + int selection = OS.gtk_tree_view_get_selection(handle); + OS.g_signal_connect_after (selection, OS.changed, display.windowProc2, CHANGED); + OS.g_signal_connect (handle, OS.row_activated, display.windowProc4, ROW_ACTIVATED); + OS.g_signal_connect (handle, OS.row_expanded, display.windowProc4, ROW_EXPANDED); + OS.g_signal_connect (handle, OS.row_collapsed, display.windowProc4, ROW_COLLAPSED); + if (checkRenderer != 0) { + OS.g_signal_connect (checkRenderer, OS.toggled, display.windowProc3, TOGGLED); + } +} + +int paintWindow () { + OS.gtk_widget_realize (handle); + return OS.gtk_tree_view_get_bin_window (handle); +} + void register () { super.register (); WidgetTable.put (OS.gtk_tree_view_get_selection (handle), this); + if (checkRenderer != 0) WidgetTable.put (checkRenderer, this); } boolean releaseItem (TreeItem item, int [] index) { @@ -737,9 +730,9 @@ public void setInsertMark (TreeItem item, boolean set) { */ public void selectAll () { checkWidget(); - blockSignal (handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_tree_selection_select_all (OS.gtk_tree_view_get_selection (handle)); - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); } void setBackgroundColor (GdkColor color) { @@ -774,7 +767,7 @@ public void setSelection (TreeItem [] items) { checkWidget(); if (items == null) error (SWT.ERROR_NULL_ARGUMENT); int selection = OS.gtk_tree_view_get_selection (handle); - blockSignal(handle, SWT.Selection); + OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); OS.gtk_tree_selection_unselect_all (selection); int i = 0; boolean first = true; @@ -792,7 +785,7 @@ public void setSelection (TreeItem [] items) { OS.gtk_tree_selection_select_iter (selection, item.handle); i++; } - unblockSignal (handle, SWT.Selection); + OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED); if (i < items.length) error (SWT.ERROR_INVALID_ARGUMENT); } @@ -860,5 +853,14 @@ public void showItem (TreeItem item) { OS.gtk_tree_path_free (path); } +int treeSelectionProc (int model, int path, int iter, int[] selection, int length) { + if (selection != null) { + int [] index = new int [1]; + OS.gtk_tree_model_get (modelHandle, iter, 4, index, -1); + selection [length] = index [0]; + } + return 0; +} + } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java index 6dba24e2da..d94b5dbfee 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeItem.java @@ -485,13 +485,13 @@ public void setExpanded (boolean expanded) { checkWidget();
int path = OS.gtk_tree_model_get_path (parent.modelHandle, handle);
if (expanded) {
- blockSignal (parent.handle, SWT.Expand);
+ OS.g_signal_handlers_block_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ROW_EXPANDED);
OS.gtk_tree_view_expand_row (parent.handle, path, false);
- unblockSignal (parent.handle, SWT.Expand);
+ OS.g_signal_handlers_unblock_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ROW_EXPANDED);
} else {
- blockSignal (parent.handle, SWT.Collapse);
+ OS.g_signal_handlers_block_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ROW_COLLAPSED);
OS.gtk_tree_view_collapse_row (parent.handle, path);
- unblockSignal (parent.handle, SWT.Collapse);
+ OS.g_signal_handlers_unblock_matched (parent.handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, ROW_COLLAPSED);
}
OS.gtk_tree_path_free (path);
}
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 4c4d894b2a..1ed083969f 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 @@ -64,6 +64,45 @@ public abstract class Widget { /* Default widths for widgets */ static final int DEFAULT_WIDTH = 64; static final int DEFAULT_HEIGHT = 64; + + /* 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 CLICKED = 5; + static final int COMMIT = 6; + static final int CONFIGURE_EVENT = 7; + static final int DELETE_EVENT = 8; + static final int DELETE_RANGE = 9; + static final int DELETE_TEXT = 10; + static final int ENTER_NOTIFY_EVENT = 11; + static final int EVENT = 12; + static final int EVENT_AFTER = 13; + static final int EXPOSE_EVENT = 14; + static final int FOCUS_IN_EVENT = 15; + static final int FOCUS_OUT_EVENT = 16; + static final int HIDE = 17; + static final int INSERT_TEXT = 18; + static final int KEY_PRESS_EVENT = 19; + static final int KEY_RELEASE_EVENT = 20; + static final int LEAVE_NOTIFY_EVENT = 21; + static final int MAP_EVENT = 22; + static final int MNEMONIC_ACTIVATE = 23; + static final int MOTION_NOTIFY_EVENT = 24; + static final int POPUP_MENU = 25; + static final int ROW_ACTIVATED = 26; + static final int ROW_COLLAPSED = 27; + static final int ROW_EXPANDED = 28; + static final int SELECT = 29; + static final int SELECT_CHILD = 30; + static final int SHOW = 31; + static final int SHOW_HELP = 32; + static final int SIZE_ALLOCATE = 33; + static final int SWITCH_PAGE = 34; + static final int TOGGLED = 35; + static final int UNMAP_EVENT = 38; + static final int VALUE_CHANGED = 39; /** * Prevents uninitialized instances from being created outside the package. @@ -131,10 +170,6 @@ public void addListener (int eventType, Listener handler) { eventTable.hook (eventType, handler); } -void blockSignal (int instance, int data) { - OS.g_signal_handlers_block_matched (instance, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, data); -} - /** * Adds the listener to the collection of listeners who will * be notifed when the widget is disposed. When the widget is @@ -411,6 +446,159 @@ public int getStyle () { return style; } + +int gtk_activate (int widget) { + return 0; +} + +int gtk_button_press_event (int widget, int event) { + return 0; +} + +int gtk_button_release_event (int widget, int event) { + return 0; +} + +int gtk_changed (int widget) { + return 0; +} + +int gtk_clicked (int widget) { + return 0; +} + +int gtk_commit (int imcontext, int text) { + return 0; +} + +int gtk_configure_event (int widget, int event) { + return 0; +} + +int gtk_delete_event (int widget, int event) { + return 0; +} + +int gtk_delete_range (int widget, int iter1, int iter2) { + return 0; +} + +int gtk_delete_text (int widget, int start_pos, int end_pos) { + return 0; +} + +int gtk_enter_notify_event (int widget, int event) { + return 0; +} + +int gtk_event (int widget, int event) { + return 0; +} + +int gtk_event_after (int widget, int event) { + return 0; +} + +int gtk_expose_event (int widget, int event) { + return 0; +} + +int gtk_focus_in_event (int widget, int event) { + return 0; +} + +int gtk_focus_out_event (int widget, int event) { + return 0; +} + +int gtk_hide (int widget) { + return 0; +} + +int gtk_insert_text (int widget, int new_text, int new_text_length, int position) { + return 0; +} + +int gtk_key_press_event (int widget, int event) { + return 0; +} + +int gtk_key_release_event (int widget, int event) { + return 0; +} + +int gtk_leave_notify_event (int widget, int event) { + return 0; +} + +int gtk_map_event (int widget, int event) { + return 0; +} + +int gtk_mnemonic_activate (int widget, int arg1) { + return 0; +} + +int gtk_motion_notify_event (int widget, int event) { + return 0; +} + +int gtk_popup_menu (int widget) { + return 0; +} + +int gtk_row_activated (int tree, int path, int column) { + return 0; +} + +int gtk_row_collapsed (int tree, int iter, int path) { + return 0; +} + +int gtk_row_expanded (int tree, int iter, int path) { + return 0; +} + +int gtk_select (int item) { + return 0; +} + +int gtk_select_child (int list, int widget) { + return 0; +} + +int gtk_show (int widget) { + return 0; +} + +int gtk_show_help (int widget, int helpType) { + return 0; +} + +int gtk_size_allocate (int widget, int allocation) { + return 0; +} + +int gtk_switch_page (int widget, int page, int page_num) { + return 0; +} + +int gtk_timer () { + return 0; +} + +int gtk_toggled (int renderer, int pathStr) { + return 0; +} + +int gtk_unmap_event (int widget, int event) { + return 0; +} + +int gtk_value_changed (int adjustment) { + return 0; +} + int fontHeight (int font, int widgetHandle) { int context = OS.gtk_widget_get_pango_context (widgetHandle); int lang = OS.pango_context_get_language (context); @@ -512,6 +700,10 @@ boolean hooks (int eventType) { return eventTable.hooks (eventType); } +int hoverProc (int widget) { + return 0; +} + char mbcsToWcs (char ch) { int key = ch & 0xFFFF; if (key <= 0x7F) return ch; @@ -556,175 +748,7 @@ void postEvent (int eventType) { } void postEvent (int eventType, Event event) { - sendEvent (eventType, event, false);} - -int processEvent (int eventNumber, int int0, int int1, int int2) { - /* - * Feature in GTK. Events such as mouse move are propagate up - * the widget hierarchy and are seen by the parent. This is the - * correct GTK behavior but not correct for SWT. The fix is to - * hook a signal after and stop the propagation using a negative - * event number to distinguish this case. - */ - if (eventNumber < 0) return 1; - switch (eventNumber) { - case SWT.Activate: return processActivate (int0, int1, int2); - case SWT.Arm: return processArm (int0, int1, int2); - case SWT.Collapse: return processCollapse (int0, int1, int2); - case SWT.Expand: return processExpand (int0, int1, int2); - case SWT.Dispose: return processDispose (int0, int1, int2); - case SWT.DefaultSelection: return processDefaultSelection (int0, int1, int2); - case SWT.Deiconify: return processDeiconify (int0, int1, int2); - case SWT.FocusIn: return processFocusIn (int0, int1, int2); - case SWT.FocusOut: return processFocusOut (int0, int1, int2); - case SWT.Help: return processHelp (int0, int1, int2); - case SWT.Hide: return processHide (int0, int1, int2); - case SWT.KeyDown: return processKeyDown (int0, int1, int2); - case SWT.KeyUp: return processKeyUp (int0, int1, int2); - case SWT.Iconify: return processIconify (int0, int1, int2); - case SWT.Modify: return processModify (int0, int1, int2); - case SWT.MouseDown: return processMouseDown (int0, int1, int2); - case SWT.MouseEnter: return processMouseEnter (int0, int1, int2); - case SWT.MouseExit: return processMouseExit (int0, int1, int2); - case SWT.MouseMove: return processMouseMove (int0, int1, int2); - case SWT.MouseUp: return processMouseUp (int0, int1, int2); - case SWT.Move: return processMove (int0, int1, int2); - case SWT.Paint: return processPaint (int0, int1, int2); - case SWT.Resize: return processResize (int0, int1, int2); - case SWT.Show: return processShow (int0, int1, int2); - case SWT.Selection: return processSelection (int0, int1, int2); - case SWT.Verify: return processVerify (int0, int1, int2); - } - return 0; -} - -int processActivate (int int0, int int1, int int2) { - return 0; -} - -int processArm (int int0, int int1, int int2) { - return 0; -} - -int processCollapse (int int0, int int1, int int2) { - return 0; -} - -int processExpand (int int0, int int1, int int2) { - return 0; -} - -int processDispose (int arg0, int arg1, int int2) { - return 0; -} - -int processDefaultSelection (int int0, int int1, int int2) { - return 0; -} - -int processDeiconify (int int0, int int1, int int2) { - return 0; -} - -int processFocusIn(int int0, int int1, int int2) { - return 0; -} - -int processFocusOut(int int0, int int1, int int2) { - return 0; -} - -int processHelp (int int0, int int1, int int2) { - return 0; -} - -int processHide (int int0, int int1, int int2) { - return 0; -} - -int processIconify (int int0, int int1, int int2) { - return 0; -} - -int processIMEKey (int str) { - return 0; -} - -int processKeyDown (int arg0, int arg1, int int2) { - return 0; -} - -int processKeyUp (int arg0, int arg1, int int2) { - return 0; -} - -int processModify (int arg0, int arg1, int int2) { - return 0; -} - -int processMouseDown (int arg0, int arg1, int int2) { - return 0; -} - -int processMouseEnter (int arg0, int arg1, int int2) { - return 0; -} - -int processMouseExit (int arg0, int arg1, int int2) { - return 0; -} - -int processMouseHover (int id) { - return 0; -} - -int processMouseMove (int arg0, int arg1, int int2) { - return 0; -} - -int processMouseUp (int arg0, int arg1, int int2) { - return 0; -} - -int processMove (int arg0, int arg1, int int2) { - return 0; -} - -int processPaint (int int0, int int1, int int2) { - return 0; -} - -int processResize (int int0, int int1, int int2) { - return 0; -} - -int processSelection (int int0, int int1, int int2) { - return 0; -} - -int processShow (int int0, int int1, int int2) { - return 0; -} - -int processTimer (int id) { - return 0; -} - -int processTreeColumnSelection (int column) { - return 0; -} - -int processTreeSelection (int model, int path, int iter, int[] selection, int length) { - return 0; -} - -int processTreeToggle (int renderer, int arg1) { - return 0; -} - -int processVerify (int int0, int int1, int int2) { - sendEvent (SWT.Verify); - return 0; + sendEvent (eventType, event, false); } void register () { @@ -1024,12 +1048,16 @@ int topHandle () { return handle; } -boolean translateTraversal (int event) { - return false; +int timerProc (int widget) { + return 0; } -void unblockSignal (int instance, int data) { - OS.g_signal_handlers_unblock_matched (instance, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, data); +int treeSelectionProc (int model, int path, int iter, int[] selection, int length) { + return 0; +} + +boolean translateTraversal (int event) { + return false; } char wcsToMbcs (char ch) { @@ -1043,4 +1071,71 @@ char wcsToMbcs (char ch) { return 0; } +int windowProc (int handle, int user_data) { + switch (user_data) { + case ACTIVATE: return gtk_activate (handle); + case CHANGED: return gtk_changed (handle); + case CLICKED: return gtk_clicked (handle); + case HIDE: return gtk_hide (handle); + case POPUP_MENU: return gtk_popup_menu (handle); + case SELECT: return gtk_select (handle); + case SHOW: return gtk_show (handle); + case VALUE_CHANGED: return gtk_value_changed (handle); + default: return 0; + } +} + +int windowProc (int handle, int arg0, int user_data) { + switch (user_data) { + case -BUTTON_PRESS_EVENT: + case -BUTTON_RELEASE_EVENT: + case -MOTION_NOTIFY_EVENT: { + return 1; + } + case BUTTON_PRESS_EVENT: return gtk_button_press_event (handle, arg0); + case BUTTON_RELEASE_EVENT: return gtk_button_release_event (handle, arg0); + case COMMIT: return gtk_commit (handle, arg0); + case CONFIGURE_EVENT: return gtk_configure_event (handle, arg0); + case DELETE_EVENT: return gtk_delete_event (handle, arg0); + case ENTER_NOTIFY_EVENT: return gtk_enter_notify_event (handle, arg0); + case EVENT: return gtk_event (handle, arg0); + case EVENT_AFTER: return gtk_event_after (handle, arg0); + case EXPOSE_EVENT: return gtk_expose_event (handle, arg0); + case FOCUS_IN_EVENT: return gtk_focus_in_event (handle, arg0); + case FOCUS_OUT_EVENT: return gtk_focus_out_event (handle, arg0); + case KEY_PRESS_EVENT: return gtk_key_press_event (handle, arg0); + case KEY_RELEASE_EVENT: return gtk_key_release_event (handle, arg0); + case LEAVE_NOTIFY_EVENT: return gtk_leave_notify_event (handle, arg0); + case MAP_EVENT: return gtk_map_event (handle, arg0); + case MNEMONIC_ACTIVATE: return gtk_mnemonic_activate (handle, arg0); + case MOTION_NOTIFY_EVENT: return gtk_motion_notify_event (handle, arg0); + case SELECT_CHILD: return gtk_select_child (handle, arg0); + case SHOW_HELP: return gtk_show_help (handle, arg0); + case SIZE_ALLOCATE: return gtk_size_allocate (handle, arg0); + case TOGGLED: return gtk_toggled (handle, arg0); + case UNMAP_EVENT: return gtk_unmap_event (handle, arg0); + default: return 0; + } +} + +int windowProc (int handle, int arg0, int arg1, int user_data) { + switch (user_data) { + case DELETE_RANGE: return gtk_delete_range (handle, arg0, arg1); + case DELETE_TEXT: return gtk_delete_text (handle, arg0, arg1); + case ROW_ACTIVATED: return gtk_row_activated (handle, arg0, arg1); + case ROW_COLLAPSED: return gtk_row_collapsed (handle, arg0, arg1); + case ROW_EXPANDED: return gtk_row_expanded(handle, arg0, arg1); + case SWITCH_PAGE: return gtk_switch_page (handle, arg0, arg1); + default: return 0; + } +} + +int windowProc (int handle, int arg0, int arg1, int arg2, int user_data) { + switch (user_data) { + case INSERT_TEXT: return gtk_insert_text (handle, arg0, arg1, arg2); + default: return 0; + } +} + + } |