diff options
author | Steve Northover <steve> | 2003-03-06 21:47:27 +0000 |
---|---|---|
committer | Steve Northover <steve> | 2003-03-06 21:47:27 +0000 |
commit | 91ca9b8718f2b061952edf08ad752d3a1aa6ef26 (patch) | |
tree | bc715897e3feca35e57943d7cfceb1005e5d79f7 /bundles/org.eclipse.swt/Eclipse SWT | |
parent | 92e83b54977a11052b46f2a93227c10bd401de89 (diff) | |
download | eclipse.platform.swt-91ca9b8718f2b061952edf08ad752d3a1aa6ef26.tar.gz eclipse.platform.swt-91ca9b8718f2b061952edf08ad752d3a1aa6ef26.tar.xz eclipse.platform.swt-91ca9b8718f2b061952edf08ad752d3a1aa6ef26.zip |
*** empty log message ***
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT')
3 files changed, 51 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Table.java index b60b16160d..435683037e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Table.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Table.java @@ -1237,7 +1237,11 @@ void handleEvents(Event event) { } break; case SWT.MouseDoubleClick: - columnMouseDoubleClick(event); + if (event.widget == tableHeader) { + headerMouseDoubleClick(event); + } else { + columnMouseDoubleClick(event); + } break; case SWT.MouseUp: mouseUp(event); @@ -1277,6 +1281,13 @@ void headerMouseDown(Event event) { column.notifyListeners(SWT.Selection, new Event()); } } +void headerMouseDoubleClick(Event event) { + if (event.button != 1) return; + TableColumn column = getColumnAtX(event.x); + if (column != null) { + column.notifyListeners(SWT.DefaultSelection, new Event()); + } +} /** * The mouse pointer was moved over the receiver's header widget. * If a column is currently being resized a vertical line indicating @@ -1404,6 +1415,7 @@ void installListeners() { super.installListeners(); tableHeader.addListener(SWT.MouseMove, listener); tableHeader.addListener(SWT.MouseDown, listener); + tableHeader.addListener(SWT.MouseDoubleClick, listener); tableHeader.addListener(SWT.MouseUp, listener); addListener(SWT.MouseMove, listener); 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 e22fd824b0..d4e15e7d11 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 @@ -30,7 +30,7 @@ import org.eclipse.swt.events.*; public class TableColumn extends Item { int boxHandle, labelHandle, imageHandle; Table parent; - int modelIndex; + int modelIndex, lastButton, lastTime; /** * Constructs a new instance of this class given its parent @@ -258,7 +258,33 @@ public int getWidth () { } int gtk_clicked (int widget) { - postEvent (SWT.Selection); + /* + * There is no API to get a double click on a table column. Normally, when + * the mouse is double clicked, this is indicated by GDK_2BUTTON_PRESS + * but the table column sends the click signal on button release. The fix is to + * test for doublc click by remembering the last click time and mouse button + * and testing for the double click interval. + */ + boolean doubleClick = false; + int eventPtr = OS.gtk_get_current_event (); + if (eventPtr != 0) { + GdkEventButton gdkEvent = new GdkEventButton (); + OS.memmove (gdkEvent, eventPtr, GdkEventButton.sizeof); + switch (gdkEvent.type) { + case OS.GDK_BUTTON_RELEASE: { + Display display = getDisplay (); + int clickTime = display.getDoubleClickTime (); + int eventTime = gdkEvent.time, eventButton = gdkEvent.button; + if (lastButton == eventButton && lastTime != 0 && Math.abs (lastTime - eventTime) <= clickTime) { + doubleClick = true; + } + lastTime = eventTime == 0 ? 1: eventTime; + lastButton = eventButton; + } + } + OS.gdk_event_free (eventPtr); + } + postEvent (doubleClick ? SWT.DefaultSelection : SWT.Selection); return 0; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java index 0aa2cb620b..b308535510 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java @@ -2330,6 +2330,16 @@ LRESULT WM_NOTIFY (int wParam, int lParam) { } break; } + case OS.HDN_ITEMDBLCLICKW: + case OS.HDN_ITEMDBLCLICKA: { + NMHEADER phdn = new NMHEADER (); + OS.MoveMemory (phdn, lParam, NMHEADER.sizeof); + TableColumn column = columns [phdn.iItem]; + if (column != null) { + column.postEvent (SWT.DefaultSelection); + } + break; + } } } return super.WM_NOTIFY (wParam, lParam); |