From 873550ef30d4e8c8d249442fb5002095765a764f Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Sat, 10 Jan 2004 14:16:16 +0000 Subject: keep all the tray icons we create in a list. (tray_icon_destroyed_cb): 2004-01-10 Rodrigo Moya * gui/alarm-notify/alarm-queue.c (display_notification): keep all the tray icons we create in a list. (tray_icon_destroyed_cb): remove the tray icon data from the list. (popup_dismiss_cb, popup_dismiss_all_cb): implemented missing popup menu items. svn path=/trunk/; revision=24145 --- calendar/gui/alarm-notify/alarm-queue.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'calendar/gui/alarm-notify') diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c index 610e84f8d7..24c89ce0d4 100644 --- a/calendar/gui/alarm-notify/alarm-queue.c +++ b/calendar/gui/alarm-notify/alarm-queue.c @@ -65,6 +65,9 @@ static time_t saved_notification_time; /* Clients we are monitoring for alarms */ static GHashTable *client_alarms_hash = NULL; +/* List of tray icons being displayed */ +static GList *tray_icons_list = NULL; + /* Structure that stores a client we are monitoring */ typedef struct { /* Monitored client */ @@ -796,6 +799,8 @@ tray_icon_destroyed_cb (GtkWidget *tray, gpointer user_data) g_object_unref (tray_data->comp); g_object_unref (tray_data->client); + + tray_icons_list = g_list_remove (tray_icons_list, tray_data); g_free (tray_data); return TRUE; @@ -858,11 +863,19 @@ open_alarm_dialog (TrayIconData *tray_data) static void popup_dismiss_cb (GtkWidget *widget, TrayIconData *tray_data) { + gtk_widget_destroy (tray_data->tray_icon); } static void popup_dismiss_all_cb (GtkWidget *widget, TrayIconData *tray_data) { + while (tray_icons_list != NULL) { + TrayIconData *tray_data = tray_icons_list->data; + + gtk_widget_destroy (tray_data->tray_icon); + + tray_icons_list = g_list_remove (tray_icons_list, tray_icons_list); + } } static void @@ -999,6 +1012,8 @@ display_notification (time_t trigger, CompQueuedAlarms *cqa, g_object_ref (tray_data->client); tray_data->tray_icon = tray_icon; + tray_icons_list = g_list_prepend (tray_icons_list, tray_data); + g_signal_connect (G_OBJECT (tray_icon), "destroy", G_CALLBACK (tray_icon_destroyed_cb), tray_data); g_signal_connect (G_OBJECT (ebox), "button_press_event", -- cgit v1.2.3