Add shell_button_box_fake_release
The application menu code wants to do a popup after a given timeout while holding. We can implement that by adding a function to manually break the grab held by the button box. Freeze+thaw around the hover and pressed property notification on leave since handlers may want to depend on the pressed state on a hover transition.
This commit is contained in:
parent
926643b025
commit
0a17a28608
@ -89,9 +89,13 @@ shell_button_box_enter_event (ClutterActor *actor,
|
||||
if (!shell_button_box_contains (box, event->source))
|
||||
return TRUE;
|
||||
|
||||
set_hover (box, TRUE);
|
||||
g_object_freeze_notify (G_OBJECT (actor));
|
||||
|
||||
if (box->priv->held)
|
||||
set_pressed (box, TRUE);
|
||||
set_hover (box, TRUE);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (actor));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -159,6 +163,31 @@ shell_button_box_button_release_event (ClutterActor *actor,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_button_box_fake_release:
|
||||
* @box:
|
||||
*
|
||||
* If this button box is holding a pointer grab, this function will
|
||||
* will ungrab it, and reset the pressed state. The effect is
|
||||
* similar to if the user had released the mouse button, but without
|
||||
* emitting the activate signal.
|
||||
*
|
||||
* This function is useful if for example you want to do something after the user
|
||||
* is holding the mouse button for a given period of time, breaking the
|
||||
* grab.
|
||||
*/
|
||||
void
|
||||
shell_button_box_fake_release (ShellButtonBox *box)
|
||||
{
|
||||
if (!box->priv->held)
|
||||
return;
|
||||
|
||||
box->priv->held = FALSE;
|
||||
clutter_ungrab_pointer ();
|
||||
|
||||
set_pressed (box, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_button_box_set_property(GObject *object,
|
||||
guint prop_id,
|
||||
|
@ -30,4 +30,6 @@ struct _ShellButtonBoxClass
|
||||
|
||||
GType shell_button_box_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void shell_button_box_fake_release (ShellButtonBox *box);
|
||||
|
||||
#endif /* __SHELL_BUTTON_BOX_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user