diff options
| -rw-r--r-- | src/daemon/daemon.c | 8 | ||||
| -rw-r--r-- | src/themes/nodoka/nodoka-theme.c | 11 | ||||
| -rw-r--r-- | src/themes/slider/theme.c | 9 | ||||
| -rw-r--r-- | src/themes/standard/theme.c | 9 |
4 files changed, 32 insertions, 5 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index e5033de..a7c63a6 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c @@ -756,8 +756,14 @@ static void _notification_destroyed_cb(GtkWindow* nw, NotifyDaemon* daemon) /* * This usually won't happen, but can if notification-daemon dies before * all notifications are closed. Mark them as expired. + * + * But if instead the notification's close button was clicked, the + * "_user_closed" flag will be set on the window, so we send the + * correct reason. */ - _close_notification(daemon, NW_GET_NOTIFY_ID(nw), FALSE, NOTIFYD_CLOSED_EXPIRED); + gboolean user_closed = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(nw), "_user_closed")); + _close_notification(daemon, NW_GET_NOTIFY_ID(nw), FALSE, + user_closed ? NOTIFYD_CLOSED_USER : NOTIFYD_CLOSED_EXPIRED); } #ifdef HAVE_X11 diff --git a/src/themes/nodoka/nodoka-theme.c b/src/themes/nodoka/nodoka-theme.c index 8600d60..4de4d5d 100644 --- a/src/themes/nodoka/nodoka-theme.c +++ b/src/themes/nodoka/nodoka-theme.c @@ -748,6 +748,13 @@ get_theme_info(char **theme_name, *homepage = g_strdup("https://nodoka.fedorahosted.org/"); } +static void +close_button_clicked_cb(GtkButton* button, GtkWidget* win) +{ + g_object_set_data(G_OBJECT(win), "_user_closed", GINT_TO_POINTER(1)); + gtk_widget_destroy(win); +} + /* Create new notification */ GtkWindow * create_notification(UrlClickedCb url_clicked) @@ -860,8 +867,8 @@ create_notification(UrlClickedCb url_clicked) gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); gtk_widget_set_size_request(close_button, 24, 24); - g_signal_connect_swapped(G_OBJECT(close_button), "clicked", - G_CALLBACK(gtk_widget_destroy), win); + g_signal_connect(G_OBJECT(close_button), "clicked", + G_CALLBACK(close_button_clicked_cb), win); atkobj = gtk_widget_get_accessible(close_button); atk_action_set_description(ATK_ACTION(atkobj), 0, diff --git a/src/themes/slider/theme.c b/src/themes/slider/theme.c index 7672a8d..c75967a 100644 --- a/src/themes/slider/theme.c +++ b/src/themes/slider/theme.c @@ -306,6 +306,13 @@ static void on_composited_changed(GtkWidget* window, WindowData* windata) gtk_widget_queue_draw (windata->win); } +static void +close_button_clicked_cb(GtkButton* button, GtkWidget* win) +{ + g_object_set_data(G_OBJECT(win), "_user_closed", GINT_TO_POINTER(1)); + gtk_widget_destroy(win); +} + GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* win; @@ -400,7 +407,7 @@ GtkWindow* create_notification(UrlClickedCb url_clicked) gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); - g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); + g_signal_connect(G_OBJECT(close_button), "clicked", G_CALLBACK(close_button_clicked_cb), win); atkobj = gtk_widget_get_accessible(close_button); atk_action_set_description(ATK_ACTION(atkobj), 0, diff --git a/src/themes/standard/theme.c b/src/themes/standard/theme.c index 90171c6..b670f5b 100644 --- a/src/themes/standard/theme.c +++ b/src/themes/standard/theme.c @@ -642,6 +642,13 @@ static gboolean activate_link(GtkLabel* label, const char* url, WindowData* wind return TRUE; } +static void +close_button_clicked_cb(GtkButton* button, GtkWidget* win) +{ + g_object_set_data(G_OBJECT(win), "_user_closed", GINT_TO_POINTER(1)); + gtk_widget_destroy(win); +} + GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* spacer; @@ -754,7 +761,7 @@ GtkWindow* create_notification(UrlClickedCb url_clicked) gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); //gtk_widget_set_size_request(close_button, 20, 20); - g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); + g_signal_connect(G_OBJECT(close_button), "clicked", G_CALLBACK(close_button_clicked_cb), win); atkobj = gtk_widget_get_accessible(close_button); atk_action_set_description(ATK_ACTION(atkobj), 0, |
