diff options
| author | Victor Kareh <[email protected]> | 2026-03-21 12:06:06 -0400 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-03-22 17:34:10 -0400 |
| commit | 24562cc76211579c9169039dab5d337a4731cf6e (patch) | |
| tree | 3e5a85959b33093c71d2ba888515e63aea2b1343 /src/themes | |
| parent | 3f72f66032c6f9b80fc22e15a2fb33804d000bc6 (diff) | |
| download | mate-notification-daemon-fix-close-reason.tar.bz2 mate-notification-daemon-fix-close-reason.tar.xz | |
daemon: Fix NotificationClosed signal reason for close buttonfix-close-reason
When clicking the close button on a notification, the D-Bus signal
incorrectly sent reason=1 (expired) instead of reason=2 (dismissed).
Fixed by setting a flag on the notification window in the close button
callback before destroying it, and checking this flag in the callback to
send the correct close reason.
Fixes #129
Diffstat (limited to 'src/themes')
| -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 |
3 files changed, 25 insertions, 4 deletions
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, |
