dunstify: add actions support
This commit is contained in:
parent
71d95394fd
commit
9c53223034
54
dunstify.c
54
dunstify.c
@ -9,9 +9,7 @@ static gchar *summary = NULL;
|
|||||||
static gchar *body = NULL;
|
static gchar *body = NULL;
|
||||||
static NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL;
|
static NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL;
|
||||||
static gchar *urgency_str = NULL;
|
static gchar *urgency_str = NULL;
|
||||||
static GVariant *hints = NULL;
|
|
||||||
static gchar *hint_strs = NULL;
|
static gchar *hint_strs = NULL;
|
||||||
static GVariant **actions = NULL;
|
|
||||||
static gchar **action_strs = NULL;
|
static gchar **action_strs = NULL;
|
||||||
static gint timeout = NOTIFY_EXPIRES_DEFAULT;
|
static gint timeout = NOTIFY_EXPIRES_DEFAULT;
|
||||||
static gchar *icon = NULL;
|
static gchar *icon = NULL;
|
||||||
@ -20,13 +18,14 @@ static gboolean serverinfo = false;
|
|||||||
static gboolean printid = false;
|
static gboolean printid = false;
|
||||||
static guint32 replace_id = 0;
|
static guint32 replace_id = 0;
|
||||||
static guint32 close_id = 0;
|
static guint32 close_id = 0;
|
||||||
|
static gboolean block = false;
|
||||||
|
|
||||||
static GOptionEntry entries[] =
|
static GOptionEntry entries[] =
|
||||||
{
|
{
|
||||||
{ "appname", 'a', 0, G_OPTION_ARG_STRING, &appname, "Name of your application", "NAME" },
|
{ "appname", 'a', 0, G_OPTION_ARG_STRING, &appname, "Name of your application", "NAME" },
|
||||||
{ "urgency", 'u', 0, G_OPTION_ARG_STRING, &urgency_str, "The urgency of this notification", "URG" },
|
{ "urgency", 'u', 0, G_OPTION_ARG_STRING, &urgency_str, "The urgency of this notification", "URG" },
|
||||||
{ "hints", 'h', 0, G_OPTION_ARG_STRING_ARRAY, &hint_strs, "User specified hints", "HINT" },
|
{ "hints", 'h', 0, G_OPTION_ARG_STRING_ARRAY, &hint_strs, "User specified hints", "HINT" },
|
||||||
{ "actions", 'A', 0, G_OPTION_ARG_STRING_ARRAY, &action_strs, "Actions the user can invoke", "ACTION" },
|
{ "action", 'A', 0, G_OPTION_ARG_STRING_ARRAY, &action_strs, "Actions the user can invoke", "ACTION" },
|
||||||
{ "timeout", 't', 0, G_OPTION_ARG_INT, &timeout, "The time until the notification expires", "TIMEOUT" },
|
{ "timeout", 't', 0, G_OPTION_ARG_INT, &timeout, "The time until the notification expires", "TIMEOUT" },
|
||||||
{ "icon", 'i', 0, G_OPTION_ARG_STRING, &icon, "An Icon that should be displayed with the notification", "ICON" },
|
{ "icon", 'i', 0, G_OPTION_ARG_STRING, &icon, "An Icon that should be displayed with the notification", "ICON" },
|
||||||
{ "capabilities", 'c', 0, G_OPTION_ARG_NONE, &capabilities, "Print the server capabilities and exit", NULL},
|
{ "capabilities", 'c', 0, G_OPTION_ARG_NONE, &capabilities, "Print the server capabilities and exit", NULL},
|
||||||
@ -34,6 +33,7 @@ static GOptionEntry entries[] =
|
|||||||
{ "printid", 'p', 0, G_OPTION_ARG_NONE, &printid, "Print id, which can be used to update/replace this notification", NULL},
|
{ "printid", 'p', 0, G_OPTION_ARG_NONE, &printid, "Print id, which can be used to update/replace this notification", NULL},
|
||||||
{ "replace", 'r', 0, G_OPTION_ARG_INT, &replace_id, "Set id of this notification.", NULL},
|
{ "replace", 'r', 0, G_OPTION_ARG_INT, &replace_id, "Set id of this notification.", NULL},
|
||||||
{ "close", 'C', 0, G_OPTION_ARG_INT, &close_id, "Set id of this notification.", NULL},
|
{ "close", 'C', 0, G_OPTION_ARG_INT, &close_id, "Set id of this notification.", NULL},
|
||||||
|
{ "block", 'b', 0, G_OPTION_ARG_NONE, &block, "Block until notification is closed and print close reason", NULL},
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -96,10 +96,7 @@ void parse_commandline(int argc, char *argv[])
|
|||||||
die(0);
|
die(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actions)
|
if (hint_strs)
|
||||||
g_printerr("Actions not yet implemented\n");
|
|
||||||
|
|
||||||
if (hints)
|
|
||||||
g_printerr("Hints not yet implemented\n");
|
g_printerr("Hints not yet implemented\n");
|
||||||
|
|
||||||
|
|
||||||
@ -190,6 +187,35 @@ int put_id(NotifyNotification *n, guint32 id)
|
|||||||
kn->id = id;
|
kn->id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void actioned(NotifyNotification *n, char *a, gpointer foo)
|
||||||
|
{
|
||||||
|
notify_notification_close(n, NULL);
|
||||||
|
g_print("%s\n", a);
|
||||||
|
die(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void closed(NotifyNotification *n, gpointer foo)
|
||||||
|
{
|
||||||
|
g_print("%d\n", notify_notification_get_closed_reason(n));
|
||||||
|
die(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_action(NotifyNotification *n, char *str)
|
||||||
|
{
|
||||||
|
char *action = str;
|
||||||
|
char *label = strstr(str, ",");
|
||||||
|
|
||||||
|
if (!label || *(label+1) == '\0') {
|
||||||
|
g_printerr("Malformed action. Excpected \"action,label\", got \"%s\"", str);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*label = '\0';
|
||||||
|
label++;
|
||||||
|
|
||||||
|
notify_notification_add_action(n, action, label, actioned, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -222,12 +248,26 @@ int main(int argc, char *argv[])
|
|||||||
put_id(n, replace_id);
|
put_id(n, replace_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GMainLoop *l = NULL;
|
||||||
|
|
||||||
|
if (block || action_strs)
|
||||||
|
l = g_main_loop_new(NULL, false);
|
||||||
|
g_signal_connect(n, "closed", G_CALLBACK(closed), NULL);
|
||||||
|
|
||||||
|
for (int i = 0; action_strs[i]; i++) {
|
||||||
|
add_action(n, action_strs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
notify_notification_show(n, &err);
|
notify_notification_show(n, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
g_printerr("Unable to send notification: %s\n", err->message);
|
g_printerr("Unable to send notification: %s\n", err->message);
|
||||||
die(1);
|
die(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (block || action_strs)
|
||||||
|
g_main_loop_run(l);
|
||||||
|
|
||||||
if (printid) {
|
if (printid) {
|
||||||
g_print("%d\n", get_id(n));
|
g_print("%d\n", get_id(n));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user