[gnome-shell] Fix dragging of App Well and Places icons



commit a8fa8a498a81b15435d8382e6d5094581221fd47
Author: Dan Winship <danw gnome org>
Date:   Wed Mar 24 13:27:21 2010 -0400

    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 a8f878e..6b88232 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 99aecec..cd9167f 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 2ff8758..79192cf 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;
@@ -278,6 +282,20 @@ st_clickable_class_init (StClickableClass *klass)
                                                          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
    *
    * This property tracks whether the button should have a "pressed in"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]