summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
diff options
context:
space:
mode:
authorSteve Northover <steve>2006-12-19 22:37:15 +0000
committerSteve Northover <steve>2006-12-19 22:37:15 +0000
commita891c0fc91426e6d9ece1fee52b4ab6dc318c38a (patch)
treef0681e0085283d143d711ba806d1e11d48e47a0d /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
parent36cc85703334232e5404dbbac3e13dd3732f7784 (diff)
downloadeclipse.platform.swt-a891c0fc91426e6d9ece1fee52b4ab6dc318c38a.tar.gz
eclipse.platform.swt-a891c0fc91426e6d9ece1fee52b4ab6dc318c38a.tar.xz
eclipse.platform.swt-a891c0fc91426e6d9ece1fee52b4ab6dc318c38a.zip
104779 - ScrollBar SelectionEvent detail field not being set correctly at end of a drag
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java36
1 files changed, 36 insertions, 0 deletions
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 3f4b7df339..24aa86e030 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
@@ -83,6 +83,7 @@ public class ScrollBar extends Widget {
Scrollable parent;
int /*long*/ adjustmentHandle;
int detail;
+ boolean dragSent;
ScrollBar () {
}
@@ -340,6 +341,14 @@ public boolean getVisible () {
}
}
+int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ eventPtr) {
+ int /*long*/ result = super.gtk_button_press_event (widget, eventPtr);
+ if (result != 0) return result;
+ detail = OS.GTK_SCROLL_NONE;
+ dragSent = false;
+ return result;
+}
+
int /*long*/ gtk_change_value (int /*long*/ widget, int /*long*/ scroll, int /*long*/ value1, int /*long*/ value2) {
detail = (int)/*64*/scroll;
return 0;
@@ -347,6 +356,7 @@ int /*long*/ gtk_change_value (int /*long*/ widget, int /*long*/ scroll, int /*l
int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
Event event = new Event ();
+ dragSent = detail == OS.GTK_SCROLL_JUMP;
switch (detail) {
case OS.GTK_SCROLL_NONE: event.detail = SWT.NONE; break;
case OS.GTK_SCROLL_JUMP: event.detail = SWT.DRAG; break;
@@ -366,17 +376,43 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
case OS.GTK_SCROLL_STEP_BACKWARD: event.detail = SWT.ARROW_UP; break;
}
detail = OS.GTK_SCROLL_NONE;
+ if (!dragSent) detail = OS.GTK_SCROLL_NONE;
postEvent (SWT.Selection, event);
parent.updateScrollBarValue (this);
return 0;
}
+int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
+ GdkEvent gtkEvent = new GdkEvent ();
+ OS.memmove (gtkEvent, gdkEvent, GdkEvent.sizeof);
+ switch (gtkEvent.type) {
+ case OS.GDK_BUTTON_RELEASE: {
+ GdkEventButton gdkEventButton = new GdkEventButton ();
+ OS.memmove (gdkEventButton, gdkEvent, GdkEventButton.sizeof);
+ if (gdkEventButton.button == 1 && detail == SWT.DRAG) {
+ if (!dragSent) {
+ Event event = new Event ();
+ event.detail = SWT.DRAG;
+ postEvent (SWT.Selection, event);
+ }
+ postEvent (SWT.Selection);
+ }
+ detail = OS.GTK_SCROLL_NONE;
+ dragSent = false;
+ break;
+ }
+ }
+ return super.gtk_event_after (widget, gdkEvent);
+}
+
void hookEvents () {
super.hookEvents ();
if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
OS.g_signal_connect_closure (handle, OS.change_value, display.closures [CHANGE_VALUE], false);
}
OS.g_signal_connect_closure (adjustmentHandle, OS.value_changed, display.closures [VALUE_CHANGED], false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [EVENT_AFTER], 0, display.closures [EVENT_AFTER], false);
+ OS.g_signal_connect_closure_by_id (handle, display.signalIds [BUTTON_PRESS_EVENT], 0, display.closures [BUTTON_PRESS_EVENT], false);
}
/**