From 4a3681423cf6bcc2c0b3f931d3b3ad6d3ef86c93 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Sat, 21 Jun 2025 16:16:10 +0200 Subject: src/backend-dbus/actions.c: Fix MATE lockdown support Don't require org.gnome.desktop.lockdown gsettings to be set, honour org.mate.desktop.lockdown gsettings instead when running on MATE desktop. If not on MATE and not on GNOME (or similar) then don't check the lockdown settings at all. --- src/backend-dbus/actions.c | 55 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/backend-dbus/actions.c b/src/backend-dbus/actions.c index 6884b73..d901820 100644 --- a/src/backend-dbus/actions.c +++ b/src/backend-dbus/actions.c @@ -387,7 +387,12 @@ my_can_lock (IndicatorSessionActions * self) { priv_t * p = INDICATOR_SESSION_ACTIONS_DBUS(self)->priv; - return !g_settings_get_boolean (p->lockdown_settings, "disable-lock-screen"); + if (p->lockdown_settings) + { + return !g_settings_get_boolean (p->lockdown_settings, "disable-lock-screen"); + } + + return TRUE; } static gboolean @@ -398,7 +403,7 @@ my_can_logout (IndicatorSessionActions * self) if (g_settings_get_boolean (p->indicator_settings, "suppress-logout-menuitem")) return FALSE; - if (g_settings_get_boolean (p->lockdown_settings, "disable-log-out")) + if ((p->lockdown_settings) && (g_settings_get_boolean (p->lockdown_settings, "disable-log-out"))) return FALSE; return TRUE; @@ -430,8 +435,17 @@ my_can_switch (IndicatorSessionActions * self) { const priv_t * p = INDICATOR_SESSION_ACTIONS_DBUS(self)->priv; - return p->seat_allows_activation - && !g_settings_get_boolean (p->lockdown_settings, "disable-user-switching"); + if ((p->lockdown_settings) && (g_settings_get_boolean (p->lockdown_settings, "disable-user-switching"))) + { + return FALSE; + } + + if (!p->seat_allows_activation) + { + return FALSE; + } + + return TRUE; } static gboolean @@ -1114,21 +1128,36 @@ static void indicator_session_actions_dbus_init (IndicatorSessionActionsDbus * self) { priv_t * p; - GSettings * s; + GSettings * s = NULL; p = indicator_session_actions_dbus_get_instance_private (self); p->cancellable = g_cancellable_new (); p->seat_allows_activation = TRUE; self->priv = p; - s = g_settings_new ("org.gnome.desktop.lockdown"); - g_signal_connect_swapped (s, "changed::disable-lock-screen", - G_CALLBACK(indicator_session_actions_notify_can_lock), self); - g_signal_connect_swapped (s, "changed::disable-log-out", - G_CALLBACK(indicator_session_actions_notify_can_logout), self); - g_signal_connect_swapped (s, "changed::disable-user-switching", - G_CALLBACK(indicator_session_actions_notify_can_switch), self); - p->lockdown_settings = s; + if (ayatana_common_utils_is_gnome() || ayatana_common_utils_is_budgie()) + { + s = g_settings_new ("org.gnome.desktop.lockdown"); + } + else if (ayatana_common_utils_is_mate()) + { + s = g_settings_new ("org.mate.desktop.lockdown"); + } + + if (s) + { + g_signal_connect_swapped (s, "changed::disable-lock-screen", + G_CALLBACK(indicator_session_actions_notify_can_lock), self); + g_signal_connect_swapped (s, "changed::disable-log-out", + G_CALLBACK(indicator_session_actions_notify_can_logout), self); + g_signal_connect_swapped (s, "changed::disable-user-switching", + G_CALLBACK(indicator_session_actions_notify_can_switch), self); + p->lockdown_settings = s; + } + else + { + p->lockdown_settings = NULL; + } s = g_settings_new ("org.ayatana.indicator.session"); g_signal_connect_swapped (s, "changed::suppress-logout-restart-shutdown", -- cgit v1.2.3