diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk')
22 files changed, 84 insertions, 73 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 41802dc836..decf696388 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 @@ -407,7 +407,7 @@ int /*long*/ gtk_clicked (int /*long*/ widget) { } } } - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); return 0; } @@ -650,7 +650,7 @@ boolean setRadioSelection (boolean value) { if ((style & SWT.RADIO) == 0) return false; if (getSelection () != value) { setSelection (value); - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } return true; } 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 903626b9de..85aee169a0 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 @@ -1139,7 +1139,7 @@ public int getVisibleItemCount () { } int /*long*/ gtk_activate (int /*long*/ widget) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); return 0; } @@ -1178,7 +1178,7 @@ int /*long*/ gtk_changed (int /*long*/ widget) { * item and not matching the item as the user types. */ int index = OS.gtk_combo_box_get_active (handle); - if (index != -1) postEvent (SWT.Selection); + if (index != -1) sendSelectionEvent (SWT.Selection); indexSelected = -1; return 0; } @@ -1191,7 +1191,7 @@ int /*long*/ gtk_changed (int /*long*/ widget) { String text = new String (Converter.mbcsToWcs (null, buffer)); for (int i = 0; i < items.length; i++) { if (items [i].equals (text)) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); break; } } @@ -1465,7 +1465,7 @@ int /*long*/ gtk_selection_done(int /*long*/ menushell) { indexSelected = index; } else if (index != -1 && indexSelected == index) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java index e2a35e8cde..e69a9985f5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java @@ -489,7 +489,7 @@ int /*long*/ gtk_day_selected (int /*long*/ widget) { } int /*long*/ gtk_day_selected_double_click (int /*long*/ widget) { - postEvent(SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); return 0; } @@ -580,7 +580,7 @@ void onKeyDown(Event event) { setTextField(fieldName, calendar.getActualMaximum(fieldName), true, true); break; case SWT.CR: - postEvent(SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); break; default: switch (event.character) { @@ -745,7 +745,7 @@ void sendSelectionEvent () { year = y[0]; month = m[0]; day = d[0]; - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } } @@ -809,7 +809,7 @@ void setField(int fieldName, int value) { calendar.roll(Calendar.HOUR_OF_DAY, 12); // TODO: needs more work for setFormat and locale } calendar.set(fieldName, value); - postEvent(SWT.Selection); + sendSelectionEvent (SWT.Selection); } void setTextField(int fieldName, int value, boolean commit, boolean adjust) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java index 3ac9fb7ab5..efe2611a3c 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java @@ -337,7 +337,7 @@ int /*long*/ gtk_button_release_event (int /*long*/ widget, int /*long*/ event) if (rect.contains (x, y)) { Event ev = new Event (); ev.text = ids [focusIndex]; - sendEvent (SWT.Selection, ev); + sendSelectionEvent (SWT.Selection, ev, true); return result; } } @@ -410,7 +410,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ eventPtr) { case OS.GDK_space: Event event = new Event (); event.text = ids [focusIndex]; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); break; case OS.GDK_Tab: if (focusIndex < offsets.length - 1) { 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 b1df97fd18..064475d5fc 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 @@ -715,7 +715,7 @@ public int getTopIndex () { } int /*long*/ gtk_changed (int /*long*/ widget) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); return 0; } @@ -790,7 +790,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ event) { switch (key) { case OS.GDK_Return: case OS.GDK_KP_Enter: { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); break; } } @@ -813,7 +813,7 @@ int /*long*/ gtk_popup_menu (int /*long*/ widget) { } int /*long*/ gtk_row_activated (int /*long*/ tree, int /*long*/ path, int /*long*/ column) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); return 0; } 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 d676e46e4a..e88eefdf89 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 @@ -411,31 +411,12 @@ int /*long*/ gtk_activate (int /*long*/ widget) { * activate signals when an ancestor menu is disabled. */ if (!isEnabled ()) return 0; - Event event = new Event (); - int /*long*/ ptr = OS.gtk_get_current_event (); - if (ptr != 0) { - GdkEvent gdkEvent = new GdkEvent (); - OS.memmove (gdkEvent, ptr, GdkEvent.sizeof); - switch (gdkEvent.type) { - case OS.GDK_KEY_PRESS: - case OS.GDK_KEY_RELEASE: - case OS.GDK_BUTTON_PRESS: - case OS.GDK_2BUTTON_PRESS: - case OS.GDK_BUTTON_RELEASE: { - int [] state = new int [1]; - OS.gdk_event_get_state (ptr, state); - setInputState (event, state [0]); - break; - } - } - OS.gdk_event_free (ptr); - } if ((style & SWT.RADIO) != 0) { if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) { selectRadio (); } } - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection); return 0; } @@ -765,7 +746,7 @@ boolean setRadioSelection (boolean value) { if ((style & SWT.RADIO) == 0) return false; if (getSelection () != value) { setSelection (value); - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } return true; } 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 4c5d29ce0a..b2747da446 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 @@ -193,7 +193,7 @@ int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ eventPtr) event.detail = SWT.DRAG; } if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth () - width - event.x; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); if (isDisposed ()) return 0; if (event.doit) { dragging = true; @@ -229,7 +229,7 @@ int /*long*/ gtk_button_release_event (int /*long*/ widget, int /*long*/ eventPt event.height = height; drawBand (lastX, lastY, width, height); if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth () - width - event.x; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); if (isDisposed ()) return result; if (event.doit) { if ((style & SWT.SMOOTH) != 0) { @@ -300,7 +300,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ eventPtr) { event.width = width; event.height = height; if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth () - width - event.x; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); if (ptrGrabResult == OS.GDK_GRAB_SUCCESS) OS.gdk_pointer_ungrab (OS.GDK_CURRENT_TIME); if (isDisposed ()) break; @@ -373,7 +373,7 @@ int /*long*/ gtk_motion_notify_event (int /*long*/ widget, int /*long*/ eventPtr event.detail = SWT.DRAG; } if ((parent.style & SWT.MIRRORED) != 0) event.x = parent.getClientWidth() - width - event.x; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); if (isDisposed ()) return 0; if (event.doit) { lastX = event.x; 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 47e6ebbf5c..8784f03bf0 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 @@ -240,7 +240,7 @@ public int getSelection () { } int /*long*/ gtk_value_changed (int /*long*/ adjustment) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); return 0; } 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 34930fbeb6..560c841dfa 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 @@ -466,7 +466,7 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) { } detail = OS.GTK_SCROLL_NONE; if (!dragSent) detail = OS.GTK_SCROLL_NONE; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); parent.updateScrollBarValue (this); return 0; } @@ -482,9 +482,9 @@ int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) { if (!dragSent) { Event event = new Event (); event.detail = SWT.DRAG; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } detail = OS.GTK_SCROLL_NONE; dragSent = false; 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 61d636b946..f240cae42a 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 @@ -210,7 +210,7 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) { case OS.GTK_SCROLL_STEP_BACKWARD: event.detail = SWT.ARROW_UP; break; } if (!dragSent) detail = OS.GTK_SCROLL_NONE; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); return 0; } @@ -225,9 +225,9 @@ int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) { if (!dragSent) { Event event = new Event (); event.detail = SWT.DRAG; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } detail = OS.GTK_SCROLL_NONE; dragSent = false; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java index 69572a34d6..af9fff43be 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java @@ -559,7 +559,7 @@ String getDecimalSeparator () { } int /*long*/ gtk_activate (int /*long*/ widget) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); return 0; } @@ -733,7 +733,7 @@ int /*long*/ gtk_populate_popup (int /*long*/ widget, int /*long*/ menu) { } int /*long*/ gtk_value_changed (int /*long*/ widget) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); return 0; } 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 68ddc4b10b..4c284130fb 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 @@ -248,7 +248,7 @@ void createItem (TabItem item, int index) { OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, SWITCH_PAGE); Event event = new Event(); event.item = items[0]; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); // the widget could be destroyed at this point } } @@ -277,7 +277,7 @@ void destroyItem (TabItem item) { } Event event = new Event (); event.item = items [newIndex]; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); // the widget could be destroyed at this point } } @@ -448,7 +448,7 @@ int /*long*/ gtk_switch_page (int /*long*/ widget, int /*long*/ page, int /*long } Event event = new Event(); event.item = item; - postEvent(SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); return 0; } @@ -666,7 +666,7 @@ void setSelection (int index, boolean notify) { if (notify) { Event event = new Event (); event.item = item; - sendEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, true); } } } 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 c749930727..5a3379865e 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 @@ -1929,7 +1929,7 @@ int /*long*/ gtk_changed (int /*long*/ widget) { if (item != null) { Event event = new Event (); event.item = item; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } return 0; } @@ -1951,7 +1951,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ eventPtr) { case OS.GDK_KP_Enter: { Event event = new Event (); event.item = getFocusItem (); - postEvent (SWT.DefaultSelection, event); + sendSelectionEvent (SWT.DefaultSelection, event, false); break; } } @@ -1989,7 +1989,7 @@ int /*long*/ gtk_row_activated (int /*long*/ tree, int /*long*/ path, int /*long } Event event = new Event (); event.item = item; - postEvent (SWT.DefaultSelection, event); + sendSelectionEvent (SWT.DefaultSelection, event, false); return 0; } @@ -2019,7 +2019,7 @@ int /*long*/ gtk_toggled (int /*long*/ renderer, int /*long*/ pathStr) { Event event = new Event (); event.detail = SWT.CHECK; event.item = item; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } OS.gtk_tree_path_free (path); 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 4a62dfef8c..807c526499 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 @@ -362,7 +362,7 @@ int /*long*/ gtk_clicked (int /*long*/ widget) { } } } - if (postEvent) postEvent (doubleClick ? SWT.DefaultSelection : SWT.Selection); + if (postEvent) sendSelectionEvent (doubleClick ? SWT.DefaultSelection : SWT.Selection); return 0; } 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 be100c5a88..c0a7aa320f 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 @@ -1122,7 +1122,7 @@ public int getTopPixel () { } int /*long*/ gtk_activate (int /*long*/ widget) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); return 0; } @@ -1395,7 +1395,7 @@ int /*long*/ gtk_icon_release (int /*long*/ widget, int /*long*/ icon_pos, int / e.detail = SWT.ICON_CANCEL; OS.gtk_editable_delete_text (handle, 0, -1); } - postEvent(SWT.DefaultSelection, e); + sendSelectionEvent (SWT.DefaultSelection, e, false); return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java index 2d7306e76c..7e10532e9a 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java @@ -391,7 +391,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ eventPtr) { event.x = OS.GTK_WIDGET_X (topHandle); event.y = OS.GTK_WIDGET_Y (topHandle) + OS.GTK_WIDGET_HEIGHT (topHandle); if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth() - OS.GTK_WIDGET_WIDTH(topHandle) - event.x; - item.postEvent (SWT.Selection, event); + item.sendSelectionEvent (SWT.Selection, event, false); return result; } } 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 fa2879a002..d741c89cde 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 @@ -554,7 +554,7 @@ int /*long*/ gtk_clicked (int /*long*/ widget) { selectRadio (); } } - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); return 0; } @@ -964,7 +964,7 @@ boolean setRadioSelection (boolean value) { if ((style & SWT.RADIO) == 0) return false; if (getSelection () != value) { setSelection (value); - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } return true; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java index a106744329..7572b30859 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java @@ -463,7 +463,7 @@ public boolean getVisible () { } int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event) { - notifyListeners (SWT.Selection, new Event ()); + sendSelectionEvent (SWT.Selection, null, true); setVisible (false); return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java index 7d1fb1f17b..ca2e9be981 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java @@ -255,7 +255,7 @@ public String getToolTipText () { } int /*long*/ gtk_activate (int /*long*/ widget) { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); /* * Feature in GTK. GTK will generate a single-click event before sending * a double-click event. To know when to send a DefaultSelection, look for @@ -273,7 +273,7 @@ int /*long*/ gtk_activate (int /*long*/ widget) { } OS.gdk_event_free (nextEvent); if (currEventType == OS.GDK_BUTTON_PRESS && nextEventType == OS.GDK_2BUTTON_PRESS) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); } } return 0; @@ -288,9 +288,9 @@ int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ eventPtr) return 0; } if (gdkEvent.type == OS.GDK_2BUTTON_PRESS) { - postEvent (SWT.DefaultSelection); + sendSelectionEvent (SWT.DefaultSelection); } else { - postEvent (SWT.Selection); + sendSelectionEvent (SWT.Selection); } return 0; } 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 9b5d5b2d53..310d6bb39b 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 @@ -1927,7 +1927,7 @@ int /*long*/ gtk_changed (int /*long*/ widget) { if (item != null) { Event event = new Event (); event.item = item; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } return 0; } @@ -1955,7 +1955,7 @@ int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ eventPtr) { case OS.GDK_KP_Enter: { Event event = new Event (); event.item = getFocusItem (); - postEvent (SWT.DefaultSelection, event); + sendSelectionEvent (SWT.DefaultSelection, event, false); break; } } @@ -1995,7 +1995,7 @@ int /*long*/ gtk_row_activated (int /*long*/ tree, int /*long*/ path, int /*long OS.g_free (iter); Event event = new Event (); event.item = item; - postEvent (SWT.DefaultSelection, event); + sendSelectionEvent (SWT.DefaultSelection, event, false); return 0; } @@ -2108,7 +2108,7 @@ int /*long*/ gtk_toggled (int /*long*/ renderer, int /*long*/ pathStr) { Event event = new Event (); event.detail = SWT.CHECK; event.item = item; - postEvent (SWT.Selection, event); + sendSelectionEvent (SWT.Selection, event, false); } return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java index a3b6ee52ff..ea79cd0b57 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java @@ -364,7 +364,7 @@ int /*long*/ gtk_clicked (int /*long*/ widget) { } } } - if (postEvent) postEvent (doubleClick ? SWT.DefaultSelection : SWT.Selection); + if (postEvent) sendSelectionEvent (doubleClick ? SWT.DefaultSelection : SWT.Selection); return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java index 38ec34e753..ae822517fb 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 @@ -1301,6 +1301,36 @@ char [] sendIMKeyEvent (int type, GdkEventKey keyEvent, char [] chars) { return chars; } +void sendSelectionEvent (int eventType) { + sendSelectionEvent (eventType, null, false); +} + +void sendSelectionEvent (int eventType, Event event, boolean send) { + if (eventTable == null && !display.filters (eventType)) { + return; + } + if (event == null) event = new Event (); + int /*long*/ ptr = OS.gtk_get_current_event (); + if (ptr != 0) { + GdkEvent gdkEvent = new GdkEvent (); + OS.memmove (gdkEvent, ptr, GdkEvent.sizeof); + switch (gdkEvent.type) { + case OS.GDK_KEY_PRESS: + case OS.GDK_KEY_RELEASE: + case OS.GDK_BUTTON_PRESS: + case OS.GDK_2BUTTON_PRESS: + case OS.GDK_BUTTON_RELEASE: { + int [] state = new int [1]; + OS.gdk_event_get_state (ptr, state); + setInputState (event, state [0]); + break; + } + } + OS.gdk_event_free (ptr); + } + sendEvent (eventType, event, send); +} + /** * Sets the application defined widget data associated * with the receiver to be the argument. The <em>widget |