summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT
diff options
context:
space:
mode:
authorSteve Northover <steve>2003-03-06 21:47:27 +0000
committerSteve Northover <steve>2003-03-06 21:47:27 +0000
commit91ca9b8718f2b061952edf08ad752d3a1aa6ef26 (patch)
treebc715897e3feca35e57943d7cfceb1005e5d79f7 /bundles/org.eclipse.swt/Eclipse SWT
parent92e83b54977a11052b46f2a93227c10bd401de89 (diff)
downloadeclipse.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')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Table.java14
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java30
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java10
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);