summaryrefslogtreecommitdiff
path: root/src/mate-screensaver-preferences.c.orig
diff options
context:
space:
mode:
Diffstat (limited to 'src/mate-screensaver-preferences.c.orig')
-rw-r--r--src/mate-screensaver-preferences.c.orig1781
1 files changed, 0 insertions, 1781 deletions
diff --git a/src/mate-screensaver-preferences.c.orig b/src/mate-screensaver-preferences.c.orig
deleted file mode 100644
index cedce78..0000000
--- a/src/mate-screensaver-preferences.c.orig
+++ /dev/null
@@ -1,1781 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <[email protected]>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Authors: William Jon McCann <[email protected]>
- * Rodrigo Moya <[email protected]>
- *
- */
-
-#include "config.h"
-
-#define _GNU_SOURCE
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h> /* For uid_t, gid_t */
-
-#include <glib/gi18n.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-#include <mateconf/mateconf-client.h>
-
-#include <gio/gio.h>
-
-#include "copy-theme-dialog.h"
-
-#include "gs-theme-manager.h"
-#include "gs-job.h"
-#include "gs-prefs.h" /* for GS_MODE enum */
-
-#define GTK_BUILDER_FILE "mate-screensaver-preferences.ui"
-
-#define MATE_LOCKDOWN_DIR "/desktop/mate/lockdown"
-#define KEY_LOCK_DISABLE MATE_LOCKDOWN_DIR "/disable_lock_screen"
-
-#define KEY_DIR "/apps/mate-screensaver"
-#define MATE_SESSION_DIR "/desktop/mate/session"
-#define KEY_LOCK KEY_DIR "/lock_enabled"
-#define KEY_IDLE_ACTIVATION_ENABLED KEY_DIR "/idle_activation_enabled"
-#define KEY_MODE KEY_DIR "/mode"
-#define KEY_ACTIVATE_DELAY MATE_SESSION_DIR "/idle_delay"
-#define KEY_LOCK_DELAY KEY_DIR "/lock_delay"
-#define KEY_CYCLE_DELAY KEY_DIR "/cycle_delay"
-#define KEY_THEMES KEY_DIR "/themes"
-
-#define GPM_COMMAND "mate-power-preferences"
-
-enum
-{
- NAME_COLUMN = 0,
- ID_COLUMN,
- N_COLUMNS
-};
-
-static MateConfEnumStringPair mode_enum_map [] =
-{
- { GS_MODE_BLANK_ONLY, "blank-only" },
- { GS_MODE_RANDOM, "random" },
- { GS_MODE_SINGLE, "single" },
- { 0, NULL }
-};
-
-/* Drag and drop info */
-enum
-{
- TARGET_URI_LIST,
- TARGET_NS_URL
-};
-
-static GtkTargetEntry drop_types [] =
-{
- { "text/uri-list", 0, TARGET_URI_LIST },
- { "_NETSCAPE_URL", 0, TARGET_NS_URL }
-};
-
-static GtkBuilder *builder = NULL;
-static GSThemeManager *theme_manager = NULL;
-static GSJob *job = NULL;
-
-static gint32
-config_get_activate_delay (gboolean *is_writable)
-{
- MateConfClient *client;
- gint32 delay;
-
- client = mateconf_client_get_default ();
-
- if (is_writable)
- {
- *is_writable = mateconf_client_key_is_writable (client,
- KEY_ACTIVATE_DELAY,
- NULL);
- }
-
- delay = mateconf_client_get_int (client, KEY_ACTIVATE_DELAY, NULL);
-
- if (delay < 1)
- {
- delay = 1;
- }
-
- g_object_unref (client);
-
- return delay;
-}
-
-static void
-config_set_activate_delay (gint32 timeout)
-{
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
-
- mateconf_client_set_int (client, KEY_ACTIVATE_DELAY, timeout, NULL);
-
- g_object_unref (client);
-}
-
-static int
-config_get_mode (gboolean *is_writable)
-{
- MateConfClient *client;
- int mode;
- char *string;
-
- client = mateconf_client_get_default ();
-
- if (is_writable)
- {
- *is_writable = mateconf_client_key_is_writable (client,
- KEY_MODE,
- NULL);
- }
-
- string = mateconf_client_get_string (client, KEY_MODE, NULL);
- if (string)
- {
- mateconf_string_to_enum (mode_enum_map, string, &mode);
- g_free (string);
- }
- else
- {
- mode = GS_MODE_BLANK_ONLY;
- }
-
- g_object_unref (client);
-
- return mode;
-}
-
-static void
-config_set_mode (int mode)
-{
- MateConfClient *client;
- const char *mode_string;
-
- client = mateconf_client_get_default ();
-
- mode_string = mateconf_enum_to_string (mode_enum_map, mode);
- mateconf_client_set_string (client, KEY_MODE, mode_string, NULL);
-
- g_object_unref (client);
-}
-
-static char *
-config_get_theme (gboolean *is_writable)
-{
- MateConfClient *client;
- char *name;
- int mode;
-
- client = mateconf_client_get_default ();
-
- if (is_writable)
- {
- gboolean can_write_theme;
- gboolean can_write_mode;
-
- can_write_theme = mateconf_client_key_is_writable (client,
- KEY_THEMES,
- NULL);
- can_write_mode = mateconf_client_key_is_writable (client,
- KEY_MODE,
- NULL);
- *is_writable = can_write_theme && can_write_mode;
- }
-
- mode = config_get_mode (NULL);
-
- name = NULL;
- if (mode == GS_MODE_BLANK_ONLY)
- {
- name = g_strdup ("__blank-only");
- }
- else if (mode == GS_MODE_RANDOM)
- {
- name = g_strdup ("__random");
- }
- else
- {
- GSList *list;
- list = mateconf_client_get_list (client,
- KEY_THEMES,
- MATECONF_VALUE_STRING,
- NULL);
- if (list != NULL)
- {
- name = g_strdup (list->data);
- }
- else
- {
- /* TODO: handle error */
- /* default to blank */
- name = g_strdup ("__blank-only");
- }
-
- g_slist_foreach (list, (GFunc)g_free, NULL);
- g_slist_free (list);
- }
-
- g_object_unref (client);
-
- return name;
-}
-
-static GSList *
-get_all_theme_ids (GSThemeManager *theme_manager)
-{
- GSList *ids = NULL;
- GSList *entries;
- GSList *l;
-
- entries = gs_theme_manager_get_info_list (theme_manager);
- for (l = entries; l; l = l->next)
- {
- GSThemeInfo *info = l->data;
-
- ids = g_slist_prepend (ids, g_strdup (gs_theme_info_get_id (info)));
- gs_theme_info_unref (info);
- }
- g_slist_free (entries);
-
- return ids;
-}
-
-static void
-config_set_theme (const char *theme_id)
-{
- MateConfClient *client;
- GSList *list = NULL;
- int mode;
-
- client = mateconf_client_get_default ();
-
- if (theme_id && strcmp (theme_id, "__blank-only") == 0)
- {
- mode = GS_MODE_BLANK_ONLY;
- }
- else if (theme_id && strcmp (theme_id, "__random") == 0)
- {
- mode = GS_MODE_RANDOM;
-
- /* set the themes key to contain all available screensavers */
- list = get_all_theme_ids (theme_manager);
- }
- else
- {
- mode = GS_MODE_SINGLE;
- list = g_slist_append (list, g_strdup (theme_id));
- }
-
- config_set_mode (mode);
-
- mateconf_client_set_list (client,
- KEY_THEMES,
- MATECONF_VALUE_STRING,
- list,
- NULL);
-
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
-
- g_object_unref (client);
-}
-
-static gboolean
-config_get_enabled (gboolean *is_writable)
-{
- int enabled;
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
-
- if (is_writable)
- {
- *is_writable = mateconf_client_key_is_writable (client,
- KEY_LOCK,
- NULL);
- }
-
- enabled = mateconf_client_get_bool (client, KEY_IDLE_ACTIVATION_ENABLED, NULL);
-
- g_object_unref (client);
-
- return enabled;
-}
-
-static void
-config_set_enabled (gboolean enabled)
-{
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
-
- mateconf_client_set_bool (client, KEY_IDLE_ACTIVATION_ENABLED, enabled, NULL);
-
- g_object_unref (client);
-}
-
-static gboolean
-config_get_lock (gboolean *is_writable)
-{
- MateConfClient *client;
- gboolean lock;
-
- client = mateconf_client_get_default ();
-
- if (is_writable)
- {
- *is_writable = mateconf_client_key_is_writable (client,
- KEY_LOCK,
- NULL);
- }
-
- lock = mateconf_client_get_bool (client, KEY_LOCK, NULL);
-
- g_object_unref (client);
-
- return lock;
-}
-
-static gboolean
-config_get_lock_disabled ()
-{
- MateConfClient *client;
- gboolean lock;
-
- client = mateconf_client_get_default ();
-
- lock = mateconf_client_get_bool (client, KEY_LOCK_DISABLE, NULL);
-
- g_object_unref (client);
- return lock;
-}
-
-static void
-config_set_lock (gboolean lock)
-{
- MateConfClient *client;
-
- client = mateconf_client_get_default ();
-
- mateconf_client_set_bool (client, KEY_LOCK, lock, NULL);
-
- g_object_unref (client);
-}
-
-static void
-preview_clear (GtkWidget *widget)
-{
- GdkColor color = { 0, 0, 0 };
-
- gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);
- gdk_window_clear (widget->window);
-}
-
-static void
-job_set_theme (GSJob *job,
- const char *theme)
-{
- GSThemeInfo *info;
- const char *command;
-
- command = NULL;
-
- info = gs_theme_manager_lookup_theme_info (theme_manager, theme);
- if (info != NULL)
- {
- command = gs_theme_info_get_exec (info);
- }
-
- gs_job_set_command (job, command);
-
- if (info != NULL)
- {
- gs_theme_info_unref (info);
- }
-}
-
-static void
-preview_set_theme (GtkWidget *widget,
- const char *theme,
- const char *name)
-{
- GtkWidget *label;
- char *markup;
-
- if (job != NULL)
- {
- gs_job_stop (job);
- }
-
- preview_clear (widget);
-
- label = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_theme_label"));
- markup = g_markup_printf_escaped ("<i>%s</i>", name);
- gtk_label_set_markup (GTK_LABEL (label), markup);
- g_free (markup);
-
- if ((theme && strcmp (theme, "__blank-only") == 0))
- {
-
- }
- else if (theme && strcmp (theme, "__random") == 0)
- {
- GSList *themes;
-
- themes = get_all_theme_ids (theme_manager);
- if (themes != NULL)
- {
- GSList *l;
- gint32 i;
-
- i = g_random_int_range (0, g_slist_length (themes));
- l = g_slist_nth (themes, i);
-
- job_set_theme (job, (const char *) l->data);
- g_slist_foreach (themes, (GFunc) g_free, NULL);
- g_slist_free (themes);
-
- gs_job_start (job);
- }
- }
- else
- {
- job_set_theme (job, theme);
- gs_job_start (job);
- }
-}
-
-static void
-help_display (void)
-{
- GError *error = NULL;
- char *command;
- const char *lang;
- char *uri = NULL;
- GdkScreen *gscreen;
- int i;
-
- const char * const * langs = g_get_language_names ();
-
- for (i = 0; langs[i] != NULL; i++)
- {
- lang = langs[i];
- if (strchr (lang, '.'))
- {
- continue;
- }
-
- uri = g_build_filename (DATADIR,
- "/mate/help/user-guide/",
- lang,
- "/user-guide.xml",
- NULL);
-
- if (g_file_test (uri, G_FILE_TEST_EXISTS))
- {
- break;
- }
- }
-
- command = g_strconcat ("mate-open ghelp://",
- uri,
- "?prefs-screensaver",
- NULL);
- gscreen = gdk_screen_get_default ();
- gdk_spawn_command_line_on_screen (gscreen, command, &error);
-
- if (error != NULL)
- {
- GtkWidget *d;
-
- d = gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- "%s", error->message);
- gtk_dialog_run (GTK_DIALOG (d));
- gtk_widget_destroy (d);
- g_error_free (error);
- }
-
- g_free (command);
- g_free (uri);
-}
-
-static void
-response_cb (GtkWidget *widget,
- int response_id)
-{
-
- if (response_id == GTK_RESPONSE_HELP)
- {
- help_display ();
- }
- else if (response_id == GTK_RESPONSE_REJECT)
- {
- GError *error;
- gboolean res;
-
- error = NULL;
-
- res = gdk_spawn_command_line_on_screen (gdk_screen_get_default (),
- GPM_COMMAND,
- &error);
- if (! res)
- {
- g_warning ("Unable to start power management preferences: %s", error->message);
- g_error_free (error);
- }
- }
- else
- {
- gtk_widget_destroy (widget);
- gtk_main_quit ();
- }
-}
-
-static GSList *
-get_theme_info_list (void)
-{
- return gs_theme_manager_get_info_list (theme_manager);
-}
-
-static void
-populate_model (GtkTreeStore *store)
-{
- GtkTreeIter iter;
- GSList *themes = NULL;
- GSList *l;
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- NAME_COLUMN, _("Blank screen"),
- ID_COLUMN, "__blank-only",
- -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- NAME_COLUMN, _("Random"),
- ID_COLUMN, "__random",
- -1);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- NAME_COLUMN, NULL,
- ID_COLUMN, "__separator",
- -1);
-
- themes = get_theme_info_list ();
-
- if (themes == NULL)
- {
- return;
- }
-
- for (l = themes; l; l = l->next)
- {
- const char *name;
- const char *id;
- GSThemeInfo *info = l->data;
-
- if (info == NULL)
- {
- continue;
- }
-
- name = gs_theme_info_get_name (info);
- id = gs_theme_info_get_id (info);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- NAME_COLUMN, name,
- ID_COLUMN, id,
- -1);
-
- gs_theme_info_unref (info);
- }
-
- g_slist_free (themes);
-}
-
-static void
-tree_selection_previous (GtkTreeSelection *selection)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreePath *path;
-
- if (! gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- return;
- }
-
- path = gtk_tree_model_get_path (model, &iter);
- if (gtk_tree_path_prev (path))
- {
- gtk_tree_selection_select_path (selection, path);
- }
-}
-
-static void
-tree_selection_next (GtkTreeSelection *selection)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreePath *path;
-
- if (! gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- return;
- }
-
- path = gtk_tree_model_get_path (model, &iter);
- gtk_tree_path_next (path);
- gtk_tree_selection_select_path (selection, path);
-}
-
-static void
-tree_selection_changed_cb (GtkTreeSelection *selection,
- GtkWidget *preview)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- char *theme;
- char *name;
-
- if (! gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- return;
- }
-
- gtk_tree_model_get (model, &iter, ID_COLUMN, &theme, NAME_COLUMN, &name, -1);
-
- if (theme == NULL)
- {
- g_free (name);
- return;
- }
-
- preview_set_theme (preview, theme, name);
- config_set_theme (theme);
-
- g_free (theme);
- g_free (name);
-}
-
-static void
-activate_delay_value_changed_cb (GtkRange *range,
- gpointer user_data)
-{
- gdouble value;
-
- value = gtk_range_get_value (range);
- config_set_activate_delay ((gint32)value);
-}
-
-static int
-compare_theme_names (char *name_a,
- char *name_b,
- char *id_a,
- char *id_b)
-{
-
- if (id_a == NULL)
- {
- return 1;
- }
- else if (id_b == NULL)
- {
- return -1;
- }
-
- if (strcmp (id_a, "__blank-only") == 0)
- {
- return -1;
- }
- else if (strcmp (id_b, "__blank-only") == 0)
- {
- return 1;
- }
- else if (strcmp (id_a, "__random") == 0)
- {
- return -1;
- }
- else if (strcmp (id_b, "__random") == 0)
- {
- return 1;
- }
- else if (strcmp (id_a, "__separator") == 0)
- {
- return -1;
- }
- else if (strcmp (id_b, "__separator") == 0)
- {
- return 1;
- }
-
- if (name_a == NULL)
- {
- return 1;
- }
- else if (name_b == NULL)
- {
- return -1;
- }
-
- return g_utf8_collate (name_a, name_b);
-}
-
-static int
-compare_theme (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- char *name_a;
- char *name_b;
- char *id_a;
- char *id_b;
- int result;
-
- gtk_tree_model_get (model, a, NAME_COLUMN, &name_a, -1);
- gtk_tree_model_get (model, b, NAME_COLUMN, &name_b, -1);
- gtk_tree_model_get (model, a, ID_COLUMN, &id_a, -1);
- gtk_tree_model_get (model, b, ID_COLUMN, &id_b, -1);
-
- result = compare_theme_names (name_a, name_b, id_a, id_b);
-
- g_free (name_a);
- g_free (name_b);
- g_free (id_a);
- g_free (id_b);
-
- return result;
-}
-
-static gboolean
-separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- int column = GPOINTER_TO_INT (data);
- char *text;
-
- gtk_tree_model_get (model, iter, column, &text, -1);
-
- if (text != NULL && strcmp (text, "__separator") == 0)
- {
- return TRUE;
- }
-
- g_free (text);
-
- return FALSE;
-}
-
-static void
-setup_treeview (GtkWidget *tree,
- GtkWidget *preview)
-{
- GtkTreeStore *store;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeSelection *select;
-
- store = gtk_tree_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING);
- populate_model (store);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (tree),
- GTK_TREE_MODEL (store));
-
- g_object_unref (store);
-
-#if GTK_CHECK_VERSION(2,10,0)
- g_object_set (tree, "show-expanders", FALSE, NULL);
-#endif
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
- "text", NAME_COLUMN,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
-
- gtk_tree_view_column_set_sort_column_id (column, NAME_COLUMN);
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store),
- NAME_COLUMN,
- compare_theme,
- NULL, NULL);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- NAME_COLUMN,
- GTK_SORT_ASCENDING);
-
- gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (tree),
- separator_func,
- GINT_TO_POINTER (ID_COLUMN),
- NULL);
-
- select = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
- gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
- g_signal_connect (G_OBJECT (select), "changed",
- G_CALLBACK (tree_selection_changed_cb),
- preview);
-
-}
-
-static void
-setup_treeview_selection (GtkWidget *tree)
-{
- char *theme;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreePath *path = NULL;
- gboolean is_writable;
-
- theme = config_get_theme (&is_writable);
-
- if (! is_writable)
- {
- gtk_widget_set_sensitive (tree, FALSE);
- }
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree));
-
- if (theme && gtk_tree_model_get_iter_first (model, &iter))
- {
-
- do
- {
- char *id;
- gboolean found;
-
- gtk_tree_model_get (model, &iter,
- ID_COLUMN, &id, -1);
- found = (id && strcmp (id, theme) == 0);
- g_free (id);
-
- if (found)
- {
- path = gtk_tree_model_get_path (model, &iter);
- break;
- }
-
- }
- while (gtk_tree_model_iter_next (model, &iter));
- }
-
- if (path)
- {
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (tree),
- path,
- NULL,
- FALSE);
-
- gtk_tree_path_free (path);
- }
-
- g_free (theme);
-}
-
-static void
-reload_themes (void)
-{
- GtkWidget *treeview;
- GtkTreeModel *model;
-
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
- gtk_tree_store_clear (GTK_TREE_STORE (model));
- populate_model (GTK_TREE_STORE (model));
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
- GTK_TREE_MODEL (model));
-}
-
-static void
-theme_copy_complete_cb (GtkWidget *dialog, gpointer user_data)
-{
- reload_themes ();
- gtk_widget_destroy (dialog);
-}
-
-static void
-theme_installer_run (GtkWidget *prefs_dialog, GList *files)
-{
- GtkWidget *copy_dialog;
-
- copy_dialog = copy_theme_dialog_new (files);
- g_list_foreach (files, (GFunc) (g_object_unref), NULL);
- g_list_free (files);
-
- gtk_window_set_transient_for (GTK_WINDOW (copy_dialog),
- GTK_WINDOW (prefs_dialog));
- gtk_window_set_icon_name (GTK_WINDOW (copy_dialog),
- "preferences-desktop-screensaver");
-
- g_signal_connect (copy_dialog, "complete",
- G_CALLBACK (theme_copy_complete_cb), NULL);
-
- copy_theme_dialog_begin (COPY_THEME_DIALOG (copy_dialog));
-}
-
-/* Callback issued during drag movements */
-static gboolean
-drag_motion_cb (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- guint time,
- gpointer data)
-{
- return FALSE;
-}
-
-/* Callback issued during drag leaves */
-static void
-drag_leave_cb (GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- gpointer data)
-{
- gtk_widget_queue_draw (widget);
-}
-
-/* GIO has no version of mate_vfs_uri_list_parse(), so copy from MateVFS
- * and re-work to create GFiles.
-**/
-static GList *
-uri_list_parse (const gchar *uri_list)
-{
- const gchar *p, *q;
- gchar *retval;
- GFile *file;
- GList *result = NULL;
-
- g_return_val_if_fail (uri_list != NULL, NULL);
-
- p = uri_list;
-
- /* We don't actually try to validate the URI according to RFC
- * 2396, or even check for allowed characters - we just ignore
- * comments and trim whitespace off the ends. We also
- * allow LF delimination as well as the specified CRLF.
- */
- while (p != NULL)
- {
- if (*p != '#')
- {
- while (g_ascii_isspace (*p))
- p++;
-
- q = p;
- while ((*q != '\0')
- && (*q != '\n')
- && (*q != '\r'))
- q++;
-
- if (q > p)
- {
- q--;
- while (q > p
- && g_ascii_isspace (*q))
- q--;
-
- retval = g_malloc (q - p + 2);
- strncpy (retval, p, q - p + 1);
- retval[q - p + 1] = '\0';
-
- file = g_file_new_for_uri (retval);
-
- g_free (retval);
-
- if (file != NULL)
- result = g_list_prepend (result, file);
- }
- }
- p = strchr (p, '\n');
- if (p != NULL)
- p++;
- }
-
- return g_list_reverse (result);
-}
-
-/* Callback issued on actual drops. Attempts to load the file dropped. */
-static void
-drag_data_received_cb (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- gpointer data)
-{
- GList *files;
-
- if (!(info == TARGET_URI_LIST || info == TARGET_NS_URL))
- return;
-
- files = uri_list_parse ((char *) selection_data->data);
- if (files != NULL)
- {
- GtkWidget *prefs_dialog;
-
- prefs_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
- theme_installer_run (prefs_dialog, files);
- }
-}
-
-/* Adapted from totem_time_to_string_text */
-static char *
-time_to_string_text (long time)
-{
- char *secs, *mins, *hours, *string;
- int sec, min, hour;
-
- sec = time % 60;
- time = time - sec;
- min = (time % (60 * 60)) / 60;
- time = time - (min * 60);
- hour = time / (60 * 60);
-
- hours = g_strdup_printf (ngettext ("%d hour",
- "%d hours", hour), hour);
-
- mins = g_strdup_printf (ngettext ("%d minute",
- "%d minutes", min), min);
-
- secs = g_strdup_printf (ngettext ("%d second",
- "%d seconds", sec), sec);
-
- if (hour > 0)
- {
- if (sec > 0)
- {
- /* hour:minutes:seconds */
- string = g_strdup_printf (_("%s %s %s"), hours, mins, secs);
- }
- else if (min > 0)
- {
- /* hour:minutes */
- string = g_strdup_printf (_("%s %s"), hours, mins);
- }
- else
- {
- /* hour */
- string = g_strdup_printf (_("%s"), hours);
- }
- }
- else if (min > 0)
- {
- if (sec > 0)
- {
- /* minutes:seconds */
- string = g_strdup_printf (_("%s %s"), mins, secs);
- }
- else
- {
- /* minutes */
- string = g_strdup_printf (_("%s"), mins);
- }
- }
- else
- {
- /* seconds */
- string = g_strdup_printf (_("%s"), secs);
- }
-
- g_free (hours);
- g_free (mins);
- g_free (secs);
-
- return string;
-}
-
-static char *
-format_value_callback_time (GtkScale *scale,
- gdouble value)
-{
- if (value == 0)
- return g_strdup_printf (_("Never"));
-
- return time_to_string_text (value * 60.0);
-}
-
-static void
-lock_checkbox_toggled (GtkToggleButton *button, gpointer user_data)
-{
- config_set_lock (gtk_toggle_button_get_active (button));
-}
-
-static void
-enabled_checkbox_toggled (GtkToggleButton *button, gpointer user_data)
-{
- config_set_enabled (gtk_toggle_button_get_active (button));
-}
-
-static void
-invalid_type_warning (const char *type)
-{
- g_warning ("Error retrieving configuration key '%s': Invalid type",
- type);
-}
-
-static void
-ui_disable_lock (gboolean disable)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "lock_checkbox"));
- gtk_widget_set_sensitive (widget, !disable);
- if (disable)
- {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
- }
-}
-
-static void
-ui_set_lock (gboolean enabled)
-{
- GtkWidget *widget;
- gboolean active;
- gboolean lock_disabled;
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "lock_checkbox"));
-
- active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
- if (active != enabled)
- {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), enabled);
- }
- lock_disabled = config_get_lock_disabled ();
- ui_disable_lock (lock_disabled);
-}
-
-static void
-ui_set_enabled (gboolean enabled)
-{
- GtkWidget *widget;
- gboolean active;
- gboolean is_writable;
- gboolean lock_disabled;
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "enable_checkbox"));
- active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
- if (active != enabled)
- {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), enabled);
- }
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "lock_checkbox"));
- config_get_lock (&is_writable);
- if (is_writable)
- {
- gtk_widget_set_sensitive (widget, enabled);
- }
- lock_disabled = config_get_lock_disabled ();
- ui_disable_lock(lock_disabled);
-}
-
-static void
-ui_set_delay (int delay)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "activate_delay_hscale"));
- gtk_range_set_value (GTK_RANGE (widget), delay);
-}
-
-static void
-key_changed_cb (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer data)
-{
- const char *key;
- MateConfValue *value;
-
- key = mateconf_entry_get_key (entry);
-
- if (! g_str_has_prefix (key, KEY_DIR) && ! g_str_has_prefix (key, MATE_LOCKDOWN_DIR))
- {
- return;
- }
-
- value = mateconf_entry_get_value (entry);
-
- if (strcmp (key, KEY_IDLE_ACTIVATION_ENABLED) == 0)
- {
- if (value->type == MATECONF_VALUE_BOOL)
- {
- gboolean enabled;
-
- enabled = mateconf_value_get_bool (value);
-
- ui_set_enabled (enabled);
- }
- else
- {
- invalid_type_warning (key);
- }
- }
- else if (strcmp (key, KEY_LOCK) == 0)
- {
- if (value->type == MATECONF_VALUE_BOOL)
- {
- gboolean enabled;
-
- enabled = mateconf_value_get_bool (value);
-
- ui_set_lock (enabled);
- }
- else
- {
- invalid_type_warning (key);
- }
- }
- else if (strcmp (key, KEY_LOCK_DISABLE) == 0)
- {
- if (value->type == MATECONF_VALUE_BOOL)
- {
- gboolean disabled;
-
- disabled = mateconf_value_get_bool (value);
-
- ui_disable_lock (disabled);
- }
- else
- {
- invalid_type_warning (key);
- }
- }
- else if (strcmp (key, KEY_THEMES) == 0)
- {
- if (value->type == MATECONF_VALUE_LIST)
- {
- GtkWidget *treeview;
-
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
- setup_treeview_selection (treeview);
- }
- else
- {
- invalid_type_warning (key);
- }
- }
- else if (strcmp (key, KEY_ACTIVATE_DELAY) == 0)
- {
-
- if (value->type == MATECONF_VALUE_INT)
- {
- int delay;
-
- delay = mateconf_value_get_int (value);
- ui_set_delay (delay);
- }
- else
- {
- invalid_type_warning (key);
- }
-
- }
- else
- {
- /*g_warning ("Config key not handled: %s", key);*/
- }
-}
-
-static void
-fullscreen_preview_previous_cb (GtkWidget *fullscreen_preview_window,
- gpointer user_data)
-{
- GtkWidget *treeview;
- GtkTreeSelection *selection;
-
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
- tree_selection_previous (selection);
-}
-
-static void
-fullscreen_preview_next_cb (GtkWidget *fullscreen_preview_window,
- gpointer user_data)
-{
- GtkWidget *treeview;
- GtkTreeSelection *selection;
-
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
- tree_selection_next (selection);
-}
-
-static void
-fullscreen_preview_cancelled_cb (GtkWidget *button,
- gpointer user_data)
-{
-
- GtkWidget *fullscreen_preview_area;
- GtkWidget *fullscreen_preview_window;
- GtkWidget *preview_area;
- GtkWidget *dialog;
-
- preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "preview_area"));
- gs_job_set_widget (job, preview_area);
-
- fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area"));
- preview_clear (fullscreen_preview_area);
-
- fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window"));
- gtk_widget_hide (fullscreen_preview_window);
-
- dialog = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
- gtk_widget_show (dialog);
- gtk_window_present (GTK_WINDOW (dialog));
-}
-
-static void
-fullscreen_preview_start_cb (GtkWidget *widget,
- gpointer user_data)
-{
- GtkWidget *fullscreen_preview_area;
- GtkWidget *fullscreen_preview_window;
- GtkWidget *dialog;
-
- dialog = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
- gtk_widget_hide (dialog);
-
- fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window"));
-
- gtk_window_fullscreen (GTK_WINDOW (fullscreen_preview_window));
- gtk_window_set_keep_above (GTK_WINDOW (fullscreen_preview_window), TRUE);
-
- gtk_widget_show (fullscreen_preview_window);
- gtk_widget_grab_focus (fullscreen_preview_window);
-
- fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area"));
- preview_clear (fullscreen_preview_area);
- gs_job_set_widget (job, fullscreen_preview_area);
-}
-
-static void
-constrain_list_size (GtkWidget *widget,
- GtkRequisition *requisition,
- GtkWidget *to_size)
-{
- GtkRequisition req;
- int max_height;
-
- /* constrain height to be the tree height up to a max */
- max_height = (gdk_screen_get_height (gtk_widget_get_screen (widget))) / 4;
-
- gtk_widget_size_request (to_size, &req);
-
- requisition->height = MIN (req.height, max_height);
-}
-
-static void
-setup_list_size_constraint (GtkWidget *widget,
- GtkWidget *to_size)
-{
- g_signal_connect (widget, "size-request",
- G_CALLBACK (constrain_list_size), to_size);
-}
-
-static gboolean
-check_is_root_user (void)
-{
-#ifndef G_OS_WIN32
- uid_t ruid, euid, suid; /* Real, effective and saved user ID's */
- gid_t rgid, egid, sgid; /* Real, effective and saved group ID's */
-
-#ifdef HAVE_GETRESUID
- if (getresuid (&ruid, &euid, &suid) != 0 ||
- getresgid (&rgid, &egid, &sgid) != 0)
-#endif /* HAVE_GETRESUID */
- {
- suid = ruid = getuid ();
- sgid = rgid = getgid ();
- euid = geteuid ();
- egid = getegid ();
- }
-
- if (ruid == 0)
- {
- return TRUE;
- }
-
-#endif
- return FALSE;
-}
-
-static void
-setup_for_root_user (void)
-{
- GtkWidget *lock_checkbox;
- GtkWidget *label;
-
- lock_checkbox = GTK_WIDGET (gtk_builder_get_object (builder, "lock_checkbox"));
- label = GTK_WIDGET (gtk_builder_get_object (builder, "root_warning_label"));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lock_checkbox), FALSE);
- gtk_widget_set_sensitive (lock_checkbox, FALSE);
-
- gtk_widget_show (label);
-}
-
-static GdkVisual *
-get_best_visual (void)
-{
- char *command;
- char *std_output;
- int exit_status;
- GError *error;
- unsigned long v;
- char c;
- GdkVisual *visual;
- gboolean res;
-
- visual = NULL;
-
- command = g_build_filename (LIBEXECDIR, "mate-screensaver-gl-helper", NULL);
-
- error = NULL;
- res = g_spawn_command_line_sync (command,
- &std_output,
- NULL,
- &exit_status,
- &error);
-
- if (! res)
- {
- g_debug ("Could not run command '%s': %s", command, error->message);
- g_error_free (error);
- goto out;
- }
-
- if (1 == sscanf (std_output, "0x%lx %c", &v, &c))
- {
- if (v != 0)
- {
- VisualID visual_id;
-
- visual_id = (VisualID) v;
- visual = gdkx_visual_get (visual_id);
-
- g_debug ("Found best visual for GL: 0x%x",
- (unsigned int) visual_id);
- }
- }
-
-out:
- g_free (std_output);
- g_free (command);
-
- return visual;
-}
-
-static GdkColormap *
-get_best_colormap_for_screen (GdkScreen *screen)
-{
- GdkColormap *colormap;
- GdkVisual *visual;
-
- g_return_val_if_fail (screen != NULL, NULL);
-
- visual = get_best_visual ();
-
- colormap = NULL;
- if (visual != NULL)
- {
- colormap = gdk_colormap_new (visual, FALSE);
- }
-
- return colormap;
-}
-
-static void
-widget_set_best_colormap (GtkWidget *widget)
-{
- GdkColormap *colormap;
-
- g_return_if_fail (widget != NULL);
-
- colormap = get_best_colormap_for_screen (gtk_widget_get_screen (widget));
- if (colormap != NULL)
- {
- gtk_widget_set_colormap (widget, colormap);
- g_object_unref (colormap);
- }
-}
-
-static gboolean
-setup_treeview_idle (gpointer data)
-{
- GtkWidget *preview;
- GtkWidget *treeview;
-
- preview = GTK_WIDGET (gtk_builder_get_object (builder, "preview_area"));
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
-
- setup_treeview (treeview, preview);
- setup_treeview_selection (treeview);
-
- return FALSE;
-}
-
-static gboolean
-is_program_in_path (const char *program)
-{
- char *tmp = g_find_program_in_path (program);
- if (tmp != NULL)
- {
- g_free (tmp);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-static void
-init_capplet (void)
-{
- GtkWidget *dialog;
- GtkWidget *preview;
- GtkWidget *treeview;
- GtkWidget *list_scroller;
- GtkWidget *activate_delay_hscale;
- GtkWidget *activate_delay_hbox;
- GtkWidget *label;
- GtkWidget *enabled_checkbox;
- GtkWidget *lock_checkbox;
- GtkWidget *root_warning_label;
- GtkWidget *preview_button;
- GtkWidget *gpm_button;
- GtkWidget *fullscreen_preview_window;
- GtkWidget *fullscreen_preview_previous;
- GtkWidget *fullscreen_preview_next;
- GtkWidget *fullscreen_preview_area;
- GtkWidget *fullscreen_preview_close;
- char *gtk_builder_file;
- char *string;
- gdouble activate_delay;
- gboolean enabled;
- gboolean is_writable;
- MateConfClient *client;
- GError *error=NULL;
-
- gtk_builder_file = g_build_filename (GTKBUILDERDIR, GTK_BUILDER_FILE, NULL);
- builder = gtk_builder_new();
- if (!gtk_builder_add_from_file(builder, gtk_builder_file, &error))
- {
- g_warning("Couldn't load builder file: %s", error->message);
- g_error_free(error);
- }
- g_free (gtk_builder_file);
-
- if (builder == NULL)
- {
-
- dialog = gtk_message_dialog_new (NULL,
- 0, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Could not load the main interface"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Please make sure that the screensaver is properly installed"));
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_OK);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- exit (1);
- }
-
- preview = GTK_WIDGET (gtk_builder_get_object (builder, "preview_area"));
- dialog = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_dialog"));
- treeview = GTK_WIDGET (gtk_builder_get_object (builder, "savers_treeview"));
- list_scroller = GTK_WIDGET (gtk_builder_get_object (builder, "themes_scrolled_window"));
- activate_delay_hscale = GTK_WIDGET (gtk_builder_get_object (builder, "activate_delay_hscale"));
- activate_delay_hbox = GTK_WIDGET (gtk_builder_get_object (builder, "activate_delay_hbox"));
- enabled_checkbox = GTK_WIDGET (gtk_builder_get_object (builder, "enable_checkbox"));
- lock_checkbox = GTK_WIDGET (gtk_builder_get_object (builder, "lock_checkbox"));
- root_warning_label = GTK_WIDGET (gtk_builder_get_object (builder, "root_warning_label"));
- preview_button = GTK_WIDGET (gtk_builder_get_object (builder, "preview_button"));
- gpm_button = GTK_WIDGET (gtk_builder_get_object (builder, "gpm_button"));
- fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window"));
- fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area"));
- fullscreen_preview_close = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_close"));
- fullscreen_preview_previous = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_previous_button"));
- fullscreen_preview_next = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_next_button"));
-
- label = GTK_WIDGET (gtk_builder_get_object (builder, "activate_delay_label"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), activate_delay_hscale);
- label = GTK_WIDGET (gtk_builder_get_object (builder, "savers_label"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), treeview);
-
- gtk_widget_set_no_show_all (root_warning_label, TRUE);
- widget_set_best_colormap (preview);
-
- if (! is_program_in_path (GPM_COMMAND))
- {
- gtk_widget_set_no_show_all (gpm_button, TRUE);
- gtk_widget_hide (gpm_button);
- }
-
- activate_delay = config_get_activate_delay (&is_writable);
- ui_set_delay (activate_delay);
- if (! is_writable)
- {
- gtk_widget_set_sensitive (activate_delay_hbox, FALSE);
- }
- g_signal_connect (activate_delay_hscale, "format-value",
- G_CALLBACK (format_value_callback_time), NULL);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lock_checkbox), config_get_lock (&is_writable));
- if (! is_writable)
- {
- gtk_widget_set_sensitive (lock_checkbox, FALSE);
- }
- g_signal_connect (lock_checkbox, "toggled",
- G_CALLBACK (lock_checkbox_toggled), NULL);
-
- enabled = config_get_enabled (&is_writable);
- ui_set_enabled (enabled);
- if (! is_writable)
- {
- gtk_widget_set_sensitive (enabled_checkbox, FALSE);
- }
- g_signal_connect (enabled_checkbox, "toggled",
- G_CALLBACK (enabled_checkbox_toggled), NULL);
-
- setup_list_size_constraint (list_scroller, treeview);
- gtk_widget_set_size_request (preview, 480, 300);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), "preferences-desktop-screensaver");
- gtk_window_set_icon_name (GTK_WINDOW (fullscreen_preview_window), "screensaver");
-
- gtk_drag_dest_set (dialog, GTK_DEST_DEFAULT_ALL,
- drop_types, G_N_ELEMENTS (drop_types),
- GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
-
- g_signal_connect (dialog, "drag-motion",
- G_CALLBACK (drag_motion_cb), NULL);
- g_signal_connect (dialog, "drag-leave",
- G_CALLBACK (drag_leave_cb), NULL);
- g_signal_connect (dialog, "drag-data-received",
- G_CALLBACK (drag_data_received_cb), NULL);
-
- gtk_widget_show_all (dialog);
-
- /* Update list of themes if using random screensaver */
- client = mateconf_client_get_default ();
- string = mateconf_client_get_string (client, KEY_MODE, NULL);
- if (string != NULL)
- {
- int mode;
- GSList *list;
-
- mateconf_string_to_enum (mode_enum_map, string, &mode);
- g_free (string);
-
- if (mode == GS_MODE_RANDOM)
- {
- list = get_all_theme_ids (theme_manager);
- mateconf_client_set_list (client, KEY_THEMES, MATECONF_VALUE_STRING, list, NULL);
-
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
- }
- }
-
- mateconf_client_add_dir (client, KEY_DIR,
- MATECONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- mateconf_client_notify_add (client,
- KEY_DIR,
- key_changed_cb,
- NULL, NULL, NULL);
- mateconf_client_add_dir (client, MATE_LOCKDOWN_DIR,
- MATECONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- mateconf_client_notify_add (client,
- MATE_LOCKDOWN_DIR,
- key_changed_cb,
- NULL, NULL, NULL);
-
- g_object_unref (client);
-
- preview_clear (preview);
- gs_job_set_widget (job, preview);
-
- if (check_is_root_user ())
- {
- setup_for_root_user ();
- }
-
- g_signal_connect (activate_delay_hscale, "value-changed",
- G_CALLBACK (activate_delay_value_changed_cb), NULL);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (response_cb), NULL);
-
- g_signal_connect (preview_button, "clicked",
- G_CALLBACK (fullscreen_preview_start_cb),
- treeview);
-
- g_signal_connect (fullscreen_preview_close, "clicked",
- G_CALLBACK (fullscreen_preview_cancelled_cb), NULL);
- g_signal_connect (fullscreen_preview_previous, "clicked",
- G_CALLBACK (fullscreen_preview_previous_cb), NULL);
- g_signal_connect (fullscreen_preview_next, "clicked",
- G_CALLBACK (fullscreen_preview_next_cb), NULL);
-
- g_idle_add ((GSourceFunc)setup_treeview_idle, NULL);
-}
-
-int
-main (int argc,
- char **argv)
-{
-
-#ifdef ENABLE_NLS
- bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
- textdomain (GETTEXT_PACKAGE);
-#endif
-
- gtk_init (&argc, &argv);
-
- job = gs_job_new ();
- theme_manager = gs_theme_manager_new ();
-
- init_capplet ();
-
- gtk_main ();
-
- g_object_unref (theme_manager);
- g_object_unref (job);
-
- return 0;
-}