summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2009-10-23 19:37:07 +0000
committerFelipe Heidrich <fheidric>2009-10-23 19:37:07 +0000
commit3c583b230fbcccc2783c71ce9fd0e1a3f475cab4 (patch)
tree14e149451ef607818a2417e1f805388856704493 /bundles/org.eclipse.swt
parentad2f7a3dbde5efa498f9080cce5bfb2b90785d8d (diff)
downloadeclipse.platform.swt-3c583b230fbcccc2783c71ce9fd0e1a3f475cab4.tar.gz
eclipse.platform.swt-3c583b230fbcccc2783c71ce9fd0e1a3f475cab4.tar.xz
eclipse.platform.swt-3c583b230fbcccc2783c71ce9fd0e1a3f475cab4.zip
Bug 65679 - SelectionEvent.stateMask remains 0 even Ctrl (Shift, Alt) were pressed during push operation on button
Diffstat (limited to 'bundles/org.eclipse.swt')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolItem.java3
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java23
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java30
23 files changed, 86 insertions, 74 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolItem.java
index 2681e09245..8f3b17a6da 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolItem.java
@@ -398,7 +398,8 @@ void onSelection (Event ev) {
event.x = bounds.x;
event.y = bounds.y + bounds.height;
}
- postEvent (SWT.Selection, event);
+ event.stateMask = ev.stateMask;
+ sendSelectionEvent (SWT.Selection, event, false);
}
/**
* Removes the listener from the collection of listeners that
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