aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Wimpress <code@flexiondotorg>2017-07-17 21:40:57 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2017-07-17 21:45:34 +0200
commit35cfd3c37eb12de99c35cc2c6ce7f65aed558a84 (patch)
tree0b52c5d781fc212a997ecf651dc265ecdb409a24 /src
parent5e3436e17612011c0cb80fa032e59aaf66a6c6e2 (diff)
downloadayatana-indicator-session-35cfd3c37eb12de99c35cc2c6ce7f65aed558a84.tar.gz
ayatana-indicator-session-35cfd3c37eb12de99c35cc2c6ce7f65aed558a84.tar.bz2
ayatana-indicator-session-35cfd3c37eb12de99c35cc2c6ce7f65aed558a84.zip
Add full MATE session support.
This changeset adds the remaining support for MATE Desktop. When MATE is the desktop session: * "About This Computer" launches `mate-system-monitor --show-system-tab` * "<distro> Help..." launches the MATE User Guide. * "System Settings..." launches `mate-control-center` * "Lock/Switch Account..." invokes `mate-screensaver-command --lock` `have_mate_program()` checks that the active session is MATE and the required program exists, making this a safe mechanism to launch `"yelp help:mate-user-guide` specifically for MATE and fall through the just `yelp` on the other desktop environments.
Diffstat (limited to 'src')
-rw-r--r--src/backend-dbus/actions.c106
1 files changed, 60 insertions, 46 deletions
diff --git a/src/backend-dbus/actions.c b/src/backend-dbus/actions.c
index d1508f4..d2b7fbb 100644
--- a/src/backend-dbus/actions.c
+++ b/src/backend-dbus/actions.c
@@ -92,10 +92,30 @@ typedef enum
{
PROMPT_NONE,
PROMPT_WITH_ZENITY,
- PROMPT_WITH_AYATANA
+ PROMPT_WITH_AYATANA,
+ PROMPT_WITH_MATE,
}
prompt_status_t;
+
+static gboolean
+have_mate_program (const gchar *program)
+{
+ const gchar *xdg_current_desktop;
+ g_auto(GStrv) desktop_names = NULL;
+
+ xdg_current_desktop = g_getenv ("XDG_CURRENT_DESKTOP");
+ if (xdg_current_desktop != NULL) {
+ desktop_names = g_strsplit (xdg_current_desktop, ":", 0);
+ if (g_strv_contains ((const gchar * const *) desktop_names, "MATE")) {
+ g_autofree gchar *path = g_find_program_in_path (program);
+ return path != NULL;
+ }
+ }
+
+ return FALSE;
+}
+
static prompt_status_t
get_prompt_status (IndicatorSessionActionsDbus * self)
{
@@ -104,6 +124,10 @@ get_prompt_status (IndicatorSessionActionsDbus * self)
if (!g_settings_get_boolean (p->indicator_settings, "suppress-logout-restart-shutdown"))
{
+ /* can we use the MATE prompt? */
+ if ((prompt == PROMPT_NONE) && have_mate_program ("mate-session-save"))
+ prompt = PROMPT_WITH_MATE;
+
/* can we use the Unity/Ayatana prompt? */
if ((prompt == PROMPT_NONE) && p && p->end_session_dialog)
{
@@ -766,6 +790,15 @@ zenity_warning (const char * icon_name,
}
static void
+run_outside_app (const char * cmd)
+{
+ GError * err = NULL;
+ g_debug ("%s calling \"%s\"", G_STRFUNC, cmd);
+ g_spawn_command_line_async (cmd, &err);
+ log_and_clear_error (&err, G_STRLOC, G_STRFUNC);
+}
+
+static void
my_logout (IndicatorSessionActions * actions)
{
IndicatorSessionActionsDbus * self = INDICATOR_SESSION_ACTIONS_DBUS (actions);
@@ -776,6 +809,11 @@ my_logout (IndicatorSessionActions * actions)
show_desktop_end_session_dialog (self, END_SESSION_TYPE_LOGOUT);
break;
+ case PROMPT_WITH_MATE:
+ /* --logout-dialog presents Logout and (if available) Switch User options */
+ run_outside_app ("mate-session-save --logout-dialog");
+ break;
+
case PROMPT_NONE:
logout_now (self);
break;
@@ -813,6 +851,11 @@ my_reboot (IndicatorSessionActions * actions)
show_desktop_end_session_dialog (self, END_SESSION_TYPE_REBOOT);
break;
+ case PROMPT_WITH_MATE:
+ /* --shutdown-dialog presents Restart, Shutdown and (if available) Suspend options */
+ run_outside_app ("mate-session-save --shutdown-dialog");
+ break;
+
case PROMPT_NONE:
reboot_now (self);
break;
@@ -845,6 +888,11 @@ my_power_off (IndicatorSessionActions * actions)
show_desktop_end_session_dialog (self, END_SESSION_TYPE_SHUTDOWN);
break;
+ case PROMPT_WITH_MATE:
+ /* --shutdown-dialog presents Restart, Shutdown and (if available) Suspend options */
+ run_outside_app ("mate-session-save --shutdown-dialog");
+ break;
+
case PROMPT_WITH_ZENITY:
if (zenity_question (self,
"system-shutdown",
@@ -866,18 +914,12 @@ my_power_off (IndicatorSessionActions * actions)
***/
static void
-run_outside_app (const char * cmd)
-{
- GError * err = NULL;
- g_debug ("%s calling \"%s\"", G_STRFUNC, cmd);
- g_spawn_command_line_async (cmd, &err);
- log_and_clear_error (&err, G_STRLOC, G_STRFUNC);
-}
-
-static void
my_help (IndicatorSessionActions * self G_GNUC_UNUSED)
{
- run_outside_app ("yelp");
+ if (have_mate_program ("yelp"))
+ run_outside_app ("yelp help:mate-user-guide");
+ else
+ run_outside_app ("yelp");
}
static gboolean
@@ -912,38 +954,6 @@ have_gnome_control_center (void)
return have_gcc;
}
-static gboolean
-have_mate_control_center (void)
-{
- gchar *path;
- gboolean have_mcc;
-
- if (!is_mate())
- return FALSE;
-
- path = g_find_program_in_path ("mate-control-center");
- have_mcc = path != NULL;
- g_free (path);
-
- return have_mcc;
-}
-
-static gboolean
-have_mate_about (void)
-{
- gchar *path;
- gboolean have_mabout;
-
- if (!is_mate())
- return FALSE;
-
- path = g_find_program_in_path ("mate-about");
- have_mabout = path != NULL;
- g_free (path);
-
- return have_mabout;
-}
-
static void
my_settings (IndicatorSessionActions * self G_GNUC_UNUSED)
{
@@ -951,7 +961,7 @@ my_settings (IndicatorSessionActions * self G_GNUC_UNUSED)
run_outside_app ("unity-control-center");
else if (have_gnome_control_center())
run_outside_app ("gnome-control-center");
- else if (have_mate_control_center())
+ else if (have_mate_program ("mate-control-center"))
run_outside_app ("mate-control-center");
else
zenity_warning ("dialog-warning",
@@ -979,8 +989,8 @@ my_about (IndicatorSessionActions * self G_GNUC_UNUSED)
run_outside_app ("unity-control-center info");
else if (have_gnome_control_center())
run_outside_app ("gnome-control-center info");
- else if (have_mate_about())
- run_outside_app ("mate-about");
+ else if (have_mate_program ("mate-system-monitor"))
+ run_outside_app ("mate-system-monitor --show-system-tab");
else
zenity_warning ("dialog-warning",
_("Warning"),
@@ -1007,6 +1017,10 @@ lock_current_session (IndicatorSessionActions * self, gboolean immediate)
desktop_session_call_lock (p->desktop_session, p->cancellable, NULL, NULL);
}
}
+ else if (have_mate_program ("mate-screensaver-command"))
+ {
+ run_outside_app ("mate-screensaver-command --lock");
+ }
else
{
g_return_if_fail (p->screen_saver != NULL);