aboutsummaryrefslogtreecommitdiffstats
path: root/lib/egg/eggstatusicon.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/egg/eggstatusicon.c')
-rw-r--r--lib/egg/eggstatusicon.c21
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;
}