diff options
| author | William Jon McCann <jmccann@redhat.com> | 2011-03-06 04:31:59 (GMT) |
|---|---|---|
| committer | William Jon McCann <jmccann@redhat.com> | 2011-03-06 05:17:13 (GMT) |
| commit | 76d2c9ff6acf4a98bfa1569a62fafe14e89f413e (patch) | |
| tree | b7de8f2115a2c462e3895c8a7b69d49d8ca77ef0 | |
| parent | 4b9181fad6f74b1c098a998f11523266aaf1caa7 (diff) | |
| download | gnome-screensaver-76d2c9ff6acf4a98bfa1569a62fafe14e89f41.zip gnome-screensaver-76d2c9ff6acf4a98bfa1569a62fafe14e89f41.tar.xz | |
Remove theme and job support
And all that entails.
| -rw-r--r-- | configure.ac | 1 | ||||
| -rw-r--r-- | data/Makefile.am | 11 | ||||
| -rw-r--r-- | data/gnome-screensaver.directory.in | 8 | ||||
| -rw-r--r-- | data/gnome-screensavers.menu.in | 20 | ||||
| -rw-r--r-- | po/POTFILES.in | 1 | ||||
| -rw-r--r-- | src/Makefile.am | 4 | ||||
| -rw-r--r-- | src/gnome-screensaver-command.c | 7 | ||||
| -rw-r--r-- | src/gs-job.c | 522 | ||||
| -rw-r--r-- | src/gs-job.h | 69 | ||||
| -rw-r--r-- | src/gs-listener-dbus.c | 162 | ||||
| -rw-r--r-- | src/gs-listener-dbus.h | 1 | ||||
| -rw-r--r-- | src/gs-manager.c | 480 | ||||
| -rw-r--r-- | src/gs-manager.h | 8 | ||||
| -rw-r--r-- | src/gs-monitor.c | 24 | ||||
| -rw-r--r-- | src/gs-prefs.c | 85 | ||||
| -rw-r--r-- | src/gs-prefs.h | 10 | ||||
| -rw-r--r-- | src/gs-theme-manager.c | 421 |
17 files changed, 2 insertions, 1832 deletions
diff --git a/configure.ac b/configure.ac index d6a8cfc..6596147 100644 --- a/configure.ac +++ b/configure.ac @@ -757,7 +757,6 @@ po/Makefile.in src/Makefile src/gnome-screensaver.desktop.in data/Makefile -data/gnome-screensavers.menu data/gnome-screensaver.pc data/org.gnome.ScreenSaver.service doc/Makefile diff --git a/data/Makefile.am b/data/Makefile.am index c1db5a7..7cdb6b4 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -9,17 +9,6 @@ man_MANS = \ @INTLTOOL_DIRECTORY_RULE@ -directorydir = $(datadir)/desktop-directories -directory_in_files = \ - gnome-screensaver.directory.in \ - $(NULL) -directory_DATA = $(directory_in_files:.directory.in=.directory) - -menudir = $(sysconfdir)/xdg/menus -menu_DATA = \ - gnome-screensavers.menu \ - $(NULL) - pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gnome-screensaver.pc diff --git a/data/gnome-screensaver.directory.in b/data/gnome-screensaver.directory.in deleted file mode 100644 index 688fa51..0000000 --- a/data/gnome-screensaver.directory.in +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -_Name=Screensavers -_Comment=Screensaver themes -Icon=screensaver -Type=Directory -OnlyShowIn=GNOME; -NoDisplay=false diff --git a/data/gnome-screensavers.menu.in b/data/gnome-screensavers.menu.in deleted file mode 100644 index 8097312..0000000 --- a/data/gnome-screensavers.menu.in +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" - "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"> - -<Menu> - - <Name>Screensavers</Name> - <Directory>gnome-screensaver.directory</Directory> - - <!-- Read standard .directory and .desktop file locations --> - <DefaultAppDirs/> - <DefaultDirectoryDirs/> - - <!-- Read in overrides and child menus from applications-merged/ --> - <DefaultMergeDirs/> - - <Include> - <Category>Screensaver</Category> - </Include> - -</Menu> diff --git a/po/POTFILES.in b/po/POTFILES.in index 81861e2..95dbcc4 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,6 +1,5 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -data/gnome-screensaver.directory.in src/gnome-screensaver-command.c src/gnome-screensaver-dialog.c src/gnome-screensaver.c diff --git a/src/Makefile.am b/src/Makefile.am index 5029566..ff5d0c0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -173,10 +173,6 @@ gnome_screensaver_SOURCES = \ gs-window.h \ gs-prefs.c \ gs-prefs.h \ - gs-theme-manager.c \ - gs-theme-manager.h \ - gs-job.c \ - gs-job.h \ gs-debug.c \ gs-debug.h \ subprocs.c \ diff --git a/src/gnome-screensaver-command.c b/src/gnome-screensaver-command.c index dfc6a62..92cc880 100644 --- a/src/gnome-screensaver-command.c +++ b/src/gnome-screensaver-command.c @@ -44,7 +44,6 @@ static gboolean do_quit = FALSE; static gboolean do_lock = FALSE; -static gboolean do_cycle = FALSE; static gboolean do_activate = FALSE; static gboolean do_deactivate = FALSE; static gboolean do_version = FALSE; @@ -66,8 +65,6 @@ static GOptionEntry entries [] = { N_("Query the length of time the screensaver has been active"), NULL }, { "lock", 'l', 0, G_OPTION_ARG_NONE, &do_lock, N_("Tells the running screensaver process to lock the screen immediately"), NULL }, - { "cycle", 'c', 0, G_OPTION_ARG_NONE, &do_cycle, - N_("If the screensaver is active then switch to another graphics demo"), NULL }, { "activate", 'a', 0, G_OPTION_ARG_NONE, &do_activate, N_("Turn the screensaver on (blank the screen)"), NULL }, { "deactivate", 'd', 0, G_OPTION_ARG_NONE, &do_deactivate, @@ -376,10 +373,6 @@ do_command (DBusConnection *connection) reply = screensaver_send_message_void (connection, "Lock", FALSE); } - if (do_cycle) { - reply = screensaver_send_message_void (connection, "Cycle", FALSE); - } - if (do_poke) { reply = screensaver_send_message_void (connection, "SimulateUserActivity", FALSE); } diff --git a/src/gs-job.c b/src/gs-job.c deleted file mode 100644 index fe4f924..0000000 --- a/src/gs-job.c +++ /dev/null @@ -1,522 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2004-2006 William Jon McCann <mccann@jhu.edu> - * - * 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 <mccann@jhu.edu> - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <unistd.h> -#include <signal.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <errno.h> -#include <string.h> - -#if defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) -#include <sys/resource.h> -#endif - -#include <glib.h> -#include <glib/gstdio.h> -#include <gdk/gdk.h> -#include <gdk/gdkx.h> - -#include "gs-debug.h" -#include "gs-job.h" - -#include "subprocs.h" - -static void gs_job_class_init (GSJobClass *klass); -static void gs_job_init (GSJob *job); -static void gs_job_finalize (GObject *object); - -#define GS_JOB_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_JOB, GSJobPrivate)) - -typedef enum { - GS_JOB_INVALID, - GS_JOB_RUNNING, - GS_JOB_STOPPED, - GS_JOB_KILLED, - GS_JOB_DEAD -} GSJobStatus; - -struct GSJobPrivate -{ - GtkWidget *widget; - - GSJobStatus status; - gint pid; - guint watch_id; - - char *command; -}; - -G_DEFINE_TYPE (GSJob, gs_job, G_TYPE_OBJECT) - -static char * -widget_get_id_string (GtkWidget *widget) -{ - char *id = NULL; - - g_return_val_if_fail (widget != NULL, NULL); - - id = g_strdup_printf ("0x%X", - (guint32)GDK_WINDOW_XID (gtk_widget_get_window (widget))); - return id; -} - -static void -gs_job_class_init (GSJobClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = gs_job_finalize; - - g_type_class_add_private (klass, sizeof (GSJobPrivate)); -} - -static void -gs_job_init (GSJob *job) -{ - job->priv = GS_JOB_GET_PRIVATE (job); -} - -/* adapted from gspawn.c */ -static int -wait_on_child (int pid) -{ - int status; - - wait_again: - if (waitpid (pid, &status, 0) < 0) { - if (errno == EINTR) { - goto wait_again; - } else if (errno == ECHILD) { - ; /* do nothing, child already reaped */ - } else { - gs_debug ("waitpid () should not fail in 'GSJob'"); - } - } - - return status; -} - -static void -gs_job_died (GSJob *job) -{ - if (job->priv->pid > 0) { - int exit_status; - - gs_debug ("Waiting on process %d", job->priv->pid); - exit_status = wait_on_child (job->priv->pid); - - job->priv->status = GS_JOB_DEAD; - - if (WIFEXITED (exit_status) && (WEXITSTATUS (exit_status) != 0)) { - gs_debug ("Wait on child process failed"); - } else { - /* exited normally */ - } - } - g_spawn_close_pid (job->priv->pid); - job->priv->pid = 0; - - gs_debug ("Job died"); -} - -static void -gs_job_finalize (GObject *object) -{ - GSJob *job; - - g_return_if_fail (object != NULL); - g_return_if_fail (GS_IS_JOB (object)); - - job = GS_JOB (object); - - g_return_if_fail (job->priv != NULL); - - if (job->priv->pid > 0) { - signal_pid (job->priv->pid, SIGTERM); - gs_job_died (job); - } - - g_free (job->priv->command); - job->priv->command = NULL; - - G_OBJECT_CLASS (gs_job_parent_class)->finalize (object); -} - -void -gs_job_set_widget (GSJob *job, - GtkWidget *widget) -{ - g_return_if_fail (job != NULL); - g_return_if_fail (GS_IS_JOB (job)); - - if (widget != job->priv->widget) { - job->priv->widget = widget; - - /* restart job */ - if (gs_job_is_running (job)) { - gs_job_stop (job); - gs_job_start (job); - } - } -} - -gboolean -gs_job_set_command (GSJob *job, - const char *command) -{ - g_return_val_if_fail (GS_IS_JOB (job), FALSE); - - gs_debug ("Setting command for job: '%s'", - command != NULL ? command : "NULL"); - - g_free (job->priv->command); - job->priv->command = g_strdup (command); - - return TRUE; -} - -GSJob * -gs_job_new (void) -{ - GObject *job; - - job = g_object_new (GS_TYPE_JOB, NULL); - - return GS_JOB (job); -} - -GSJob * -gs_job_new_for_widget (GtkWidget *widget) -{ - GObject *job; - - job = g_object_new (GS_TYPE_JOB, NULL); - - gs_job_set_widget (GS_JOB (job), widget); - - return GS_JOB (job); -} - -static void -nice_process (int pid, - int nice_level) -{ - g_return_if_fail (pid > 0); - - if (nice_level == 0) { - return; - } - -#if defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) - gs_debug ("Setting child process priority to: %d", nice_level); - if (setpriority (PRIO_PROCESS, pid, nice_level) != 0) { - gs_debug ("setpriority(PRIO_PROCESS, %lu, %d) failed", - (unsigned long) pid, nice_level); - } -#else - gs_debug ("don't know how to change process priority on this system."); -#endif -} - -static GPtrArray * -get_env_vars (GtkWidget *widget) -{ - GPtrArray *env; - char *str; - int i; - static const char *allowed_env_vars [] = { - "PATH", - "SESSION_MANAGER", - "XAUTHORITY", - "XAUTHLOCALHOSTNAME", - "LANG", - "LANGUAGE", - "DBUS_SESSION_BUS_ADDRESS" - }; - - env = g_ptr_array_new (); - - str = gdk_screen_make_display_name (gtk_widget_get_screen (widget)); - g_ptr_array_add (env, g_strdup_printf ("DISPLAY=%s", str)); - g_free (str); - - g_ptr_array_add (env, g_strdup_printf ("HOME=%s", - g_get_home_dir ())); - - for (i = 0; i < G_N_ELEMENTS (allowed_env_vars); i++) { - const char *var; - const char *val; - var = allowed_env_vars [i]; - val = g_getenv (var); - if (val != NULL) { - g_ptr_array_add (env, g_strdup_printf ("%s=%s", - var, - val)); - } - } - - str = widget_get_id_string (widget); - g_ptr_array_add (env, g_strdup_printf ("XSCREENSAVER_WINDOW=%s", str)); - g_free (str); - - g_ptr_array_add (env, NULL); - - return env; -} - -static gboolean -spawn_on_widget (GtkWidget *widget, - const char *command, - int *pid, - GIOFunc watch_func, - gpointer user_data, - guint *watch_id) -{ - char **argv; - GPtrArray *env; - gboolean result; - GIOChannel *channel; - GError *error = NULL; - int standard_error; - int child_pid; - int id; - int i; - - if (command == NULL) { - return FALSE; - } - - if (! g_shell_parse_argv (command, NULL, &argv, &error)) { - gs_debug ("Could not parse command: %s", error->message); - g_error_free (error); - return FALSE; - } - - env = get_env_vars (widget); - - error = NULL; - result = g_spawn_async_with_pipes (NULL, - argv, - (char **)env->pdata, - G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, - NULL, - NULL, - &child_pid, - NULL, - NULL, - &standard_error, - &error); - for (i = 0; i < env->len; i++) { - g_free (g_ptr_array_index (env, i)); - } - g_ptr_array_free (env, TRUE); - - if (! result) { - gs_debug ("Could not start command '%s': %s", command, error->message); - g_error_free (error); - g_strfreev (argv); - return FALSE; - } - - g_strfreev (argv); - - nice_process (child_pid, 10); - - if (pid != NULL) { - *pid = child_pid; - } else { - g_spawn_close_pid (child_pid); - } - - channel = g_io_channel_unix_new (standard_error); - g_io_channel_set_close_on_unref (channel, TRUE); - g_io_channel_set_flags (channel, - g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK, - NULL); - id = g_io_add_watch (channel, - G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL, - watch_func, - user_data); - if (watch_id != NULL) { - *watch_id = id; - } - - g_io_channel_unref (channel); - - return result; -} - -static gboolean -command_watch (GIOChannel *source, - GIOCondition condition, - GSJob *job) -{ - GIOStatus status; - GError *error = NULL; - gboolean done = FALSE; - - g_return_val_if_fail (job != NULL, FALSE); - - if (condition & G_IO_IN) { - char *str; - - status = g_io_channel_read_line (source, &str, NULL, NULL, &error); - - if (status == G_IO_STATUS_NORMAL) { - gs_debug ("command output: %s", str); - - } else if (status == G_IO_STATUS_EOF) { - done = TRUE; - - } else if (error != NULL) { - gs_debug ("command error: %s", error->message); - g_error_free (error); - } - - g_free (str); - } else if (condition & G_IO_HUP) { - done = TRUE; - } - - if (done) { - gs_job_died (job); - - job->priv->watch_id = 0; - return FALSE; - } - - return TRUE; -} - -gboolean -gs_job_is_running (GSJob *job) -{ - gboolean running; - - g_return_val_if_fail (GS_IS_JOB (job), FALSE); - - running = (job->priv->pid > 0); - - return running; -} - -gboolean -gs_job_start (GSJob *job) -{ - gboolean result; - - g_return_val_if_fail (job != NULL, FALSE); - g_return_val_if_fail (GS_IS_JOB (job), FALSE); - - gs_debug ("starting job"); - - if (job->priv->pid != 0) { - gs_debug ("Cannot restart active job."); - return FALSE; - } - - if (job->priv->widget == NULL) { - gs_debug ("Could not start job: screensaver window is not set."); - return FALSE; - } - - if (job->priv->command == NULL) { - /* no warning here because a NULL command is interpreted - as a no-op job */ - gs_debug ("No command set for job."); - return FALSE; - } - - result = spawn_on_widget (job->priv->widget, - job->priv->command, - &job->priv->pid, - (GIOFunc)command_watch, - job, - &job->priv->watch_id); - - if (result) { - job->priv->status = GS_JOB_RUNNING; - } - - return result; -} - -static void -remove_command_watch (GSJob *job) -{ - if (job->priv->watch_id != 0) { - g_source_remove (job->priv->watch_id); - job->priv->watch_id = 0; - } -} - -gboolean -gs_job_stop (GSJob *job) -{ - g_return_val_if_fail (job != NULL, FALSE); - g_return_val_if_fail (GS_IS_JOB (job), FALSE); - - gs_debug ("stopping job"); - - if (job->priv->pid == 0) { - gs_debug ("Could not stop job: pid not defined"); - return FALSE; - } - - if (job->priv->status == GS_JOB_STOPPED) { - gs_job_suspend (job, FALSE); - } - - remove_command_watch (job); - - signal_pid (job->priv->pid, SIGTERM); - - job->priv->status = GS_JOB_KILLED; - - gs_job_died (job); - - return TRUE; -} - -gboolean -gs_job_suspend (GSJob *job, - gboolean suspend) -{ - g_return_val_if_fail (job != NULL, FALSE); - g_return_val_if_fail (GS_IS_JOB (job), FALSE); - - gs_debug ("suspending job"); - - if (job->priv->pid == 0) { - return FALSE; - } - - signal_pid (job->priv->pid, (suspend ? SIGSTOP : SIGCONT)); - - job->priv->status = (suspend ? GS_JOB_STOPPED : GS_JOB_RUNNING); - - return TRUE; -} diff --git a/src/gs-job.h b/src/gs-job.h deleted file mode 100644 index 6736b2a..0000000 --- a/src/gs-job.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2004-2005 William Jon McCann <mccann@jhu.edu> - * - * 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 <mccann@jhu.edu> - * - */ - -#ifndef __GS_JOB_H -#define __GS_JOB_H - -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define GS_TYPE_JOB (gs_job_get_type ()) -#define GS_JOB(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_JOB, GSJob)) -#define GS_JOB_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_JOB, GSJobClass)) -#define GS_IS_JOB(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_JOB)) -#define GS_IS_JOB_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_JOB)) -#define GS_JOB_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_JOB, GSJobClass)) - -typedef struct GSJobPrivate GSJobPrivate; - -typedef struct -{ - GObject parent; - GSJobPrivate *priv; -} GSJob; - -typedef struct -{ - GObjectClass parent_class; -} GSJobClass; - -GType gs_job_get_type (void); - -GSJob *gs_job_new (void); -GSJob *gs_job_new_for_widget (GtkWidget *widget); - -gboolean gs_job_is_running (GSJob *job); -gboolean gs_job_start (GSJob *job); -gboolean gs_job_stop (GSJob *job); -gboolean gs_job_suspend (GSJob *job, - gboolean suspend); - -void gs_job_set_widget (GSJob *job, - GtkWidget *widget); - -gboolean gs_job_set_command (GSJob *job, - const char *command); - -G_END_DECLS - -#endif /* __GS_JOB_H */ diff --git a/src/gs-listener-dbus.c b/src/gs-listener-dbus.c index c374550..beea33b 100644 --- a/src/gs-listener-dbus.c +++ b/src/gs-listener-dbus.c @@ -80,14 +80,10 @@ struct GSListenerPrivate guint session_idle : 1; guint active : 1; guint activation_enabled : 1; - guint throttled : 1; GHashTable *inhibitors; - GHashTable *throttlers; time_t active_start; time_t session_idle_start; char *session_id; - - guint32 ck_throttle_cookie; }; typedef struct @@ -103,11 +99,9 @@ typedef struct enum { LOCK, - CYCLE, QUIT, SIMULATE_USER_ACTIVITY, ACTIVE_CHANGED, - THROTTLE_CHANGED, SHOW_MESSAGE, LAST_SIGNAL }; @@ -121,7 +115,6 @@ enum { enum { REF_ENTRY_TYPE_INHIBIT, - REF_ENTRY_TYPE_THROTTLE }; static DBusObjectPathVTable @@ -232,9 +225,6 @@ get_name_for_entry_type (int entry_type) case REF_ENTRY_TYPE_INHIBIT: name = "inhibitor"; break; - case REF_ENTRY_TYPE_THROTTLE: - name = "throttler"; - break; default: g_assert_not_reached (); break; @@ -253,9 +243,6 @@ get_hash_for_entry_type (GSListener *listener, case REF_ENTRY_TYPE_INHIBIT: hash = listener->priv->inhibitors; break; - case REF_ENTRY_TYPE_THROTTLE: - hash = listener->priv->throttlers; - break; default: g_assert_not_reached (); break; @@ -330,37 +317,6 @@ listener_check_activation (GSListener *listener) return res; } -static void -gs_listener_set_throttle (GSListener *listener, - gboolean throttled) -{ - g_return_if_fail (GS_IS_LISTENER (listener)); - - if (listener->priv->throttled != throttled) { - gs_debug ("Changing throttle status: %d", throttled); - - listener->priv->throttled = throttled; - - g_signal_emit (listener, signals [THROTTLE_CHANGED], 0, throttled); - } -} - -static gboolean -listener_check_throttle (GSListener *listener) -{ - gboolean throttled; - - gs_debug ("Checking for throttle"); - - throttled = listener_ref_entry_is_present (listener, REF_ENTRY_TYPE_THROTTLE); - - if (throttled != listener->priv->throttled) { - gs_listener_set_throttle (listener, throttled); - } - - return TRUE; -} - static gboolean listener_set_session_idle_internal (GSListener *listener, gboolean idle) @@ -595,9 +551,6 @@ listener_ref_entry_check (GSListener *listener, case REF_ENTRY_TYPE_INHIBIT: listener_check_activation (listener); break; - case REF_ENTRY_TYPE_THROTTLE: - listener_check_throttle (listener); - break; default: g_assert_not_reached (); break; @@ -851,39 +804,6 @@ listener_dbus_get_ref_entries (GSListener *listener, return DBUS_HANDLER_RESULT_HANDLED; } -static void -listener_add_ck_ref_entry (GSListener *listener, - int entry_type, - DBusConnection *connection, - DBusMessage *message, - guint32 *cookiep) -{ - GSListenerRefEntry *entry; - - entry = g_new0 (GSListenerRefEntry, 1); - entry->entry_type = entry_type; - entry->connection = g_strdup (dbus_message_get_sender (message)); - entry->cookie = listener_generate_unique_key (listener, entry_type); - entry->application = g_strdup ("ConsoleKit"); - entry->reason = g_strdup ("Session is not active"); - g_get_current_time (&entry->since); - - /* takes ownership of entry */ - listener_add_ref_entry (listener, entry_type, entry); - - if (cookiep != NULL) { - *cookiep = entry->cookie; - } -} - -static void -listener_remove_ck_ref_entry (GSListener *listener, - int entry_type, - guint32 cookie) -{ - listener_remove_ref_entry (listener, entry_type, cookie); -} - static DBusHandlerResult listener_dbus_add_ref_entry (GSListener *listener, int entry_type, @@ -904,8 +824,6 @@ listener_dbus_add_ref_entry (GSListener *listener, DBUS_TYPE_INVALID)) { if (entry_type == REF_ENTRY_TYPE_INHIBIT) { raise_syntax (connection, message, "Inhibit"); - } else if (entry_type == REF_ENTRY_TYPE_THROTTLE) { - raise_syntax (connection, message, "Throttle"); } else { g_assert_not_reached (); } @@ -957,8 +875,6 @@ listener_dbus_remove_ref_entry (GSListener *listener, DBUS_TYPE_INVALID)) { if (entry_type == REF_ENTRY_TYPE_INHIBIT) { raise_syntax (connection, message, "UnInhibit"); - } else if (entry_type == REF_ENTRY_TYPE_THROTTLE) { - raise_syntax (connection, message, "UnThrottle"); } else { g_assert_not_reached (); } @@ -1042,11 +958,6 @@ listener_service_deleted (GSListener *listener, gs_debug ("DBUS service deleted: %s", new_service_name); - removed = listener_ref_entry_remove_for_connection (listener, REF_ENTRY_TYPE_THROTTLE, new_service_name); - if (removed) { - listener_ref_entry_check (listener, REF_ENTRY_TYPE_THROTTLE); - } - removed = listener_ref_entry_remove_for_connection (listener, REF_ENTRY_TYPE_INHIBIT, new_service_name); if (removed) { listener_ref_entry_check (listener, REF_ENTRY_TYPE_INHIBIT); @@ -1286,8 +1197,6 @@ do_introspect (DBusConnection *connection, " <interface name=\"org.gnome.ScreenSaver\">\n" " <method name=\"Lock\">\n" " </method>\n" - " <method name=\"Cycle\">\n" - " </method>\n" " <method name=\"SimulateUserActivity\">\n" " </method>\n" " <method name=\"Inhibit\">\n" @@ -1301,14 +1210,6 @@ do_introspect (DBusConnection *connection, " <method name=\"GetInhibitors\">\n" " <arg name=\"list\" direction=\"out\" type=\"as\"/>\n" " </method>\n" - " <method name=\"Throttle\">\n" - " <arg name=\"application_name\" direction=\"in\" type=\"s\"/>\n" - " <arg name=\"reason\" direction=\"in\" type=\"s\"/>\n" - " <arg name=\"cookie\" direction=\"out\" type=\"u\"/>\n" - " </method>\n" - " <method name=\"UnThrottle\">\n" - " <arg name=\"cookie\" direction=\"in\" type=\"u\"/>\n" - " </method>\n" " <method name=\"GetActive\">\n" " <arg name=\"value\" direction=\"out\" type=\"b\"/>\n" " </method>\n" @@ -1403,10 +1304,6 @@ listener_dbus_handle_session_message (DBusConnection *connection, g_signal_emit (listener, signals [QUIT], 0); return send_success_reply (connection, message); } - if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Cycle")) { - g_signal_emit (listener, signals [CYCLE], 0); - return send_success_reply (connection, message); - } if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Inhibit")) { return listener_dbus_add_ref_entry (listener, REF_ENTRY_TYPE_INHIBIT, connection, message); } @@ -1416,12 +1313,6 @@ listener_dbus_handle_session_message (DBusConnection *connection, if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "GetInhibitors")) { return listener_dbus_get_ref_entries (listener, REF_ENTRY_TYPE_INHIBIT, connection, message); } - if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Throttle")) { - return listener_dbus_add_ref_entry (listener, REF_ENTRY_TYPE_THROTTLE, connection, message); - } - if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "UnThrottle")) { - return listener_dbus_remove_ref_entry (listener, REF_ENTRY_TYPE_THROTTLE, connection, message); - } if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "SetActive")) { return listener_set_property (listener, connection, message, PROP_ACTIVE); } @@ -1538,31 +1429,9 @@ listener_dbus_handle_system_message (DBusConnection *connection, DBUS_TYPE_INVALID)) { gs_debug ("ConsoleKit notified ActiveChanged %d", new_active); - /* when we aren't active add an implicit throttle from CK - * when we become active remove the throttle and poke the lock */ + /* when we become active poke the lock */ if (new_active) { - if (listener->priv->ck_throttle_cookie != 0) { - listener_remove_ck_ref_entry (listener, - REF_ENTRY_TYPE_THROTTLE, - listener->priv->ck_throttle_cookie); - listener->priv->ck_throttle_cookie = 0; - } - g_signal_emit (listener, signals [SIMULATE_USER_ACTIVITY], 0); - } else { - if (listener->priv->ck_throttle_cookie != 0) { - g_warning ("ConsoleKit throttle already set"); - listener_remove_ck_ref_entry (listener, - REF_ENTRY_TYPE_THROTTLE, - listener->priv->ck_throttle_cookie); - listener->priv->ck_throttle_cookie = 0; - } - - listener_add_ck_ref_entry (listener, - REF_ENTRY_TYPE_THROTTLE, - connection, - message, - &listener->priv->ck_throttle_cookie); } } @@ -1826,16 +1695,6 @@ gs_listener_class_init (GSListenerClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - signals [CYCLE] = - g_signal_new ("cycle", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GSListenerClass, cycle), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); signals [SIMULATE_USER_ACTIVITY] = g_signal_new ("simulate-user-activity", G_TYPE_FROM_CLASS (object_class), @@ -1857,17 +1716,6 @@ gs_listener_class_init (GSListenerClass *klass) G_TYPE_BOOLEAN, 1, G_TYPE_BOOLEAN); - signals [THROTTLE_CHANGED] = - g_signal_new ("throttle-changed", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GSListenerClass, throttle_changed), - NULL, - NULL, - g_cclosure_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); signals [SHOW_MESSAGE] = g_signal_new ("show-message", G_TYPE_FROM_CLASS (object_class), @@ -2084,10 +1932,6 @@ gs_listener_init (GSListener *listener) g_int_equal, NULL, (GDestroyNotify)gs_listener_ref_entry_free); - listener->priv->throttlers = g_hash_table_new_full (g_int_hash, - g_int_equal, - NULL, - (GDestroyNotify)gs_listener_ref_entry_free); } static void @@ -2106,10 +1950,6 @@ gs_listener_finalize (GObject *object) g_hash_table_destroy (listener->priv->inhibitors); } - if (listener->priv->throttlers) { - g_hash_table_destroy (listener->priv->throttlers); - } - g_free (listener->priv->session_id); G_OBJECT_CLASS (gs_listener_parent_class)->finalize (object); diff --git a/src/gs-listener-dbus.h b/src/gs-listener-dbus.h index c57f367..20541f9 100644 --- a/src/gs-listener-dbus.h +++ b/src/gs-listener-dbus.h @@ -45,7 +45,6 @@ typedef struct GObjectClass parent_class; void (* lock) (GSListener *listener); - void (* cycle) (GSListener *listener); void (* quit) (GSListener *listener); void (* simulate_user_activity) (GSListener *listener); gboolean (* active_changed) (GSListener *listener, diff --git a/src/gs-manager.c b/src/gs-manager.c index 0f0d42c..8789566 100644 --- a/src/gs-manager.c +++ b/src/gs-manager.c @@ -33,8 +33,6 @@ #include "gs-manager.h" #include "gs-window.h" -#include "gs-theme-manager.h" -#include "gs-job.h" #include "gs-grab.h" #include "gs-fade.h" #include "gs-debug.h" @@ -48,22 +46,17 @@ static void gs_manager_finalize (GObject *object); struct GSManagerPrivate { GSList *windows; - GHashTable *jobs; - - GSThemeManager *theme_manager; GSettings *settings; GnomeBG *bg; /* Policy */ glong lock_timeout; - glong cycle_timeout; glong logout_timeout; guint lock_enabled : 1; guint logout_enabled : 1; guint keyboard_enabled : 1; guint user_switch_enabled : 1; - guint throttled : 1; char *logout_command; char *keyboard_command; @@ -80,10 +73,7 @@ struct GSManagerPrivate time_t activate_time; guint lock_timeout_id; - guint cycle_timeout_id; - GSList *themes; - GSSaverMode saver_mode; GSGrab *grab; GSFade *fade; guint unfade_idle_id; @@ -104,13 +94,11 @@ enum { PROP_USER_SWITCH_ENABLED, PROP_KEYBOARD_ENABLED, PROP_LOCK_TIMEOUT, - PROP_CYCLE_TIMEOUT, PROP_LOGOUT_TIMEOUT, PROP_LOGOUT_COMMAND, PROP_KEYBOARD_COMMAND, PROP_STATUS_MESSAGE, PROP_ACTIVE, - PROP_THROTTLED, }; #define FADE_TIMEOUT 1000 @@ -119,280 +107,6 @@ static guint signals [LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE (GSManager, gs_manager, G_TYPE_OBJECT) -static void -manager_add_job_for_window (GSManager *manager, - GSWindow *window, - GSJob *job) -{ - if (manager->priv->jobs == NULL) { - return; - } - - g_hash_table_insert (manager->priv->jobs, window, job); -} - -static const char * -select_theme (GSManager *manager) -{ - const char *theme = NULL; - - g_return_val_if_fail (manager != NULL, NULL); - g_return_val_if_fail (GS_IS_MANAGER (manager), NULL); - - if (manager->priv->saver_mode == GS_MODE_BLANK_ONLY) { - return NULL; - } - - if (manager->priv->themes) { - int number = 0; - - if (manager->priv->saver_mode == GS_MODE_RANDOM) { - g_random_set_seed (time (NULL)); - number = g_random_int_range (0, g_slist_length (manager->priv->themes)); - } - theme = g_slist_nth_data (manager->priv->themes, number); - } - - return theme; -} - -static GSJob * -lookup_job_for_window (GSManager *manager, - GSWindow *window) -{ - GSJob *job; - - if (manager->priv->jobs == NULL) { - return NULL; - } - - job = g_hash_table_lookup (manager->priv->jobs, window); - - return job; -} - -static void -manager_maybe_stop_job_for_window (GSManager *manager, - GSWindow *window) -{ - GSJob *job; - - job = lookup_job_for_window (manager, window); - - if (job == NULL) { - gs_debug ("Job not found for window"); - return; - } - - gs_job_stop (job); -} - -static void -manager_maybe_start_job_for_window (GSManager *manager, - GSWindow *window) -{ - GSJob *job; - - job = lookup_job_for_window (manager, window); - - if (job == NULL) { - gs_debug ("Job not found for window"); - return; - } - - if (! manager->priv->dialog_up) { - if (! manager->priv->throttled) { - if (! gs_job_is_running (job)) { - if (! gs_window_is_obscured (window)) { - gs_debug ("Starting job for window"); - gs_job_start (job); - } else { - gs_debug ("Window is obscured deferring start of job"); - } - } else { - gs_debug ("Not starting job because job is running"); - } - } else { - gs_debug ("Not starting job because throttled"); - } - } else { - gs_debug ("Not starting job because dialog is up"); - } -} - -static void -manager_select_theme_for_job (GSManager *manager, - GSJob *job) -{ - const char *theme; - - theme = select_theme (manager); - - if (theme != NULL) { - GSThemeInfo *info; - const char *command; - - command = NULL; - - info = gs_theme_manager_lookup_theme_info (manager->priv->theme_manager, theme); - if (info != NULL) { - command = gs_theme_info_get_exec (info); - } else { - gs_debug ("Could not find information for theme: %s", - theme); - } - - gs_job_set_command (job, command); - - - if (info != NULL) { - gs_theme_info_unref (info); - } - } else { - gs_job_set_command (job, NULL); - } -} - -static void -cycle_job (GSWindow *window, - GSJob *job, - GSManager *manager) -{ - gs_job_stop (job); - manager_select_theme_for_job (manager, job); - manager_maybe_start_job_for_window (manager, window); -} - -static void -manager_cycle_jobs (GSManager *manager) -{ - if (manager->priv->jobs != NULL) { - g_hash_table_foreach (manager->priv->jobs, (GHFunc) cycle_job, manager); - } -} - -static void -throttle_job (GSWindow *window, - GSJob *job, - GSManager *manager) -{ - if (manager->priv->throttled) { - gs_job_stop (job); - } else { - manager_maybe_start_job_for_window (manager, window); - } -} - -static void -manager_throttle_jobs (GSManager *manager) -{ - if (manager->priv->jobs != NULL) { - g_hash_table_foreach (manager->priv->jobs, (GHFunc) throttle_job, manager); - } -} - -static void -resume_job (GSWindow *window, - GSJob *job, - GSManager *manager) -{ - if (gs_job_is_running (job)) { - gs_job_suspend (job, FALSE); - } else { - manager_maybe_start_job_for_window (manager, window); - } -} - -static void -manager_resume_jobs (GSManager *manager) -{ - if (manager->priv->jobs != NULL) { - g_hash_table_foreach (manager->priv->jobs, (GHFunc) resume_job, manager); - } -} - -static void -suspend_job (GSWindow *window, - GSJob *job, - GSManager *manager) -{ - gs_job_suspend (job, TRUE); -} - -static void -manager_suspend_jobs (GSManager *manager) -{ - if (manager->priv->jobs != NULL) { - g_hash_table_foreach (manager->priv->jobs, (GHFunc) suspend_job, manager); - } -} - -static void -manager_stop_jobs (GSManager *manager) -{ - if (manager->priv->jobs != NULL) { - g_hash_table_destroy (manager->priv->jobs); - - } - manager->priv->jobs = NULL; -} - -void -gs_manager_set_mode (GSManager *manager, - GSSaverMode mode) -{ - g_return_if_fail (GS_IS_MANAGER (manager)); - - manager->priv->saver_mode = mode; -} - -static void -free_themes (GSManager *manager) -{ - if (manager->priv->themes) { - g_slist_foreach (manager->priv->themes, (GFunc)g_free, NULL); - g_slist_free (manager->priv->themes); - } -} - -void -gs_manager_set_themes (GSManager *manager, - GSList *themes) -{ - GSList *l; - - g_return_if_fail (GS_IS_MANAGER (manager)); - - free_themes (manager); - manager->priv->themes = NULL; - - for (l = themes; l; l = l->next) { - manager->priv->themes = g_slist_append (manager->priv->themes, g_strdup (l->data)); - } -} - -void -gs_manager_set_throttled (GSManager *manager, - gboolean throttled) -{ - g_return_if_fail (GS_IS_MANAGER (manager)); - - if (manager->priv->throttled != throttled) { - GSList *l; - - manager->priv->throttled = throttled; - - if (! manager->priv->dialog_up) { - - manager_throttle_jobs (manager); - - for (l = manager->priv->windows; l; l = l->next) { - gs_window_clear (l->data); - } - } - } -} - void gs_manager_get_lock_active (GSManager *manager, gboolean *lock_active) @@ -628,90 +342,6 @@ gs_manager_set_status_message (GSManager *manager, } } -gboolean -gs_manager_cycle (GSManager *manager) -{ - g_return_val_if_fail (manager != NULL, FALSE); - g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE); - - gs_debug ("cycling jobs"); - - if (! manager->priv->active) { - return FALSE; - } - - if (manager->priv->dialog_up) { - return FALSE; - } - - if (manager->priv->throttled) { - return FALSE; - } - - manager_cycle_jobs (manager); - - return TRUE; -} - -static gboolean -cycle_timeout (GSManager *manager) -{ - g_return_val_if_fail (manager != NULL, FALSE); - g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE); - - if (! manager->priv->dialog_up) { - gs_manager_cycle (manager); - } - - return TRUE; -} - -static void -remove_cycle_timer (GSManager *manager) -{ - if (manager->priv->cycle_timeout_id != 0) { - g_source_remove (manager->priv->cycle_timeout_id); - manager->priv->cycle_timeout_id = 0; - } -} - -static void -add_cycle_timer (GSManager *manager, - glong timeout) -{ - manager->priv->cycle_timeout_id = g_timeout_add (timeout, - (GSourceFunc)cycle_timeout, - manager); -} - -void -gs_manager_set_cycle_timeout (GSManager *manager, - glong cycle_timeout) -{ - g_return_if_fail (GS_IS_MANAGER (manager)); - - if (manager->priv->cycle_timeout != cycle_timeout) { - - manager->priv->cycle_timeout = cycle_timeout; - - if (manager->priv->active && (cycle_timeout >= 0)) { - glong timeout; - glong elapsed = (time (NULL) - manager->priv->activate_time) * 1000; - - remove_cycle_timer (manager); - - if (elapsed >= cycle_timeout) { - timeout = 0; - } else { - timeout = cycle_timeout - elapsed; - } - - add_cycle_timer (manager, timeout); - - } - } -} - static void gs_manager_set_property (GObject *object, guint prop_id, @@ -723,9 +353,6 @@ gs_manager_set_property (GObject *object, self = GS_MANAGER (object); switch (prop_id) { - case PROP_THROTTLED: - gs_manager_set_throttled (self, g_value_get_boolean (value)); - break; case PROP_LOCK_ENABLED: gs_manager_set_lock_enabled (self, g_value_get_boolean (value)); break; @@ -753,9 +380,6 @@ gs_manager_set_property (GObject *object, case PROP_STATUS_MESSAGE: gs_manager_set_status_message (self, g_value_get_string (value)); break; - case PROP_CYCLE_TIMEOUT: - gs_manager_set_cycle_timeout (self, g_value_get_long (value)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -773,9 +397,6 @@ gs_manager_get_property (GObject *object, self = GS_MANAGER (object); switch (prop_id) { - case PROP_THROTTLED: - g_value_set_boolean (value, self->priv->throttled); - break; case PROP_LOCK_ENABLED: g_value_set_boolean (value, self->priv->lock_enabled); break; @@ -803,9 +424,6 @@ gs_manager_get_property (GObject *object, case PROP_STATUS_MESSAGE: g_value_set_string (value, self->priv->status_message); break; - case PROP_CYCLE_TIMEOUT: - g_value_set_long (value, self->priv->cycle_timeout); - break; case PROP_ACTIVE: g_value_set_boolean (value, self->priv->active); default: @@ -918,22 +536,6 @@ gs_manager_class_init (GSManagerClass *klass) NULL, NULL, G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_CYCLE_TIMEOUT, - g_param_spec_long ("cycle-timeout", - NULL, - NULL, - 10000, - G_MAXLONG, - 300000, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_THROTTLED, - g_param_spec_boolean ("throttled", - NULL, - NULL, - TRUE, - G_PARAM_READWRITE)); g_type_class_add_private (klass, sizeof (GSManagerPrivate)); } @@ -994,7 +596,6 @@ gs_manager_init (GSManager *manager) manager->priv->fade = gs_fade_new (); manager->priv->grab = gs_grab_new (); - manager->priv->theme_manager = gs_theme_manager_new (); manager->priv->settings = get_system_settings (); manager->priv->bg = gnome_bg_new (); @@ -1016,7 +617,6 @@ static void remove_timers (GSManager *manager) { remove_lock_timer (manager); - remove_cycle_timer (manager); } static void @@ -1174,8 +774,6 @@ window_map_event_cb (GSWindow *window, manager_maybe_grab_window (manager, window); - manager_maybe_start_job_for_window (manager, window); - return FALSE; } @@ -1224,15 +822,8 @@ static void manager_show_window (GSManager *manager, GSWindow *window) { - GSJob *job; - apply_background_to_window (manager, window); - job = gs_job_new_for_widget (gs_window_get_drawing_area (window)); - - manager_select_theme_for_job (manager, job); - manager_add_job_for_window (manager, window, job); - manager->priv->activate_time = time (NULL); if (manager->priv->lock_timeout >= 0) { @@ -1240,11 +831,6 @@ manager_show_window (GSManager *manager, add_lock_timer (manager, manager->priv->lock_timeout); } - if (manager->priv->cycle_timeout >= 10000) { - remove_cycle_timer (manager); - add_cycle_timer (manager, manager->priv->cycle_timeout); - } - add_unfade_idle (manager); /* FIXME: only emit signal once */ @@ -1266,35 +852,6 @@ window_show_cb (GSWindow *window, } static void -maybe_set_window_throttle (GSManager *manager, - GSWindow *window, - gboolean throttled) -{ - if (throttled) { - manager_maybe_stop_job_for_window (manager, window); - } else { - manager_maybe_start_job_for_window (manager, window); - } -} - -static void -window_obscured_cb (GSWindow *window, - GParamSpec *pspec, - GSManager *manager) -{ - gboolean obscured; - - obscured = gs_window_is_obscured (window); - gs_debug ("Handling window obscured: %s", obscured ? "obscured" : "unobscured"); - - maybe_set_window_throttle (manager, window, obscured); - - if (! obscured) { - gs_manager_request_unlock (manager); - } -} - -static void handle_window_dialog_up (GSManager *manager, GSWindow *window) { @@ -1324,12 +881,6 @@ handle_window_dialog_up (GSManager *manager, /* Release the pointer grab while dialog is up so that the dialog can be used. We'll regrab it when the dialog goes down. */ gs_grab_release_mouse (manager->priv->grab); - - if (! manager->priv->throttled) { - gs_debug ("Suspending jobs"); - - manager_suspend_jobs (manager); - } } static void @@ -1356,10 +907,6 @@ handle_window_dialog_down (GSManager *manager, manager->priv->dialog_up = FALSE; - if (! manager->priv->throttled) { - manager_resume_jobs (manager); - } - g_signal_emit (manager, signals [AUTH_REQUEST_END], 0); } @@ -1399,7 +946,6 @@ disconnect_window_signals (GSManager *manager, g_signal_handlers_disconnect_by_func (window, window_show_cb, manager); g_signal_handlers_disconnect_by_func (window, window_map_cb, manager); g_signal_handlers_disconnect_by_func (window, window_map_event_cb, manager); - g_signal_handlers_disconnect_by_func (window, window_obscured_cb, manager); g_signal_handlers_disconnect_by_func (window, window_dialog_up_changed_cb, manager); g_signal_handlers_disconnect_by_func (window, window_unmap_cb, manager); g_signal_handlers_disconnect_by_func (window, window_grab_broken_cb, manager); @@ -1428,8 +974,6 @@ connect_window_signals (GSManager *manager, G_CALLBACK (window_map_cb), manager, G_CONNECT_AFTER); g_signal_connect_object (window, "map_event", G_CALLBACK (window_map_event_cb), manager, G_CONNECT_AFTER); - g_signal_connect_object (window, "notify::obscured", - G_CALLBACK (window_obscured_cb), manager, G_CONNECT_AFTER); g_signal_connect_object (window, "notify::dialog-up", G_CALLBACK (window_dialog_up_changed_cb), manager, 0); g_signal_connect_object (window, "unmap", @@ -1519,8 +1063,6 @@ on_screen_monitors_changed (GdkScreen *screen, this_screen = gs_window_get_screen (GS_WINDOW (l->data)); this_monitor = gs_window_get_monitor (GS_WINDOW (l->data)); if (this_screen == screen && this_monitor >= n_monitors) { - manager_maybe_stop_job_for_window (manager, GS_WINDOW (l->data)); - g_hash_table_remove (manager->priv->jobs, l->data); gs_window_destroy (GS_WINDOW (l->data)); manager->priv->windows = g_slist_delete_link (manager->priv->windows, l); } @@ -1591,7 +1133,6 @@ gs_manager_finalize (GObject *object) g_object_unref (manager->priv->settings); } - free_themes (manager); g_free (manager->priv->logout_command); g_free (manager->priv->keyboard_command); g_free (manager->priv->status_message); @@ -1601,8 +1142,6 @@ gs_manager_finalize (GObject *object) gs_grab_release (manager->priv->grab); - manager_stop_jobs (manager); - gs_manager_destroy_windows (manager); manager->priv->active = FALSE; @@ -1611,7 +1150,6 @@ gs_manager_finalize (GObject *object) g_object_unref (manager->priv->fade); g_object_unref (manager->priv->grab); - g_object_unref (manager->priv->theme_manager); G_OBJECT_CLASS (gs_manager_parent_class)->finalize (object); } @@ -1688,17 +1226,6 @@ show_windows (GSList *windows) } static void -remove_job (GSJob *job) -{ - if (job == NULL) { - return; - } - - gs_job_stop (job); - g_object_unref (job); -} - -static void fade_done_cb (GSFade *fade, GSManager *manager) { @@ -1730,11 +1257,6 @@ gs_manager_activate (GSManager *manager) gs_manager_create_windows (GS_MANAGER (manager)); } - manager->priv->jobs = g_hash_table_new_full (g_direct_hash, - g_direct_equal, - NULL, - (GDestroyNotify)remove_job); - manager->priv->active = TRUE; /* fade to black and show windows */ @@ -1774,8 +1296,6 @@ gs_manager_deactivate (GSManager *manager) gs_grab_release (manager->priv->grab); - manager_stop_jobs (manager); - gs_manager_destroy_windows (manager); /* reset state */ diff --git a/src/gs-manager.h b/src/gs-manager.h index 3a3e349..8086a58 100644 --- a/src/gs-manager.h +++ b/src/gs-manager.h @@ -61,8 +61,6 @@ gboolean gs_manager_set_active (GSManager *manager, gboolean active); gboolean gs_manager_get_active (GSManager *manager); -gboolean gs_manager_cycle (GSManager *manager); - void gs_manager_get_lock_active (GSManager *manager, gboolean *lock_active); void gs_manager_set_lock_active (GSManager *manager, @@ -87,14 +85,8 @@ void gs_manager_set_logout_timeout (GSManager *manager, glong logout_timeout); void gs_manager_set_logout_command (GSManager *manager, const char *command); -void gs_manager_set_throttled (GSManager *manager, - gboolean lock_enabled); -void gs_manager_set_cycle_timeout (GSManager *manager, - glong cycle_timeout); void gs_manager_set_themes (GSManager *manager, GSList *themes); -void gs_manager_set_mode (GSManager *manager, - GSSaverMode mode); void gs_manager_show_message (GSManager *manager, const char *summary, const char *body, diff --git a/src/gs-monitor.c b/src/gs-monitor.c index 640ee74..cd1d093 100644 --- a/src/gs-monitor.c +++ b/src/gs-monitor.c @@ -214,13 +214,6 @@ listener_quit_cb (GSListener *listener, } static void -listener_cycle_cb (GSListener *listener, - GSMonitor *monitor) -{ - gs_manager_cycle (monitor->priv->manager); -} - -static void listener_show_message_cb (GSListener *listener, const char *summary, const char *body, @@ -265,14 +258,6 @@ listener_active_changed_cb (GSListener *listener, } static void -listener_throttle_changed_cb (GSListener *listener, - gboolean throttled, - GSMonitor *monitor) -{ - gs_manager_set_throttled (monitor->priv->manager, throttled); -} - -static void listener_simulate_user_activity_cb (GSListener *listener, GSMonitor *monitor) { @@ -301,9 +286,6 @@ _gs_monitor_update_from_prefs (GSMonitor *monitor, gs_manager_set_logout_timeout (monitor->priv->manager, monitor->priv->prefs->logout_timeout); gs_manager_set_logout_command (monitor->priv->manager, monitor->priv->prefs->logout_command); gs_manager_set_keyboard_command (monitor->priv->manager, monitor->priv->prefs->keyboard_command); - gs_manager_set_cycle_timeout (monitor->priv->manager, monitor->priv->prefs->cycle); - gs_manager_set_mode (monitor->priv->manager, monitor->priv->prefs->mode); - gs_manager_set_themes (monitor->priv->manager, monitor->priv->prefs->themes); /* enable activation when allowed */ gs_listener_set_activation_enabled (monitor->priv->listener, @@ -343,9 +325,7 @@ disconnect_listener_signals (GSMonitor *monitor) { g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_lock_cb, monitor); g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_quit_cb, monitor); - g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_cycle_cb, monitor); g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_active_changed_cb, monitor); - g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_throttle_changed_cb, monitor); g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_simulate_user_activity_cb, monitor); g_signal_handlers_disconnect_by_func (monitor->priv->listener, listener_show_message_cb, monitor); } @@ -357,12 +337,8 @@ connect_listener_signals (GSMonitor *monitor) G_CALLBACK (listener_lock_cb), monitor); g_signal_connect (monitor->priv->listener, "quit", G_CALLBACK (listener_quit_cb), monitor); - g_signal_connect (monitor->priv->listener, "cycle", - G_CALLBACK (listener_cycle_cb), monitor); g_signal_connect (monitor->priv->listener, "active-changed", G_CALLBACK (listener_active_changed_cb), monitor); - g_signal_connect (monitor->priv->listener, "throttle-changed", - G_CALLBACK (listener_throttle_changed_cb), monitor); g_signal_connect (monitor->priv->listener, "simulate-user-activity", G_CALLBACK (listener_simulate_user_activity_cb), monitor); g_signal_connect (monitor->priv->listener, "show-message", diff --git a/src/gs-prefs.c b/src/gs-prefs.c index 78700f9..6e05c1f 100644 --- a/src/gs-prefs.c +++ b/src/gs-prefs.c @@ -45,11 +45,8 @@ static void gs_prefs_finalize (GObject *object); #define GS_SETTINGS_SCHEMA "org.gnome.desktop.screensaver" #define KEY_IDLE_ACTIVATION_ENABLED "idle-activation-enabled" #define KEY_LOCK_ENABLED "lock-enabled" -#define KEY_MODE "mode" #define KEY_POWER_DELAY "power-management-delay" #define KEY_LOCK_DELAY "lock-delay" -#define KEY_CYCLE_DELAY "cycle-delay" -#define KEY_THEMES "themes" #define KEY_USER_SWITCH_ENABLED "user-switch-enabled" #define KEY_LOGOUT_ENABLED "logout-enabled" #define KEY_LOGOUT_DELAY "logout-delay" @@ -175,45 +172,6 @@ _gs_prefs_set_lock_timeout (GSPrefs *prefs, } static void -_gs_prefs_set_cycle_timeout (GSPrefs *prefs, - guint value) -{ - if (value < 1) - value = 1; - - /* pick a reasonable large number for the - upper bound */ - if (value > 480) - value = 480; - - prefs->cycle = value * 60000; -} - -static void -_gs_prefs_set_mode (GSPrefs *prefs, - GDesktopScreensaverMode mode) -{ - prefs->mode = mode; -} - -static void -_gs_prefs_set_themes (GSPrefs *prefs, - gchar **values) -{ - guint i; - - if (prefs->themes) { - g_slist_foreach (prefs->themes, (GFunc)g_free, NULL); - g_slist_free (prefs->themes); - } - - /* take ownership of the list */ - prefs->themes = NULL; - for (i=0; values[i] != NULL; i++) - prefs->themes = g_slist_append (prefs->themes, g_strdup (values[i])); -} - -static void _gs_prefs_set_idle_activation_enabled (GSPrefs *prefs, gboolean value) { @@ -325,8 +283,6 @@ gs_prefs_load_from_settings (GSPrefs *prefs) guint uvalue; gboolean bvalue; char *string; - gchar **strv; - GDesktopScreensaverMode mode; bvalue = g_settings_get_boolean (prefs->priv->settings, KEY_IDLE_ACTIVATION_ENABLED); _gs_prefs_set_idle_activation_enabled (prefs, bvalue); @@ -349,16 +305,6 @@ gs_prefs_load_from_settings (GSPrefs *prefs) uvalue = _gs_settings_get_uint (prefs->priv->settings, KEY_LOCK_DELAY); _gs_prefs_set_lock_timeout (prefs, uvalue); - uvalue = _gs_settings_get_uint (prefs->priv->settings, KEY_CYCLE_DELAY); - _gs_prefs_set_cycle_timeout (prefs, uvalue); - - mode = g_settings_get_enum (prefs->priv->settings, KEY_MODE); - _gs_prefs_set_mode (prefs, mode); - - strv = g_settings_get_strv (prefs->priv->settings, KEY_THEMES); - _gs_prefs_set_themes (prefs, strv); - g_strfreev (strv); - /* Embedded keyboard options */ bvalue = g_settings_get_boolean (prefs->priv->settings, KEY_KEYBOARD_ENABLED); @@ -394,21 +340,7 @@ key_changed_cb (GSettings *settings, const gchar *key, GSPrefs *prefs) { - if (strcmp (key, KEY_MODE) == 0) { - - gint mode; - - mode = g_settings_get_enum (settings, key); - _gs_prefs_set_mode (prefs, mode); - - } else if (strcmp (key, KEY_THEMES) == 0) { - gchar **strv = NULL; - - strv = g_settings_get_strv (settings, key); - _gs_prefs_set_themes (prefs, strv); - g_strfreev (strv); - - } else if (strcmp (key, KEY_ACTIVATE_DELAY) == 0) { + if (strcmp (key, KEY_ACTIVATE_DELAY) == 0) { guint delay; @@ -457,13 +389,6 @@ key_changed_cb (GSettings *settings, disabled = g_settings_get_boolean (settings, key); _gs_prefs_set_user_switch_disabled (prefs, disabled); - } else if (strcmp (key, KEY_CYCLE_DELAY) == 0) { - - guint delay; - - delay = _gs_settings_get_uint (settings, key); - _gs_prefs_set_cycle_timeout (prefs, delay); - } else if (strcmp (key, KEY_KEYBOARD_ENABLED) == 0) { gboolean enabled; @@ -551,9 +476,6 @@ gs_prefs_init (GSPrefs *prefs) prefs->power_timeout = 60000; prefs->lock_timeout = 0; prefs->logout_timeout = 14400000; - prefs->cycle = 600000; - - prefs->mode = GS_MODE_SINGLE; gs_prefs_load_from_settings (prefs); } @@ -583,11 +505,6 @@ gs_prefs_finalize (GObject *object) prefs->priv->lockdown = NULL; } - if (prefs->themes) { - g_slist_foreach (prefs->themes, (GFunc)g_free, NULL); - g_slist_free (prefs->themes); - } - g_free (prefs->logout_command); g_free (prefs->keyboard_command); diff --git a/src/gs-prefs.h b/src/gs-prefs.h index cda64be..647c70f 100644 --- a/src/gs-prefs.h +++ b/src/gs-prefs.h @@ -32,12 +32,6 @@ G_BEGIN_DECLS #define GS_IS_PREFS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_PREFS)) #define GS_PREFS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_PREFS, GSPrefsClass)) -typedef enum { - GS_MODE_BLANK_ONLY, - GS_MODE_RANDOM, - GS_MODE_SINGLE -} GSSaverMode; - typedef struct GSPrefsPrivate GSPrefsPrivate; typedef struct @@ -59,13 +53,9 @@ typedef struct guint timeout; /* how much idle time before activation */ guint lock_timeout; /* how long after activation locking starts */ guint logout_timeout; /* how long until the logout option appears */ - guint cycle; /* how long each theme should run */ char *logout_command; /* command to use to logout */ char *keyboard_command; /* command to use to embed a keyboard */ - - GSList *themes; /* the screensaver themes to run */ - GSSaverMode mode; /* theme selection mode */ } GSPrefs; typedef struct diff --git a/src/gs-theme-manager.c b/src/gs-theme-manager.c deleted file mode 100644 index e0f5449..0000000 --- a/src/gs-theme-manager.c +++ /dev/null @@ -1,421 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2006 William Jon McCann <mccann@jhu.edu> - * - * 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 <mccann@jhu.edu> - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> - -#include <string.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -#include <glib-object.h> -#include <gmenu-tree.h> - -#include "gs-theme-manager.h" -#include "gs-debug.h" - -static void gs_theme_manager_class_init (GSThemeManagerClass *klass); -static void gs_theme_manager_init (GSThemeManager *theme_manager); -static void gs_theme_manager_finalize (GObject *object); - -#define GS_THEME_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_THEME_MANAGER, GSThemeManagerPrivate)) - -struct _GSThemeInfo { - char *name; - char *exec; - char *file_id; - guint refcount; -}; - -struct GSThemeManagerPrivate -{ - GMenuTree *menu_tree; -}; - -G_DEFINE_TYPE (GSThemeManager, gs_theme_manager, G_TYPE_OBJECT) - -static gpointer theme_manager_object = NULL; - -static const char *known_engine_locations [] = { - SAVERDIR, -#ifdef XSCREENSAVER_HACK_DIR - XSCREENSAVER_HACK_DIR, -#endif - LIBEXECDIR "/xscreensaver", - "/usr/libexec/xscreensaver", - "/usr/lib/xscreensaver", - NULL -}; - -/* Returns the full path to the queried command */ -static char * -find_command (const char *command) -{ - int i; - - if (g_path_is_absolute (command)) { - char *dirname; - - dirname = g_path_get_dirname (command); - for (i = 0; known_engine_locations [i]; i++) { - if (strcmp (dirname, known_engine_locations [i]) == 0) { - if (g_file_test (command, G_FILE_TEST_IS_EXECUTABLE) - && ! g_file_test (command, G_FILE_TEST_IS_DIR)) { - g_free (dirname); - return g_strdup (command); - } - } - } - g_free (dirname); - } else { - for (i = 0; known_engine_locations [i]; i++){ - char *path; - - path = g_build_filename (known_engine_locations [i], command, NULL); - - if (g_file_test (path, G_FILE_TEST_IS_EXECUTABLE) - && ! g_file_test (path, G_FILE_TEST_IS_DIR)) { - return path; - } - - g_free (path); - } - } - - return NULL; -} - -static gboolean -check_command (const char *command) -{ - char *path; - char **argv; - - g_return_val_if_fail (command != NULL, FALSE); - - g_shell_parse_argv (command, NULL, &argv, NULL); - path = find_command (argv [0]); - g_strfreev (argv); - - if (path != NULL) { - g_free (path); - return TRUE; - } - - return FALSE; -} - -static void -add_known_engine_locations_to_path (void) -{ - static gboolean already_added; - int i; - GString *str; - - /* We only want to add the items to the path once */ - if (already_added) { - return; - } - - already_added = TRUE; - - /* TODO: set a default PATH ? */ - - str = g_string_new (g_getenv ("PATH")); - for (i = 0; known_engine_locations [i]; i++) { - /* TODO: check that permissions are safe */ - if (g_file_test (known_engine_locations [i], G_FILE_TEST_IS_DIR)) { - g_string_append_printf (str, ":%s", known_engine_locations [i]); - } - } - - g_setenv ("PATH", str->str, TRUE); - g_string_free (str, TRUE); -} - -GSThemeInfo * -gs_theme_info_ref (GSThemeInfo *info) -{ - g_return_val_if_fail (info != NULL, NULL); - g_return_val_if_fail (info->refcount > 0, NULL); - - info->refcount++; - - return info; -} - -void -gs_theme_info_unref (GSThemeInfo *info) -{ - g_return_if_fail (info != NULL); - g_return_if_fail (info->refcount > 0); - - if (--info->refcount == 0) { - g_free (info->name); - g_free (info->exec); - g_free (info->file_id); - - g_free (info); - } -} - -const char * -gs_theme_info_get_id (GSThemeInfo *info) -{ - g_return_val_if_fail (info != NULL, NULL); - - return info->file_id; -} - -const char * -gs_theme_info_get_name (GSThemeInfo *info) -{ - g_return_val_if_fail (info != NULL, NULL); - - return info->name; -} - -const char * -gs_theme_info_get_exec (GSThemeInfo *info) -{ - const char *exec; - - g_return_val_if_fail (info != NULL, NULL); - - if (check_command (info->exec)) { - exec = info->exec; - } else { - exec = NULL; - } - - return exec; -} - -static GSThemeInfo * -gs_theme_info_new_from_gmenu_tree_entry (GMenuTreeEntry *entry) -{ - GSThemeInfo *info; - const char *str; - char *pos; - - info = g_new0 (GSThemeInfo, 1); - - info->refcount = 1; - info->name = g_strdup (gmenu_tree_entry_get_name (entry)); - info->exec = g_strdup (gmenu_tree_entry_get_exec (entry)); - - /* remove the .desktop suffix */ - str = gmenu_tree_entry_get_desktop_file_id (entry); - pos = g_strrstr (str, ".desktop"); - if (pos) { - info->file_id = g_strndup (str, pos - str); - } else { - info->file_id = g_strdup (str); - } - - return info; -} - -static GSThemeInfo * -find_info_for_id (GMenuTree *tree, - const char *id) -{ - GSThemeInfo *info; - GMenuTreeDirectory *root; - GSList *items; - GSList *l; - - root = gmenu_tree_get_root_directory (tree); - if (root == NULL) { - return NULL; - } - - items = gmenu_tree_directory_get_contents (root); - - info = NULL; - - for (l = items; l; l = l->next) { - if (info == NULL - && gmenu_tree_item_get_type (l->data) == GMENU_TREE_ITEM_ENTRY) { - GMenuTreeEntry *entry = l->data; - const char *file_id; - - file_id = gmenu_tree_entry_get_desktop_file_id (entry); - if (file_id && id && strcmp (file_id, id) == 0) { - info = gs_theme_info_new_from_gmenu_tree_entry (entry); - } - } - - gmenu_tree_item_unref (l->data); - } - - g_slist_free (items); - gmenu_tree_item_unref (root); - - return info; -} - -GSThemeInfo * -gs_theme_manager_lookup_theme_info (GSThemeManager *theme_manager, - const char *name) -{ - GSThemeInfo *info; - char *id; - - g_return_val_if_fail (GS_IS_THEME_MANAGER (theme_manager), NULL); - g_return_val_if_fail (name != NULL, NULL); - - id = g_strdup_printf ("%s.desktop", name); - info = find_info_for_id (theme_manager->priv->menu_tree, id); - g_free (id); - - return info; -} - -static void -theme_prepend_entry (GSList **parent_list, - GMenuTreeEntry *entry, - const char *filename) -{ - GSThemeInfo *info; - - info = gs_theme_info_new_from_gmenu_tree_entry (entry); - - *parent_list = g_slist_prepend (*parent_list, info); -} - -static void -make_theme_list (GSList **parent_list, - GMenuTreeDirectory *directory, - const char *filename) -{ - GSList *items; - GSList *l; - - items = gmenu_tree_directory_get_contents (directory); - - for (l = items; l; l = l->next) { - switch (gmenu_tree_item_get_type (l->data)) { - - case GMENU_TREE_ITEM_ENTRY: - theme_prepend_entry (parent_list, l->data, filename); - break; - - case GMENU_TREE_ITEM_ALIAS: - case GMENU_TREE_ITEM_DIRECTORY: - default: - break; - } - - gmenu_tree_item_unref (l->data); - } - - g_slist_free (items); - - *parent_list = g_slist_reverse (*parent_list); -} - -GSList * -gs_theme_manager_get_info_list (GSThemeManager *theme_manager) -{ - GSList *l = NULL; - GMenuTreeDirectory *root; - - g_return_val_if_fail (GS_IS_THEME_MANAGER (theme_manager), NULL); - - root = gmenu_tree_get_root_directory (theme_manager->priv->menu_tree); - - if (root != NULL) { - make_theme_list (&l, root, "gnome-screensavers.menu"); - gmenu_tree_item_unref (root); - } - - return l; -} - -static void -gs_theme_manager_class_init (GSThemeManagerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = gs_theme_manager_finalize; - - g_type_class_add_private (klass, sizeof (GSThemeManagerPrivate)); -} - -static GMenuTree * -get_themes_tree (void) -{ - GMenuTree *themes_tree = NULL; - - /* we only need to add the locations to the path once - and since this is only run once we'll do it here */ - add_known_engine_locations_to_path (); - - themes_tree = gmenu_tree_lookup ("gnome-screensavers.menu", GMENU_TREE_FLAGS_NONE); - - return themes_tree; -} - -static void -gs_theme_manager_init (GSThemeManager *theme_manager) -{ - theme_manager->priv = GS_THEME_MANAGER_GET_PRIVATE (theme_manager); - - theme_manager->priv->menu_tree = get_themes_tree (); -} - -static void -gs_theme_manager_finalize (GObject *object) -{ - GSThemeManager *theme_manager; - - g_return_if_fail (object != NULL); - g_return_if_fail (GS_IS_THEME_MANAGER (object)); - - theme_manager = GS_THEME_MANAGER (object); - - g_return_if_fail (theme_manager->priv != NULL); - - if (theme_manager->priv->menu_tree != NULL) { - gmenu_tree_unref (theme_manager->priv->menu_tree); - } - - G_OBJECT_CLASS (gs_theme_manager_parent_class)->finalize (object); -} - -GSThemeManager * -gs_theme_manager_new (void) -{ - if (theme_manager_object) { - g_object_ref (theme_manager_object); - } else { - theme_manager_object = g_object_new (GS_TYPE_THEME_MANAGER, NULL); - g_object_add_weak_pointer (theme_manager_object, - (gpointer *) &theme_manager_object); - } - - return GS_THEME_MANAGER (theme_manager_object); -} |