summaryrefslogtreecommitdiff
path: root/0001-notify-send-Give-failing-exit-code-if-showing-notifi.patch
blob: 3cf41c075b408db1351a30cf25dbd11f634e6378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
From 390500fc0c806ed347f76afcfe8a62a74653e81b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 12 May 2020 10:12:26 -0400
Subject: [PATCH] notify-send: Give failing exit code if showing notification
 fails

Right now notify-send will quietly return a successful exit status
even if showing the notification fails.

This commit changes the behavior to instead fail on failure.

https://gitlab.gnome.org/GNOME/libnotify/-/merge_requests/13
---
 tools/notify-send.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/notify-send.c b/tools/notify-send.c
index 67e0b03..52fa46a 100644
--- a/tools/notify-send.c
+++ b/tools/notify-send.c
@@ -105,61 +105,61 @@ notify_notification_set_hint_variant (NotifyNotification *notification,
                                       N_("Invalid hint type \"%s\". Valid types "
                                          "are int, double, string and byte."),
                                       type);
                 return FALSE;
         }
 
         if (conv_error) {
                 *error = g_error_new (G_OPTION_ERROR,
                                       G_OPTION_ERROR_BAD_VALUE,
                                       N_("Value \"%s\" of hint \"%s\" could not be "
                                          "parsed as type \"%s\"."), value, key,
                                       type);
                 return FALSE;
         }
 
         return TRUE;
 }
 
 int
 main (int argc, char *argv[])
 {
         static const char  *summary = NULL;
         char               *body;
         static const char  *type = NULL;
         static char        *app_name = NULL;
         static char        *icon_str = NULL;
         static char        *icons = NULL;
         static char       **n_text = NULL;
         static char       **hints = NULL;
         static gboolean     do_version = FALSE;
-        static gboolean     hint_error = FALSE;
+        static gboolean     hint_error = FALSE, show_error = FALSE;
         static glong        expire_timeout = NOTIFY_EXPIRES_DEFAULT;
         GOptionContext     *opt_ctx;
         NotifyNotification *notify;
         GError             *error = NULL;
         gboolean            retval;
 
         static const GOptionEntry entries[] = {
                 {"urgency", 'u', 0, G_OPTION_ARG_CALLBACK,
                  g_option_arg_urgency_cb,
                  N_("Specifies the urgency level (low, normal, critical)."),
                  N_("LEVEL")},
                 {"expire-time", 't', 0, G_OPTION_ARG_INT, &expire_timeout,
                  N_
                  ("Specifies the timeout in milliseconds at which to expire the "
                   "notification."), N_("TIME")},
                 {"app-name", 'a', 0, G_OPTION_ARG_STRING, &app_name,
                  N_("Specifies the app name for the icon"), N_("APP_NAME")},
                 {"icon", 'i', 0, G_OPTION_ARG_FILENAME, &icons,
                  N_("Specifies an icon filename or stock icon to display."),
                  N_("ICON[,ICON...]")},
                 {"category", 'c', 0, G_OPTION_ARG_FILENAME, &type,
                  N_("Specifies the notification category."),
                  N_("TYPE[,TYPE...]")},
                 {"hint", 'h', 0, G_OPTION_ARG_FILENAME_ARRAY, &hints,
                  N_
                  ("Specifies basic extra data to pass. Valid types are int, double, string and byte."),
                  N_("TYPE:NAME:VALUE")},
                 {"version", 'v', 0, G_OPTION_ARG_NONE, &do_version,
                  N_("Version of the package."),
                  NULL},
@@ -247,39 +247,49 @@ main (int argc, char *argv[])
 
                 while ((hint = hints[i++])) {
                         tokens = g_strsplit (hint, ":", 3);
                         l = g_strv_length (tokens);
 
                         if (l != 3) {
                                 fprintf (stderr, "%s\n",
                                          N_("Invalid hint syntax specified. "
                                             "Use TYPE:NAME:VALUE."));
                                 hint_error = TRUE;
                         } else {
                                 retval = notify_notification_set_hint_variant (notify,
                                                                                tokens[0],
                                                                                tokens[1],
                                                                                tokens[2],
                                                                                &error);
 
                                 if (!retval) {
                                         fprintf (stderr, "%s\n", error->message);
                                         g_error_free (error);
                                         hint_error = TRUE;
                                 }
                         }
 
                         g_strfreev (tokens);
                         if (hint_error)
                                 break;
                 }
         }
 
-        if (!hint_error)
-                notify_notification_show (notify, NULL);
+        if (!hint_error) {
+                retval = notify_notification_show (notify, &error);
+
+                if (!retval) {
+                        fprintf (stderr, "%s\n", error->message);
+                        g_error_free (error);
+                        show_error = TRUE;
+                }
+        }
 
         g_object_unref (G_OBJECT (notify));
 
         notify_uninit ();
 
-        exit (hint_error);
+        if (hint_error || show_error)
+                exit (1);
+
+        return 0;
 }
-- 
2.33.1