diff options
Diffstat (limited to 'capplets/common/activate-settings-daemon.c')
-rw-r--r-- | capplets/common/activate-settings-daemon.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/capplets/common/activate-settings-daemon.c b/capplets/common/activate-settings-daemon.c new file mode 100644 index 00000000..794f1098 --- /dev/null +++ b/capplets/common/activate-settings-daemon.c @@ -0,0 +1,60 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <mate-settings-daemon/mate-settings-client.h> +#include <gtk/gtk.h> +#include <glib/gi18n.h> + +#include "activate-settings-daemon.h" + +static void popup_error_message (void) +{ + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, _("Unable to start the settings manager 'mate-settings-daemon'.\n" + "Without the MATE settings manager running, some preferences may not take effect. This could " + "indicate a problem with DBus, or a non-MATE (e.g. KDE) settings manager may already " + "be active and conflicting with the MATE settings manager.")); + + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); +} + +/* Returns FALSE if activation failed, else TRUE */ +gboolean +activate_settings_daemon (void) +{ + DBusGConnection *connection = NULL; + DBusGProxy *proxy = NULL; + GError *error = NULL; + + connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (connection == NULL) + { + popup_error_message (); + g_error_free (error); + return FALSE; + } + + proxy = dbus_g_proxy_new_for_name (connection, + "org.mate.SettingsDaemon", + "/org/mate/SettingsDaemon", + "org.mate.SettingsDaemon"); + + if (proxy == NULL) + { + popup_error_message (); + return FALSE; + } + + if (!org_mate_SettingsDaemon_awake(proxy, &error)) + { + popup_error_message (); + g_error_free (error); + return FALSE; + } + + return TRUE; +} |