Skip to content

Commit

Permalink
Only exit on idle when explicitly requested
Browse files Browse the repository at this point in the history
This allows to run as a regular session service that does not exit, but
also as a well-behaved D-Bus-activated service.  Make the default
behavior not to exit, but when activated through D-Bus.
  • Loading branch information
cwendling authored and raveit65 committed Aug 9, 2023
1 parent 2e9c40a commit 37e33b5
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
2 changes: 1 addition & 1 deletion data/org.freedesktop.mate.Notifications.service.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=@LIBEXECDIR@/mate-notification-daemon
Exec=@LIBEXECDIR@/mate-notification-daemon --idle-exit
AssumedAppArmorLabel=unconfined
21 changes: 19 additions & 2 deletions src/daemon/daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
enum {
PROP_0,
PROP_REPLACE,
PROP_IDLE_EXIT,
LAST_PROP
};

Expand Down Expand Up @@ -119,6 +120,7 @@ struct _NotifyDaemon {
NotifyDaemonNotifications *skeleton;
guint bus_name_id;
gboolean replace;
gboolean idle_exit;

NotifyStackLocation stack_location;
NotifyScreen* screen;
Expand Down Expand Up @@ -220,6 +222,9 @@ static void notify_daemon_set_property (GObject *object,
case PROP_REPLACE:
daemon->replace = g_value_get_boolean (value);
break;
case PROP_IDLE_EXIT:
daemon->idle_exit = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
Expand All @@ -237,6 +242,12 @@ static void notify_daemon_class_init(NotifyDaemonClass* daemon_class)
g_param_spec_boolean ("replace", "replace", "replace", FALSE,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
G_PARAM_STATIC_STRINGS);
properties[PROP_IDLE_EXIT] =
g_param_spec_boolean ("idle-exit", "idle-exit",
"Whether to exit when idle", FALSE,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_WRITABLE |
G_PARAM_STATIC_STRINGS);

g_object_class_install_properties (object_class, LAST_PROP, properties);
}
Expand All @@ -263,6 +274,9 @@ static void add_exit_timeout(NotifyDaemon* daemon)
{
g_assert (daemon != NULL);

if (! daemon->idle_exit)
return;

if (daemon->exit_timeout_source > 0)
return;

Expand Down Expand Up @@ -1691,7 +1705,10 @@ static gboolean notify_daemon_get_server_information (NotifyDaemonNotifications
return TRUE;
}

NotifyDaemon* notify_daemon_new (gboolean replace)
NotifyDaemon* notify_daemon_new (gboolean replace, gboolean idle_exit)
{
return g_object_new (NOTIFY_TYPE_DAEMON, "replace", replace, NULL);
return g_object_new (NOTIFY_TYPE_DAEMON,
"replace", replace,
"idle-exit", idle_exit,
NULL);
}
3 changes: 2 additions & 1 deletion src/daemon/daemon.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ typedef enum {

G_BEGIN_DECLS

NotifyDaemon* notify_daemon_new (gboolean replace);
NotifyDaemon* notify_daemon_new (gboolean replace,
gboolean idle_exit);

GQuark notify_daemon_error_quark(void);

Expand Down
9 changes: 8 additions & 1 deletion src/daemon/mnd-daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

static gboolean debug = FALSE;
static gboolean replace = FALSE;
static gboolean idle_exit = FALSE;

static GOptionEntry entries[] =
{
Expand All @@ -46,6 +47,12 @@ static GOptionEntry entries[] =
"Replace a currently running application",
NULL
},
{
"idle-exit", 'i', G_OPTION_FLAG_NONE,
G_OPTION_ARG_NONE, &idle_exit,
"Auto-exit when idle, useful if run through D-Bus activation",
NULL
},
{
NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL
}
Expand Down Expand Up @@ -95,7 +102,7 @@ int main (int argc, char *argv[])
if (!parse_arguments (&argc, &argv))
return EXIT_FAILURE;

daemon = notify_daemon_new (replace);
daemon = notify_daemon_new (replace, idle_exit);

gtk_main();

Expand Down

0 comments on commit 37e33b5

Please sign in to comment.