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.
This commit is contained in:
Dan Winship 2010-03-24 13:27:21 -04:00
parent 5635797cb9
commit a8fa8a498a
3 changed files with 21 additions and 3 deletions

View File

@ -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());

View File

@ -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());

View File

@ -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
*