From a8fa8a498a81b15435d8382e6d5094581221fd47 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 24 Mar 2010 13:27:21 -0400 Subject: [PATCH] Fix dragging of App Well and Places icons The hover rewrite added a freeze/thaw_notify to st_clickable_leave_event() (to match the one already in st_clickable_enter_event()), which broke code in two places that assumed "pressed" would still be TRUE when "hover" changed to FALSE. Fix that by exposing the "held" property as well. --- js/ui/appDisplay.js | 2 +- js/ui/placeDisplay.js | 2 +- src/st/st-clickable.c | 20 +++++++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index a8f878efa..6b882320c 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -451,7 +451,7 @@ AppWellIcon.prototype = { _onHoverChange: function(actor) { let hover = this.actor.hover; if (!hover) { - if (this.actor.pressed && this._dragStartX != null) { + if (this.actor.held && this._dragStartX != null) { this.actor.fake_release(); this._draggable.startDrag(this._dragStartX, this._dragStartY, global.get_current_time()); diff --git a/js/ui/placeDisplay.js b/js/ui/placeDisplay.js index 99aecec48..cd9167fee 100644 --- a/js/ui/placeDisplay.js +++ b/js/ui/placeDisplay.js @@ -476,7 +476,7 @@ DashPlaceDisplayItem.prototype = { _onHoverChanged: function(button) { let hover = button.hover; if (!hover) { - if (button.pressed && this._dragStartX != null) { + if (button.held && this._dragStartX != null) { button.fake_release(); this._draggable.startDrag(this._dragStartX, this._dragStartY, global.get_current_time()); diff --git a/src/st/st-clickable.c b/src/st/st-clickable.c index 2ff875817..79192cfc5 100644 --- a/src/st/st-clickable.c +++ b/src/st/st-clickable.c @@ -32,7 +32,8 @@ enum { PROP_0, PROP_ACTIVE, - PROP_PRESSED, + PROP_HELD, + PROP_PRESSED }; static guint st_clickable_signals [LAST_SIGNAL] = { 0 }; @@ -223,6 +224,9 @@ st_clickable_get_property (GObject *object, case PROP_ACTIVE: g_value_set_boolean (value, self->priv->active); break; + case PROP_HELD: + g_value_set_boolean (value, self->priv->held); + break; case PROP_PRESSED: g_value_set_boolean (value, self->priv->pressed); break; @@ -277,6 +281,20 @@ st_clickable_class_init (StClickableClass *klass) FALSE, G_PARAM_READWRITE)); + /** + * StClickable:held + * + * This property tracks whether the button has the pointer grabbed, + * whether or not the pointer is currently hovering over the button. + */ + g_object_class_install_property (gobject_class, + PROP_HELD, + g_param_spec_boolean ("held", + "Held state", + "Whether the mouse button is currently pressed", + FALSE, + G_PARAM_READABLE)); + /** * StClickable:pressed *