Bug 559771 - [GTK] SWT.CHECK and SWT.MULTI Table space checks only first
selected item
Added ability to press space & have all selected table items checked.
Change-Id: I8f874ed3706d7b934d3ea81c75a3d680d92613a8
Signed-off-by: Paul D'Pong <sdamrong@redhat.com>
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 aeeab7b..f589b6e 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
@@ -2150,27 +2150,41 @@
long gtk_key_press_event (long widget, long event) {
int [] key = new int[1];
GDK.gdk_event_get_keyval(event, key);
- keyPressDefaultSelectionHandler (event, key[0]);
- return super.gtk_key_press_event (widget, event);
-}
-/**
- * Used to emulate DefaultSelection event. See Bug 312568.
- * @param event the gtk key press event that was fired.
- */
-void keyPressDefaultSelectionHandler (long event, int key) {
- int keymask = gdk_event_get_state (event);
- switch (key) {
+ switch (key[0]) {
case GDK.GDK_Return:
// Send DefaultSelectionEvent when:
// when : Enter, Shift+Enter, Ctrl+Enter are pressed.
// Not when: Alt+Enter, (Meta|Super|Hyper)+Enter, reason is stateMask is not provided on Gtk.
// Note: alt+Enter creates a selection on GTK, but we filter it out to be a bit more consitent Win32 (521387)
+ int keymask = gdk_event_get_state (event);
if ((keymask & (GDK.GDK_SUPER_MASK | GDK.GDK_META_MASK | GDK.GDK_HYPER_MASK | GDK.GDK_MOD1_MASK)) == 0) {
sendTreeDefaultSelection ();
}
break;
+ case GDK.GDK_space:
+ if ((style & SWT.CHECK) != 0) {
+ TableItem[] selected = getSelection();
+ for (int i = 0; i < selected.length; i++) {
+ toggleItemAndSendEvent(selected[i]);
+ }
+
+ // Maintain current selection by stopping additional handling to GDK_space event
+ return 1;
+ }
+ break;
}
+
+ return super.gtk_key_press_event (widget, event);
+}
+
+private void toggleItemAndSendEvent(TableItem item) {
+ item.setChecked (!item.getChecked ());
+
+ Event event = new Event ();
+ event.detail = SWT.CHECK;
+ event.item = item;
+ sendSelectionEvent (SWT.Selection, event, false);
}
/**
@@ -2360,11 +2374,7 @@
int [] index = new int [1];
C.memmove (index, indices, 4);
TableItem item = _getItem (index [0]);
- item.setChecked (!item.getChecked ());
- Event event = new Event ();
- event.detail = SWT.CHECK;
- event.item = item;
- sendSelectionEvent (SWT.Selection, event, false);
+ toggleItemAndSendEvent(item);
}
GTK.gtk_tree_path_free (path);
return 0;