diff options
author | Steve Northover <steve> | 2006-12-19 22:37:15 +0000 |
---|---|---|
committer | Steve Northover <steve> | 2006-12-19 22:37:15 +0000 |
commit | a891c0fc91426e6d9ece1fee52b4ab6dc318c38a (patch) | |
tree | f0681e0085283d143d711ba806d1e11d48e47a0d /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java | |
parent | 36cc85703334232e5404dbbac3e13dd3732f7784 (diff) | |
download | eclipse.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.java | 36 |
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); } /** |