140 lines
5.6 KiB
Diff
140 lines
5.6 KiB
Diff
|
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
|
||
|
|