diff options
Diffstat (limited to 'lib/egg/eggstatusicon.c')
-rw-r--r-- | lib/egg/eggstatusicon.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/egg/eggstatusicon.c b/lib/egg/eggstatusicon.c index 1893d4459..72dcef518 100644 --- a/lib/egg/eggstatusicon.c +++ b/lib/egg/eggstatusicon.c @@ -80,6 +80,7 @@ struct _EggStatusIconPrivate guint blinking : 1; guint blink_off : 1; + guint button_down : 1; }; static void egg_status_icon_class_init (EggStatusIconClass *klass); @@ -99,6 +100,8 @@ static void egg_status_icon_size_allocate (EggStatusIcon *status_icon, GtkAllocation *allocation); static gboolean egg_status_icon_button_press (EggStatusIcon *status_icon, GdkEventButton *event); +static gboolean egg_status_icon_button_release (EggStatusIcon *status_icon, + GdkEventButton *event); static void egg_status_icon_disable_blinking (EggStatusIcon *status_icon); static void egg_status_icon_reset_image_data (EggStatusIcon *status_icon); @@ -256,6 +259,8 @@ egg_status_icon_init (EggStatusIcon *status_icon) g_signal_connect_swapped (status_icon->priv->tray_icon, "button-press-event", G_CALLBACK (egg_status_icon_button_press), status_icon); + g_signal_connect_swapped (status_icon->priv->tray_icon, "button-release-event", + G_CALLBACK (egg_status_icon_button_release), status_icon); status_icon->priv->image = gtk_image_new (); gtk_container_add (GTK_CONTAINER (status_icon->priv->tray_icon), @@ -558,8 +563,22 @@ static gboolean egg_status_icon_button_press (EggStatusIcon *status_icon, GdkEventButton *event) { - if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) + if (event->button == 1 && !status_icon->priv->button_down) + { + status_icon->priv->button_down = TRUE; + return TRUE; + } + + return FALSE; +} + +static gboolean +egg_status_icon_button_release (EggStatusIcon *status_icon, + GdkEventButton *event) +{ + if (event->button == 1 && status_icon->priv->button_down) { + status_icon->priv->button_down = FALSE; emit_activate_signal (status_icon); return TRUE; } |