[Xfce4-commits] [apps/xfce4-screensaver] 04/425: quitando archivos generados por astyle

noreply at xfce.org noreply at xfce.org
Mon Oct 15 01:47:31 CEST 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit 1edf6684b4713b0848f425d474fc1a43b073942d
Author: Perberos <perberos at gmail.com>
Date:   Fri Nov 4 22:37:08 2011 -0300

    quitando archivos generados por astyle
---
 savers/floaters.c.orig                  | 1256 ---------------
 savers/gs-theme-engine.c.orig           |  216 ---
 savers/gs-theme-engine.h.orig           |   88 -
 savers/gs-theme-window.c.orig           |  208 ---
 savers/gs-theme-window.h.orig           |   72 -
 savers/gste-popsquares.c.orig           |  563 -------
 savers/gste-popsquares.h.orig           |   57 -
 savers/gste-slideshow.c.orig            | 1001 ------------
 savers/gste-slideshow.h.orig            |   69 -
 savers/popsquares.c.orig                |   72 -
 savers/slideshow.c.orig                 |  127 --
 savers/xdg-user-dir-lookup.c.orig       |  168 --
 src/copy-theme-dialog.c.orig            |  545 -------
 src/copy-theme-dialog.h.orig            |   56 -
 src/gs-auth-helper.c.orig               |  213 ---
 src/gs-auth-pam.c.orig                  |  843 ----------
 src/gs-auth-pwent.c.orig                |  291 ----
 src/gs-auth.h.orig                      |   65 -
 src/gs-debug.c.orig                     |  163 --
 src/gs-fade.c.orig                      |  987 ------------
 src/gs-fade.h.orig                      |   77 -
 src/gs-grab-x11.c.orig                  |  672 --------
 src/gs-grab.h.orig                      |   79 -
 src/gs-job.c.orig                       |  567 -------
 src/gs-job.h.orig                       |   69 -
 src/gs-listener-dbus.c.orig             | 2272 --------------------------
 src/gs-listener-dbus.h.orig             |   89 --
 src/gs-lock-plug.c.orig                 | 2050 ------------------------
 src/gs-lock-plug.h.orig                 |   82 -
 src/gs-manager.c.orig                   | 2030 ------------------------
 src/gs-manager.h.orig                   |  107 --
 src/gs-monitor.c.orig                   |  528 ------
 src/gs-monitor.h.orig                   |   57 -
 src/gs-prefs.c.orig                     |  995 ------------
 src/gs-prefs.h.orig                     |   85 -
 src/gs-theme-manager.c.orig             |  453 ------
 src/gs-theme-manager.h.orig             |   65 -
 src/gs-visual-gl.c.orig                 |  116 --
 src/gs-watcher-x11.c.orig               |  680 --------
 src/gs-watcher.h.orig                   |   65 -
 src/gs-window-x11.c.orig                | 2647 -------------------------------
 src/gs-window.h.orig                    |  106 --
 src/mate-screensaver-command.c.orig     |  551 -------
 src/mate-screensaver-dialog.c.orig      |  665 --------
 src/mate-screensaver-gl-helper.c.orig   |   83 -
 src/mate-screensaver-preferences.c.orig | 1781 ---------------------
 src/mate-screensaver.c.orig             |  132 --
 src/setuid.c.orig                       |  247 ---
 src/setuid.h.orig                       |   25 -
 src/subprocs.c.orig                     |  166 --
 src/subprocs.h.orig                     |   39 -
 src/test-fade.c.orig                    |  134 --
 src/test-passwd.c.orig                  |  288 ----
 src/test-watcher.c.orig                 |  106 --
 src/test-window.c.orig                  |  180 ---
 55 files changed, 25348 deletions(-)

diff --git a/savers/floaters.c.orig b/savers/floaters.c.orig
deleted file mode 100644
index 1fd84f5..0000000
--- a/savers/floaters.c.orig
+++ /dev/null
@@ -1,1256 +0,0 @@
-/*
- * Copyright (C) 2005 Ray Strode <rstrode at redhat.com>,
- *                    Matthias Clasen <mclasen at redhat.com>,
- *                    Søren Sandmann <sandmann at redhat.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- *
- * Originally written by: Ray Strode <rstrode at redhat.com>
- *
- * Later contributions by: Matthias Clasen <mclasen at redhat.com>
- *                         Søren Sandmann <sandmann at redhat.com>
- */
-
-#include "config.h"
-
-#include <math.h>
-#include <stdlib.h>
-#include <sysexits.h>
-#include <time.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-
-#ifndef trunc
-#define trunc(x) (((x) > 0.0) ? floor((x)) : -floor(-(x)))
-#endif
-
-#ifndef OPTIMAL_FRAME_RATE
-#define OPTIMAL_FRAME_RATE (25.0)
-#endif
-
-#ifndef STAT_PRINT_FREQUENCY
-#define STAT_PRINT_FREQUENCY (2000)
-#endif
-
-#ifndef FLOATER_MAX_SIZE
-#define FLOATER_MAX_SIZE (128.0)
-#endif
-
-#ifndef FLOATER_MIN_SIZE
-#define FLOATER_MIN_SIZE (16.0)
-#endif
-#ifndef FLOATER_DEFAULT_COUNT
-#define FLOATER_DEFAULT_COUNT (5)
-#endif
-
-#ifndef SMALL_ANGLE
-#define SMALL_ANGLE (0.025 * G_PI)
-#endif
-
-#ifndef BIG_ANGLE
-#define BIG_ANGLE (0.125 * G_PI)
-#endif
-
-#ifndef GAMMA
-#define GAMMA 2.2
-#endif
-
-static gboolean should_show_paths = FALSE;
-static gboolean should_do_rotations = FALSE;
-static gboolean should_print_stats = FALSE;
-static gint max_floater_count = FLOATER_DEFAULT_COUNT;
-static gchar *geometry = NULL;
-static gchar **filenames = NULL;
-
-static GOptionEntry options[] = {
-       {"show-paths", 'p', 0, G_OPTION_ARG_NONE, &should_show_paths,
-            N_("Show paths that images follow"), NULL},
-
-       {"do-rotations", 'r', 0, G_OPTION_ARG_NONE, &should_do_rotations,
-            N_("Occasionally rotate images as they move"), NULL},
-
-       {"print-stats", 's', 0, G_OPTION_ARG_NONE, &should_print_stats,
-            N_("Print out frame rate and other statistics"), NULL},
-
-       {"number-of-images", 'n', 0, G_OPTION_ARG_INT, &max_floater_count,
-             N_("The maximum number of images to keep on screen"), N_("MAX_IMAGES")},
-
-       {"geometry", 0, 0, G_OPTION_ARG_STRING, &geometry,
-             N_("The initial size and position of window"), N_("WIDTHxHEIGHT+X+Y")},
-
-       {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames,
-            N_("The source image to use"), NULL},
-
-       {NULL}
-};
-
-
-typedef struct _Point Point;
-typedef struct _Path Path;
-typedef struct _Rectangle Rectangle;
-typedef struct _ScreenSaverFloater ScreenSaverFloater;
-typedef struct _CachedSource CachedSource;
-typedef struct _ScreenSaver ScreenSaver;
-
-struct _Point
-{
-  gdouble x, y;
-};
-
-struct _Path
-{
-  Point start_point;
-  Point start_control_point;
-  Point end_control_point;
-  Point end_point;
-
-  gdouble x_linear_coefficient,
-          y_linear_coefficient;
-
-  gdouble x_quadratic_coefficient,
-          y_quadratic_coefficient;
-
-  gdouble x_cubic_coefficient,
-          y_cubic_coefficient;
-
-  gdouble duration;
-};
-
-struct _CachedSource
-{
-  cairo_pattern_t *pattern;
-  gint width, height;
-};
-
-struct _Rectangle
-{
-  Point top_left_point;
-  Point bottom_right_point;
-};
-
-struct _ScreenSaverFloater
-{
-  GdkRectangle bounds;
-
-  Point start_position;
-  Point position;
-
-  gdouble scale;
-  gdouble opacity;
-
-  Path *path;
-  gdouble path_start_time;
-  gdouble path_start_scale;
-  gdouble path_end_scale;
-
-  gdouble angle;
-  gdouble angle_increment;
-};
-
-struct _ScreenSaver
-{
-  GtkWidget  *drawing_area;
-  Rectangle canvas_rectangle;
-  GHashTable *cached_sources;
-
-  char *filename;
-
-  gdouble first_update_time;
-
-  gdouble last_calculated_stats_time,
-          current_calculated_stats_time;
-  gint update_count, frame_count;
-
-  gdouble updates_per_second;
-  gdouble frames_per_second;
-
-  guint state_update_timeout_id;
-  guint stats_update_timeout_id;
-
-  GList *floaters;
-  gint max_floater_count;
-
-  guint should_do_rotations: 1;
-  guint should_show_paths : 1;
-  guint draw_ops_pending : 1;
-};
-
-static Path *path_new (Point *start_point,
-                       Point *start_control_point,
-                       Point *end_control_point,
-                       Point *end_point,
-                       gdouble duration);
-static void path_free (Path *path);
-
-static ScreenSaverFloater *screen_saver_floater_new (ScreenSaver *screen_saver,
-                                                     Point       *position,
-                                                     gdouble      scale);
-static void screen_saver_floater_free (ScreenSaver        *screen_saver,
-                                       ScreenSaverFloater *floater);
-static gboolean screen_saver_floater_is_off_canvas (ScreenSaver        *screen_saver,
-                                                    ScreenSaverFloater *floater);
-static gboolean screen_saver_floater_should_bubble_up (ScreenSaver        *screen_saver,
-                                                       ScreenSaverFloater *floater,
-                                                       gdouble             performance_ratio,
-                                                       gdouble            *duration);
-static gboolean screen_saver_floater_should_come_on_screen (ScreenSaver   *screen_saver,
-                                                            ScreenSaverFloater *floater,
-                                                            gdouble             performance_ratio,
-                                                            gdouble            *duration);
-static Point screen_saver_floater_get_position_from_time (ScreenSaver        *screen_saver,
-                                                          ScreenSaverFloater *floater,
-                                                          gdouble             time);
-static gdouble screen_saver_floater_get_scale_from_time (ScreenSaver        *screen_saver,
-                                                         ScreenSaverFloater *floater,
-                                                         gdouble             time);
-static gdouble screen_saver_floater_get_angle_from_time (ScreenSaver        *screen_saver,
-                                                         ScreenSaverFloater *floater,
-                                                         gdouble             time);
-
-static Path *screen_saver_floater_create_path_to_on_screen (ScreenSaver        *screen_saver,
-                                                            ScreenSaverFloater *floater,
-                                                            gdouble             duration);
-static Path *screen_saver_floater_create_path_to_bubble_up (ScreenSaver        *screen_saver,
-                                                            ScreenSaverFloater *floater,
-                                                            gdouble             duration);
-static Path *screen_saver_floater_create_path_to_random_point (ScreenSaver        *screen_saver,
-                                                               ScreenSaverFloater *floater,
-                                                               gdouble             duration);
-static Path *screen_saver_floater_create_path (ScreenSaver        *screen_saver,
-                                               ScreenSaverFloater *floater);
-static void screen_saver_floater_update_state (ScreenSaver        *screen_saver,
-                                               ScreenSaverFloater *floater,
-                                               gdouble             time);
-
-static gboolean screen_saver_floater_do_draw (ScreenSaver        *screen_saver,
-                                              ScreenSaverFloater *floater,
-                                              cairo_t            *context);
-
-static CachedSource *cached_source_new (cairo_pattern_t *pattern,
-                                        gint             width,
-                                        gint             height);
-static void cached_source_free (CachedSource *source);
-
-static ScreenSaver *screen_saver_new (GtkDrawingArea  *drawing_area,
-                                      const gchar     *filename,
-                                      gint             max_floater_count,
-                                      gboolean         should_do_rotations,
-                                      gboolean         should_show_paths);
-static void screen_saver_free (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_timestamp (ScreenSaver *screen_saver);
-static void screen_saver_get_initial_state (ScreenSaver *screen_saver);
-static void screen_saver_update_state (ScreenSaver *screen_saver,
-                                       gdouble      time);
-static gboolean screen_saver_do_update_state (ScreenSaver *screen_saver);
-static gboolean screen_saver_do_update_stats (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_updates_per_second (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_frames_per_second (ScreenSaver *screen_saver);
-static gdouble screen_saver_get_image_cache_usage (ScreenSaver *screen_saver);
-static void screen_saver_create_floaters (ScreenSaver *screen_saver);
-static void screen_saver_destroy_floaters (ScreenSaver *screen_saver);
-static void screen_saver_on_size_allocate (ScreenSaver   *screen_saver,
-                                           GtkAllocation *allocation);
-static void screen_saver_on_expose_event (ScreenSaver    *screen_saver,
-                                          GdkEventExpose *event);
-static gboolean do_print_screen_saver_stats (ScreenSaver *screen_saver);
-static GdkPixbuf *gamma_correct (const GdkPixbuf *input_pixbuf);
-
-static CachedSource*
-cached_source_new (cairo_pattern_t *pattern,
-                   gint              width,
-                   gint             height)
-{
-  CachedSource *source;
-
-  source = g_new (CachedSource, 1);
-  source->pattern = cairo_pattern_reference (pattern);
-  source->width = width;
-  source->height = height;
-
-  return source;
-}
-
-static void
-cached_source_free (CachedSource *source)
-{
-  if (source == NULL)
-    return;
-
-  cairo_pattern_destroy (source->pattern);
-
-  g_free (source);
-}
-
-static Path *
-path_new (Point *start_point,
-          Point *start_control_point,
-          Point *end_control_point,
-          Point *end_point,
-          gdouble duration)
-{
-  Path *path;
-
-  path = g_new (Path, 1);
-  path->start_point = *start_point;
-  path->start_control_point = *start_control_point;
-  path->end_control_point = *end_control_point;
-  path->end_point = *end_point;
-  path->duration = duration;
-
-  /* we precompute the coefficients to the cubic bezier curve here
-   * so that we don't have to do it repeatedly later The equation is:
-   *
-   * B(t) = A * t^3 + B * t^2 + C * t + start_point
-   */
-  path->x_linear_coefficient = 3 * (start_control_point->x - start_point->x);
-  path->x_quadratic_coefficient = 3 * (end_control_point->x -
-                                       start_control_point->x) -
-                                  path->x_linear_coefficient;
-  path->x_cubic_coefficient = end_point->x - start_point->x -
-                              path->x_linear_coefficient -
-                              path->x_quadratic_coefficient;
-
-  path->y_linear_coefficient = 3 * (start_control_point->y - start_point->y);
-  path->y_quadratic_coefficient = 3 * (end_control_point->y -
-                                       start_control_point->y) -
-                                  path->y_linear_coefficient;
-  path->y_cubic_coefficient = end_point->y - start_point->y -
-                              path->y_linear_coefficient -
-                              path->y_quadratic_coefficient;
-  return path;
-}
-
-static void
-path_free (Path *path)
-{
-  g_free (path);
-}
-
-static ScreenSaverFloater*
-screen_saver_floater_new (ScreenSaver *screen_saver,
-                          Point       *position,
-                          gdouble      scale)
-{
-  ScreenSaverFloater *floater;
-
-  floater = g_new (ScreenSaverFloater, 1);
-  floater->bounds.width = 0;
-  floater->start_position = *position;
-  floater->position = *position;
-  floater->scale = scale;
-  floater->opacity = pow (scale, 1.0 / GAMMA);
-  floater->path = NULL;
-  floater->path_start_time = 0.0;
-  floater->path_start_scale = 1.0;
-  floater->path_end_scale = 0.0;
-
-  floater->angle = 0.0;
-  floater->angle_increment = 0.0;
-
-  return floater;
-}
-
-void
-screen_saver_floater_free (ScreenSaver        *screen_saver,
-                           ScreenSaverFloater *floater)
-{
-  if (floater == NULL)
-    return;
-
-  path_free (floater->path);
-
-  g_free (floater);
-}
-
-static gboolean
-screen_saver_floater_is_off_canvas (ScreenSaver        *screen_saver,
-                                    ScreenSaverFloater *floater)
-{
-  if ((floater->position.x < screen_saver->canvas_rectangle.top_left_point.x) ||
-      (floater->position.x > screen_saver->canvas_rectangle.bottom_right_point.x) ||
-      (floater->position.y < screen_saver->canvas_rectangle.top_left_point.y) ||
-      (floater->position.y > screen_saver->canvas_rectangle.bottom_right_point.y))
-    return TRUE;
-
-  return FALSE;
-}
-
-static gboolean
-screen_saver_floater_should_come_on_screen (ScreenSaver        *screen_saver,
-                                            ScreenSaverFloater *floater,
-                                            gdouble             performance_ratio,
-                                            gdouble            *duration)
-{
-
-  if (!screen_saver_floater_is_off_canvas (screen_saver, floater))
-    return FALSE;
-
-  if ((abs (performance_ratio - .5) >= G_MINDOUBLE) &&
-      (g_random_double () > .5))
-    {
-      if (duration)
-        *duration = g_random_double_range (3.0, 7.0);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static gboolean
-screen_saver_floater_should_bubble_up (ScreenSaver        *screen_saver,
-                                       ScreenSaverFloater *floater,
-                                       gdouble             performance_ratio,
-                                       gdouble            *duration)
-{
-
-  if ((performance_ratio < .5) && (g_random_double () > .5))
-    {
-      if (duration)
-        *duration = performance_ratio * 30.0;
-
-      return TRUE;
-    }
-
-  if ((floater->scale < .3) && (g_random_double () > .6))
-    {
-      if (duration)
-        *duration = 30.0;
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static Point
-screen_saver_floater_get_position_from_time (ScreenSaver        *screen_saver,
-                                             ScreenSaverFloater *floater,
-                                             gdouble             time)
-{
-  Point point;
-
-  time = time / floater->path->duration;
-
-  point.x = floater->path->x_cubic_coefficient * (time * time * time) +
-            floater->path->x_quadratic_coefficient * (time * time) +
-            floater->path->x_linear_coefficient * (time) +
-            floater->path->start_point.x;
-  point.y = floater->path->y_cubic_coefficient * (time * time * time) +
-            floater->path->y_quadratic_coefficient * (time * time) +
-            floater->path->y_linear_coefficient * (time) +
-            floater->path->start_point.y;
-
-  return point;
-}
-
-static gdouble
-screen_saver_floater_get_scale_from_time (ScreenSaver        *screen_saver,
-                                          ScreenSaverFloater *floater,
-                                          gdouble             time)
-{
-  gdouble completion_ratio, total_scale_growth, new_scale;
-
-  completion_ratio = time / floater->path->duration;
-  total_scale_growth = (floater->path_end_scale - floater->path_start_scale);
-  new_scale = floater->path_start_scale + total_scale_growth * completion_ratio;
-
-  return CLAMP (new_scale, 0.0, 1.0);
-}
-
-static gdouble
-screen_saver_floater_get_angle_from_time (ScreenSaver        *screen_saver,
-                                          ScreenSaverFloater *floater,
-                                          gdouble             time)
-{
-  gdouble completion_ratio;
-  gdouble total_rotation;
-
-  completion_ratio = time / floater->path->duration;
-  total_rotation = floater->angle_increment * floater->path->duration;
-
-  return floater->angle + total_rotation * completion_ratio;
-}
-
-static Path *
-screen_saver_floater_create_path_to_on_screen (ScreenSaver        *screen_saver,
-                                               ScreenSaverFloater *floater,
-                                               gdouble             duration)
-{
-  Point start_position, end_position, start_control_point, end_control_point;
-  start_position = floater->position;
-
-  end_position.x = g_random_double_range (.25, .75) *
-      (screen_saver->canvas_rectangle.top_left_point.x +
-       screen_saver->canvas_rectangle.bottom_right_point.x);
-  end_position.y = g_random_double_range (.25, .75) *
-      (screen_saver->canvas_rectangle.top_left_point.y +
-       screen_saver->canvas_rectangle.bottom_right_point.y);
-
-  start_control_point.x = start_position.x + .9 * (end_position.x - start_position.x);
-  start_control_point.y = start_position.y + .9 * (end_position.y - start_position.y);
-
-  end_control_point.x = start_position.x + 1.0 * (end_position.x - start_position.x);
-  end_control_point.y = start_position.y + 1.0 * (end_position.y - start_position.y);
-
-  return path_new (&start_position, &start_control_point, &end_control_point,
-                   &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path_to_bubble_up (ScreenSaver        *screen_saver,
-                                               ScreenSaverFloater *floater,
-                                               gdouble             duration)
-{
-  Point start_position, end_position, start_control_point, end_control_point;
-
-  start_position = floater->position;
-  end_position.x = start_position.x;
-  end_position.y = screen_saver->canvas_rectangle.top_left_point.y - FLOATER_MAX_SIZE;
-  start_control_point.x = .5 * start_position.x;
-  start_control_point.y = .5 * start_position.y;
-  end_control_point.x = 1.5 * end_position.x;
-  end_control_point.y = .5 * end_position.y;
-
-  return path_new (&start_position, &start_control_point, &end_control_point,
-                   &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path_to_random_point (ScreenSaver        *screen_saver,
-                                                  ScreenSaverFloater *floater,
-                                                  gdouble             duration)
-{
-  Point start_position, end_position, start_control_point, end_control_point;
-
-  start_position = floater->position;
-
-  end_position.x = start_position.x +
-      (g_random_double_range (-.5, .5) * 4 * FLOATER_MAX_SIZE);
-  end_position.y = start_position.y +
-      (g_random_double_range (-.5, .5) * 4 * FLOATER_MAX_SIZE);
-
-  start_control_point.x = start_position.x + .95 * (end_position.x - start_position.x);
-  start_control_point.y = start_position.y + .95 * (end_position.y - start_position.y);
-
-  end_control_point.x = start_position.x + 1.0 * (end_position.x - start_position.x);
-  end_control_point.y = start_position.y + 1.0 * (end_position.y - start_position.y);
-
-  return path_new (&start_position, &start_control_point, &end_control_point,
-                   &end_position, duration);
-}
-
-static Path *
-screen_saver_floater_create_path (ScreenSaver        *screen_saver,
-                                  ScreenSaverFloater *floater)
-{
-  gdouble performance_ratio;
-  gdouble duration;
-
-  performance_ratio =
-    screen_saver_get_frames_per_second (screen_saver) / OPTIMAL_FRAME_RATE;
-
-  if (abs (performance_ratio) <= G_MINDOUBLE)
-    performance_ratio = 1.0;
-
-  if (screen_saver_floater_should_bubble_up (screen_saver, floater, performance_ratio, &duration))
-    return screen_saver_floater_create_path_to_bubble_up (screen_saver, floater, duration);
-
-  if (screen_saver_floater_should_come_on_screen (screen_saver, floater, performance_ratio, &duration))
-    return screen_saver_floater_create_path_to_on_screen (screen_saver, floater, duration);
-
-  return screen_saver_floater_create_path_to_random_point (screen_saver, floater,
-                                                           g_random_double_range (3.0, 7.0));
-}
-
-static void
-screen_saver_floater_update_state (ScreenSaver        *screen_saver,
-                                   ScreenSaverFloater *floater,
-                                   gdouble             time)
-{
-  gdouble performance_ratio;
-
-  performance_ratio =
-    screen_saver_get_frames_per_second (screen_saver) / OPTIMAL_FRAME_RATE;
-
-  if (floater->path == NULL)
-    {
-      floater->path = screen_saver_floater_create_path (screen_saver, floater);
-      floater->path_start_time = time;
-
-      floater->path_start_scale = floater->scale;
-
-      if (g_random_double () > .5)
-        floater->path_end_scale = g_random_double_range (0.10, performance_ratio);
-
-      /* poor man's distribution */
-      if (screen_saver->should_do_rotations &&
-          (g_random_double () < .75 * performance_ratio))
-        {
-          gint r;
-
-          r = g_random_int_range (0, 100);
-          if (r < 80)
-            floater->angle_increment = 0.0;
-          else if (r < 95)
-            floater->angle_increment = g_random_double_range (-SMALL_ANGLE, SMALL_ANGLE);
-          else
-            floater->angle_increment = g_random_double_range (-BIG_ANGLE, BIG_ANGLE);
-        }
-    }
-
-  if (time < (floater->path_start_time + floater->path->duration))
-    {
-      gdouble path_time;
-
-      path_time = time - floater->path_start_time;
-
-      floater->position =
-          screen_saver_floater_get_position_from_time (screen_saver, floater,
-                                                       path_time);
-      floater->scale =
-          screen_saver_floater_get_scale_from_time (screen_saver, floater, path_time);
-
-      floater->angle =
-          screen_saver_floater_get_angle_from_time (screen_saver, floater, path_time);
-
-      floater->opacity = pow (floater->scale, 1.0 / GAMMA);
-    }
-  else
-    {
-      path_free (floater->path);
-
-      floater->path = NULL;
-      floater->path_start_time = 0.0;
-    }
-}
-
-static GdkPixbuf *
-gamma_correct (const GdkPixbuf *input_pixbuf)
-{
-    gint x, y, width, height, rowstride;
-    GdkPixbuf *output_pixbuf;
-    guchar *pixels;
-
-    output_pixbuf = gdk_pixbuf_copy (input_pixbuf);
-    pixels = gdk_pixbuf_get_pixels (output_pixbuf);
-
-    width = gdk_pixbuf_get_width (output_pixbuf);
-    height = gdk_pixbuf_get_height (output_pixbuf);
-    rowstride = gdk_pixbuf_get_rowstride (output_pixbuf);
-
-    for (y = 0; y < height; y++)
-      for (x = 0; x < width; x++)
-        {
-          guchar *alpha_channel;
-          guchar opacity;
-
-          alpha_channel = pixels + y * (rowstride / 4) + x + 3;
-          opacity = (guchar) (255 * pow ((*alpha_channel / 255.0), 1.0 / GAMMA));
-
-          *alpha_channel = opacity;
-        }
-
-    return output_pixbuf;
-}
-
-static gboolean
-screen_saver_floater_do_draw (ScreenSaver        *screen_saver,
-                              ScreenSaverFloater *floater,
-                              cairo_t            *context)
-{
-  gint size;
-  CachedSource *source;
-
-  size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
-                FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
-  source = g_hash_table_lookup (screen_saver->cached_sources, GINT_TO_POINTER (size));
-
-  if (source == NULL)
-    {
-      GdkPixbuf *pixbuf;
-      GError *error;
-
-      pixbuf = NULL;
-      error = NULL;
-
-      pixbuf = gdk_pixbuf_new_from_file_at_size (screen_saver->filename, size, -1,
-                                                 &error);
-      if (pixbuf == NULL)
-        {
-          g_assert (error != NULL);
-          g_printerr ("%s", _(error->message));
-          g_error_free (error);
-          return FALSE;
-        }
-
-      if (gdk_pixbuf_get_has_alpha (pixbuf))
-          gamma_correct (pixbuf);
-
-      gdk_cairo_set_source_pixbuf (context, pixbuf, 0.0, 0.0);
-
-      source = cached_source_new (cairo_get_source (context),
-                                  gdk_pixbuf_get_width (pixbuf),
-                                  gdk_pixbuf_get_height (pixbuf));
-      g_object_unref (pixbuf);
-      g_hash_table_insert (screen_saver->cached_sources, GINT_TO_POINTER (size),
-                           source);
-    }
-
-  cairo_save (context);
-
-  if (screen_saver->should_do_rotations && (abs (floater->angle) > G_MINDOUBLE))
-    {
-      floater->bounds.width = G_SQRT2 * source->width + 2;
-      floater->bounds.height = G_SQRT2 * source->height + 2;
-      floater->bounds.x = (int) (floater->position.x - .5 * G_SQRT2 * source->width) - 1;
-      floater->bounds.y = (int) (floater->position.y - .5 * G_SQRT2 * source->height) - 1;
-
-      cairo_translate (context,
-                       trunc (floater->position.x),
-                       trunc (floater->position.y));
-      cairo_rotate (context, floater->angle);
-      cairo_translate (context,
-                       -trunc (floater->position.x),
-                       -trunc (floater->position.y));
-    }
-  else
-    {
-      floater->bounds.width = source->width + 2;
-      floater->bounds.height = source->height + 2;
-      floater->bounds.x = (int) (floater->position.x - .5 * source->width) - 1;
-      floater->bounds.y = (int) (floater->position.y - .5 * source->height) - 1;
-    }
-
-  cairo_translate (context,
-                   trunc (floater->position.x - .5 * source->width),
-                   trunc (floater->position.y - .5 * source->height));
-
-  cairo_set_source (context, source->pattern);
-
-  cairo_rectangle (context,
-                   trunc (.5 * (source->width - floater->bounds.width)),
-                   trunc (.5 * (source->height - floater->bounds.height)),
-                   floater->bounds.width, floater->bounds.height);
-
-  cairo_clip (context);
-  cairo_paint_with_alpha (context, floater->opacity);
-  cairo_restore (context);
-
-  if (screen_saver->should_show_paths && (floater->path != NULL))
-    {
-      gdouble dash_pattern[] = { 5.0 };
-      gint size;
-
-      size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->path_start_scale),
-                    FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
-      cairo_save (context);
-      cairo_set_source_rgba (context, 1.0, 1.0, 1.0, .2 * floater->opacity);
-      cairo_move_to (context,
-                     floater->path->start_point.x,
-                     floater->path->start_point.y);
-      cairo_curve_to (context,
-                      floater->path->start_control_point.x,
-                      floater->path->start_control_point.y,
-                      floater->path->end_control_point.x,
-                      floater->path->end_control_point.y,
-                      floater->path->end_point.x,
-                      floater->path->end_point.y);
-      cairo_set_line_cap (context, CAIRO_LINE_CAP_ROUND);
-      cairo_stroke (context);
-      cairo_set_source_rgba (context, 1.0, 0.0, 0.0, .5 * floater->opacity);
-      cairo_rectangle (context,
-                       floater->path->start_point.x - 3,
-                       floater->path->start_point.y - 3,
-                       6, 6);
-      cairo_fill (context);
-      cairo_set_source_rgba (context, 0.0, 0.5, 0.0, .5 * floater->opacity);
-      cairo_arc (context,
-                 floater->path->start_control_point.x,
-                 floater->path->start_control_point.y,
-                 3, 0.0, 2.0 * G_PI);
-      cairo_stroke (context);
-      cairo_set_source_rgba (context, 0.5, 0.0, 0.5, .5 * floater->opacity);
-      cairo_arc (context,
-                 floater->path->end_control_point.x,
-                 floater->path->end_control_point.y,
-                 3, 0.0, 2.0 * G_PI);
-      cairo_stroke (context);
-      cairo_set_source_rgba (context, 0.0, 0.0, 1.0, .5 * floater->opacity);
-      cairo_rectangle (context,
-                       floater->path->end_point.x - 3,
-                       floater->path->end_point.y - 3,
-                       6, 6);
-      cairo_fill (context);
-
-      cairo_set_dash (context, dash_pattern, G_N_ELEMENTS (dash_pattern), 0);
-      cairo_set_source_rgba (context, .5, .5, .5, .2 * floater->scale);
-      cairo_move_to (context, floater->path->start_point.x,
-                     floater->path->start_point.y);
-      cairo_line_to (context, floater->path->start_control_point.x,
-                     floater->path->start_control_point.y);
-      cairo_stroke (context);
-
-      cairo_move_to (context, floater->path->end_point.x,
-                     floater->path->end_point.y);
-      cairo_line_to (context, floater->path->end_control_point.x,
-                     floater->path->end_control_point.y);
-      cairo_stroke (context);
-
-      cairo_restore (context);
-    }
-
-  return TRUE;
-}
-
-static ScreenSaver *
-screen_saver_new (GtkDrawingArea  *drawing_area,
-                  const gchar     *filename,
-                  gint             max_floater_count,
-                  gboolean         should_do_rotations,
-                  gboolean         should_show_paths)
-{
-  ScreenSaver *screen_saver;
-
-  screen_saver = g_new (ScreenSaver, 1);
-  screen_saver->filename = g_strdup (filename);
-  screen_saver->drawing_area = GTK_WIDGET (drawing_area);
-  screen_saver->cached_sources =
-      g_hash_table_new_full (NULL, NULL, NULL,
-                             (GDestroyNotify) cached_source_free);
-
-  g_signal_connect_swapped (G_OBJECT (drawing_area), "size-allocate",
-                            G_CALLBACK (screen_saver_on_size_allocate),
-                            screen_saver);
-
-  g_signal_connect_swapped (G_OBJECT (drawing_area), "expose-event",
-                            G_CALLBACK (screen_saver_on_expose_event),
-                            screen_saver);
-
-  screen_saver->first_update_time = 0.0;
-  screen_saver->current_calculated_stats_time = 0.0;
-  screen_saver->last_calculated_stats_time = 0.0;
-  screen_saver->update_count = 0;
-  screen_saver->frame_count = 0;
-  screen_saver->updates_per_second = 0.0;
-  screen_saver->frames_per_second = 0.0;
-  screen_saver->floaters = NULL;
-  screen_saver->max_floater_count = max_floater_count;
-
-  screen_saver->should_show_paths = should_show_paths;
-  screen_saver->should_do_rotations = should_do_rotations;
-
-  screen_saver_get_initial_state (screen_saver);
-
-  screen_saver->state_update_timeout_id =
-      g_timeout_add (1000 / (2.0 * OPTIMAL_FRAME_RATE),
-                     (GSourceFunc) screen_saver_do_update_state, screen_saver);
-
-  screen_saver->stats_update_timeout_id =
-      g_timeout_add (1000, (GSourceFunc) screen_saver_do_update_stats,
-                     screen_saver);
-
-  return screen_saver;
-}
-
-static void
-screen_saver_free (ScreenSaver *screen_saver)
-{
-  if (screen_saver == NULL)
-    return;
-
-  g_free (screen_saver->filename);
-
-  g_hash_table_destroy (screen_saver->cached_sources);
-
-  if (screen_saver->state_update_timeout_id != 0)
-    g_source_remove (screen_saver->state_update_timeout_id);
-
-  if (screen_saver->stats_update_timeout_id != 0)
-    g_source_remove (screen_saver->stats_update_timeout_id);
-
-  screen_saver_destroy_floaters (screen_saver);
-
-  g_free (screen_saver);
-}
-
-static gdouble
-screen_saver_get_timestamp (ScreenSaver *screen_saver)
-{
-  const gdouble microseconds_per_second = (gdouble ) G_USEC_PER_SEC;
-  gdouble timestamp;
-  GTimeVal now = { 0L, /* zero-filled */ };
-
-  g_get_current_time (&now);
-  timestamp = ((microseconds_per_second * now.tv_sec) + now.tv_usec) /
-              microseconds_per_second;
-
-  return timestamp;
-}
-
-static void
-screen_saver_create_floaters (ScreenSaver *screen_saver)
-{
-  gint i;
-
-  for (i = 0; i < screen_saver->max_floater_count; i++)
-    {
-      ScreenSaverFloater *floater;
-      Point position;
-      gdouble scale;
-
-      position.x = g_random_double_range (screen_saver->canvas_rectangle.top_left_point.x,
-                                          screen_saver->canvas_rectangle.bottom_right_point.x);
-      position.y = g_random_double_range (screen_saver->canvas_rectangle.top_left_point.y,
-                                          screen_saver->canvas_rectangle.bottom_right_point.y);
-
-      scale = g_random_double ();
-
-      floater = screen_saver_floater_new (screen_saver, &position, scale);
-
-      screen_saver->floaters = g_list_prepend (screen_saver->floaters,
-                                               floater);
-    }
-}
-
-static gdouble
-screen_saver_get_updates_per_second (ScreenSaver *screen_saver)
-{
-  return screen_saver->updates_per_second;
-}
-
-static gdouble
-screen_saver_get_frames_per_second (ScreenSaver *screen_saver)
-{
-  return screen_saver->frames_per_second;
-}
-
-static gdouble
-screen_saver_get_image_cache_usage (ScreenSaver *screen_saver)
-{
-  static const gdouble cache_capacity = (FLOATER_MAX_SIZE - FLOATER_MIN_SIZE + 1);
-
-  return g_hash_table_size (screen_saver->cached_sources) / cache_capacity;
-}
-
-static void
-screen_saver_destroy_floaters (ScreenSaver *screen_saver)
-{
-  if (screen_saver->floaters == NULL)
-    return;
-
-  g_list_foreach (screen_saver->floaters, (GFunc) screen_saver_floater_free,
-                  NULL);
-  g_list_free (screen_saver->floaters);
-
-  screen_saver->floaters = NULL;
-}
-
-static void
-screen_saver_on_size_allocate (ScreenSaver   *screen_saver,
-                               GtkAllocation *allocation)
-{
-  Rectangle canvas_rectangle;
-
-  canvas_rectangle.top_left_point.x = allocation->x - .1 * allocation->width;
-  canvas_rectangle.top_left_point.y = allocation->y - .1 * allocation->height;
-
-  canvas_rectangle.bottom_right_point.x = allocation->x + (1.1 * allocation->width);
-  canvas_rectangle.bottom_right_point.y = allocation->y + (1.1 * allocation->height);
-
-  screen_saver->canvas_rectangle = canvas_rectangle;
-}
-
-static gint
-compare_floaters (ScreenSaverFloater *a,
-                  ScreenSaverFloater *b)
-{
-  if (a->scale > b->scale)
-    return 1;
-  else if (abs (a->scale - b->scale) <= G_MINDOUBLE)
-    return 0;
-  else
-    return -1;
-}
-
-static void
-screen_saver_on_expose_event (ScreenSaver    *screen_saver,
-                              GdkEventExpose *event)
-{
-  GList *tmp;
-  cairo_t *context;
-
-  if (screen_saver->floaters == NULL)
-    screen_saver_create_floaters (screen_saver);
-
-  context = gdk_cairo_create (screen_saver->drawing_area->window);
-
-  cairo_rectangle (context,
-                   (double) event->area.x,
-                   (double) event->area.y,
-                   (double) event->area.width,
-                   (double) event->area.height);
-  cairo_clip (context);
-
-  screen_saver->floaters = g_list_sort (screen_saver->floaters,
-                                        (GCompareFunc)compare_floaters);
-
-  for (tmp = screen_saver->floaters; tmp != NULL; tmp = tmp->next)
-    {
-      ScreenSaverFloater *floater;
-      GdkRectangle rect;
-      gint size;
-
-      floater = (ScreenSaverFloater *) tmp->data;
-
-      size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
-		    FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
-      rect.x = (int) (floater->position.x - .5 * G_SQRT2 * size);
-      rect.y = (int) (floater->position.y - .5 * G_SQRT2 * size);
-      rect.width = G_SQRT2 * size;
-      rect.height = G_SQRT2 * size;
-
-      if (!gdk_region_rect_in (event->region, &rect))
-        continue;
-
-      if (!screen_saver_floater_do_draw (screen_saver, floater, context))
-        {
-          gtk_main_quit ();
-          break;
-        }
-    }
-
-  cairo_destroy (context);
-
-  screen_saver->draw_ops_pending = TRUE;
-  screen_saver->frame_count++;
-}
-
-static void
-screen_saver_update_state (ScreenSaver *screen_saver,
-                           gdouble      time)
-{
-  GList *tmp;
-
-  tmp = screen_saver->floaters;
-  while (tmp != NULL)
-    {
-      ScreenSaverFloater *floater;
-      floater = (ScreenSaverFloater *) tmp->data;
-
-      screen_saver_floater_update_state (screen_saver, floater, time);
-
-      if (GTK_WIDGET_REALIZED (screen_saver->drawing_area)
-          && (floater->bounds.width > 0) && (floater->bounds.height > 0))
-        {
-          gint size;
-          size = CLAMP ((int) (FLOATER_MAX_SIZE * floater->scale),
-                        FLOATER_MIN_SIZE, FLOATER_MAX_SIZE);
-
-          gtk_widget_queue_draw_area (screen_saver->drawing_area,
-                                      floater->bounds.x,
-                                      floater->bounds.y,
-                                      floater->bounds.width,
-                                      floater->bounds.height);
-
-          /* the edges could concievably be spread across two
-           * pixels so we add +2 to invalidated region
-           */
-          if (screen_saver->should_do_rotations)
-            gtk_widget_queue_draw_area (screen_saver->drawing_area,
-                                        (int) (floater->position.x -
-                                               .5 * G_SQRT2 * size),
-                                        (int) (floater->position.y -
-                                               .5 * G_SQRT2 * size),
-                                        G_SQRT2 * size + 2,
-                                        G_SQRT2 * size + 2);
-          else
-            gtk_widget_queue_draw_area (screen_saver->drawing_area,
-                                        (int) (floater->position.x -
-                                               .5 * size),
-                                        (int) (floater->position.y -
-                                               .5 * size),
-                                        size + 2, size + 2);
-
-          if  (screen_saver->should_show_paths)
-            gtk_widget_queue_draw (screen_saver->drawing_area);
-        }
-
-      tmp = tmp->next;
-    }
-}
-
-static void
-screen_saver_get_initial_state (ScreenSaver *screen_saver)
-{
-  screen_saver->first_update_time = screen_saver_get_timestamp (screen_saver);
-  screen_saver_update_state (screen_saver, 0.0);
-}
-
-static gboolean
-screen_saver_do_update_state (ScreenSaver *screen_saver)
-{
-  gdouble current_update_time;
-
-  /* flush pending requests to the X server and block for
-   * replies before proceeding to help prevent the X server from
-   * getting overrun with requests
-   */
-  if (screen_saver->draw_ops_pending)
-    {
-      gdk_flush ();
-      screen_saver->draw_ops_pending = FALSE;
-    }
-
-  current_update_time = screen_saver_get_timestamp (screen_saver);
-  screen_saver_update_state (screen_saver, current_update_time -
-                                           screen_saver->first_update_time);
-  screen_saver->update_count++;
-  return TRUE;
-}
-
-static gboolean
-screen_saver_do_update_stats (ScreenSaver *screen_saver)
-{
-  gdouble last_calculated_stats_time, seconds_since_last_stats_update;
-
-  last_calculated_stats_time = screen_saver->current_calculated_stats_time;
-  screen_saver->current_calculated_stats_time =
-      screen_saver_get_timestamp (screen_saver);
-  screen_saver->last_calculated_stats_time = last_calculated_stats_time;
-
-  if (abs (last_calculated_stats_time) <= G_MINDOUBLE)
-    return TRUE;
-
-  seconds_since_last_stats_update =
-      screen_saver->current_calculated_stats_time - last_calculated_stats_time;
-
-  screen_saver->updates_per_second =
-      screen_saver->update_count / seconds_since_last_stats_update;
-  screen_saver->frames_per_second =
-      screen_saver->frame_count / seconds_since_last_stats_update;
-
-  screen_saver->update_count = 0;
-  screen_saver->frame_count = 0;
-
-  return TRUE;
-}
-
-static gboolean
-do_print_screen_saver_stats (ScreenSaver *screen_saver)
-{
-
-  g_print ("updates per second: %.2f, frames per second: %.2f, "
-           "image cache %.0f%% full\n",
-           screen_saver_get_updates_per_second (screen_saver),
-           screen_saver_get_frames_per_second (screen_saver),
-           screen_saver_get_image_cache_usage (screen_saver) * 100.0);
-
-  return TRUE;
-}
-
-int
-main (int   argc,
-      char *argv[])
-{
-  ScreenSaver *screen_saver;
-  GtkWidget *window;
-  GtkWidget *drawing_area;
-
-  GtkStateType state;
-
-  GError *error;
-
-  error = NULL;
-
-  bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-  textdomain (GETTEXT_PACKAGE);
-
-  gtk_init_with_args (&argc, &argv,
-                      /* translators: the word "image" here
-                       * represents a command line argument
-                       */
-                      _("image - floats images around the screen"),
-                      options, GETTEXT_PACKAGE, &error);
-
-
-  if (error != NULL)
-    {
-      g_printerr (_("%s. See --help for usage information.\n"),
-                  _(error->message));
-      g_error_free (error);
-      return EX_SOFTWARE;
-    }
-
-  if ((filenames == NULL) || (filenames[0] == NULL) ||
-      (filenames[1] != NULL))
-    {
-      g_printerr (_("You must specify one image.  See --help for usage "
-                    "information.\n"));
-      return EX_USAGE;
-    }
-
-  window = gs_theme_window_new ();
-
-  g_signal_connect (G_OBJECT (window), "delete-event",
-                    G_CALLBACK (gtk_main_quit), NULL);
-
-  drawing_area = gtk_drawing_area_new ();
-
-  state = (GtkStateType) 0;
-  while (state < (GtkStateType) G_N_ELEMENTS (drawing_area->style->bg))
-    {
-      gtk_widget_modify_bg (drawing_area, state, &drawing_area->style->mid[state]);
-      state++;
-    }
-
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-
-  screen_saver = screen_saver_new (GTK_DRAWING_AREA (drawing_area),
-                                   filenames[0], max_floater_count,
-                                   should_do_rotations, should_show_paths);
-  g_strfreev (filenames);
-
-  if (should_print_stats)
-    g_timeout_add (STAT_PRINT_FREQUENCY,
-                   (GSourceFunc) do_print_screen_saver_stats,
-                   screen_saver);
-
-  if ((geometry == NULL)
-      || !gtk_window_parse_geometry (GTK_WINDOW (window), geometry))
-    gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-
-  gtk_widget_show (window);
-
-  gtk_main ();
-
-  screen_saver_free (screen_saver);
-
-  return EX_OK;
-}
diff --git a/savers/gs-theme-engine.c.orig b/savers/gs-theme-engine.c.orig
deleted file mode 100644
index 9724e5b..0000000
--- a/savers/gs-theme-engine.c.orig
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gs-theme-engine-marshal.h"
-
-static void     gs_theme_engine_class_init (GSThemeEngineClass *klass);
-static void     gs_theme_engine_init       (GSThemeEngine      *engine);
-static void     gs_theme_engine_finalize   (GObject            *object);
-
-struct GSThemeEnginePrivate
-{
-        gpointer reserved;
-};
-
-#define GS_THEME_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_THEME_ENGINE, GSThemeEnginePrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_ABSTRACT_TYPE (GSThemeEngine, gs_theme_engine, GTK_TYPE_DRAWING_AREA)
-
-void
-_gs_theme_engine_profile_log (const char *func,
-                              const char *note,
-                              const char *format,
-                              ...)
-{
-        va_list args;
-        char   *str;
-        char   *formatted;
-
-        va_start (args, format);
-        formatted = g_strdup_vprintf (format, args);
-        va_end (args);
-
-        if (func != NULL) {
-                str = g_strdup_printf ("MARK: %s %s: %s %s", g_get_prgname(), func, note ? note : "", formatted);
-        } else {
-                str = g_strdup_printf ("MARK: %s: %s %s", g_get_prgname(), note ? note : "", formatted);
-        }
-
-        g_free (formatted);
-
-        access (str, F_OK);
-        g_free (str);
-}
-
-static void
-gs_theme_engine_set_property (GObject            *object,
-                              guint               prop_id,
-                              const GValue       *value,
-                              GParamSpec         *pspec)
-{
-        GSThemeEngine *self;
-
-        self = GS_THEME_ENGINE (object);
-
-        switch (prop_id) {
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-gs_theme_engine_get_property (GObject            *object,
-                              guint               prop_id,
-                              GValue             *value,
-                              GParamSpec         *pspec)
-{
-        GSThemeEngine *self;
-
-        self = GS_THEME_ENGINE (object);
-
-        switch (prop_id) {
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-gs_theme_engine_clear (GtkWidget *widget)
-{
-        GdkColor     color = { 0, 0x0000, 0x0000, 0x0000 };
-        GdkColormap *colormap;
-        GtkStateType state;
-
-        g_return_if_fail (GS_IS_THEME_ENGINE (widget));
-
-        if (! GTK_WIDGET_VISIBLE (widget)) {
-                return;
-        }
-
-        state = (GtkStateType) 0;
-        while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg)) {
-                gtk_widget_modify_bg (widget, state, &color);
-                state++;
-        }
-
-        colormap = gdk_drawable_get_colormap (widget->window);
-        gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE);
-        gdk_window_set_background (widget->window, &color);
-        gdk_window_clear (widget->window);
-        gdk_flush ();
-}
-
-static gboolean
-gs_theme_engine_real_map_event (GtkWidget   *widget,
-                                GdkEventAny *event)
-{
-        gboolean handled = FALSE;
-
-        gs_theme_engine_clear (widget);
-
-        return handled;
-}
-
-static void
-gs_theme_engine_class_init (GSThemeEngineClass *klass)
-{
-        GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-        parent_class = g_type_class_peek_parent (klass);
-
-        object_class->finalize = gs_theme_engine_finalize;
-        object_class->get_property = gs_theme_engine_get_property;
-        object_class->set_property = gs_theme_engine_set_property;
-
-        widget_class->map_event = gs_theme_engine_real_map_event;
-
-        g_type_class_add_private (klass, sizeof (GSThemeEnginePrivate));
-}
-
-static void
-gs_theme_engine_init (GSThemeEngine *engine)
-{
-        engine->priv = GS_THEME_ENGINE_GET_PRIVATE (engine);
-}
-
-static void
-gs_theme_engine_finalize (GObject *object)
-{
-        GSThemeEngine *engine;
-
-        g_return_if_fail (object != NULL);
-        g_return_if_fail (GS_IS_THEME_ENGINE (object));
-
-        engine = GS_THEME_ENGINE (object);
-
-        g_return_if_fail (engine->priv != NULL);
-
-        G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-void
-gs_theme_engine_get_window_size (GSThemeEngine *engine,
-                                 int           *width,
-                                 int           *height)
-{
-        if (width != NULL) {
-                *width = 0;
-        }
-        if (height != NULL) {
-                *height = 0;
-        }
-
-        g_return_if_fail (GS_IS_THEME_ENGINE (engine));
-
-        if (! GTK_WIDGET_VISIBLE (GTK_WIDGET (engine))) {
-                return;
-        }
-
-        gdk_window_get_geometry (GTK_WIDGET (engine)->window,
-                                 NULL,
-                                 NULL,
-                                 width,
-                                 height,
-                                 NULL);
-}
-
-GdkWindow *
-gs_theme_engine_get_window (GSThemeEngine *engine)
-{
-        g_return_val_if_fail (GS_IS_THEME_ENGINE (engine), NULL);
-
-        return GTK_WIDGET (engine)->window;
-}
diff --git a/savers/gs-theme-engine.h.orig b/savers/gs-theme-engine.h.orig
deleted file mode 100644
index 5c6fd30..0000000
--- a/savers/gs-theme-engine.h.orig
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_THEME_ENGINE_H
-#define __GS_THEME_ENGINE_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_THEME_ENGINE         (gs_theme_engine_get_type ())
-#define GS_THEME_ENGINE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_THEME_ENGINE, GSThemeEngine))
-#define GS_THEME_ENGINE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_THEME_ENGINE, GSThemeEngineClass))
-#define GS_IS_THEME_ENGINE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_THEME_ENGINE))
-#define GS_IS_THEME_ENGINE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_THEME_ENGINE))
-#define GS_THEME_ENGINE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_THEME_ENGINE, GSThemeEngineClass))
-
-typedef struct GSThemeEnginePrivate GSThemeEnginePrivate;
-
-typedef struct
-{
-        GtkDrawingArea        parent;
-        GSThemeEnginePrivate *priv;
-} GSThemeEngine;
-
-typedef struct
-{
-        GtkDrawingAreaClass parent_class;
-
-        /* for signals later if needed */
-        gpointer reserved_1;
-        gpointer reserved_2;
-        gpointer reserved_3;
-        gpointer reserved_4;
-} GSThemeEngineClass;
-
-GType           gs_theme_engine_get_type         (void);
-
-void            gs_theme_engine_get_window_size (GSThemeEngine *engine,
-                                                 int           *width,
-                                                 int           *height);
-GdkWindow      *gs_theme_engine_get_window      (GSThemeEngine *engine);
-
-#define ENABLE_PROFILING 1
-#ifdef ENABLE_PROFILING
-#ifdef G_HAVE_ISO_VARARGS
-#define gs_theme_engine_profile_start(...) _gs_theme_engine_profile_log (G_STRFUNC, "start", __VA_ARGS__)
-#define gs_theme_engine_profile_end(...)   _gs_theme_engine_profile_log (G_STRFUNC, "end", __VA_ARGS__)
-#define gs_theme_engine_profile_msg(...)   _gs_theme_engine_profile_log (NULL, NULL, __VA_ARGS__)
-#elif defined(G_HAVE_GNUC_VARARGS)
-#define gs_theme_engine_profile_start(format...) _gs_theme_engine_profile_log (G_STRFUNC, "start", format)
-#define gs_theme_engine_profile_end(format...)   _gs_theme_engine_profile_log (G_STRFUNC, "end", format)
-#define gs_theme_engine_profile_msg(format...)   _gs_theme_engine_profile_log (NULL, NULL, format)
-#endif
-#else
-#define gs_theme_engine_profile_start(...)
-#define gs_theme_engine_profile_end(...)
-#define gs_theme_engine_profile_msg(...)
-#endif
-
-void            _gs_theme_engine_profile_log    (const char *func,
-                                                 const char *note,
-                                                 const char *format,
-                                                 ...) G_GNUC_PRINTF (3, 4);
-
-G_END_DECLS
-
-#endif /* __GS_THEME_ENGINE_H */
diff --git a/savers/gs-theme-window.c.orig b/savers/gs-theme-window.c.orig
deleted file mode 100644
index 805387c..0000000
--- a/savers/gs-theme-window.c.orig
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * gs-theme-window.c - special toplevel for screensavers
- *
- * Copyright (C) 2005 Ray Strode <rstrode at redhat.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2, 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 Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser 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.
- *
- * Originally written by: Ray Strode <rstrode at redhat.com>
- */
-
-#include "config.h"
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-
-static void gs_theme_window_finalize     (GObject *object);
-static void gs_theme_window_real_realize (GtkWidget *widget);
-
-static GObjectClass   *parent_class = NULL;
-
-G_DEFINE_TYPE (GSThemeWindow, gs_theme_window, GTK_TYPE_WINDOW)
-
-#define MIN_SIZE 10
-
-static void
-gs_theme_window_class_init (GSThemeWindowClass *klass)
-{
-        GObjectClass   *object_class;
-        GtkWidgetClass *widget_class;
-
-        object_class = G_OBJECT_CLASS (klass);
-        widget_class = GTK_WIDGET_CLASS (klass);
-
-        parent_class = g_type_class_peek_parent (klass);
-
-        object_class->finalize = gs_theme_window_finalize;
-
-        widget_class->realize = gs_theme_window_real_realize;
-}
-
-static void
-force_no_pixmap_background (GtkWidget *widget)
-{
-        static gboolean first_time = TRUE;
-
-        if (first_time) {
-                gtk_rc_parse_string ("\n"
-                                     "   style \"gs-theme-engine-style\"\n"
-                                     "   {\n"
-                                     "      bg_pixmap[NORMAL] = \"<none>\"\n"
-                                     "      bg_pixmap[ACTIVE] = \"<none>\"\n"
-                                     "      bg_pixmap[PRELIGHT] = \"<none>\"\n"
-                                     "      bg_pixmap[SELECTED] = \"<none>\"\n"
-                                     "      bg_pixmap[INSENSITIVE] = \"<none>\"\n"
-                                     "      bg[NORMAL] = \"#000000\"\n"
-                                     "      bg[ACTIVE] = \"#000000\"\n"
-                                     "      bg[PRELIGHT] = \"#000000\"\n"
-                                     "      bg[SELECTED] = \"#000000\"\n"
-                                     "      bg[INSENSITIVE] = \"#000000\"\n"
-                                     "   }\n"
-                                     "   widget \"gs-window*\" style : highest \"gs-theme-engine-style\"\n"
-                                     "\n");
-                first_time = FALSE;
-        }
-
-        gtk_widget_set_name (widget, "gs-window");
-}
-
-static void
-gs_theme_window_init (GSThemeWindow *window)
-{
-        force_no_pixmap_background (GTK_WIDGET (window));
-}
-
-static void
-gs_theme_window_finalize (GObject *object)
-{
-        GSThemeWindow *window;
-        GObjectClass  *parent_class;
-
-        window = GS_THEME_WINDOW (object);
-
-        parent_class = G_OBJECT_CLASS (gs_theme_window_parent_class);
-
-        if (parent_class->finalize != NULL)
-                parent_class->finalize (object);
-}
-
-static void
-gs_theme_window_real_realize (GtkWidget *widget)
-{
-        GdkWindow     *window;
-        Window         remote_xwindow;
-        GtkRequisition requisition;
-        GtkAllocation  allocation;
-        const char    *preview_xid;
-        int            x;
-        int            y;
-        int            width;
-        int            height;
-        int            event_mask;
-
-        event_mask = 0;
-        window = NULL;
-        preview_xid = g_getenv ("XSCREENSAVER_WINDOW");
-
-        if (preview_xid != NULL) {
-                char *end;
-
-                remote_xwindow = (Window) strtoul (preview_xid, &end, 0);
-
-                if ((remote_xwindow != 0) && (end != NULL) &&
-                    ((*end == ' ') || (*end == '\0')) &&
-                    ((remote_xwindow < G_MAXULONG) || (errno != ERANGE))) {
-                        window = gdk_window_foreign_new (remote_xwindow);
-
-                        if (window != NULL) {
-                                /* This is a kludge; we need to set the same
-                                 * flags gs-window-x11.c does, to ensure they
-                                 * don't get unset by gtk_window_map() later.
-                                 */
-                                gtk_window_set_decorated (GTK_WINDOW (widget), FALSE);
-
-                                gtk_window_set_skip_taskbar_hint (GTK_WINDOW (widget), TRUE);
-                                gtk_window_set_skip_pager_hint (GTK_WINDOW (widget), TRUE);
-
-                                gtk_window_set_keep_above (GTK_WINDOW (widget), TRUE);
-
-                                gtk_window_fullscreen (GTK_WINDOW (widget));
-
-                                event_mask = GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK;
-                                gtk_widget_set_events (widget, gtk_widget_get_events (widget) | event_mask);
-                        }
-                }
-        }
-
-        if (window == NULL) {
-                GtkWidgetClass *parent_class;
-
-                parent_class = GTK_WIDGET_CLASS (gs_theme_window_parent_class);
-
-                if (parent_class->realize != NULL)
-                        parent_class->realize (widget);
-
-                return;
-        }
-
-        gtk_style_set_background (widget->style,
-                                  window,
-                                  GTK_STATE_NORMAL);
-        gdk_window_set_decorations (window, (GdkWMDecoration) 0);
-        gdk_window_set_events (window, gdk_window_get_events (window) | event_mask);
-
-        widget->window = window;
-        gdk_window_set_user_data (window, widget);
-        GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
-        gdk_window_get_geometry (window, &x, &y, &width, &height, NULL);
-
-        if (width < MIN_SIZE || height < MIN_SIZE) {
-                g_critical ("This window is way too small to use");
-                exit (1);
-        }
-
-        gtk_widget_size_request (widget, &requisition);
-        allocation.x = x;
-        allocation.y = y;
-        allocation.width = width;
-        allocation.height = height;
-        gtk_widget_size_allocate (widget, &allocation);
-        gtk_window_resize (GTK_WINDOW (widget), width, height);
-}
-
-GtkWidget *
-gs_theme_window_new (void)
-{
-        GSThemeWindow *window;
-
-        window = g_object_new (GS_TYPE_THEME_WINDOW,
-                               "type", GTK_WINDOW_TOPLEVEL,
-                               NULL);
-
-        return GTK_WIDGET (window);
-}
diff --git a/savers/gs-theme-window.h.orig b/savers/gs-theme-window.h.orig
deleted file mode 100644
index cfc5edf..0000000
--- a/savers/gs-theme-window.h.orig
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * gs-theme-window.h - special toplevel for screensavers
- *
- * Copyright (C) 2005 Ray Strode <rstrode at redhat.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2, 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 Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser 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.
- *
- * Originally written by: Ray Strode <rstrode at redhat.com>
- */
-
-#ifndef GS_THEME_WINDOW_H
-#define GS_THEME_WINDOW_H
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_THEME_WINDOW            (gs_theme_window_get_type ())
-#define GS_THEME_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GS_TYPE_THEME_WINDOW, GSThemeWindow))
-#define GS_THEME_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GS_TYPE_THEME_WINDOW, GSThemeWindowClass))
-#define GS_IS_WINDOW(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GS_TYPE_THEME_WINDOW))
-#define GS_IS_WINDOW_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GS_TYPE_THEME_WINDOW))
-#define GS_THEME_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GS_TYPE_THEME_WINDOW, GSThemeWindowClass))
-
-typedef struct _GSThemeWindow GSThemeWindow;
-typedef struct _GSThemeWindowClass GSThemeWindowClass;
-
-struct _GSThemeWindow
-{
-        GtkWindow parent;
-
-        /*< private >*/
-        /* reserved for priv pointer */
-        gpointer reserved;
-};
-
-struct _GSThemeWindowClass
-{
-        GtkWindowClass parent_class;
-
-        /* for signals later if needed */
-        gpointer reserved_1;
-        gpointer reserved_2;
-        gpointer reserved_3;
-        gpointer reserved_4;
-};
-
-#ifndef GS_HIDE_FUNCTION_DECLARATIONS
-GType         gs_theme_window_get_type (void);
-GtkWidget    *gs_theme_window_new      (void);
-#endif
-
-G_END_DECLS
-#endif /* GS_THEME_WINDOW_H */
diff --git a/savers/gste-popsquares.c.orig b/savers/gste-popsquares.c.orig
deleted file mode 100644
index cda78c7..0000000
--- a/savers/gste-popsquares.c.orig
+++ /dev/null
@@ -1,563 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gste-popsquares.h"
-
-static void     gste_popsquares_class_init (GSTEPopsquaresClass *klass);
-static void     gste_popsquares_init       (GSTEPopsquares      *engine);
-static void     gste_popsquares_finalize   (GObject            *object);
-
-typedef struct _square {
-        int x, y, w, h;
-        int color;
-} square;
-
-struct GSTEPopsquaresPrivate
-{
-        guint timeout_id;
-
-        int        ncolors;
-        int        subdivision;
-
-        GdkGC     *gc;
-        GdkColor  *colors;
-        square    *squares;
-
-};
-
-#define GSTE_POPSQUARES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquaresPrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_TYPE (GSTEPopsquares, gste_popsquares, GS_TYPE_THEME_ENGINE)
-
-static void
-hsv_to_rgb (int             h,
-            double          s,
-            double          v,
-	    unsigned short *r,
-            unsigned short *g,
-            unsigned short *b)
-{
-        double H, S, V, R, G, B;
-        double p1, p2, p3;
-        double f;
-        int    i;
-
-        if (s < 0) {
-                s = 0;
-        }
-        if (v < 0) {
-                v = 0;
-        }
-        if (s > 1) {
-                s = 1;
-        }
-        if (v > 1) {
-                v = 1;
-        }
-
-        S = s; V = v;
-        H = (h % 360) / 60.0;
-        i = H;
-        f = H - i;
-        p1 = V * (1 - S);
-        p2 = V * (1 - (S * f));
-        p3 = V * (1 - (S * (1 - f)));
-
-        if (i == 0) {
-                R = V;
-                G = p3;
-                B = p1;
-        } else if (i == 1) {
-                R = p2;
-                G = V;
-                B = p1;
-        } else if (i == 2) {
-                R = p1;
-                G = V;
-                B = p3;
-        } else if (i == 3) {
-                R = p1;
-                G = p2;
-                B = V;
-        } else if (i == 4) {
-                R = p3;
-                G = p1;
-                B = V;
-        } else {
-                R = V;
-                G = p1;
-                B = p2;
-        }
-
-        *r = R * 65535;
-        *g = G * 65535;
-        *b = B * 65535;
-}
-
-static void
-rgb_to_hsv (unsigned short r,
-            unsigned short g,
-            unsigned short b,
-	    int           *h,
-            double        *s,
-            double        *v)
-{
-        double R, G, B, H, S, V;
-        double cmax, cmin;
-        double cmm;
-        int    imax;
-
-        R = ((double) r) / 65535.0;
-        G = ((double) g) / 65535.0;
-        B = ((double) b) / 65535.0;
-        cmax = R;
-        cmin = G;
-        imax = 1;
-
-        if (cmax < G) {
-                cmax = G; cmin = R; imax = 2;
-        }
-        if (cmax < B) {
-                cmax = B; imax = 3;
-        }
-        if (cmin > B) {
-                cmin = B;
-        }
-
-        cmm = cmax - cmin;
-        V = cmax;
-
-        if (cmm == 0) {
-                S = H = 0;
-        } else {
-                S = cmm / cmax;
-                if (imax == 1) {
-                        H = (G - B) / cmm;
-                } else if (imax == 2) {
-                        H = 2.0 + (B - R) / cmm;
-                } else {
-                        /*if (imax == 3)*/
-                        H = 4.0 + (R - G) / cmm;
-                }
-
-                if (H < 0) {
-                        H += 6.0;
-                }
-        }
-
-        *h = (H * 60.0);
-        *s = S;
-        *v = V;
-}
-
-static void
-make_color_ramp (GdkColormap *colormap,
-		 int          h1,
-                 double       s1,
-                 double       v1,
-		 int          h2,
-                 double       s2,
-                 double       v2,
-		 GdkColor    *colors,
-                 int          n_colors,
-		 gboolean     closed,
-		 gboolean     allocate,
-		 gboolean     writable)
-{
-        double   dh, ds, dv;		/* deltas */
-        int      i;
-        int      ncolors, wanted;
-        int      total_ncolors   = n_colors;
-
-        wanted = total_ncolors;
-        if (closed) {
-                wanted = (wanted / 2) + 1;
-        }
-
-        ncolors = total_ncolors;
-
-        memset (colors, 0, n_colors * sizeof (*colors));
-
-        if (closed) {
-                ncolors = (ncolors / 2) + 1;
-        }
-
-        /* Note: unlike other routines in this module, this function assumes that
-           if h1 and h2 are more than 180 degrees apart, then the desired direction
-           is always from h1 to h2 (rather than the shorter path.)  make_uniform
-           depends on this.
-        */
-        dh = ((double)h2 - (double)h1) / ncolors;
-        ds = (s2 - s1) / ncolors;
-        dv = (v2 - v1) / ncolors;
-
-        for (i = 0; i < ncolors; i++) {
-                hsv_to_rgb ((int) (h1 + (i * dh)),
-                            (s1 + (i * ds)),
-                            (v1 + (i * dv)),
-                            &colors [i].red,
-                            &colors [i].green,
-                            &colors [i].blue);
-                if (allocate) {
-                        gdk_colormap_alloc_color (colormap,
-                                                  &colors [i],
-                                                  writable,
-                                                  TRUE);
-                }
-        }
-
-        if (closed) {
-                for (i = ncolors; i < n_colors; i++) {
-                        colors [i] = colors [n_colors - i];
-                }
-        }
-
-}
-
-static void
-randomize_square_colors (square *squares,
-                         int     nsquares,
-                         int     ncolors)
-{
-        int     i;
-        square *s;
-
-        s = squares;
-
-        for (i = 0; i < nsquares; i++) {
-                s[i].color = g_random_int_range (0, ncolors);
-        }
-}
-
-static void
-set_colors (GdkWindow *window,
-            GdkColor  *fg,
-            GdkColor  *bg)
-{
-        GtkWidget *widget;
-        GdkColor   color;
-
-        widget = gtk_invisible_new ();
-
-        color = widget->style->dark [GTK_STATE_SELECTED];
-        fg->red   = color.red;
-        fg->green = color.green;
-        fg->blue  = color.blue;
-        color = widget->style->bg [GTK_STATE_SELECTED];
-        bg->red   = color.red;
-        bg->green = color.green;
-        bg->blue  = color.blue;
-}
-
-static void
-gste_popsquares_set_property (GObject            *object,
-                              guint               prop_id,
-                              const GValue       *value,
-                              GParamSpec         *pspec)
-{
-        GSTEPopsquares *self;
-
-        self = GSTE_POPSQUARES (object);
-
-        switch (prop_id) {
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-gste_popsquares_get_property (GObject            *object,
-                              guint               prop_id,
-                              GValue             *value,
-                              GParamSpec         *pspec)
-{
-        GSTEPopsquares *self;
-
-        self = GSTE_POPSQUARES (object);
-
-        switch (prop_id) {
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-setup_squares (GSTEPopsquares *pop)
-{
-        int       window_width;
-        int       window_height;
-        int       nsquares;
-        int       x, y;
-        int       sw, sh, gw, gh;
-        GdkWindow *window;
-
-        window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
-        if (window == NULL) {
-                return;
-        }
-
-        gs_theme_engine_get_window_size (GS_THEME_ENGINE (pop), &window_width, &window_height);
-
-        sw = window_width / pop->priv->subdivision;
-        sh = window_height / pop->priv->subdivision;
-
-        gw = pop->priv->subdivision;
-        gh = pop->priv->subdivision;
-        nsquares = gw * gh;
-
-        if (pop->priv->squares) {
-                g_free (pop->priv->squares);
-        }
-        pop->priv->squares = g_new0 (square, nsquares);
-
-        for (y = 0; y < gh; y++) {
-                for (x = 0; x < gw; x++) {
-                        square *s = (square *) &pop->priv->squares [gw * y + x];
-                        s->w = sw;
-                        s->h = sh;
-                        s->x = x * sw;
-                        s->y = y * sh;
-                }
-        }
-}
-
-static void
-setup_colors (GSTEPopsquares *pop)
-{
-        double    s1, v1, s2, v2 = 0;
-        int       h1, h2 = 0;
-        int       nsquares;
-        GdkColor  fg;
-        GdkColor  bg;
-        GdkWindow *window;
-
-        window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
-        if (window == NULL) {
-                return;
-        }
-
-        set_colors (window, &fg, &bg);
-
-        if (pop->priv->gc) {
-                g_object_unref (pop->priv->gc);
-        }
-        pop->priv->gc = gdk_gc_new (window);
-
-        if (pop->priv->colors) {
-                g_free (pop->priv->colors);
-        }
-        pop->priv->colors = g_new0 (GdkColor, pop->priv->ncolors);
-
-        rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1);
-        rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2);
-
-        make_color_ramp (gtk_widget_get_colormap (GTK_WIDGET (pop)),
-                         h1, s1, v1,
-                         h2, s2, v2,
-                         pop->priv->colors,
-                         pop->priv->ncolors,
-                         TRUE,
-                         TRUE,
-                         FALSE);
-
-        nsquares = pop->priv->subdivision * pop->priv->subdivision;
-
-        randomize_square_colors (pop->priv->squares, nsquares, pop->priv->ncolors);
-}
-
-static void
-gste_popsquares_real_show (GtkWidget *widget)
-{
-        GSTEPopsquares *pop = GSTE_POPSQUARES (widget);
-
-        /* start */
-        setup_squares (pop);
-        setup_colors (pop);
-
-        if (GTK_WIDGET_CLASS (parent_class)->show) {
-                GTK_WIDGET_CLASS (parent_class)->show (widget);
-        }
-}
-
-static gboolean
-gste_popsquares_real_expose (GtkWidget      *widget,
-                             GdkEventExpose *event)
-{
-        gboolean handled = FALSE;
-
-        /* draw */
-
-        /* FIXME: should double buffer? */
-
-        if (GTK_WIDGET_CLASS (parent_class)->expose_event) {
-                handled = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
-        }
-
-        return handled;
-}
-
-static gboolean
-gste_popsquares_real_configure (GtkWidget         *widget,
-                                GdkEventConfigure *event)
-{
-        GSTEPopsquares *pop = GSTE_POPSQUARES (widget);
-        gboolean        handled = FALSE;
-
-        /* resize */
-
-        /* just reset everything */
-        setup_squares (pop);
-        setup_colors (pop);
-
-        /* schedule a redraw */
-        gtk_widget_queue_draw (widget);
-
-        if (GTK_WIDGET_CLASS (parent_class)->configure_event) {
-                handled = GTK_WIDGET_CLASS (parent_class)->configure_event (widget, event);
-        }
-
-        return handled;
-}
-
-static void
-gste_popsquares_class_init (GSTEPopsquaresClass *klass)
-{
-        GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-        parent_class = g_type_class_peek_parent (klass);
-
-        object_class->finalize = gste_popsquares_finalize;
-        object_class->get_property = gste_popsquares_get_property;
-        object_class->set_property = gste_popsquares_set_property;
-
-        widget_class->show = gste_popsquares_real_show;
-        widget_class->expose_event = gste_popsquares_real_expose;
-        widget_class->configure_event = gste_popsquares_real_configure;
-
-        g_type_class_add_private (klass, sizeof (GSTEPopsquaresPrivate));
-}
-
-static gboolean
-draw_iter (GSTEPopsquares *pop)
-{
-        int      border = 1;
-        gboolean twitch = FALSE;
-        int      x, y;
-        int      sw, sh, gw, gh;
-        int      nsquares;
-        int      window_width;
-        int      window_height;
-        GdkWindow *window;
-
-        window = gs_theme_engine_get_window (GS_THEME_ENGINE (pop));
-
-        if (window == NULL) {
-                return TRUE;
-        }
-
-        gs_theme_engine_get_window_size (GS_THEME_ENGINE (pop),
-                                         &window_width,
-                                         &window_height);
-        sw = window_width / pop->priv->subdivision;
-        sh = window_height / pop->priv->subdivision;
-
-        gw = pop->priv->subdivision;
-        gh = pop->priv->subdivision;
-        nsquares = gw * gh;
-
-        for (y = 0; y < gh; y++) {
-                for (x = 0; x < gw; x++) {
-                        square *s = (square *) &pop->priv->squares [gw * y + x];
-
-                        gdk_gc_set_foreground (pop->priv->gc, &(pop->priv->colors [s->color]));
-                        gdk_draw_rectangle (window, pop->priv->gc, TRUE, s->x, s->y,
-                                            border ? s->w - border : s->w,
-                                            border ? s->h - border : s->h);
-                        s->color++;
-
-                        if (s->color == pop->priv->ncolors) {
-                                if (twitch && ((g_random_int_range (0, 4)) == 0)) {
-                                        randomize_square_colors (pop->priv->squares, nsquares, pop->priv->ncolors);
-                                } else {
-                                        s->color = g_random_int_range (0, pop->priv->ncolors);
-                                }
-                        }
-                }
-        }
-
-        return TRUE;
-}
-
-static void
-gste_popsquares_init (GSTEPopsquares *pop)
-{
-        int delay;
-
-        pop->priv = GSTE_POPSQUARES_GET_PRIVATE (pop);
-
-        pop->priv->ncolors = 128;
-        pop->priv->subdivision = 5;
-
-        delay = 25;
-        pop->priv->timeout_id = g_timeout_add (delay, (GSourceFunc)draw_iter, pop);
-}
-
-static void
-gste_popsquares_finalize (GObject *object)
-{
-        GSTEPopsquares *pop;
-
-        g_return_if_fail (object != NULL);
-        g_return_if_fail (GSTE_IS_POPSQUARES (object));
-
-        pop = GSTE_POPSQUARES (object);
-
-        g_return_if_fail (pop->priv != NULL);
-
-        if (pop->priv->timeout_id > 0) {
-                g_source_remove (pop->priv->timeout_id);
-                pop->priv->timeout_id = 0;
-        }
-
-        g_free (pop->priv->squares);
-        g_free (pop->priv->colors);
-        g_object_unref (pop->priv->gc);
-
-        G_OBJECT_CLASS (parent_class)->finalize (object);
-}
diff --git a/savers/gste-popsquares.h.orig b/savers/gste-popsquares.h.orig
deleted file mode 100644
index 4139652..0000000
--- a/savers/gste-popsquares.h.orig
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GSTE_POPSQUARES_H
-#define __GSTE_POPSQUARES_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include "gs-theme-engine.h"
-
-G_BEGIN_DECLS
-
-#define GSTE_TYPE_POPSQUARES         (gste_popsquares_get_type ())
-#define GSTE_POPSQUARES(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquares))
-#define GSTE_POPSQUARES_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GSTE_TYPE_POPSQUARES, GSTEPopsquaresClass))
-#define GSTE_IS_POPSQUARES(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSTE_TYPE_POPSQUARES))
-#define GSTE_IS_POPSQUARES_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GSTE_TYPE_POPSQUARES))
-#define GSTE_POPSQUARES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSTE_TYPE_POPSQUARES, GSTEPopsquaresClass))
-
-typedef struct GSTEPopsquaresPrivate GSTEPopsquaresPrivate;
-
-typedef struct
-{
-        GSThemeEngine          parent;
-        GSTEPopsquaresPrivate *priv;
-} GSTEPopsquares;
-
-typedef struct
-{
-        GSThemeEngineClass     parent_class;
-} GSTEPopsquaresClass;
-
-GType           gste_popsquares_get_type         (void);
-GSThemeEngine  *gste_popsquares_new              (void);
-
-G_END_DECLS
-
-#endif /* __GSTE_POPSQUARES_H */
diff --git a/savers/gste-slideshow.c.orig b/savers/gste-slideshow.c.orig
deleted file mode 100644
index 8ea83bd..0000000
--- a/savers/gste-slideshow.c.orig
+++ /dev/null
@@ -1,1001 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005-2006 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-engine.h"
-#include "gste-slideshow.h"
-
-static void     gste_slideshow_class_init (GSTESlideshowClass *klass);
-static void     gste_slideshow_init       (GSTESlideshow      *engine);
-static void     gste_slideshow_finalize   (GObject            *object);
-
-struct GSTESlideshowPrivate
-{
-        /* Image at full opacity */
-        cairo_pattern_t *pat1;
-        /* Image at partial opacity */
-        cairo_pattern_t *pat2;
-        /* Alpha of pat2 */
-        gdouble          alpha2;
-        /* edges of pat2 */
-        int              pat2top;
-        int              pat2bottom;
-        int              pat2left;
-        int              pat2right;
-
-        /* backbuffer that we do all the alpha drawing into (no round
-         * trips to the X server when the server doesn't support drawing
-         * pixmaps with alpha?) */
-        cairo_surface_t *surf;
-
-        gint64           fade_ticks;
-
-        GThread         *load_thread;
-        GAsyncQueue     *op_q;
-        GAsyncQueue     *results_q;
-
-        guint           results_pull_id;
-        guint           update_image_id;
-
-        GSList         *filename_list;
-        char           *images_location;
-        gboolean        sort_images;
-        int             window_width;
-        int             window_height;
-        PangoColor     *background_color;
-        gboolean        no_stretch_hint;
-
-        guint           timeout_id;
-
-        GTimer         *timer;
-        gboolean        fade_disabled;
-};
-
-enum {
-        PROP_0,
-        PROP_IMAGES_LOCATION,
-        PROP_SORT_IMAGES,
-        PROP_SOLID_BACKGROUND,
-        PROP_NO_STRETCH_HINT
-};
-
-#define GSTE_SLIDESHOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshowPrivate))
-
-static GObjectClass *parent_class = NULL;
-
-G_DEFINE_TYPE (GSTESlideshow, gste_slideshow, GS_TYPE_THEME_ENGINE)
-
-#define N_FADE_TICKS 10
-#define MINIMUM_FPS 3.0
-#define DEFAULT_IMAGES_LOCATION DATADIR "/pixmaps/backgrounds"
-#define IMAGE_LOAD_TIMEOUT 10000
-
-typedef struct _Op
-{
-        char          *location;
-        GSTESlideshow *slideshow;
-} Op;
-
-typedef struct _OpResult
-{
-        GdkPixbuf *pixbuf;
-} OpResult;
-
-static gboolean
-push_load_image_func (GSTESlideshow *show)
-{
-        Op *op;
-
-        gs_theme_engine_profile_msg ("Starting a new image load");
-
-        op = g_new (Op, 1);
-
-        op->location = g_strdup (show->priv->images_location);
-        op->slideshow = g_object_ref (show);
-
-        g_async_queue_push (show->priv->op_q, op);
-
-        show->priv->update_image_id = 0;
-
-        return FALSE;
-}
-
-static void
-start_new_load (GSTESlideshow *show,
-                guint          timeout)
-{
-        gs_theme_engine_profile_msg ("Scheduling a new image load");
-
-        /* queue a new load */
-        if (show->priv->update_image_id <= 0) {
-                show->priv->update_image_id = g_timeout_add_full (G_PRIORITY_LOW, timeout,
-                                                                  (GSourceFunc)push_load_image_func,
-                                                                  show, NULL);
-        }
-}
-
-static void
-start_fade (GSTESlideshow *show,
-            GdkPixbuf     *pixbuf)
-{
-        int      pw;
-        int      ph;
-        int      x;
-        int      y;
-        cairo_t *cr;
-        int      window_width;
-        int      window_height;
-
-        gs_theme_engine_profile_start ("start");
-
-        window_width = show->priv->window_width;
-        window_height = show->priv->window_height;
-
-        if (show->priv->pat2 != NULL) {
-                cairo_pattern_destroy (show->priv->pat2);
-        }
-
-        pw = gdk_pixbuf_get_width (pixbuf);
-        ph = gdk_pixbuf_get_height (pixbuf);
-        x = (window_width - pw) / 2;
-        y = (window_height - ph) / 2;
-
-        if (gdk_pixbuf_get_has_alpha (pixbuf) && show->priv->background_color) {
-                GdkPixbuf *colored;
-                guint32    color;
-                GdkPixmap *pixmap;
-
-                color = (show->priv->background_color->red << 16)
-                        + (show->priv->background_color->green / 256 << 8)
-                        + show->priv->background_color->blue / 256;
-                colored = gdk_pixbuf_composite_color_simple (pixbuf,
-                                                             pw, ph,
-                                                             GDK_INTERP_BILINEAR,
-                                                             255,
-                                                             256,
-                                                             color,
-                                                             color);
-                pixmap = gdk_pixmap_new (NULL, ph, pw,  gdk_visual_get_system ()->depth);
-
-                gdk_draw_pixbuf (pixmap, NULL, colored, 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_MAX, 0, 0);
-                gdk_pixbuf_get_from_drawable (pixbuf, pixmap, NULL, 0, 0, 0, 0, -1, -1);
-
-                g_object_unref (pixmap);
-
-                g_object_unref(colored);
-        }
-
-        cr = cairo_create (show->priv->surf);
-
-        /* XXX Handle out of memory? */
-        gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y);
-        show->priv->pat2 = cairo_pattern_reference (cairo_get_source (cr));
-        show->priv->pat2top = y;
-        show->priv->pat2bottom = y + ph;
-        show->priv->pat2left = x;
-        show->priv->pat2right = x + pw;
-
-        cairo_destroy (cr);
-
-        show->priv->fade_ticks = 0;
-        g_timer_start (show->priv->timer);
-
-        gs_theme_engine_profile_end ("end");
-}
-
-static void
-finish_fade (GSTESlideshow *show)
-{
-        gs_theme_engine_profile_start ("start");
-
-        if (show->priv->pat1 != NULL) {
-                cairo_pattern_destroy (show->priv->pat1);
-        }
-
-        show->priv->pat1 = show->priv->pat2;
-        show->priv->pat2 = NULL;
-
-        start_new_load (show, IMAGE_LOAD_TIMEOUT);
-
-        gs_theme_engine_profile_end ("end");
-}
-
-static void
-update_display (GSTESlideshow *show)
-{
-        int      window_width;
-        int      window_height;
-        cairo_t *cr;
-
-        gs_theme_engine_profile_start ("start");
-
-        cr = cairo_create (show->priv->surf);
-
-        gs_theme_engine_get_window_size (GS_THEME_ENGINE (show),
-                                         &window_width,
-                                         &window_height);
-
-        if (show->priv->pat2 != NULL) {
-                /* fade out areas not covered by the new image */
-                /* top */
-                cairo_rectangle (cr, 0, 0, window_width, show->priv->pat2top);
-                if (show->priv->background_color) {
-                        cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
-                               show->priv->background_color->green / 65535.0,
-                               show->priv->background_color->blue / 65535.0, show->priv->alpha2);
-                } else {
-                        cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
-                }
-                cairo_fill (cr);
-                /* left (excluding what's covered by top and bottom) */
-                cairo_rectangle (cr, 0, show->priv->pat2top,
-                                 show->priv->pat2left,
-                                 show->priv->pat2bottom - show->priv->pat2top);
-                if (show->priv->background_color) {
-                        cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
-                               show->priv->background_color->green / 65535.0,
-                               show->priv->background_color->blue / 65535.0, show->priv->alpha2);
-                } else {
-                        cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
-                }
-                cairo_fill (cr);
-                /* bottom */
-                cairo_rectangle (cr, 0, show->priv->pat2bottom, window_width,
-                                 window_height - show->priv->pat2bottom);
-                if (show->priv->background_color) {
-                        cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
-                               show->priv->background_color->green / 65535.0,
-                               show->priv->background_color->blue / 65535.0, show->priv->alpha2);
-                } else {
-                        cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
-                }
-                cairo_fill (cr);
-                /* right (excluding what's covered by top and bottom) */
-                cairo_rectangle (cr, show->priv->pat2right,
-                                 show->priv->pat2top,
-                                 window_width - show->priv->pat2right,
-                                 show->priv->pat2bottom - show->priv->pat2top);
-                if (show->priv->background_color)  {
-                        cairo_set_source_rgba (cr, show->priv->background_color->red / 65535.0,
-                               show->priv->background_color->green / 65535.0,
-                               show->priv->background_color->blue / 65535.0, show->priv->alpha2);
-                } else {
-                        cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, show->priv->alpha2);
-                }
-                cairo_fill (cr);
-
-                gs_theme_engine_profile_start ("paint pattern to surface");
-                cairo_set_source (cr, show->priv->pat2);
-
-                cairo_paint_with_alpha (cr, show->priv->alpha2);
-                gs_theme_engine_profile_end ("paint pattern to surface");
-        } else {
-                if (show->priv->pat1 != NULL) {
-                        cairo_set_source (cr, show->priv->pat1);
-                        cairo_paint (cr);
-                }
-        }
-
-        cairo_destroy (cr);
-
-        /* paint the image buffer into the window */
-        cr = gdk_cairo_create (GTK_WIDGET (show)->window);
-
-        cairo_set_source_surface (cr, show->priv->surf, 0, 0);
-
-        gs_theme_engine_profile_start ("paint surface to window");
-        cairo_paint (cr);
-        gs_theme_engine_profile_end ("paint surface to window");
-
-        cairo_destroy (cr);
-
-        gs_theme_engine_profile_end ("end");
-}
-
-static gboolean
-draw_iter (GSTESlideshow *show)
-{
-        double old_opacity;
-        double new_opacity;
-
-        if (show->priv->pat2 != NULL) {
-                gdouble fps;
-                gdouble elapsed;
-
-                if (show->priv->fade_disabled) {
-                        show->priv->alpha2 = 1.0;
-                        update_display (show);
-                        finish_fade (show);
-                        return TRUE;
-                }
-
-                /* we are in a fade */
-                show->priv->fade_ticks++;
-
-                /*
-                 * We have currently drawn pat2 with old_opacity, and we
-                 * want to set alpha2 so that drawing pat2 at alpha2
-                 * yields it drawn with new_opacity
-                 *
-                 * Solving
-                 *   new_opacity = 1 - (1 - alpha2) * (1 - old_opacity)
-                 * yields
-                 *   alpha2 = 1 - (1 - new_opacity) / (1 - old_opacity)
-                 *
-                 * XXX This assumes that cairo doesn't correct alpha for
-                 * the color profile.  However, any error is guaranteed
-                 * to be cleaned up by the last iteration, where alpha2
-                 * becomes 1 because new_opacity is 1.
-                 */
-                old_opacity = (double) (show->priv->fade_ticks - 1) /
-                              (double) N_FADE_TICKS;
-                new_opacity = (double) show->priv->fade_ticks /
-                              (double) N_FADE_TICKS;
-                show->priv->alpha2 = 1.0 - (1.0 - new_opacity) /
-                                           (1.0 - old_opacity);
-
-                update_display (show);
-
-                elapsed = g_timer_elapsed (show->priv->timer, NULL);
-                fps = (gdouble)show->priv->fade_ticks / elapsed;
-                if (fps < MINIMUM_FPS) {
-                        g_warning ("Getting less than %.2f frames per second, disabling fade", MINIMUM_FPS);
-                        show->priv->fade_ticks = N_FADE_TICKS - 1;
-                        show->priv->fade_disabled = TRUE;
-                }
-
-                if (show->priv->fade_ticks >= N_FADE_TICKS) {
-                        finish_fade (show);
-                }
-        }
-
-        return TRUE;
-}
-
-static void
-process_new_pixbuf (GSTESlideshow *show,
-                    GdkPixbuf     *pixbuf)
-{
-        gs_theme_engine_profile_msg ("Processing a new image");
-
-        if (pixbuf != NULL) {
-                start_fade (show, pixbuf);
-        } else {
-                start_new_load (show, 10);
-        }
-}
-
-static void
-op_result_free (OpResult *result)
-{
-        if (result == NULL) {
-                return;
-        }
-
-        if (result->pixbuf != NULL) {
-                g_object_unref (result->pixbuf);
-        }
-
-        g_free (result);
-}
-
-static gboolean
-results_pull_func (GSTESlideshow *show)
-{
-        OpResult *result;
-
-        GDK_THREADS_ENTER ();
-
-        g_async_queue_lock (show->priv->results_q);
-
-        result = g_async_queue_try_pop_unlocked (show->priv->results_q);
-        g_assert (result);
-
-        while (result != NULL) {
-                process_new_pixbuf (show, result->pixbuf);
-                op_result_free (result);
-
-                result = g_async_queue_try_pop_unlocked (show->priv->results_q);
-        }
-
-        show->priv->results_pull_id = 0;
-
-        g_async_queue_unlock (show->priv->results_q);
-
-        GDK_THREADS_LEAVE ();
-
-        return FALSE;
-}
-
-static GdkPixbuf *
-scale_pixbuf (GdkPixbuf *pixbuf,
-              int        max_width,
-              int        max_height,
-              gboolean   no_stretch_hint)
-{
-        int        pw;
-        int        ph;
-        float      scale_factor_x = 1.0;
-        float      scale_factor_y = 1.0;
-        float      scale_factor = 1.0;
-
-        pw = gdk_pixbuf_get_width (pixbuf);
-        ph = gdk_pixbuf_get_height (pixbuf);
-
-        /* If the image is less than 256 wide or high then it
-           is probably a thumbnail and we should ignore it */
-        if (pw < 256 || ph < 256) {
-                return NULL;
-        }
-
-        /* Determine which dimension requires the smallest scale. */
-        scale_factor_x = (float) max_width / (float) pw;
-        scale_factor_y = (float) max_height / (float) ph;
-
-        if (scale_factor_x > scale_factor_y) {
-                scale_factor = scale_factor_y;
-        } else {
-                scale_factor = scale_factor_x;
-        }
-
-        /* always scale down, allow to disable scaling up */
-        if (scale_factor < 1.0 || !no_stretch_hint) {
-                int scale_x;
-                int scale_y;
-
-                scale_x = (int) (pw * scale_factor);
-                scale_y = (int) (ph * scale_factor);
-                return gdk_pixbuf_scale_simple (pixbuf,
-                                                scale_x,
-                                                scale_y,
-                                                GDK_INTERP_BILINEAR);
-        } else {
-                return g_object_ref (pixbuf);
-        }
-}
-
-static void
-add_files_to_list (GSList    **list,
-                   const char *base)
-{
-        GDir       *d;
-        const char *d_name;
-
-        d = g_dir_open (base, 0, NULL);
-        if (d == NULL) {
-                g_warning ("Could not open directory: %s", base);
-                return;
-        }
-
-        while ((d_name = g_dir_read_name (d)) != NULL) {
-                char *path;
-
-                /* skip hidden files */
-                if (d_name[0] == '.') {
-                        continue;
-                }
-
-                path = g_build_filename (base, d_name, NULL);
-                if (g_file_test (path, G_FILE_TEST_IS_DIR)) {
-                        add_files_to_list (list, path);
-                        g_free (path);
-                } else {
-                        *list = g_slist_prepend (*list, path);
-                }
-        }
-
-        g_dir_close (d);
-}
-
-static GSList *
-build_filename_list_local_dir (const char *base)
-{
-        GSList *list = NULL;
-
-        add_files_to_list (&list, base);
-
-        return list;
-}
-
-static int
-gste_strcmp_compare_func (gconstpointer string_a, gconstpointer string_b)
-{
-        return strcmp (string_a == NULL ? "" : string_a,
-                       string_b == NULL ? "" : string_b);
-}
-
-
-static GdkPixbuf *
-get_pixbuf_from_local_dir (GSTESlideshow *show,
-                           const char    *location)
-{
-        GdkPixbuf *pixbuf, *transformed_pixbuf;
-        char      *filename;
-        int        i;
-        GSList    *l;
-
-        /* rebuild the cache */
-        if (show->priv->filename_list == NULL) {
-                show->priv->filename_list = build_filename_list_local_dir (location);
-        }
-
-        if (show->priv->filename_list == NULL) {
-                return NULL;
-        } else {
-                if (show->priv->sort_images) {
-                        show->priv->filename_list = g_slist_sort (show->priv->filename_list, gste_strcmp_compare_func);
-                }
-        }
-
-        /* get a random filename if needed */
-        if (! show->priv->sort_images) {
-                i = g_random_int_range (0, g_slist_length (show->priv->filename_list));
-                l = g_slist_nth (show->priv->filename_list, i);
-        } else {
-                l = show->priv->filename_list;
-        }
-        filename = l->data;
-
-        pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
-
-        if (pixbuf != NULL) {
-                transformed_pixbuf = gdk_pixbuf_apply_embedded_orientation (pixbuf);
-                g_object_unref (pixbuf);
-        } else {
-                transformed_pixbuf = NULL;
-        }
-
-        g_free (filename);
-        show->priv->filename_list = g_slist_delete_link (show->priv->filename_list, l);
-
-        return transformed_pixbuf;
-}
-
-static GdkPixbuf *
-get_pixbuf_from_location (GSTESlideshow *show,
-                          const char    *location)
-{
-        GdkPixbuf *pixbuf = NULL;
-        gboolean   is_dir;
-
-        if (location == NULL) {
-                return NULL;
-        }
-
-        is_dir = g_file_test (location, G_FILE_TEST_IS_DIR);
-
-        if (is_dir) {
-                pixbuf = get_pixbuf_from_local_dir (show, location);
-        }
-
-        return pixbuf;
-}
-
-static GdkPixbuf *
-get_pixbuf (GSTESlideshow *show,
-            const char    *location,
-            int            width,
-            int            height)
-{
-        GdkPixbuf *pixbuf;
-        GdkPixbuf *scaled = NULL;
-
-        if (location == NULL) {
-                return NULL;
-        }
-
-        pixbuf = get_pixbuf_from_location (show, location);
-
-        if (pixbuf != NULL) {
-                scaled = scale_pixbuf (pixbuf, width, height, show->priv->no_stretch_hint);
-                g_object_unref (pixbuf);
-        }
-
-        return scaled;
-}
-
-static void
-op_load_image (GSTESlideshow *show,
-               const char    *location)
-{
-        OpResult *op_result;
-        int       window_width;
-        int       window_height;
-
-        window_width = show->priv->window_width;
-        window_height = show->priv->window_height;
-
-        op_result = g_new0 (OpResult, 1);
-
-        op_result->pixbuf = get_pixbuf (show,
-                                        location,
-                                        window_width,
-                                        window_height);
-
-        GDK_THREADS_ENTER ();
-        g_async_queue_lock (show->priv->results_q);
-        g_async_queue_push_unlocked (show->priv->results_q, op_result);
-
-        if (show->priv->results_pull_id == 0) {
-                show->priv->results_pull_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE,
-                                                               (GSourceFunc)results_pull_func,
-                                                               show, NULL);
-        }
-
-        g_async_queue_unlock (show->priv->results_q);
-        GDK_THREADS_LEAVE ();
-}
-
-static gpointer
-load_threadfunc (GAsyncQueue *op_q)
-{
-        Op *op;
-
-        op = g_async_queue_pop (op_q);
-        while (op) {
-                op_load_image (op->slideshow,
-                               op->location);
-
-                if (op->slideshow != NULL) {
-                        g_object_unref (op->slideshow);
-                }
-                g_free (op->location);
-                g_free (op);
-
-                op = g_async_queue_pop (op_q);
-        }
-
-        return NULL;
-}
-
-void
-gste_slideshow_set_images_location (GSTESlideshow *show,
-                                    const char    *location)
-{
-        g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
-        g_free (show->priv->images_location);
-        show->priv->images_location = g_strdup (location);
-}
-
-
-void
-gste_slideshow_set_sort_images (GSTESlideshow *show,
-                                gboolean       sort_images)
-{
-        g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
-        show->priv->sort_images = sort_images;
-}
-
-void
-gste_slideshow_set_no_stretch_hint (GSTESlideshow *show,
-                                     gboolean       no_stretch_hint)
-{
-        g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
-        show->priv->no_stretch_hint = no_stretch_hint;
-}
-
-void
-gste_slideshow_set_background_color (GSTESlideshow *show,
-                                     const char    *background_color)
-{
-        g_return_if_fail (GSTE_IS_SLIDESHOW (show));
-
-        if (show->priv->background_color != NULL) {
-                g_slice_free (PangoColor, show->priv->background_color);
-                show->priv->background_color = NULL;
-        }
-
-        if (background_color != NULL) {
-               show->priv->background_color = g_slice_new (PangoColor);
-
-               if (pango_color_parse (show->priv->background_color, background_color) == FALSE) {
-                       g_slice_free (PangoColor, show->priv->background_color);
-                       show->priv->background_color = NULL;
-               }
-        }
-}
-
-static void
-gste_slideshow_set_property (GObject            *object,
-                             guint               prop_id,
-                             const GValue       *value,
-                             GParamSpec         *pspec)
-{
-        GSTESlideshow *self;
-
-        self = GSTE_SLIDESHOW (object);
-
-        switch (prop_id) {
-        case PROP_IMAGES_LOCATION:
-                gste_slideshow_set_images_location (self, g_value_get_string (value));
-                break;
-        case PROP_SORT_IMAGES:
-                gste_slideshow_set_sort_images (self, g_value_get_boolean (value));
-                break;
-        case PROP_SOLID_BACKGROUND:
-                gste_slideshow_set_background_color (self, g_value_get_string (value));
-                break;
-        case PROP_NO_STRETCH_HINT:
-                gste_slideshow_set_no_stretch_hint (self, g_value_get_boolean (value));
-                break;
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-gste_slideshow_get_property (GObject            *object,
-                             guint               prop_id,
-                             GValue             *value,
-                             GParamSpec         *pspec)
-{
-        GSTESlideshow *self;
-
-        self = GSTE_SLIDESHOW (object);
-
-        switch (prop_id) {
-        case PROP_IMAGES_LOCATION:
-                g_value_set_string (value, self->priv->images_location);
-                break;
-        case PROP_SORT_IMAGES:
-                g_value_set_boolean (value, self->priv->sort_images);
-                break;
-        case PROP_SOLID_BACKGROUND:
-                {
-                        char *color = NULL;
-                        color = pango_color_to_string (self->priv->background_color);
-                        g_value_set_string (value, color);
-                        g_free (color);
-                        break;
-                }
-        case PROP_NO_STRETCH_HINT:
-                g_value_set_boolean (value, self->priv->no_stretch_hint);
-                break;
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                break;
-        }
-}
-
-static void
-gste_slideshow_real_show (GtkWidget *widget)
-{
-        GSTESlideshow *show = GSTE_SLIDESHOW (widget);
-        int            delay;
-
-        if (GTK_WIDGET_CLASS (parent_class)->show) {
-                GTK_WIDGET_CLASS (parent_class)->show (widget);
-        }
-
-        start_new_load (show, 10);
-
-        delay = 25;
-        show->priv->timeout_id = g_timeout_add (delay, (GSourceFunc)draw_iter, show);
-
-        if (show->priv->timer != NULL) {
-                g_timer_destroy (show->priv->timer);
-        }
-        show->priv->timer = g_timer_new ();
-}
-
-static gboolean
-gste_slideshow_real_expose (GtkWidget      *widget,
-                            GdkEventExpose *event)
-{
-        GSTESlideshow *show = GSTE_SLIDESHOW (widget);
-        gboolean       handled = FALSE;
-
-        update_display (show);
-
-        if (GTK_WIDGET_CLASS (parent_class)->expose_event) {
-                handled = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
-        }
-
-        return handled;
-}
-
-static gboolean
-gste_slideshow_real_configure (GtkWidget         *widget,
-                               GdkEventConfigure *event)
-{
-        GSTESlideshow *show = GSTE_SLIDESHOW (widget);
-        gboolean       handled = FALSE;
-        cairo_t       *cr;
-
-        /* resize */
-        gs_theme_engine_get_window_size (GS_THEME_ENGINE (show),
-                                         &show->priv->window_width,
-                                         &show->priv->window_height);
-
-        gs_theme_engine_profile_msg ("Resize to x:%d y:%d",
-                                     show->priv->window_width,
-                                     show->priv->window_height);
-
-        if (show->priv->surf != NULL) {
-                cairo_surface_destroy (show->priv->surf);
-        }
-
-        cr = gdk_cairo_create (widget->window);
-        show->priv->surf = cairo_surface_create_similar (cairo_get_target (cr),
-                                                         CAIRO_CONTENT_COLOR,
-                                                         show->priv->window_width,
-                                                         show->priv->window_height);
-        cairo_destroy (cr);
-
-        /* schedule a redraw */
-        gtk_widget_queue_draw (widget);
-
-        if (GTK_WIDGET_CLASS (parent_class)->configure_event) {
-                handled = GTK_WIDGET_CLASS (parent_class)->configure_event (widget, event);
-        }
-
-        return handled;
-}
-
-static void
-gste_slideshow_class_init (GSTESlideshowClass *klass)
-{
-        GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-        parent_class = g_type_class_peek_parent (klass);
-
-        object_class->finalize = gste_slideshow_finalize;
-        object_class->get_property = gste_slideshow_get_property;
-        object_class->set_property = gste_slideshow_set_property;
-
-        widget_class->show = gste_slideshow_real_show;
-        widget_class->expose_event = gste_slideshow_real_expose;
-        widget_class->configure_event = gste_slideshow_real_configure;
-
-        g_type_class_add_private (klass, sizeof (GSTESlideshowPrivate));
-
-        g_object_class_install_property (object_class,
-                                         PROP_IMAGES_LOCATION,
-                                         g_param_spec_string ("images-location",
-                                                              NULL,
-                                                              NULL,
-                                                              NULL,
-                                                              G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_SORT_IMAGES,
-                                         g_param_spec_boolean ("sort-images",
-                                                               NULL,
-                                                               NULL,
-                                                               FALSE,
-                                                               G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_SOLID_BACKGROUND,
-                                         g_param_spec_string ("background-color",
-                                                              NULL,
-                                                              NULL,
-                                                              NULL,
-                                                              G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_NO_STRETCH_HINT,
-                                         g_param_spec_boolean ("no-stretch",
-                                                               NULL,
-                                                               NULL,
-                                                               FALSE,
-                                                               G_PARAM_READWRITE));
-}
-
-static void
-set_colormap (GtkWidget *widget)
-{
-        GdkScreen   *screen;
-        GdkColormap *colormap;
-
-        screen = gtk_widget_get_screen (widget);
-        colormap = gdk_screen_get_rgba_colormap (screen);
-        if (colormap == NULL) {
-                colormap = gdk_screen_get_rgb_colormap (screen);
-        }
-
-        gtk_widget_set_colormap (widget, colormap);
-}
-
-static void
-gste_slideshow_init (GSTESlideshow *show)
-{
-        GError *error;
-
-        show->priv = GSTE_SLIDESHOW_GET_PRIVATE (show);
-
-        show->priv->images_location = g_strdup (DEFAULT_IMAGES_LOCATION);
-
-        show->priv->op_q = g_async_queue_new ();
-        show->priv->results_q = g_async_queue_new ();
-
-        error = NULL;
-        show->priv->load_thread = g_thread_create ((GThreadFunc)load_threadfunc, show->priv->op_q, FALSE, &error);
-        if (show->priv->load_thread == NULL) {
-                g_error ("Could not create a thread to load images: %s",
-                         error->message);
-                g_error_free (error);
-                exit (-1);
-        }
-
-        set_colormap (GTK_WIDGET (show));
-}
-
-static void
-gste_slideshow_finalize (GObject *object)
-{
-        GSTESlideshow *show;
-        gpointer       result;
-
-        g_return_if_fail (object != NULL);
-        g_return_if_fail (GSTE_IS_SLIDESHOW (object));
-
-        show = GSTE_SLIDESHOW (object);
-
-        g_return_if_fail (show->priv != NULL);
-
-        if (show->priv->surf) {
-                cairo_surface_destroy (show->priv->surf);
-        }
-
-        if (show->priv->timeout_id > 0) {
-                g_source_remove (show->priv->timeout_id);
-                show->priv->timeout_id = 0;
-        }
-
-        if (show->priv->results_pull_id > 0) {
-                g_source_remove (show->priv->results_pull_id);
-        }
-
-        if (show->priv->results_q != NULL) {
-                result = g_async_queue_try_pop (show->priv->results_q);
-
-                while (result) {
-                        result = g_async_queue_try_pop (show->priv->results_q);
-                }
-                g_async_queue_unref (show->priv->results_q);
-        }
-
-        g_free (show->priv->images_location);
-        show->priv->images_location = NULL;
-
-        if (show->priv->background_color) {
-                g_slice_free (PangoColor, show->priv->background_color);
-                show->priv->background_color = NULL;
-        }
-
-        if (show->priv->timer != NULL) {
-                g_timer_destroy (show->priv->timer);
-        }
-
-        G_OBJECT_CLASS (parent_class)->finalize (object);
-}
diff --git a/savers/gste-slideshow.h.orig b/savers/gste-slideshow.h.orig
deleted file mode 100644
index 5d7ec7c..0000000
--- a/savers/gste-slideshow.h.orig
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GSTE_SLIDESHOW_H
-#define __GSTE_SLIDESHOW_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-#include "gs-theme-engine.h"
-
-G_BEGIN_DECLS
-
-#define GSTE_TYPE_SLIDESHOW         (gste_slideshow_get_type ())
-#define GSTE_SLIDESHOW(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshow))
-#define GSTE_SLIDESHOW_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GSTE_TYPE_SLIDESHOW, GSTESlideshowClass))
-#define GSTE_IS_SLIDESHOW(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSTE_TYPE_SLIDESHOW))
-#define GSTE_IS_SLIDESHOW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GSTE_TYPE_SLIDESHOW))
-#define GSTE_SLIDESHOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSTE_TYPE_SLIDESHOW, GSTESlideshowClass))
-
-typedef struct GSTESlideshowPrivate GSTESlideshowPrivate;
-
-typedef struct
-{
-        GSThemeEngine         parent;
-        GSTESlideshowPrivate *priv;
-} GSTESlideshow;
-
-typedef struct
-{
-        GSThemeEngineClass     parent_class;
-} GSTESlideshowClass;
-
-GType           gste_slideshow_get_type         (void);
-GSThemeEngine  *gste_slideshow_new              (void);
-
-void            gste_slideshow_set_images_location  (GSTESlideshow *show,
-                                                     const char    *location);
-
-void            gste_slideshow_set_sort_images      (GSTESlideshow *show,
-                                                     gboolean       sort_image);
-
-void            gste_slideshow_set_background_color (GSTESlideshow *show,
-                                                     const char    *background_color);
-
-void            gste_slideshow_set_no_stretch_hint  (GSTESlideshow *show,
-                                                     gboolean       no_stretch_hint);
-
-G_END_DECLS
-
-#endif /* __GSTE_SLIDESHOW_H */
diff --git a/savers/popsquares.c.orig b/savers/popsquares.c.orig
deleted file mode 100644
index 04ea19d..0000000
--- a/savers/popsquares.c.orig
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include <glib/gi18n.h>
-
-#include "gs-theme-window.h"
-#include "gs-theme-engine.h"
-#include "gste-popsquares.h"
-
-int
-main (int argc, char **argv)
-{
-        GSThemeEngine *engine;
-        GtkWidget     *window;
-        GError        *error;
-
-        bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-        textdomain (GETTEXT_PACKAGE);
-
-        error = NULL;
-
-        if (!gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error)) {
-		g_printerr (_("%s. See --help for usage information.\n"),
-			    error->message);
-		g_error_free (error);
-	        exit (1);
-	}
-
-        window = gs_theme_window_new ();
-        g_signal_connect (G_OBJECT (window), "delete-event",
-                          G_CALLBACK (gtk_main_quit), NULL);
-
-        g_set_prgname ("popsquares");
-
-        engine = g_object_new (GSTE_TYPE_POPSQUARES, NULL);
-        gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (engine));
-
-        gtk_widget_show (GTK_WIDGET (engine));
-
-        gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-        gtk_widget_show (window);
-
-        gtk_main ();
-
-        return 0;
-}
diff --git a/savers/slideshow.c.orig b/savers/slideshow.c.orig
deleted file mode 100644
index f18dc5c..0000000
--- a/savers/slideshow.c.orig
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-
-#include "gs-theme-window.h"
-#include "gs-theme-engine.h"
-#include "gste-slideshow.h"
-
-#include "xdg-user-dir-lookup.h"
-
-int
-main (int argc, char **argv)
-{
-        GSThemeEngine *engine;
-        GtkWidget     *window;
-        GError        *error;
-        gboolean       ret;
-        char          *location = NULL;
-        char          *background_color = NULL;
-        gboolean       sort_images = FALSE;
-        gboolean       no_stretch = FALSE;
-        GOptionEntry  entries [] = {
-                { "location", 0, 0, G_OPTION_ARG_STRING, &location,
-                  N_("Location to get images from"), N_("PATH") },
-                { "background-color", 0, 0, G_OPTION_ARG_STRING, &background_color,
-                  N_("Color to use for images background"), N_("\"#rrggbb\"") },
-                { "sort-images", 0, 0, G_OPTION_ARG_NONE, &sort_images,
-                  N_("Do not randomize pictures from location"), NULL },
-                { "no-stretch", 0, 0, G_OPTION_ARG_NONE, &no_stretch,
-                  N_("Do not try to stretch images on screen"), NULL },
-                { NULL }
-        };
-
-        bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-        textdomain (GETTEXT_PACKAGE);
-
-        error = NULL;
-
-        g_thread_init (NULL);
-        ret = gtk_init_with_args (&argc, &argv,
-                                  NULL,
-                                  entries,
-                                  NULL,
-                                  &error);
-        if (! ret) {
-                g_message ("%s", error->message);
-                g_error_free (error);
-                exit (1);
-        }
-
-        g_chdir (g_get_home_dir ());
-
-        g_set_prgname ("slideshow");
-
-        window = gs_theme_window_new ();
-        g_signal_connect (G_OBJECT (window), "delete-event",
-                          G_CALLBACK (gtk_main_quit), NULL);
-
-        engine = g_object_new (GSTE_TYPE_SLIDESHOW, NULL);
-
-        if (location == NULL) {
-                location = xdg_user_dir_lookup ("PICTURES");
-                if (location == NULL ||
-                    strcmp (location, "/tmp") == 0 ||
-                    strcmp (location, g_get_home_dir ()) == 0) {
-                        free (location);
-                        location = g_build_filename (g_get_home_dir (), "Pictures", NULL);
-                }
-        }
-
-        if (location != NULL) {
-                g_object_set (engine, "images-location", location, NULL);
-        }
-
-        if (sort_images) {
-                g_object_set (engine, "sort-images", sort_images, NULL);
-        }
-
-        if (background_color != NULL) {
-                g_object_set (engine, "background-color", background_color, NULL);
-        }
-
-        if (no_stretch) {
-                g_object_set (engine, "no-stretch", no_stretch, NULL);
-        }
-
-        gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (engine));
-
-        gtk_widget_show (GTK_WIDGET (engine));
-
-        gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-        gtk_widget_show (window);
-
-        gtk_main ();
-
-        return 0;
-}
diff --git a/savers/xdg-user-dir-lookup.c.orig b/savers/xdg-user-dir-lookup.c.orig
deleted file mode 100644
index a6b2fb1..0000000
--- a/savers/xdg-user-dir-lookup.c.orig
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-  This file is not licenced under the GPL like the rest of the code.
-  Its is under the MIT license, to encourage reuse by cut-and-paste.
-
-  Copyright (c) 2007 Red Hat, inc
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xdg-user-dir-lookup.h"
-
-char *
-xdg_user_dir_lookup (const char *type)
-{
-  FILE *file;
-  char *home_dir, *config_home, *config_file;
-  char buffer[512];
-  char *user_dir;
-  char *p, *d;
-  int len;
-  int relative;
-
-  home_dir = getenv ("HOME");
-
-  if (home_dir == NULL)
-    return strdup ("/tmp");
-
-  config_home = getenv ("XDG_CONFIG_HOME");
-  if (config_home == NULL || config_home[0] == 0)
-    {
-      config_file = malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1);
-      strcpy (config_file, home_dir);
-      strcat (config_file, "/.config/user-dirs.dirs");
-    }
-  else
-    {
-      config_file = malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1);
-      strcpy (config_file, config_home);
-      strcat (config_file, "/user-dirs.dirs");
-    }
-
-  file = fopen (config_file, "r");
-  free (config_file);
-  if (file == NULL)
-    goto error;
-
-  user_dir = NULL;
-  while (fgets (buffer, sizeof (buffer), file))
-    {
-      /* Remove newline at end */
-      len = strlen (buffer);
-      if (len > 0 && buffer[len-1] == '\n')
-	buffer[len-1] = 0;
-
-      p = buffer;
-      while (*p == ' ' || *p == '\t')
-	p++;
-
-      if (strncmp (p, "XDG_", 4) != 0)
-	continue;
-      p += 4;
-      if (strncmp (p, type, strlen (type)) != 0)
-	continue;
-      p += strlen (type);
-      if (strncmp (p, "_DIR", 4) != 0)
-	continue;
-      p += 4;
-
-      while (*p == ' ' || *p == '\t')
-	p++;
-
-      if (*p != '=')
-	continue;
-      p++;
-
-      while (*p == ' ' || *p == '\t')
-	p++;
-
-      if (*p != '"')
-	continue;
-      p++;
-
-      relative = 0;
-      if (strncmp (p, "$HOME/", 6) == 0)
-	{
-	  p += 6;
-	  relative = 1;
-	}
-      else if (*p != '/')
-	continue;
-
-      if (relative)
-	{
-	  user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);
-	  strcpy (user_dir, home_dir);
-	  strcat (user_dir, "/");
-	}
-      else
-	{
-	  user_dir = malloc (strlen (p) + 1);
-	  *user_dir = 0;
-	}
-
-      d = user_dir + strlen (user_dir);
-      while (*p && *p != '"')
-	{
-	  if ((*p == '\\') && (*(p+1) != 0))
-	    p++;
-	  *d++ = *p++;
-	}
-      *d = 0;
-    }
-  fclose (file);
-
-  if (user_dir)
-    return user_dir;
-
- error:
-  /* Special case desktop for historical compatibility */
-  if (strcmp (type, "DESKTOP") == 0)
-    {
-      user_dir = malloc (strlen (home_dir) + strlen ("/Desktop") + 1);
-      strcpy (user_dir, home_dir);
-      strcat (user_dir, "/Desktop");
-      return user_dir;
-    }
-  else
-    return strdup (home_dir);
-}
-
-#ifdef STANDALONE
-
-int
-main (int argc, char *argv[])
-{
-  if (argc != 2)
-    {
-      fprintf (stderr, "Usage %s <dir-type>\n", argv[0]);
-      exit (1);
-    }
-
-  printf ("%s\n", xdg_user_dir_lookup (argv[1]));
-  return 0;
-}
-
-#endif
diff --git a/src/copy-theme-dialog.c.orig b/src/copy-theme-dialog.c.orig
deleted file mode 100644
index d8150eb..0000000
--- a/src/copy-theme-dialog.c.orig
+++ /dev/null
@@ -1,545 +0,0 @@
-/* copy-theme-dialog.c
- * Copyright (C) 2008 John Millikin <jmillikin at gmail.com>
- *
- * 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, 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.
-**/
-
-#include "config.h"
-
-#include <limits.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gio/gio.h>
-
-#include "copy-theme-dialog.h"
-
-static void
-copy_theme_dialog_class_init (CopyThemeDialogClass *klass);
-static void
-copy_theme_dialog_init (CopyThemeDialog *dlg);
-static void
-add_file_to_dialog (gpointer data, gpointer user_data);
-static void
-single_copy_complete (GObject *source_object, GAsyncResult *res,
-                      gpointer user_data);
-static void
-copy_theme_dialog_copy_next (CopyThemeDialog *dialog);
-static void
-copy_theme_dialog_cancel (CopyThemeDialog *dialog);
-static void
-copy_theme_dialog_finalize (GObject *obj);
-static void
-copy_theme_dialog_update_num_files (CopyThemeDialog *dlg);
-static void
-copy_theme_dialog_response (GtkDialog *dialog, gint response_id);
-static void
-eel_gtk_label_make_bold (GtkLabel *label);
-static void
-create_titled_label (GtkTable   *table,
-                     int         row,
-                     GtkWidget **title_widget,
-                     GtkWidget **label_text_widget);
-
-static GObjectClass *parent_class = NULL;
-
-enum
-{
-    CANCELLED = 0,
-    COMPLETE,
-    SIGNAL_COUNT
-};
-
-struct _CopyThemeDialogPrivate
-{
-    GtkWidget *progress;
-    GtkWidget *status;
-    GtkWidget *current;
-    GtkWidget *from;
-    GtkWidget *to;
-
-    GFile *theme_dir;
-    GSList *all_files, *file;
-    GSList *all_basenames, *basename;
-    guint index;
-    guint total_files;
-    GCancellable *cancellable;
-};
-
-guint signals[SIGNAL_COUNT] = {0, 0};
-
-GType
-copy_theme_dialog_get_type (void)
-{
-    static GType copy_theme_dialog_type = 0;
-
-    if (!copy_theme_dialog_type)
-    {
-        static GTypeInfo copy_theme_dialog_info =
-        {
-            sizeof (CopyThemeDialogClass),
-            NULL, /* GBaseInitFunc */
-            NULL, /* GBaseFinalizeFunc */
-            (GClassInitFunc) copy_theme_dialog_class_init,
-            NULL, /* GClassFinalizeFunc */
-            NULL, /* data */
-            sizeof (CopyThemeDialog),
-            0, /* n_preallocs */
-            (GInstanceInitFunc) copy_theme_dialog_init,
-            NULL
-        };
-
-        copy_theme_dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
-                                 "CopyThemeDialog",
-                                 &copy_theme_dialog_info,
-                                 0);
-    }
-
-    return copy_theme_dialog_type;
-}
-
-static void
-copy_theme_dialog_class_init (CopyThemeDialogClass *klass)
-{
-    GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-    g_type_class_add_private (klass, sizeof (CopyThemeDialogPrivate));
-
-    klass->cancelled = copy_theme_dialog_cancel;
-    object_class->finalize = copy_theme_dialog_finalize;
-
-    GTK_DIALOG_CLASS (klass)->response = copy_theme_dialog_response;
-
-    signals[CANCELLED] = g_signal_new ("cancelled",
-                                       G_TYPE_FROM_CLASS (object_class),
-                                       G_SIGNAL_RUN_FIRST,
-                                       G_STRUCT_OFFSET (CopyThemeDialogClass, cancelled),
-                                       NULL, NULL,
-                                       g_cclosure_marshal_VOID__VOID,
-                                       G_TYPE_NONE, 0);
-
-    signals[COMPLETE] = g_signal_new ("complete",
-                                      G_TYPE_FROM_CLASS (object_class),
-                                      G_SIGNAL_RUN_LAST,
-                                      G_STRUCT_OFFSET (CopyThemeDialogClass, complete),
-                                      NULL, NULL,
-                                      g_cclosure_marshal_VOID__VOID,
-                                      G_TYPE_NONE, 0);
-
-    parent_class = g_type_class_peek_parent (klass);
-}
-
-GtkWidget*
-copy_theme_dialog_new (GList *files)
-{
-    GtkWidget *dialog;
-    CopyThemeDialogPrivate *priv;
-
-    dialog = GTK_WIDGET (g_object_new (COPY_THEME_DIALOG_TYPE, NULL));
-    priv = COPY_THEME_DIALOG (dialog)->priv;
-    priv->index = 0;
-    priv->total_files = 0;
-    priv->all_files = NULL;
-    priv->all_basenames = NULL;
-
-    g_list_foreach (files, add_file_to_dialog, dialog);
-
-    priv->file = priv->all_files;
-    priv->basename = priv->all_basenames;
-
-    return dialog;
-}
-
-static gboolean
-copy_finished (CopyThemeDialog *dialog)
-{
-    return (g_cancellable_is_cancelled (dialog->priv->cancellable) ||
-            dialog->priv->file == NULL);
-}
-
-static void
-copy_theme_dialog_init (CopyThemeDialog *dlg)
-{
-    GtkWidget *vbox;
-    GtkWidget *hbox;
-    GtkWidget *progress_vbox;
-    GtkWidget *table;
-    GtkWidget *label;
-    char      *markup;
-    gchar     *theme_dir_path;
-
-    dlg->priv = G_TYPE_INSTANCE_GET_PRIVATE (dlg, COPY_THEME_DIALOG_TYPE,
-                CopyThemeDialogPrivate);
-
-    /* Find and, if needed, create the directory for storing themes */
-    theme_dir_path = g_build_filename (g_get_user_data_dir (),
-                                       "applications", "screensavers",
-                                       NULL);
-    dlg->priv->theme_dir = g_file_new_for_path (theme_dir_path);
-    g_mkdir_with_parents (theme_dir_path, S_IRWXU);
-    g_free (theme_dir_path);
-
-    /* For cancelling async I/O operations */
-    dlg->priv->cancellable = g_cancellable_new ();
-
-    /* GUI settings */
-    gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),
-                                    4);
-    gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dlg)->vbox), 4);
-
-    vbox = gtk_vbox_new (FALSE, 6);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
-    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, TRUE, TRUE, 0);
-
-    dlg->priv->status = gtk_label_new ("");
-    markup = g_strdup_printf ("<big><b>%s</b></big>", _("Copying files"));
-    gtk_label_set_markup (GTK_LABEL (dlg->priv->status), markup);
-    g_free (markup);
-
-    gtk_misc_set_alignment (GTK_MISC (dlg->priv->status), 0.0, 0.0);
-
-    gtk_box_pack_start (GTK_BOX (vbox), dlg->priv->status, FALSE, FALSE, 0);
-
-    hbox = gtk_hbox_new (FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
-
-    table = gtk_table_new (2, 2, FALSE);
-    gtk_table_set_row_spacings (GTK_TABLE (table), 4);
-    gtk_table_set_col_spacings (GTK_TABLE (table), 4);
-
-    create_titled_label (GTK_TABLE (table), 0,
-                         &label,
-                         &dlg->priv->from);
-    gtk_label_set_text (GTK_LABEL (label), _("From:"));
-    create_titled_label (GTK_TABLE (table), 1,
-                         &label,
-                         &dlg->priv->to);
-    gtk_label_set_text (GTK_LABEL (label), _("To:"));
-
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (table), FALSE, FALSE, 0);
-
-    progress_vbox = gtk_vbox_new (TRUE, 0);
-    gtk_box_pack_start (GTK_BOX (vbox), progress_vbox, FALSE, FALSE, 0);
-
-    dlg->priv->progress = gtk_progress_bar_new ();
-    gtk_box_pack_start (GTK_BOX (progress_vbox),
-                        dlg->priv->progress, FALSE, FALSE, 0);
-
-    dlg->priv->current = gtk_label_new ("");
-    gtk_box_pack_start (GTK_BOX (progress_vbox),
-                        dlg->priv->current, FALSE, FALSE, 0);
-    gtk_misc_set_alignment (GTK_MISC (dlg->priv->current), 0.0, 0.5);
-
-    gtk_dialog_add_button (GTK_DIALOG (dlg),
-                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-
-    gtk_window_set_title (GTK_WINDOW (dlg),
-                          _("Copying themes"));
-    gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
-    gtk_container_set_border_width (GTK_CONTAINER (dlg), 6);
-
-    gtk_widget_show_all (GTK_DIALOG (dlg)->vbox);
-}
-
-static void
-add_file_to_dialog (gpointer data, gpointer user_data)
-{
-    CopyThemeDialogPrivate *priv;
-    GFile *file;
-    gchar *basename = NULL, *raw_basename;
-
-    priv = COPY_THEME_DIALOG (user_data)->priv;
-    file = G_FILE (data);
-
-    raw_basename = g_file_get_basename (file);
-    if (g_str_has_suffix (raw_basename, ".desktop"))
-    {
-        /* FIXME: validate key file? */
-        basename = g_strndup (raw_basename,
-                              /* 8 = strlen (".desktop") */
-                              strlen (raw_basename) - 8);
-    }
-    g_free (raw_basename);
-
-    if (basename)
-    {
-        g_object_ref (file);
-        priv->all_files = g_slist_append (priv->all_files, file);
-        priv->all_basenames = g_slist_append (priv->all_basenames, basename);
-        priv->total_files++;
-    }
-
-    else
-    {
-        GtkWidget *dialog;
-        gchar *uri;
-
-        dialog = gtk_message_dialog_new (GTK_WINDOW (user_data),
-                                         GTK_DIALOG_MODAL,
-                                         GTK_MESSAGE_ERROR,
-                                         GTK_BUTTONS_OK,
-                                         _("Invalid screensaver theme"));
-        uri = g_file_get_uri (file);
-        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-                _("%s does not appear to be a valid screensaver theme."),
-                uri);
-        g_free (uri);
-        gtk_window_set_title (GTK_WINDOW (dialog), "");
-        gtk_window_set_icon_name (GTK_WINDOW (dialog), "preferences-desktop-screensaver");
-
-        gtk_dialog_run (GTK_DIALOG (dialog));
-        gtk_widget_destroy (dialog);
-    }
-}
-
-static void
-single_copy_complete (GObject *source_object, GAsyncResult *res,
-                      gpointer user_data)
-{
-    GError *error = NULL;
-    gboolean should_continue = FALSE;
-    CopyThemeDialog *dialog = COPY_THEME_DIALOG (user_data);
-
-    if (g_file_copy_finish (G_FILE (source_object), res, &error))
-    {
-        should_continue = TRUE;
-    }
-
-    else
-    {
-        /* If the file already exists, generate a new random name
-         * and try again.
-        **/
-        if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
-        {
-            GFile *file, *destination;
-            gchar *basename, *full_basename;
-            g_error_free (error);
-
-            file = G_FILE (dialog->priv->file->data);
-            basename = (gchar *) (dialog->priv->basename->data);
-
-            g_return_if_fail (file != NULL);
-            g_return_if_fail (basename != NULL);
-
-            full_basename = g_strdup_printf ("%s-%u.desktop",
-                                             basename,
-                                             g_random_int ());
-            destination = g_file_get_child (dialog->priv->theme_dir,
-                                            full_basename);
-            g_free (full_basename);
-
-            g_file_copy_async (file, destination, G_FILE_COPY_NONE,
-                               G_PRIORITY_DEFAULT,
-                               dialog->priv->cancellable,
-                               NULL, NULL,
-                               single_copy_complete, dialog);
-        }
-
-        else
-        {
-            if (g_error_matches (error, G_IO_ERROR,
-                                 G_IO_ERROR_CANCELLED))
-            {
-                /* User has cancelled the theme copy */
-                g_signal_emit (G_OBJECT (dialog),
-                               signals[CANCELLED],
-                               0, NULL);
-            }
-
-            else
-            {
-                /* Some other error occurred, ignore and
-                 * try to copy remaining files
-                **/
-                should_continue = TRUE;
-            }
-
-            g_error_free (error);
-        }
-    }
-
-    /* Update informational widgets and, if needed, signal
-     * copy completion.
-    **/
-    if (should_continue)
-    {
-        dialog->priv->index++;
-        dialog->priv->file = dialog->priv->file->next;
-        dialog->priv->basename = dialog->priv->basename->next;
-        copy_theme_dialog_update_num_files (dialog);
-        copy_theme_dialog_copy_next (dialog);
-    }
-}
-
-/* Try to copy the theme file to the user's screensaver directory.
- * If a file with the given name already exists, the error will be
- * caught later and the copy re-attempted with a random value
- * appended to the filename.
-**/
-static void
-copy_theme_dialog_copy_next (CopyThemeDialog *dialog)
-{
-    GFile *file, *destination;
-    gchar *basename, *full_basename;
-
-    if (copy_finished (dialog))
-    {
-        g_signal_emit (G_OBJECT (dialog), signals[COMPLETE],
-                       0, NULL);
-        return;
-    }
-
-    file = G_FILE (dialog->priv->file->data);
-    basename = (gchar *) (dialog->priv->basename->data);
-
-    g_return_if_fail (file != NULL);
-    g_return_if_fail (basename != NULL);
-
-    full_basename = g_strdup_printf ("%s.desktop", basename);
-    destination = g_file_get_child (dialog->priv->theme_dir, full_basename);
-    g_free (full_basename);
-
-    g_file_copy_async (file, destination, G_FILE_COPY_NONE,
-                       G_PRIORITY_DEFAULT, dialog->priv->cancellable,
-                       NULL, NULL, single_copy_complete, dialog);
-}
-
-static gboolean
-timeout_display_dialog (gpointer data)
-{
-    if (IS_COPY_THEME_DIALOG (data))
-    {
-        CopyThemeDialog *dialog = COPY_THEME_DIALOG (data);
-        if (!copy_finished (dialog))
-        {
-            gtk_widget_show (GTK_WIDGET (dialog));
-
-            g_signal_connect (dialog, "response",
-                              G_CALLBACK (copy_theme_dialog_response),
-                              dialog);
-        }
-    }
-    return FALSE;
-}
-
-void
-copy_theme_dialog_begin (CopyThemeDialog *dialog)
-{
-    gtk_widget_hide (GTK_WIDGET (dialog));
-
-    /* If the copy operation takes more than half a second to
-     * complete, display the dialog.
-    **/
-    g_timeout_add (500, timeout_display_dialog, dialog);
-
-    copy_theme_dialog_copy_next (dialog);
-}
-
-static void
-copy_theme_dialog_cancel (CopyThemeDialog *dialog)
-{
-    g_cancellable_cancel (dialog->priv->cancellable);
-}
-
-static void
-copy_theme_dialog_finalize (GObject *obj)
-{
-    CopyThemeDialog *dlg = COPY_THEME_DIALOG (obj);
-
-    g_object_unref (dlg->priv->theme_dir);
-    g_slist_foreach (dlg->priv->all_files, (GFunc) (g_object_unref), NULL);
-    g_slist_free (dlg->priv->all_files);
-    g_slist_foreach (dlg->priv->all_basenames, (GFunc) (g_free), NULL);
-    g_slist_free (dlg->priv->all_basenames);
-    g_object_unref (dlg->priv->cancellable);
-
-    if (parent_class->finalize)
-        parent_class->finalize (G_OBJECT (dlg));
-}
-
-static void
-copy_theme_dialog_update_num_files (CopyThemeDialog *dlg)
-{
-    gchar *str = g_strdup_printf (_("Copying file: %u of %u"),
-                                  dlg->priv->index, dlg->priv->total_files);
-    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (dlg->priv->progress), str);
-    g_free (str);
-}
-
-static void
-copy_theme_dialog_response (GtkDialog *dialog, gint response_id)
-{
-    g_cancellable_cancel (COPY_THEME_DIALOG (dialog)->priv->cancellable);
-}
-
-/**
- * eel_gtk_label_make_bold.
- *
- * Switches the font of label to a bold equivalent.
- * @label: The label.
- **/
-static void
-eel_gtk_label_make_bold (GtkLabel *label)
-{
-    PangoFontDescription *font_desc;
-
-    font_desc = pango_font_description_new ();
-
-    pango_font_description_set_weight (font_desc,
-                                       PANGO_WEIGHT_BOLD);
-
-    /* This will only affect the weight of the font, the rest is
-     * from the current state of the widget, which comes from the
-     * theme or user prefs, since the font desc only has the
-     * weight flag turned on.
-     */
-    gtk_widget_modify_font (GTK_WIDGET (label), font_desc);
-
-    pango_font_description_free (font_desc);
-}
-
-/* from caja */
-static void
-create_titled_label (GtkTable   *table,
-                     int         row,
-                     GtkWidget **title_widget,
-                     GtkWidget **label_text_widget)
-{
-    *title_widget = gtk_label_new ("");
-    eel_gtk_label_make_bold (GTK_LABEL (*title_widget));
-    gtk_misc_set_alignment (GTK_MISC (*title_widget), 1, 0);
-    gtk_table_attach (table, *title_widget,
-                      0, 1,
-                      row, row + 1,
-                      GTK_FILL, 0,
-                      0, 0);
-    gtk_widget_show (*title_widget);
-
-    *label_text_widget = gtk_label_new ("");
-    gtk_label_set_ellipsize (GTK_LABEL (*label_text_widget), PANGO_ELLIPSIZE_END);
-    gtk_table_attach (table, *label_text_widget,
-                      1, 2,
-                      row, row + 1,
-                      GTK_FILL | GTK_EXPAND, 0,
-                      0, 0);
-    gtk_widget_show (*label_text_widget);
-    gtk_misc_set_alignment (GTK_MISC (*label_text_widget), 0, 0);
-}
diff --git a/src/copy-theme-dialog.h.orig b/src/copy-theme-dialog.h.orig
deleted file mode 100644
index b1e66fd..0000000
--- a/src/copy-theme-dialog.h.orig
+++ /dev/null
@@ -1,56 +0,0 @@
-/* copy-theme-dialog.h
- * Copyright (C) 2008 John Millikin <jmillikin at gmail.com>
- *
- * 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, 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.
-**/
-
-#ifndef __COPY_THEME_DIALOG_H__
-#define __COPY_THEME_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define COPY_THEME_DIALOG_TYPE copy_theme_dialog_get_type ()
-#define COPY_THEME_DIALOG(obj)          G_TYPE_CHECK_INSTANCE_CAST (obj, COPY_THEME_DIALOG_TYPE, CopyThemeDialog)
-#define COPY_THEME_DIALOG_CLASS(klass)  G_TYPE_CHECK_CLASS_CAST (klass, COPY_THEME_DIALOG_TYPE, CopyThemeDialogClass)
-#define IS_COPY_THEME_DIALOG(obj)       G_TYPE_CHECK_INSTANCE_TYPE (obj, COPY_THEME_DIALOG_TYPE)
-
-typedef struct _CopyThemeDialog CopyThemeDialog;
-typedef struct _CopyThemeDialogClass CopyThemeDialogClass;
-typedef struct _CopyThemeDialogPrivate CopyThemeDialogPrivate;
-
-struct _CopyThemeDialog
-{
-    GtkDialog dialog;
-    CopyThemeDialogPrivate *priv;
-};
-
-struct _CopyThemeDialogClass
-{
-    GtkDialogClass parent_class;
-
-    void (*cancelled) (CopyThemeDialog *dialog);
-    void (*complete) (CopyThemeDialog *dialog);
-};
-
-GType copy_theme_dialog_get_type (void);
-GtkWidget *copy_theme_dialog_new (GList *files);
-void copy_theme_dialog_begin (CopyThemeDialog *dialog);
-
-G_END_DECLS
-
-#endif /* __COPY_THEME_DIALOG_H__ */
diff --git a/src/gs-auth-helper.c.orig b/src/gs-auth-helper.c.orig
deleted file mode 100644
index 946aef3..0000000
--- a/src/gs-auth-helper.c.orig
+++ /dev/null
@@ -1,213 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * written by Olaf Kirch <okir at suse.de>
- * xscreensaver, Copyright (c) 1993-2004 Jamie Zawinski <jwz at jwz.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or
- * implied warranty.
- */
-
-/* The idea here is to be able to run mate-screensaver-dialog without any setuid bits.
- * Password verification happens through an external program that you feed
- * your password to on stdin.  The external command is invoked with a user
- * name argument.
- *
- * The external helper does whatever authentication is necessary.  Currently,
- * SuSE uses "unix2_chkpwd", which is a variation of "unix_chkpwd" from the
- * PAM distribution.
- *
- * Normally, the password helper should just authenticate the calling user
- * (i.e. based on the caller's real uid).  This is in order to prevent
- * brute-forcing passwords in a shadow environment.  A less restrictive
- * approach would be to allow verifying other passwords as well, but always
- * with a 2 second delay or so.  (Not sure what SuSE's "unix2_chkpwd"
- * currently does.)
- *                         -- Olaf Kirch <okir at suse.de>, 16-Dec-2003
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <errno.h>
-#include <sys/wait.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-
-#include "gs-auth.h"
-#include "subprocs.h"
-
-static gboolean verbose_enabled = FALSE;
-
-GQuark
-gs_auth_error_quark (void)
-{
-    static GQuark quark = 0;
-    if (! quark)
-    {
-        quark = g_quark_from_static_string ("gs_auth_error");
-    }
-
-    return quark;
-}
-
-void
-gs_auth_set_verbose (gboolean enabled)
-{
-    verbose_enabled = enabled;
-}
-
-gboolean
-gs_auth_get_verbose (void)
-{
-    return verbose_enabled;
-}
-
-static gboolean
-ext_run (const char *user,
-         const char *typed_passwd,
-         gboolean    verbose)
-{
-    int   pfd[2], status;
-    pid_t pid;
-
-    if (pipe (pfd) < 0)
-    {
-        return 0;
-    }
-
-    if (verbose)
-    {
-        g_message ("ext_run (%s, %s)",
-                   PASSWD_HELPER_PROGRAM, user);
-    }
-
-    block_sigchld ();
-
-    if ((pid = fork ()) < 0)
-    {
-        close (pfd [0]);
-        close (pfd [1]);
-        return FALSE;
-    }
-
-    if (pid == 0)
-    {
-        close (pfd [1]);
-        if (pfd [0] != 0)
-        {
-            dup2 (pfd [0], 0);
-        }
-
-        /* Helper is invoked as helper service-name [user] */
-        execlp (PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "mate-screensaver", user, NULL);
-        if (verbose)
-        {
-            g_message ("%s: %s", PASSWD_HELPER_PROGRAM, g_strerror (errno));
-        }
-
-        exit (1);
-    }
-
-    close (pfd [0]);
-
-    /* Write out password to helper process */
-    if (!typed_passwd)
-    {
-        typed_passwd = "";
-    }
-    write (pfd [1], typed_passwd, strlen (typed_passwd));
-    close (pfd [1]);
-
-    while (waitpid (pid, &status, 0) < 0)
-    {
-        if (errno == EINTR)
-        {
-            continue;
-        }
-
-        if (verbose)
-        {
-            g_message ("ext_run: waitpid failed: %s\n",
-                       g_strerror (errno));
-        }
-
-        unblock_sigchld ();
-        return FALSE;
-    }
-
-    unblock_sigchld ();
-
-    if (! WIFEXITED (status) || WEXITSTATUS (status) != 0)
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-gboolean
-gs_auth_verify_user (const char       *username,
-                     const char       *display,
-                     GSAuthMessageFunc func,
-                     gpointer          data,
-                     GError          **error)
-{
-    gboolean       res = FALSE;
-    char          *password;
-
-    password = NULL;
-
-    /* ask for the password for user */
-    if (func != NULL)
-    {
-        func (GS_AUTH_MESSAGE_PROMPT_ECHO_OFF,
-              "Password: ",
-              &password,
-              data);
-    }
-
-    if (password == NULL)
-    {
-        return FALSE;
-    }
-
-    res = ext_run (username, password, gs_auth_get_verbose ());
-
-    return res;
-}
-
-gboolean
-gs_auth_init (void)
-{
-    return TRUE;
-}
-
-gboolean
-gs_auth_priv_init (void)
-{
-    /* Make sure the passwd helper exists */
-    if (g_access (PASSWD_HELPER_PROGRAM, X_OK) < 0)
-    {
-        g_warning ("%s does not exist. "
-                   "password authentication via "
-                   "external helper will not work.",
-                   PASSWD_HELPER_PROGRAM);
-        return FALSE;
-    }
-
-    return TRUE;
-}
diff --git a/src/gs-auth-pam.c.orig b/src/gs-auth-pam.c.orig
deleted file mode 100644
index 88852d9..0000000
--- a/src/gs-auth-pam.c.orig
+++ /dev/null
@@ -1,843 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at jhu.edu>
- * Copyright (C) 2006 Ray Strode <rstrode at redhat.com>
- * Copyright (C) 2003 Bill Nottingham <notting at redhat.com>
- * Copyright (c) 1993-2003 Jamie Zawinski <jwz at jwz.org>
- *
- * 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.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
-#include <security/pam_appl.h>
-#include <signal.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gs-auth.h"
-
-#include "subprocs.h"
-
-/* Some time between Red Hat 4.2 and 7.0, the words were transposed
-   in the various PAM_x_CRED macro names.  Yay!
-*/
-#ifndef  PAM_REFRESH_CRED
-# define PAM_REFRESH_CRED PAM_CRED_REFRESH
-#endif
-
-#ifdef HAVE_PAM_FAIL_DELAY
-/* We handle delays ourself.*/
-/* Don't set this to 0 (Linux bug workaround.) */
-# define PAM_NO_DELAY(pamh) pam_fail_delay ((pamh), 1)
-#else  /* !HAVE_PAM_FAIL_DELAY */
-# define PAM_NO_DELAY(pamh) /* */
-#endif /* !HAVE_PAM_FAIL_DELAY */
-
-
-/* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args.
-   On some other Linux systems with some other version of PAM (e.g.,
-   whichever Debian release comes with a 2.2.5 kernel) it takes one arg.
-   I can't tell which is more "recent" or "correct" behavior, so configure
-   figures out which is in use for us.  Shoot me!
-*/
-#ifdef PAM_STRERROR_TWO_ARGS
-# define PAM_STRERROR(pamh, status) pam_strerror((pamh), (status))
-#else  /* !PAM_STRERROR_TWO_ARGS */
-# define PAM_STRERROR(pamh, status) pam_strerror((status))
-#endif /* !PAM_STRERROR_TWO_ARGS */
-
-static gboolean      verbose_enabled = FALSE;
-static pam_handle_t *pam_handle = NULL;
-static gboolean      did_we_ask_for_password = FALSE;
-
-struct pam_closure
-{
-    const char       *username;
-    GSAuthMessageFunc cb_func;
-    gpointer          cb_data;
-    int               signal_fd;
-    int               result;
-};
-
-typedef struct
-{
-    struct pam_closure *closure;
-    GSAuthMessageStyle style;
-    const char        *msg;
-    char             **resp;
-    gboolean           should_interrupt_stack;
-} GsAuthMessageHandlerData;
-
-static GCond  *message_handled_condition;
-static GMutex *message_handler_mutex;
-
-GQuark
-gs_auth_error_quark (void)
-{
-    static GQuark quark = 0;
-    if (! quark)
-    {
-        quark = g_quark_from_static_string ("gs_auth_error");
-    }
-
-    return quark;
-}
-
-void
-gs_auth_set_verbose (gboolean enabled)
-{
-    verbose_enabled = enabled;
-}
-
-gboolean
-gs_auth_get_verbose (void)
-{
-    return verbose_enabled;
-}
-
-static GSAuthMessageStyle
-pam_style_to_gs_style (int pam_style)
-{
-    GSAuthMessageStyle style;
-
-    switch (pam_style)
-    {
-    case PAM_PROMPT_ECHO_ON:
-        style = GS_AUTH_MESSAGE_PROMPT_ECHO_ON;
-        break;
-    case PAM_PROMPT_ECHO_OFF:
-        style = GS_AUTH_MESSAGE_PROMPT_ECHO_OFF;
-        break;
-    case PAM_ERROR_MSG:
-        style = GS_AUTH_MESSAGE_ERROR_MSG;
-        break;
-    case PAM_TEXT_INFO:
-        style = GS_AUTH_MESSAGE_TEXT_INFO;
-        break;
-    default:
-        g_assert_not_reached ();
-        break;
-    }
-
-    return style;
-}
-
-static gboolean
-auth_message_handler (GSAuthMessageStyle style,
-                      const char        *msg,
-                      char             **response,
-                      gpointer           data)
-{
-    gboolean ret;
-
-    ret = TRUE;
-    *response = NULL;
-
-    switch (style)
-    {
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_ON:
-        break;
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:
-        if (msg != NULL && g_str_has_prefix (msg, _("Password:")))
-        {
-            did_we_ask_for_password = TRUE;
-        }
-        break;
-    case GS_AUTH_MESSAGE_ERROR_MSG:
-        break;
-    case GS_AUTH_MESSAGE_TEXT_INFO:
-        break;
-    default:
-        g_assert_not_reached ();
-    }
-
-    return ret;
-}
-
-static gboolean
-gs_auth_queued_message_handler (GsAuthMessageHandlerData *data)
-{
-    gboolean res;
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("Waiting for lock");
-    }
-
-    g_mutex_lock (message_handler_mutex);
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("Waiting for response");
-    }
-
-    res = data->closure->cb_func (data->style,
-                                  data->msg,
-                                  data->resp,
-                                  data->closure->cb_data);
-
-    data->should_interrupt_stack = res == FALSE;
-
-    g_cond_signal (message_handled_condition);
-    g_mutex_unlock (message_handler_mutex);
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("Got response");
-    }
-
-    return FALSE;
-}
-
-static gboolean
-gs_auth_run_message_handler (struct pam_closure *c,
-                             GSAuthMessageStyle  style,
-                             const char         *msg,
-                             char              **resp)
-{
-    GsAuthMessageHandlerData data;
-
-    data.closure = c;
-    data.style = style;
-    data.msg = msg;
-    data.resp = resp;
-    data.should_interrupt_stack = TRUE;
-
-    g_mutex_lock (message_handler_mutex);
-
-    /* Queue the callback in the gui (the main) thread
-     */
-    g_idle_add ((GSourceFunc) gs_auth_queued_message_handler, &data);
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("Waiting for respose to message style %d: '%s'", style, msg);
-    }
-
-    /* Wait for the response
-     */
-    g_cond_wait (message_handled_condition,
-                 message_handler_mutex);
-    g_mutex_unlock (message_handler_mutex);
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("Got respose to message style %d: interrupt:%d", style, data.should_interrupt_stack);
-    }
-
-    return data.should_interrupt_stack == FALSE;
-}
-
-static int
-pam_conversation (int                        nmsgs,
-                  const struct pam_message **msg,
-                  struct pam_response      **resp,
-                  void                      *closure)
-{
-    int                  replies = 0;
-    struct pam_response *reply = NULL;
-    struct pam_closure  *c = (struct pam_closure *) closure;
-    gboolean             res;
-    int                  ret;
-
-    reply = (struct pam_response *) calloc (nmsgs, sizeof (*reply));
-
-    if (reply == NULL)
-    {
-        return PAM_CONV_ERR;
-    }
-
-    res = TRUE;
-    ret = PAM_SUCCESS;
-
-    for (replies = 0; replies < nmsgs && ret == PAM_SUCCESS; replies++)
-    {
-        GSAuthMessageStyle style;
-        char              *utf8_msg;
-
-        style = pam_style_to_gs_style (msg [replies]->msg_style);
-
-        utf8_msg = g_locale_to_utf8 (msg [replies]->msg,
-                                     -1,
-                                     NULL,
-                                     NULL,
-                                     NULL);
-
-        /* if we couldn't convert text from locale then
-         * assume utf-8 and hope for the best */
-        if (utf8_msg == NULL)
-        {
-            char *p;
-            char *q;
-
-            utf8_msg = g_strdup (msg [replies]->msg);
-
-            p = utf8_msg;
-            while (*p != '\0' && !g_utf8_validate ((const char *)p, -1, (const char **)&q))
-            {
-                *q = '?';
-                p = q + 1;
-            }
-        }
-
-        /* handle message locally first */
-        auth_message_handler (style,
-                              utf8_msg,
-                              &reply [replies].resp,
-                              NULL);
-
-        if (c->cb_func != NULL)
-        {
-            if (gs_auth_get_verbose ())
-            {
-                g_message ("Handling message style %d: '%s'", style, utf8_msg);
-            }
-
-            /* blocks until the gui responds
-             */
-            res = gs_auth_run_message_handler (c,
-                                               style,
-                                               utf8_msg,
-                                               &reply [replies].resp);
-
-            if (gs_auth_get_verbose ())
-            {
-                g_message ("Msg handler returned %d", res);
-            }
-
-            /* If the handler returns FALSE - interrupt the PAM stack */
-            if (res)
-            {
-                reply [replies].resp_retcode = PAM_SUCCESS;
-            }
-            else
-            {
-                int i;
-                for (i = 0; i <= replies; i++)
-                {
-                    free (reply [i].resp);
-                }
-                free (reply);
-                reply = NULL;
-                ret = PAM_CONV_ERR;
-            }
-        }
-
-        g_free (utf8_msg);
-    }
-
-    *resp = reply;
-
-    return ret;
-}
-
-static gboolean
-close_pam_handle (int status)
-{
-
-    if (pam_handle != NULL)
-    {
-        int status2;
-
-        status2 = pam_end (pam_handle, status);
-        pam_handle = NULL;
-
-        if (gs_auth_get_verbose ())
-        {
-            g_message (" pam_end (...) ==> %d (%s)",
-                       status2,
-                       (status2 == PAM_SUCCESS ? "Success" : "Failure"));
-        }
-    }
-
-    if (message_handled_condition != NULL)
-    {
-        g_cond_free (message_handled_condition);
-        message_handled_condition = NULL;
-    }
-
-    if (message_handler_mutex != NULL)
-    {
-        g_mutex_free (message_handler_mutex);
-        message_handler_mutex = NULL;
-    }
-
-    return TRUE;
-}
-
-static gboolean
-create_pam_handle (const char      *username,
-                   const char      *display,
-                   struct pam_conv *conv,
-                   int             *status_code)
-{
-    int         status;
-    const char *service = PAM_SERVICE_NAME;
-    char       *disp;
-    gboolean    ret;
-
-    if (pam_handle != NULL)
-    {
-        g_warning ("create_pam_handle: Stale pam handle around, cleaning up");
-        close_pam_handle (PAM_SUCCESS);
-    }
-
-    /* init things */
-    pam_handle = NULL;
-    status = -1;
-    disp = NULL;
-    ret = TRUE;
-
-    /* Initialize a PAM session for the user */
-    if ((status = pam_start (service, username, conv, &pam_handle)) != PAM_SUCCESS)
-    {
-        pam_handle = NULL;
-        g_warning (_("Unable to establish service %s: %s\n"),
-                   service,
-                   PAM_STRERROR (NULL, status));
-
-        if (status_code != NULL)
-        {
-            *status_code = status;
-        }
-
-        ret = FALSE;
-        goto out;
-    }
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("pam_start (\"%s\", \"%s\", ...) ==> %d (%s)",
-                   service,
-                   username,
-                   status,
-                   PAM_STRERROR (pam_handle, status));
-    }
-
-    disp = g_strdup (display);
-    if (disp == NULL)
-    {
-        disp = g_strdup (":0.0");
-    }
-
-    if ((status = pam_set_item (pam_handle, PAM_TTY, disp)) != PAM_SUCCESS)
-    {
-        g_warning (_("Can't set PAM_TTY=%s"), display);
-
-        if (status_code != NULL)
-        {
-            *status_code = status;
-        }
-
-        ret = FALSE;
-        goto out;
-    }
-
-    ret = TRUE;
-    message_handled_condition = g_cond_new ();
-    message_handler_mutex = g_mutex_new ();
-
-out:
-    if (status_code != NULL)
-    {
-        *status_code = status;
-    }
-
-    g_free (disp);
-
-    return ret;
-}
-
-static void
-set_pam_error (GError **error,
-               int      status)
-{
-    if (status == PAM_AUTH_ERR || status == PAM_USER_UNKNOWN)
-    {
-        char *msg;
-
-        if (did_we_ask_for_password)
-        {
-            msg = g_strdup (_("Incorrect password."));
-        }
-        else
-        {
-            msg = g_strdup (_("Authentication failed."));
-        }
-
-        g_set_error (error,
-                     GS_AUTH_ERROR,
-                     GS_AUTH_ERROR_AUTH_ERROR,
-                     "%s",
-                     msg);
-        g_free (msg);
-    }
-    else if (status == PAM_PERM_DENIED)
-    {
-        g_set_error (error,
-                     GS_AUTH_ERROR,
-                     GS_AUTH_ERROR_AUTH_DENIED,
-                     "%s",
-                     _("Not permitted to gain access at this time."));
-    }
-    else if (status == PAM_ACCT_EXPIRED)
-    {
-        g_set_error (error,
-                     GS_AUTH_ERROR,
-                     GS_AUTH_ERROR_AUTH_DENIED,
-                     "%s",
-                     _("No longer permitted to access the system."));
-    }
-
-}
-
-static int
-gs_auth_thread_func (int auth_operation_fd)
-{
-    static const int flags = 0;
-    int              status;
-    int              status2;
-    struct timespec  timeout;
-    sigset_t         set;
-    const void      *p;
-
-    timeout.tv_sec = 0;
-    timeout.tv_nsec = 1;
-
-    set = block_sigchld ();
-
-    status = pam_authenticate (pam_handle, flags);
-
-    sigtimedwait (&set, NULL, &timeout);
-    unblock_sigchld ();
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("   pam_authenticate (...) ==> %d (%s)",
-                   status,
-                   PAM_STRERROR (pam_handle, status));
-    }
-
-    if (status != PAM_SUCCESS)
-    {
-        goto done;
-    }
-
-    if ((status = pam_get_item (pam_handle, PAM_USER, &p)) != PAM_SUCCESS)
-    {
-        /* is not really an auth problem, but it will
-           pretty much look as such, it shouldn't really
-           happen */
-        goto done;
-    }
-
-    /* We don't actually care if the account modules fail or succeed,
-     * but we need to run them anyway because certain pam modules
-     * depend on side effects of the account modules getting run.
-     */
-    status2 = pam_acct_mgmt (pam_handle, 0);
-
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("pam_acct_mgmt (...) ==> %d (%s)\n",
-                   status2,
-                   PAM_STRERROR (pam_handle, status2));
-    }
-
-    /* FIXME: should we handle these? */
-    switch (status2)
-    {
-    case PAM_SUCCESS:
-        break;
-    case PAM_NEW_AUTHTOK_REQD:
-        break;
-    case PAM_AUTHINFO_UNAVAIL:
-        break;
-    case PAM_ACCT_EXPIRED:
-        break;
-    case PAM_PERM_DENIED:
-        break;
-    default :
-        break;
-    }
-
-    /* Each time we successfully authenticate, refresh credentials,
-       for Kerberos/AFS/DCE/etc.  If this fails, just ignore that
-       failure and blunder along; it shouldn't matter.
-
-       Note: this used to be PAM_REFRESH_CRED instead of
-       PAM_REINITIALIZE_CRED, but Jason Heiss <jheiss at ee.washington.edu>
-       says that the Linux PAM library ignores that one, and only refreshes
-       credentials when using PAM_REINITIALIZE_CRED.
-    */
-    status2 = pam_setcred (pam_handle, PAM_REINITIALIZE_CRED);
-    if (gs_auth_get_verbose ())
-    {
-        g_message ("   pam_setcred (...) ==> %d (%s)",
-                   status2,
-                   PAM_STRERROR (pam_handle, status2));
-    }
-
-done:
-    /* we're done, close the fd and wake up the main
-     * loop
-     */
-    close (auth_operation_fd);
-
-    return status;
-}
-
-static gboolean
-gs_auth_loop_quit (GIOChannel  *source,
-                   GIOCondition condition,
-                   gboolean    *thread_done)
-{
-    *thread_done = TRUE;
-    gtk_main_quit ();
-    return FALSE;
-}
-
-static gboolean
-gs_auth_pam_verify_user (pam_handle_t *handle,
-                         int          *status)
-{
-    GThread    *auth_thread;
-    GIOChannel *channel;
-    guint       watch_id;
-    int         auth_operation_fds[2];
-    int         auth_status;
-    gboolean    thread_done;
-
-    channel = NULL;
-    watch_id = 0;
-    auth_status = PAM_AUTH_ERR;
-
-    /* This pipe gives us a set of fds we can hook into
-     * the event loop to be notified when our helper thread
-     * is ready to be reaped.
-     */
-    if (pipe (auth_operation_fds) < 0)
-    {
-        goto out;
-    }
-
-    if (fcntl (auth_operation_fds[0], F_SETFD, FD_CLOEXEC) < 0)
-    {
-        close (auth_operation_fds[0]);
-        close (auth_operation_fds[1]);
-        goto out;
-    }
-
-    if (fcntl (auth_operation_fds[1], F_SETFD, FD_CLOEXEC) < 0)
-    {
-        close (auth_operation_fds[0]);
-        close (auth_operation_fds[1]);
-        goto out;
-    }
-
-    channel = g_io_channel_unix_new (auth_operation_fds[0]);
-
-    /* we use a recursive main loop to process ui events
-     * while we wait on a thread to handle the blocking parts
-     * of pam authentication.
-     */
-    thread_done = FALSE;
-    watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP,
-                               (GIOFunc) gs_auth_loop_quit, &thread_done);
-
-    auth_thread = g_thread_create ((GThreadFunc) gs_auth_thread_func,
-                                   GINT_TO_POINTER (auth_operation_fds[1]),
-                                   TRUE, NULL);
-
-    if (auth_thread == NULL)
-    {
-        goto out;
-    }
-
-    gtk_main ();
-
-    /* if the event loop was quit before the thread is done then we can't
-     * reap the thread without blocking on it finishing.  The
-     * thread may not ever finish though if the pam module is blocking.
-     *
-     * The only time the event loop is going to stop when the thread isn't
-     * done, however, is if the dialog quits early (from, e.g., "cancel"),
-     * so we can just exit.  An alternative option would be to switch to
-     * using pthreads directly and calling pthread_cancel.
-     */
-    if (!thread_done)
-    {
-        raise (SIGTERM);
-    }
-
-    auth_status = GPOINTER_TO_INT (g_thread_join (auth_thread));
-
-out:
-    if (watch_id != 0)
-    {
-        g_source_remove (watch_id);
-    }
-
-    if (channel != NULL)
-    {
-        g_io_channel_unref (channel);
-    }
-
-    if (status)
-    {
-        *status = auth_status;
-    }
-
-    return auth_status == PAM_SUCCESS;
-}
-
-gboolean
-gs_auth_verify_user (const char       *username,
-                     const char       *display,
-                     GSAuthMessageFunc func,
-                     gpointer          data,
-                     GError          **error)
-{
-    int                status = -1;
-    struct pam_conv    conv;
-    struct pam_closure c;
-    struct passwd     *pwent;
-
-    pwent = getpwnam (username);
-    if (pwent == NULL)
-    {
-        return FALSE;
-    }
-
-    c.username = username;
-    c.cb_func = func;
-    c.cb_data = data;
-
-    conv.conv = &pam_conversation;
-    conv.appdata_ptr = (void *) &c;
-
-    /* Initialize PAM. */
-    create_pam_handle (username, display, &conv, &status);
-    if (status != PAM_SUCCESS)
-    {
-        goto done;
-    }
-
-    pam_set_item (pam_handle, PAM_USER_PROMPT, _("Username:"));
-
-    PAM_NO_DELAY(pam_handle);
-
-    did_we_ask_for_password = FALSE;
-    if (! gs_auth_pam_verify_user (pam_handle, &status))
-    {
-        goto done;
-    }
-
-done:
-    if (status != PAM_SUCCESS)
-    {
-        set_pam_error (error, status);
-    }
-
-    close_pam_handle (status);
-
-    return (status == PAM_SUCCESS ? TRUE : FALSE);
-}
-
-gboolean
-gs_auth_init (void)
-{
-    return TRUE;
-}
-
-gboolean
-gs_auth_priv_init (void)
-{
-    /* We have nothing to do at init-time.
-       However, we might as well do some error checking.
-       If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock"
-       does not exist, warn that PAM probably isn't going to work.
-
-       This is a priv-init instead of a non-priv init in case the directory
-       is unreadable or something (don't know if that actually happens.)
-    */
-    const char   dir [] = "/etc/pam.d";
-    const char  file [] = "/etc/pam.d/" PAM_SERVICE_NAME;
-    const char file2 [] = "/etc/pam.conf";
-    struct stat st;
-
-    if (g_stat (dir, &st) == 0 && st.st_mode & S_IFDIR)
-    {
-        if (g_stat (file, &st) != 0)
-        {
-            g_warning ("%s does not exist.\n"
-                       "Authentication via PAM is unlikely to work.",
-                       file);
-        }
-    }
-    else if (g_stat (file2, &st) == 0)
-    {
-        FILE *f = g_fopen (file2, "r");
-        if (f)
-        {
-            gboolean ok = FALSE;
-            char buf[255];
-            while (fgets (buf, sizeof(buf), f))
-            {
-                if (strstr (buf, PAM_SERVICE_NAME))
-                {
-                    ok = TRUE;
-                    break;
-                }
-            }
-
-            fclose (f);
-            if (!ok)
-            {
-                g_warning ("%s does not list the `%s' service.\n"
-                           "Authentication via PAM is unlikely to work.",
-                           file2, PAM_SERVICE_NAME);
-            }
-        }
-        /* else warn about file2 existing but being unreadable? */
-    }
-    else
-    {
-        g_warning ("Neither %s nor %s exist.\n"
-                   "Authentication via PAM is unlikely to work.",
-                   file2, file);
-    }
-
-    /* Return true anyway, just in case. */
-    return TRUE;
-}
diff --git a/src/gs-auth-pwent.c.orig b/src/gs-auth-pwent.c.orig
deleted file mode 100644
index 21abbee..0000000
--- a/src/gs-auth-pwent.c.orig
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (c) 1993-1998 Jamie Zawinski <jwz at jwz.org>
- * Copyright (C) 2006 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifdef HAVE_CRYPT_H
-# include <crypt.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
-
-#ifdef __bsdi__
-# include <sys/param.h>
-# if _BSDI_VERSION >= 199608
-#  define BSD_AUTH
-# endif
-#endif /* __bsdi__ */
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#if defined(HAVE_SHADOW_PASSWD)	      /* passwds live in /etc/shadow */
-
-#   include <shadow.h>
-#   define PWTYPE   struct spwd *
-#   define PWPSLOT  sp_pwdp
-#   define GETPW    getspnam
-
-#elif defined(HAVE_ENHANCED_PASSWD)      /* passwds live in /tcb/files/auth/ */
-/* M.Matsumoto <matsu at yao.sharp.co.jp> */
-#   include <sys/security.h>
-#   include <prot.h>
-
-#   define PWTYPE   struct pr_passwd *
-#   define PWPSLOT  ufld.fd_encrypt
-#   define GETPW    getprpwnam
-
-#elif defined(HAVE_ADJUNCT_PASSWD)
-
-#   include <sys/label.h>
-#   include <sys/audit.h>
-#   include <pwdadj.h>
-
-#   define PWTYPE   struct passwd_adjunct *
-#   define PWPSLOT  pwa_passwd
-#   define GETPW    getpwanam
-
-#elif defined(HAVE_HPUX_PASSWD)
-
-#   include <hpsecurity.h>
-#   include <prot.h>
-
-#   define PWTYPE   struct s_passwd *
-#   define PWPSLOT  pw_passwd
-#   define GETPW    getspwnam
-
-#   define HAVE_BIGCRYPT
-
-#endif
-
-#include "gs-auth.h"
-
-static gboolean verbose_enabled = FALSE;
-
-static char *encrypted_user_passwd = NULL;
-
-GQuark
-gs_auth_error_quark (void)
-{
-    static GQuark quark = 0;
-    if (! quark)
-    {
-        quark = g_quark_from_static_string ("gs_auth_error");
-    }
-
-    return quark;
-}
-
-void
-gs_auth_set_verbose (gboolean enabled)
-{
-    verbose_enabled = enabled;
-}
-
-gboolean
-gs_auth_get_verbose (void)
-{
-    return verbose_enabled;
-}
-
-static gboolean
-passwd_known (const char *pw)
-{
-    return (pw &&
-            pw[0] != '*' &&	/* This would be sensible...         */
-            strlen (pw) > 4);	/* ...but this is what Solaris does. */
-}
-
-static char *
-get_encrypted_passwd (const char *user)
-{
-    char *result = NULL;
-
-#ifdef PWTYPE
-    if (user && *user && !result)
-    {
-        /* First check the shadow passwords. */
-        PWTYPE p = GETPW ((char *) user);
-        if (p && passwd_known (p->PWPSLOT))
-        {
-            result = g_strdup (p->PWPSLOT);
-        }
-    }
-#endif /* PWTYPE */
-
-    if (user && *user && !result)
-    {
-        /* Check non-shadow passwords too. */
-        struct passwd *p = getpwnam (user);
-        if (p && passwd_known (p->pw_passwd))
-        {
-            result = g_strdup (p->pw_passwd);
-        }
-    }
-
-    /* The manual for passwd(4) on HPUX 10.10 says:
-
-    Password aging is put in effect for a particular user if his
-    encrypted password in the password file is followed by a comma and
-    a nonnull string of characters from the above alphabet.  This
-    string defines the "age" needed to implement password aging.
-
-    So this means that passwd->pw_passwd isn't simply a string of cyphertext,
-    it might have trailing junk.  So, if there is a comma in the string, and
-    that comma is beyond position 13, terminate the string before the comma.
-    */
-    if (result && strlen (result) > 13)
-    {
-        char *s = strchr (result + 13, ',');
-        if (s)
-        {
-            *s = 0;
-        }
-    }
-
-#ifndef HAVE_PAM
-    /* We only issue this warning if not compiled with support for PAM.
-       If we're using PAM, it's not unheard of that normal pwent passwords
-       would be unavailable. */
-
-    if (!result)
-    {
-        g_warning ("Couldn't get password of \"%s\"",
-                   (user ? user : "(null)"));
-    }
-
-#endif /* !HAVE_PAM */
-
-    return result;
-}
-
-/* This has to be called before we've changed our effective user ID,
-   because it might need privileges to get at the encrypted passwords.
-   Returns false if we weren't able to get any passwords, and therefore,
-   locking isn't possible.  (It will also have written to stderr.)
-*/
-
-gboolean
-gs_auth_priv_init (void)
-{
-    const char *u;
-
-    u = g_get_user_name ();
-
-    encrypted_user_passwd = get_encrypted_passwd (u);
-
-    if (encrypted_user_passwd != NULL)
-    {
-        return TRUE;
-    }
-    else
-    {
-        return FALSE;
-    }
-}
-
-
-gboolean
-gs_auth_init (void)
-{
-    if (encrypted_user_passwd != NULL)
-    {
-        return TRUE;
-    }
-    else
-    {
-        return FALSE;
-    }
-}
-
-static gboolean
-passwds_match (const char *cleartext,
-               const char *ciphertext)
-{
-    char *s = NULL;  /* note that on some systems, crypt() may return null */
-
-    s = (char *) crypt (cleartext, ciphertext);
-    if (s && !strcmp (s, ciphertext))
-    {
-        return TRUE;
-    }
-
-#ifdef HAVE_BIGCRYPT
-    /* There seems to be no way to tell at runtime if an HP machine is in
-       "trusted" mode, and thereby, which of crypt() or bigcrypt() we should
-       be calling to compare passwords.  So call them both, and see which
-       one works. */
-
-    s = (char *) bigcrypt (cleartext, ciphertext);
-    if (s && !strcmp (s, ciphertext))
-    {
-        return TRUE;
-    }
-
-#endif /* HAVE_BIGCRYPT */
-
-    return FALSE;
-}
-
-gboolean
-gs_auth_verify_user (const char       *username,
-                     const char       *display,
-                     GSAuthMessageFunc func,
-                     gpointer          data,
-                     GError          **error)
-{
-    char *password;
-
-    password = NULL;
-
-    /* ask for the password for user */
-    if (func != NULL)
-    {
-        func (GS_AUTH_MESSAGE_PROMPT_ECHO_OFF,
-              "Password: ",
-              &password,
-              data);
-    }
-
-    if (password == NULL)
-    {
-        return FALSE;
-    }
-
-    if (encrypted_user_passwd && passwds_match (password, encrypted_user_passwd))
-    {
-        return TRUE;
-    }
-    else
-    {
-        return FALSE;
-    }
-}
diff --git a/src/gs-auth.h.orig b/src/gs-auth.h.orig
deleted file mode 100644
index 25e5271..0000000
--- a/src/gs-auth.h.orig
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at 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.
- *
- */
-
-#ifndef __GS_AUTH_H
-#define __GS_AUTH_H
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
-        GS_AUTH_MESSAGE_PROMPT_ECHO_ON,
-        GS_AUTH_MESSAGE_PROMPT_ECHO_OFF,
-        GS_AUTH_MESSAGE_ERROR_MSG,
-        GS_AUTH_MESSAGE_TEXT_INFO
-} GSAuthMessageStyle;
-
-typedef enum {
-	GS_AUTH_ERROR_GENERAL,
-        GS_AUTH_ERROR_AUTH_ERROR,
-        GS_AUTH_ERROR_USER_UNKNOWN,
-        GS_AUTH_ERROR_AUTH_DENIED
-} GSAuthError;
-
-typedef gboolean  (* GSAuthMessageFunc) (GSAuthMessageStyle style,
-                                         const char        *msg,
-                                         char             **response,
-                                         gpointer           data);
-
-#define GS_AUTH_ERROR gs_auth_error_quark ()
-
-GQuark   gs_auth_error_quark (void);
-
-void     gs_auth_set_verbose (gboolean verbose);
-gboolean gs_auth_get_verbose (void);
-
-gboolean gs_auth_priv_init   (void);
-gboolean gs_auth_init        (void);
-gboolean gs_auth_verify_user (const char       *username,
-                              const char       *display,
-                              GSAuthMessageFunc func,
-                              gpointer          data,
-                              GError          **error);
-
-G_END_DECLS
-
-#endif /* __GS_AUTH_H */
diff --git a/src/gs-debug.c.orig b/src/gs-debug.c.orig
deleted file mode 100644
index ff80c0c..0000000
--- a/src/gs-debug.c.orig
+++ /dev/null
@@ -1,163 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <signal.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-
-#include "gs-debug.h"
-
-static gboolean debugging = FALSE;
-static FILE    *debug_out = NULL;
-
-/* Based on rhythmbox/lib/rb-debug.c */
-/* Our own funky debugging function, should only be used when something
- * is not going wrong, if something *is* wrong use g_warning.
- */
-void
-gs_debug_real (const char *func,
-               const char *file,
-               const int   line,
-               const char *format, ...)
-{
-    va_list args;
-    char    buffer [1025];
-    char   *str_time;
-    time_t  the_time;
-
-    if (debugging == FALSE)
-        return;
-
-    va_start (args, format);
-
-    g_vsnprintf (buffer, 1024, format, args);
-
-    va_end (args);
-
-    time (&the_time);
-    str_time = g_new0 (char, 255);
-    strftime (str_time, 254, "%H:%M:%S", localtime (&the_time));
-
-    fprintf ((debug_out ? debug_out : stderr),
-             "[%s] %s:%d (%s):\t %s\n",
-             func, file, line, str_time, buffer);
-
-    if (debug_out)
-        fflush (debug_out);
-
-    g_free (str_time);
-}
-
-gboolean
-gs_debug_enabled (void)
-{
-    return debugging;
-}
-
-void
-gs_debug_init (gboolean debug,
-               gboolean to_file)
-{
-    /* return if already initialized */
-    if (debugging == TRUE)
-    {
-        return;
-    }
-
-    debugging = debug;
-
-    if (debug && to_file)
-    {
-        const char path [50] = "mate_screensaver_debug_XXXXXX";
-        int        fd;
-
-        fd = g_file_open_tmp (path, NULL, NULL);
-
-        if (fd >= 0)
-        {
-            debug_out = fdopen (fd, "a");
-        }
-    }
-
-    gs_debug ("Debugging %s", (debug) ? "enabled" : "disabled");
-}
-
-void
-gs_debug_shutdown (void)
-{
-    if (! debugging)
-        return;
-
-    gs_debug ("Shutting down debugging");
-
-    debugging = FALSE;
-
-    if (debug_out != NULL)
-    {
-        fclose (debug_out);
-        debug_out = NULL;
-    }
-}
-
-void
-_gs_profile_log (const char *func,
-                 const char *note,
-                 const char *format,
-                 ...)
-{
-    va_list args;
-    char   *str;
-    char   *formatted;
-
-    if (format == NULL)
-    {
-        formatted = g_strdup ("");
-    }
-    else
-    {
-        va_start (args, format);
-        formatted = g_strdup_vprintf (format, args);
-        va_end (args);
-    }
-
-    if (func != NULL)
-    {
-        str = g_strdup_printf ("MARK: %s %s: %s %s", g_get_prgname(), func, note ? note : "", formatted);
-    }
-    else
-    {
-        str = g_strdup_printf ("MARK: %s: %s %s", g_get_prgname(), note ? note : "", formatted);
-    }
-
-    g_free (formatted);
-
-    g_access (str, F_OK);
-    g_free (str);
-}
diff --git a/src/gs-fade.c.orig b/src/gs-fade.c.orig
deleted file mode 100644
index 3b46004..0000000
--- a/src/gs-fade.c.orig
+++ /dev/null
@@ -1,987 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2009 William Jon McCann <mccann at jhu.edu>
- * Copyright (C) 2009      Red Hat, Inc.
- *
- * 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <errno.h>
-
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "gs-fade.h"
-#include "gs-debug.h"
-
-#define MATE_DESKTOP_USE_UNSTABLE_API
-
-#include "libmateui/mate-rr.h"
-
-/* XFree86 4.x+ Gamma fading */
-
-
-#ifdef HAVE_XF86VMODE_GAMMA
-
-#include <X11/extensions/xf86vmode.h>
-
-#define XF86_MIN_GAMMA  0.1
-
-#endif /* HAVE_XF86VMODE_GAMMA */
-
-static void     gs_fade_class_init (GSFadeClass *klass);
-static void     gs_fade_init       (GSFade      *fade);
-static void     gs_fade_finalize   (GObject        *object);
-
-#define GS_FADE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_FADE, GSFadePrivate))
-
-struct GSGammaInfo
-{
-    int              size;
-    unsigned short  *r;
-    unsigned short  *g;
-    unsigned short  *b;
-};
-
-struct GSFadeScreenPrivate
-{
-    int                 fade_type;
-    int                 num_ramps;
-    /* one per crtc in randr mode */
-    struct GSGammaInfo *info;
-    /* one per screen in theory */
-    MateRRScreen      *rrscreen;
-#ifdef HAVE_XF86VMODE_GAMMA
-    /* one per screen also */
-    XF86VidModeGamma    vmg;
-#endif /* HAVE_XF86VMODE_GAMMA */
-    gboolean (*fade_setup)           (GSFade *fade,
-                                      int     screen);
-    gboolean (*fade_set_alpha_gamma) (GSFade *fade,
-                                      int     screen,
-                                      gdouble alpha);
-    void     (*fade_finish)          (GSFade *fade,
-                                      int     screen);
-};
-
-struct GSFadePrivate
-{
-    guint            enabled : 1;
-    guint            active : 1;
-
-    guint            timeout;
-
-    guint            step;
-    guint            num_steps;
-    guint            timer_id;
-
-    gdouble          alpha_per_iter;
-    gdouble          current_alpha;
-
-    int              num_screens;
-
-    struct GSFadeScreenPrivate *screen_priv;
-};
-
-enum
-{
-    FADED,
-    LAST_SIGNAL
-};
-
-enum
-{
-    FADE_TYPE_NONE,
-    FADE_TYPE_GAMMA_NUMBER,
-    FADE_TYPE_GAMMA_RAMP,
-    FADE_TYPE_XRANDR,
-};
-
-static guint         signals [LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GSFade, gs_fade, G_TYPE_OBJECT)
-
-static gpointer fade_object = NULL;
-
-#ifdef HAVE_XF86VMODE_GAMMA
-
-/* This is needed because the VidMode extension doesn't work
-   on remote displays -- but if the remote display has the extension
-   at all, XF86VidModeQueryExtension returns true, and then
-   XF86VidModeQueryVersion dies with an X error.
-*/
-
-static gboolean error_handler_hit = FALSE;
-
-static int
-ignore_all_errors_ehandler (Display     *dpy,
-                            XErrorEvent *error)
-{
-    error_handler_hit = TRUE;
-
-    return 0;
-}
-
-static Bool
-safe_XF86VidModeQueryVersion (Display *dpy,
-                              int     *majP,
-                              int     *minP)
-{
-    Bool          result;
-    XErrorHandler old_handler;
-
-    XSync (dpy, False);
-    error_handler_hit = FALSE;
-    old_handler = XSetErrorHandler (ignore_all_errors_ehandler);
-
-    result = XF86VidModeQueryVersion (dpy, majP, minP);
-
-    XSync (dpy, False);
-    XSetErrorHandler (old_handler);
-    XSync (dpy, False);
-
-    return (error_handler_hit
-            ? False
-            : result);
-}
-
-static gboolean
-xf86_whack_gamma (int              screen,
-                  struct GSFadeScreenPrivate *screen_priv,
-                  float            ratio)
-{
-    Bool status;
-    struct GSGammaInfo *gamma_info;
-
-    gamma_info = screen_priv->info;
-
-    if (!gamma_info)
-        return FALSE;
-
-    if (ratio < 0)
-    {
-        ratio = 0;
-    }
-    if (ratio > 1)
-    {
-        ratio = 1;
-    }
-
-    if (gamma_info->size == 0)
-    {
-        /* we only have a gamma number, not a ramp. */
-
-        XF86VidModeGamma g2;
-
-        g2.red   = screen_priv->vmg.red   * ratio;
-        g2.green = screen_priv->vmg.green * ratio;
-        g2.blue  = screen_priv->vmg.blue  * ratio;
-
-        if (g2.red < XF86_MIN_GAMMA)
-        {
-            g2.red = XF86_MIN_GAMMA;
-        }
-        if (g2.green < XF86_MIN_GAMMA)
-        {
-            g2.green = XF86_MIN_GAMMA;
-        }
-        if (g2.blue < XF86_MIN_GAMMA)
-        {
-            g2.blue = XF86_MIN_GAMMA;
-        }
-
-        status = XF86VidModeSetGamma (GDK_DISPLAY (), screen, &g2);
-    }
-    else
-    {
-
-# ifdef HAVE_XF86VMODE_GAMMA_RAMP
-        unsigned short *r, *g, *b;
-        int i;
-
-        r = g_new0 (unsigned short, gamma_info->size);
-        g = g_new0 (unsigned short, gamma_info->size);
-        b = g_new0 (unsigned short, gamma_info->size);
-
-        for (i = 0; i < gamma_info->size; i++)
-        {
-            r[i] = gamma_info->r[i] * ratio;
-            g[i] = gamma_info->g[i] * ratio;
-            b[i] = gamma_info->b[i] * ratio;
-        }
-
-        status = XF86VidModeSetGammaRamp (GDK_DISPLAY (), screen, gamma_info->size, r, g, b);
-
-        g_free (r);
-        g_free (g);
-        g_free (b);
-
-# else  /* !HAVE_XF86VMODE_GAMMA_RAMP */
-        abort ();
-# endif /* !HAVE_XF86VMODE_GAMMA_RAMP */
-    }
-
-    gdk_flush ();
-
-    return status;
-}
-
-#endif /* HAVE_XF86VMODE_GAMMA */
-
-/* VidModeExtension version 2.0 or better is needed to do gamma.
-   2.0 added gamma values; 2.1 added gamma ramps.
-*/
-# define XF86_VIDMODE_GAMMA_MIN_MAJOR 2
-# define XF86_VIDMODE_GAMMA_MIN_MINOR 0
-# define XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR 2
-# define XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR 1
-
-
-gboolean
-gs_fade_get_enabled (GSFade *fade)
-{
-    g_return_val_if_fail (GS_IS_FADE (fade), FALSE);
-
-    return fade->priv->enabled;
-}
-
-void
-gs_fade_set_enabled (GSFade  *fade,
-                     gboolean enabled)
-{
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    if (fade->priv->enabled != enabled)
-    {
-        fade->priv->enabled = enabled;
-    }
-}
-
-#ifdef HAVE_XF86VMODE_GAMMA
-static gboolean
-gamma_fade_setup (GSFade *fade, int screen_idx)
-{
-    gboolean         res;
-    struct GSFadeScreenPrivate *screen_priv;
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-    if (screen_priv->info)
-        return TRUE;
-
-# ifndef HAVE_XF86VMODE_GAMMA_RAMP
-    if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type)
-    {
-        /* server is newer than client! */
-        screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
-    }
-# endif
-
-# ifdef HAVE_XF86VMODE_GAMMA_RAMP
-
-    screen_priv->info = g_new0(struct GSGammaInfo, 1);
-    screen_priv->num_ramps = 1;
-
-    if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type)
-    {
-        /* have ramps */
-
-        res = XF86VidModeGetGammaRampSize (GDK_DISPLAY (), screen_idx, &screen_priv->info->size);
-        if (!res || screen_priv->info->size <= 0)
-        {
-            screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
-            goto test_number;
-        }
-
-        screen_priv->info->r = g_new0 (unsigned short, screen_priv->info->size);
-        screen_priv->info->g = g_new0 (unsigned short, screen_priv->info->size);
-        screen_priv->info->b = g_new0 (unsigned short, screen_priv->info->size);
-
-        if (! (screen_priv->info->r && screen_priv->info->g && screen_priv->info->b))
-        {
-            screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
-            goto test_number;
-        }
-
-        res = XF86VidModeGetGammaRamp (GDK_DISPLAY (),
-                                       screen_idx,
-                                       screen_priv->info->size,
-                                       screen_priv->info->r,
-                                       screen_priv->info->g,
-                                       screen_priv->info->b);
-        if (! res)
-        {
-            screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
-            goto test_number;
-        }
-        gs_debug ("Initialized gamma ramp fade");
-    }
-# endif /* HAVE_XF86VMODE_GAMMA_RAMP */
-
-test_number:
-    if (FADE_TYPE_GAMMA_NUMBER == screen_priv->fade_type)
-    {
-        /* only have gamma parameter, not ramps. */
-
-        res = XF86VidModeGetGamma (GDK_DISPLAY (), screen_idx, &screen_priv->vmg);
-        if (! res)
-        {
-            screen_priv->fade_type = FADE_TYPE_NONE;
-            goto test_none;
-        }
-        gs_debug ("Initialized gamma fade for screen %d: %f %f %f",
-                  screen_idx,
-                  screen_priv->vmg.red,
-                  screen_priv->vmg.green,
-                  screen_priv->vmg.blue);
-    }
-
-test_none:
-    if (FADE_TYPE_NONE == screen_priv->fade_type)
-    {
-        goto FAIL;
-    }
-
-    return TRUE;
-FAIL:
-
-    return FALSE;
-}
-#endif /* HAVE_XF86VMODE_GAMMA */
-
-static void
-screen_fade_finish (GSFade *fade, int screen_idx)
-{
-    struct GSFadeScreenPrivate *screen_priv;
-    int i;
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-    if (!screen_priv->info)
-        return;
-
-    for (i = 0; i < screen_priv->num_ramps; i++)
-    {
-        if (screen_priv->info[i].r)
-            g_free (screen_priv->info[i].r);
-        if (screen_priv->info[i].g)
-            g_free (screen_priv->info[i].g);
-        if (screen_priv->info[i].b)
-            g_free (screen_priv->info[i].b);
-    }
-
-    g_free (screen_priv->info);
-    screen_priv->info = NULL;
-    screen_priv->num_ramps = 0;
-}
-
-#ifdef HAVE_XF86VMODE_GAMMA
-static gboolean
-gamma_fade_set_alpha_gamma (GSFade *fade,
-                            int screen_idx,
-                            gdouble alpha)
-{
-    struct GSFadeScreenPrivate *screen_priv;
-    gboolean res;
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-    res = xf86_whack_gamma (screen_idx, screen_priv, alpha);
-
-    return TRUE;
-}
-#endif /* HAVE_XF86VMODE_GAMMA */
-
-static void
-check_gamma_extension (GSFade *fade, int screen_idx)
-{
-    struct GSFadeScreenPrivate *screen_priv;
-#ifdef HAVE_XF86VMODE_GAMMA
-    int      event;
-    int      error;
-    int      major;
-    int      minor;
-    gboolean res;
-#endif /* HAVE_XF86VMODE_GAMMA */
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-#ifdef HAVE_XF86VMODE_GAMMA
-    res = XF86VidModeQueryExtension (GDK_DISPLAY (), &event, &error);
-    if (! res)
-        goto fade_none;
-
-    res = safe_XF86VidModeQueryVersion (GDK_DISPLAY (), &major, &minor);
-    if (! res)
-        goto fade_none;
-
-    if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR ||
-            (major == XF86_VIDMODE_GAMMA_MIN_MAJOR &&
-             minor < XF86_VIDMODE_GAMMA_MIN_MINOR))
-        goto fade_none;
-
-    screen_priv->fade_setup = gamma_fade_setup;
-    screen_priv->fade_finish = screen_fade_finish;
-    screen_priv->fade_set_alpha_gamma = gamma_fade_set_alpha_gamma;
-
-    if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR ||
-            (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR &&
-             minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR))
-    {
-        screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
-        return;
-    }
-
-    /* Copacetic */
-    screen_priv->fade_type = FADE_TYPE_GAMMA_RAMP;
-    return;
-fade_none:
-#endif
-    screen_priv->fade_type = FADE_TYPE_NONE;
-}
-
-/* Xrandr support */
-
-static gboolean xrandr_fade_setup (GSFade *fade, int screen_idx)
-{
-    struct GSFadeScreenPrivate *screen_priv;
-    MateRRCrtc *crtc;
-    MateRRCrtc **crtcs;
-    int crtc_count = 0;
-    struct GSGammaInfo *info;
-    gboolean res;
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-    if (screen_priv->info)
-        return TRUE;
-
-    /* refresh the screen info */
-    mate_rr_screen_refresh (screen_priv->rrscreen, NULL);
-
-    crtcs = mate_rr_screen_list_crtcs (screen_priv->rrscreen);
-    while (*crtcs)
-    {
-        crtc_count++;
-        crtcs++;
-    };
-
-    screen_priv->info = g_new0 (struct GSGammaInfo, crtc_count);
-    screen_priv->num_ramps = crtc_count;
-
-    crtc_count = 0;
-    crtcs = mate_rr_screen_list_crtcs (screen_priv->rrscreen);
-    while (*crtcs)
-    {
-        crtc = *crtcs;
-
-        info = &screen_priv->info[crtc_count];
-
-        /* if no mode ignore crtc */
-        if (!mate_rr_crtc_get_current_mode (crtc))
-        {
-            info->size = 0;
-            info->r = NULL;
-            info->g = NULL;
-            info->b = NULL;
-        }
-        else
-        {
-            res = mate_rr_crtc_get_gamma (crtc, &info->size,
-                                          &info->r, &info->g,
-                                          &info->b);
-            if (res == FALSE)
-                goto fail;
-        }
-
-        crtcs++;
-        crtc_count++;
-    }
-    return TRUE;
-fail:
-    return FALSE;
-}
-
-static void xrandr_crtc_whack_gamma (MateRRCrtc *crtc,
-                                     struct GSGammaInfo *gamma_info,
-                                     float            ratio)
-{
-    unsigned short *r, *g, *b;
-    int i;
-
-    if (gamma_info->size == 0)
-        return;
-
-    if (ratio < 0)
-    {
-        ratio = 0;
-    }
-    if (ratio > 1)
-    {
-        ratio = 1;
-    }
-
-    r = g_new0 (unsigned short, gamma_info->size);
-    g = g_new0 (unsigned short, gamma_info->size);
-    b = g_new0 (unsigned short, gamma_info->size);
-
-    for (i = 0; i < gamma_info->size; i++)
-    {
-        r[i] = gamma_info->r[i] * ratio;
-        g[i] = gamma_info->g[i] * ratio;
-        b[i] = gamma_info->b[i] * ratio;
-    }
-
-    mate_rr_crtc_set_gamma (crtc, gamma_info->size,
-                            r, g, b);
-    g_free (r);
-    g_free (g);
-    g_free (b);
-}
-
-static gboolean xrandr_fade_set_alpha_gamma (GSFade *fade,
-        int screen_idx,
-        gdouble alpha)
-{
-    struct GSFadeScreenPrivate *screen_priv;
-    struct GSGammaInfo *info;
-    MateRRCrtc **crtcs;
-    int i;
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-    if (!screen_priv->info)
-        return FALSE;
-
-    crtcs = mate_rr_screen_list_crtcs (screen_priv->rrscreen);
-    i = 0;
-
-    while (*crtcs)
-    {
-        info = &screen_priv->info[i];
-        xrandr_crtc_whack_gamma (*crtcs, info, alpha);
-        i++;
-        crtcs++;
-    }
-    return TRUE;
-}
-
-static void
-check_randr_extension (GSFade *fade, int screen_idx)
-{
-    GdkDisplay *display = gdk_display_get_default ();
-    GdkScreen *screen = gdk_display_get_screen (display, screen_idx);
-    struct GSFadeScreenPrivate *screen_priv;
-
-    screen_priv = &fade->priv->screen_priv[screen_idx];
-
-    screen_priv->rrscreen = mate_rr_screen_new (screen,
-                            NULL,
-                            NULL,
-                            NULL);
-    if (!screen_priv->rrscreen)
-    {
-        screen_priv->fade_type = FADE_TYPE_NONE;
-        return;
-    }
-
-    screen_priv->fade_type = FADE_TYPE_XRANDR;
-    screen_priv->fade_setup = xrandr_fade_setup;
-    screen_priv->fade_finish = screen_fade_finish;
-    screen_priv->fade_set_alpha_gamma = xrandr_fade_set_alpha_gamma;
-}
-
-static gboolean
-gs_fade_set_alpha (GSFade *fade,
-                   gdouble alpha)
-{
-    gboolean ret = FALSE;
-    int i;
-
-    for (i = 0; i < fade->priv->num_screens; i++)
-    {
-        switch (fade->priv->screen_priv[i].fade_type)
-        {
-        case FADE_TYPE_GAMMA_RAMP:
-        case FADE_TYPE_GAMMA_NUMBER:
-        case FADE_TYPE_XRANDR:
-            ret = fade->priv->screen_priv[i].fade_set_alpha_gamma (fade, i, alpha);
-            break;
-        case FADE_TYPE_NONE:
-            ret = FALSE;
-            break;
-        default:
-            g_warning ("Unknown fade type");
-            ret = FALSE;
-            break;
-        }
-    }
-    return ret;
-}
-
-static gboolean
-gs_fade_out_iter (GSFade *fade)
-{
-    gboolean ret;
-
-    if (fade->priv->current_alpha < 0.01)
-    {
-        return FALSE;
-    }
-
-    fade->priv->current_alpha -= fade->priv->alpha_per_iter;
-
-    ret = gs_fade_set_alpha (fade, fade->priv->current_alpha);
-
-    return ret;
-}
-
-static gboolean
-gs_fade_stop (GSFade *fade)
-{
-    if (fade->priv->timer_id > 0)
-    {
-        g_source_remove (fade->priv->timer_id);
-        fade->priv->timer_id = 0;
-    }
-
-    fade->priv->step = 0;
-    fade->priv->active = FALSE;
-
-    return TRUE;
-}
-
-void
-gs_fade_finish (GSFade *fade)
-{
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    if (! fade->priv->active)
-    {
-        return;
-    }
-
-    gs_fade_stop (fade);
-
-    g_signal_emit (fade, signals [FADED], 0);
-
-    fade->priv->active = FALSE;
-}
-
-static gboolean
-fade_out_timer (GSFade *fade)
-{
-    gboolean res;
-
-    res = gs_fade_out_iter (fade);
-
-    /* if failed then fade is complete */
-    if (! res)
-    {
-        gs_fade_finish (fade);
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-gboolean
-gs_fade_get_active (GSFade *fade)
-{
-    g_return_val_if_fail (GS_IS_FADE (fade), FALSE);
-
-    return fade->priv->active;
-}
-
-static void
-gs_fade_set_timeout (GSFade   *fade,
-                     guint     timeout)
-{
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    fade->priv->timeout = timeout;
-}
-
-static void
-gs_fade_start (GSFade *fade,
-               guint   timeout)
-{
-    guint steps_per_sec = 30;
-    guint msecs_per_step;
-    struct GSFadeScreenPrivate *screen_priv;
-    gboolean active_fade, res;
-    int i;
-
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    for (i = 0; i < fade->priv->num_screens; i++)
-    {
-        screen_priv = &fade->priv->screen_priv[i];
-        if (screen_priv->fade_type != FADE_TYPE_NONE)
-        {
-            res = screen_priv->fade_setup (fade, i);
-            if (res == FALSE)
-                return;
-        }
-    }
-
-    if (fade->priv->timer_id > 0)
-    {
-        gs_fade_stop (fade);
-    }
-
-    fade->priv->active = TRUE;
-
-    gs_fade_set_timeout (fade, timeout);
-
-    active_fade = FALSE;
-    for (i = 0; i < fade->priv->num_screens; i++)
-    {
-        screen_priv = &fade->priv->screen_priv[i];
-        if (screen_priv->fade_type != FADE_TYPE_NONE)
-            active_fade = TRUE;
-    }
-    if (active_fade)
-    {
-        guint num_steps;
-
-        num_steps = (fade->priv->timeout / 1000) * steps_per_sec;
-        msecs_per_step = 1000 / steps_per_sec;
-        fade->priv->alpha_per_iter = 1.0 / (gdouble)num_steps;
-
-        fade->priv->timer_id = g_timeout_add (msecs_per_step, (GSourceFunc)fade_out_timer, fade);
-    }
-    else
-    {
-        gs_fade_finish (fade);
-    }
-}
-
-typedef struct
-{
-    GSFadeDoneFunc done_cb;
-    gpointer       data;
-} FadedCallbackData;
-
-static void
-gs_fade_async_callback (GSFade            *fade,
-                        FadedCallbackData *cdata)
-{
-    g_signal_handlers_disconnect_by_func (fade,
-                                          gs_fade_async_callback,
-                                          cdata);
-
-    if (cdata->done_cb)
-    {
-        cdata->done_cb (fade, cdata->data);
-    }
-
-    g_free (cdata);
-}
-
-void
-gs_fade_async (GSFade        *fade,
-               guint          timeout,
-               GSFadeDoneFunc func,
-               gpointer       data)
-{
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    /* if fade is active then pause it */
-    if (fade->priv->active)
-    {
-        gs_fade_stop (fade);
-    }
-
-    if (func)
-    {
-        FadedCallbackData *cb_data;
-
-        cb_data = g_new0 (FadedCallbackData, 1);
-        cb_data->done_cb = func;
-        cb_data->data = data;
-
-        g_signal_connect (fade, "faded",
-                          G_CALLBACK (gs_fade_async_callback),
-                          cb_data);
-    }
-
-    gs_fade_start (fade, timeout);
-}
-
-static void
-gs_fade_sync_callback (GSFade *fade,
-                       int    *flag)
-{
-    *flag = TRUE;
-    g_signal_handlers_disconnect_by_func (fade,
-                                          gs_fade_sync_callback,
-                                          flag);
-}
-
-void
-gs_fade_sync (GSFade        *fade,
-              guint          timeout)
-{
-    int      flag = FALSE;
-
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    /* if fade is active then pause it */
-    if (fade->priv->active)
-    {
-        gs_fade_stop (fade);
-    }
-
-    g_signal_connect (fade, "faded",
-                      G_CALLBACK (gs_fade_sync_callback),
-                      &flag);
-
-    gs_fade_start (fade, timeout);
-
-    while (! flag)
-    {
-        gtk_main_iteration ();
-    }
-}
-
-void
-gs_fade_reset (GSFade *fade)
-{
-    int i;
-    g_return_if_fail (GS_IS_FADE (fade));
-
-    gs_debug ("Resetting fade");
-
-    if (fade->priv->active)
-    {
-        gs_fade_stop (fade);
-    }
-
-    fade->priv->current_alpha = 1.0;
-
-    gs_fade_set_alpha (fade, fade->priv->current_alpha);
-
-    for (i = 0; i < fade->priv->num_screens; i++)
-        fade->priv->screen_priv[i].fade_finish (fade, i);
-}
-
-static void
-gs_fade_class_init (GSFadeClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize = gs_fade_finalize;
-
-    signals [FADED] =
-        g_signal_new ("faded",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSFadeClass, faded),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0, G_TYPE_NONE);
-
-    g_type_class_add_private (klass, sizeof (GSFadePrivate));
-}
-
-static void
-gs_fade_init (GSFade *fade)
-{
-    GdkDisplay *display;
-    int i;
-
-    fade->priv = GS_FADE_GET_PRIVATE (fade);
-
-    fade->priv->timeout = 1000;
-    fade->priv->current_alpha = 1.0;
-
-    display = gdk_display_get_default ();
-    fade->priv->num_screens = gdk_display_get_n_screens (display);
-
-    fade->priv->screen_priv = g_new0 (struct GSFadeScreenPrivate, fade->priv->num_screens);
-
-    for (i = 0; i < fade->priv->num_screens; i++)
-    {
-        check_randr_extension (fade, i);
-        if (!fade->priv->screen_priv[i].fade_type)
-            check_gamma_extension (fade, i);
-        gs_debug ("Fade type: %d", fade->priv->screen_priv[i].fade_type);
-    }
-}
-
-static void
-gs_fade_finalize (GObject *object)
-{
-    GSFade *fade;
-    int i;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_FADE (object));
-
-    fade = GS_FADE (object);
-
-    g_return_if_fail (fade->priv != NULL);
-
-    for (i = 0; i < fade->priv->num_screens; i++)
-        fade->priv->screen_priv[i].fade_finish(fade, i);
-
-    if (fade->priv->screen_priv)
-    {
-        for (i = 0; i < fade->priv->num_screens; i++)
-        {
-            if (!fade->priv->screen_priv[i].rrscreen)
-                continue;
-            mate_rr_screen_destroy (fade->priv->screen_priv[i].rrscreen);
-        }
-
-        g_free (fade->priv->screen_priv);
-        fade->priv->screen_priv = NULL;
-    }
-
-    G_OBJECT_CLASS (gs_fade_parent_class)->finalize (object);
-}
-
-GSFade *
-gs_fade_new (void)
-{
-    if (fade_object)
-    {
-        g_object_ref (fade_object);
-    }
-    else
-    {
-        fade_object = g_object_new (GS_TYPE_FADE, NULL);
-        g_object_add_weak_pointer (fade_object,
-                                   (gpointer *) &fade_object);
-    }
-
-    return GS_FADE (fade_object);
-}
diff --git a/src/gs-fade.h.orig b/src/gs-fade.h.orig
deleted file mode 100644
index bfa7c2a..0000000
--- a/src/gs-fade.h.orig
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_FADE_H
-#define __GS_FADE_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_FADE         (gs_fade_get_type ())
-#define GS_FADE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_FADE, GSFade))
-#define GS_FADE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_FADE, GSFadeClass))
-#define GS_IS_FADE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_FADE))
-#define GS_IS_FADE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_FADE))
-#define GS_FADE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_FADE, GSFadeClass))
-
-
-typedef struct GSFadePrivate GSFadePrivate;
-
-typedef struct
-{
-    GObject        parent;
-    GSFadePrivate *priv;
-} GSFade;
-
-typedef struct
-{
-    GObjectClass   parent_class;
-
-    void          (* faded)        (GSFade *fade);
-} GSFadeClass;
-
-typedef void  (* GSFadeDoneFunc) (GSFade       *fade,
-                                  gpointer      data);
-
-
-GType       gs_fade_get_type         (void);
-
-GSFade    * gs_fade_new              (void);
-
-void        gs_fade_async            (GSFade        *fade,
-                                      guint          timeout,
-                                      GSFadeDoneFunc done_cb,
-                                      gpointer       data);
-void        gs_fade_sync             (GSFade        *fade,
-                                      guint          timeout);
-
-void        gs_fade_finish           (GSFade    *fade);
-void        gs_fade_reset            (GSFade    *fade);
-
-gboolean    gs_fade_get_active       (GSFade    *fade);
-
-gboolean    gs_fade_get_enabled      (GSFade    *fade);
-void        gs_fade_set_enabled      (GSFade    *fade,
-                                      gboolean   enabled);
-
-G_END_DECLS
-
-#endif /* __GS_FADE_H */
diff --git a/src/gs-grab-x11.c.orig b/src/gs-grab-x11.c.orig
deleted file mode 100644
index e6e7f22..0000000
--- a/src/gs-grab-x11.c.orig
+++ /dev/null
@@ -1,672 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#ifdef HAVE_XF86MISCSETGRABKEYSSTATE
-# include <X11/extensions/xf86misc.h>
-#endif /* HAVE_XF86MISCSETGRABKEYSSTATE */
-
-#include "gs-window.h"
-#include "gs-grab.h"
-#include "gs-debug.h"
-
-static void     gs_grab_class_init (GSGrabClass *klass);
-static void     gs_grab_init       (GSGrab      *grab);
-static void     gs_grab_finalize   (GObject        *object);
-
-#define GS_GRAB_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_GRAB, GSGrabPrivate))
-
-G_DEFINE_TYPE (GSGrab, gs_grab, G_TYPE_OBJECT)
-
-static gpointer grab_object = NULL;
-
-struct GSGrabPrivate
-{
-    guint      mouse_hide_cursor : 1;
-    GdkWindow *mouse_grab_window;
-    GdkWindow *keyboard_grab_window;
-    GdkScreen *mouse_grab_screen;
-    GdkScreen *keyboard_grab_screen;
-
-    GtkWidget *invisible;
-};
-
-static GdkCursor *
-get_cursor (void)
-{
-    GdkBitmap *empty_bitmap;
-    GdkCursor *cursor;
-    GdkColor   useless;
-    char       invisible_cursor_bits [] = { 0x0 };
-
-    useless.red = useless.green = useless.blue = 0;
-    useless.pixel = 0;
-
-    empty_bitmap = gdk_bitmap_create_from_data (NULL,
-                   invisible_cursor_bits,
-                   1, 1);
-
-    cursor = gdk_cursor_new_from_pixmap (empty_bitmap,
-                                         empty_bitmap,
-                                         &useless,
-                                         &useless, 0, 0);
-
-    g_object_unref (empty_bitmap);
-
-    return cursor;
-}
-
-static const char *
-grab_string (int status)
-{
-    switch (status)
-    {
-    case GDK_GRAB_SUCCESS:
-        return "GrabSuccess";
-    case GDK_GRAB_ALREADY_GRABBED:
-        return "AlreadyGrabbed";
-    case GDK_GRAB_INVALID_TIME:
-        return "GrabInvalidTime";
-    case GDK_GRAB_NOT_VIEWABLE:
-        return "GrabNotViewable";
-    case GDK_GRAB_FROZEN:
-        return "GrabFrozen";
-    default:
-    {
-        static char foo [255];
-        sprintf (foo, "unknown status: %d", status);
-        return foo;
-    }
-    }
-}
-
-#ifdef HAVE_XF86MISCSETGRABKEYSSTATE
-/* This function enables and disables the Ctrl-Alt-KP_star and
-   Ctrl-Alt-KP_slash hot-keys, which (in XFree86 4.2) break any
-   grabs and/or kill the grabbing client.  That would effectively
-   unlock the screen, so we don't like that.
-
-   The Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash hot-keys only exist
-   if AllowDeactivateGrabs and/or AllowClosedownGrabs are turned on
-   in XF86Config.  I believe they are disabled by default.
-
-   This does not affect any other keys (specifically Ctrl-Alt-BS or
-   Ctrl-Alt-F1) but I wish it did.  Maybe it will someday.
- */
-static void
-xorg_lock_smasher_set_active (GSGrab  *grab,
-                              gboolean active)
-{
-    int status, event, error;
-
-    if (!XF86MiscQueryExtension (GDK_DISPLAY (), &event, &error))
-    {
-        gs_debug ("No XFree86-Misc extension present");
-        return;
-    }
-
-    if (active)
-    {
-        gs_debug ("Enabling the x.org grab smasher");
-    }
-    else
-    {
-        gs_debug ("Disabling the x.org grab smasher");
-    }
-
-    gdk_error_trap_push ();
-
-    status = XF86MiscSetGrabKeysState (GDK_DISPLAY (), active);
-
-    gdk_display_sync (gdk_display_get_default ());
-    gdk_error_trap_pop ();
-
-    if (active && status == MiscExtGrabStateAlready)
-    {
-        /* shut up, consider this success */
-        status = MiscExtGrabStateSuccess;
-    }
-
-    gs_debug ("XF86MiscSetGrabKeysState(%s) returned %s\n",
-              active ? "on" : "off",
-              (status == MiscExtGrabStateSuccess ? "MiscExtGrabStateSuccess" :
-               status == MiscExtGrabStateLocked  ? "MiscExtGrabStateLocked"  :
-               status == MiscExtGrabStateAlready ? "MiscExtGrabStateAlready" :
-               "unknown value"));
-}
-#else
-static void
-xorg_lock_smasher_set_active (GSGrab  *grab,
-                              gboolean active)
-{
-}
-#endif /* HAVE_XF86MISCSETGRABKEYSSTATE */
-
-static int
-gs_grab_get_keyboard (GSGrab    *grab,
-                      GdkWindow *window,
-                      GdkScreen *screen)
-{
-    GdkGrabStatus status;
-
-    g_return_val_if_fail (window != NULL, FALSE);
-    g_return_val_if_fail (screen != NULL, FALSE);
-
-    gs_debug ("Grabbing keyboard widget=%X", (guint32) GDK_WINDOW_XID (window));
-    status = gdk_keyboard_grab (window, FALSE, GDK_CURRENT_TIME);
-
-    if (status == GDK_GRAB_SUCCESS)
-    {
-        if (grab->priv->keyboard_grab_window != NULL)
-        {
-            g_object_remove_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
-                                          (gpointer *) &grab->priv->keyboard_grab_window);
-        }
-        grab->priv->keyboard_grab_window = window;
-
-        g_object_add_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
-                                   (gpointer *) &grab->priv->keyboard_grab_window);
-
-        grab->priv->keyboard_grab_screen = screen;
-    }
-    else
-    {
-        gs_debug ("Couldn't grab keyboard!  (%s)", grab_string (status));
-    }
-
-    return status;
-}
-
-static int
-gs_grab_get_mouse (GSGrab    *grab,
-                   GdkWindow *window,
-                   GdkScreen *screen,
-                   gboolean   hide_cursor)
-{
-    GdkGrabStatus status;
-    GdkCursor    *cursor;
-
-    g_return_val_if_fail (window != NULL, FALSE);
-    g_return_val_if_fail (screen != NULL, FALSE);
-
-    cursor = get_cursor ();
-
-    gs_debug ("Grabbing mouse widget=%X", (guint32) GDK_WINDOW_XID (window));
-    status = gdk_pointer_grab (window, TRUE, 0, NULL,
-                               (hide_cursor ? cursor : NULL),
-                               GDK_CURRENT_TIME);
-
-    if (status == GDK_GRAB_SUCCESS)
-    {
-        if (grab->priv->mouse_grab_window != NULL)
-        {
-            g_object_remove_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
-                                          (gpointer *) &grab->priv->mouse_grab_window);
-        }
-        grab->priv->mouse_grab_window = window;
-
-        g_object_add_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
-                                   (gpointer *) &grab->priv->mouse_grab_window);
-
-        grab->priv->mouse_grab_screen = screen;
-        grab->priv->mouse_hide_cursor = hide_cursor;
-    }
-
-    gdk_cursor_unref (cursor);
-
-    return status;
-}
-
-void
-gs_grab_keyboard_reset (GSGrab *grab)
-{
-    if (grab->priv->keyboard_grab_window != NULL)
-    {
-        g_object_remove_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window),
-                                      (gpointer *) &grab->priv->keyboard_grab_window);
-    }
-    grab->priv->keyboard_grab_window = NULL;
-    grab->priv->keyboard_grab_screen = NULL;
-}
-
-static gboolean
-gs_grab_release_keyboard (GSGrab *grab)
-{
-    gs_debug ("Ungrabbing keyboard");
-    gdk_keyboard_ungrab (GDK_CURRENT_TIME);
-
-    gs_grab_keyboard_reset (grab);
-
-    return TRUE;
-}
-
-void
-gs_grab_mouse_reset (GSGrab *grab)
-{
-    if (grab->priv->mouse_grab_window != NULL)
-    {
-        g_object_remove_weak_pointer (G_OBJECT (grab->priv->mouse_grab_window),
-                                      (gpointer *) &grab->priv->mouse_grab_window);
-    }
-
-    grab->priv->mouse_grab_window = NULL;
-    grab->priv->mouse_grab_screen = NULL;
-}
-
-gboolean
-gs_grab_release_mouse (GSGrab *grab)
-{
-    gs_debug ("Ungrabbing pointer");
-    gdk_pointer_ungrab (GDK_CURRENT_TIME);
-
-    gs_grab_mouse_reset (grab);
-
-    return TRUE;
-}
-
-static gboolean
-gs_grab_move_mouse (GSGrab    *grab,
-                    GdkWindow *window,
-                    GdkScreen *screen,
-                    gboolean   hide_cursor)
-{
-    gboolean   result;
-    GdkWindow *old_window;
-    GdkScreen *old_screen;
-    gboolean   old_hide_cursor;
-
-    /* if the pointer is not grabbed and we have a
-       mouse_grab_window defined then we lost the grab */
-    if (! gdk_pointer_is_grabbed ())
-    {
-        gs_grab_mouse_reset (grab);
-    }
-
-    if (grab->priv->mouse_grab_window == window)
-    {
-        gs_debug ("Window %X is already grabbed, skipping",
-                  (guint32) GDK_WINDOW_XID (grab->priv->mouse_grab_window));
-        return TRUE;
-    }
-
-#if 0
-    gs_debug ("Intentionally skipping move pointer grabs");
-    /* FIXME: GTK doesn't like having the pointer grabbed */
-    return TRUE;
-#else
-    if (grab->priv->mouse_grab_window)
-    {
-        gs_debug ("Moving pointer grab from %X to %X",
-                  (guint32) GDK_WINDOW_XID (grab->priv->mouse_grab_window),
-                  (guint32) GDK_WINDOW_XID (window));
-    }
-    else
-    {
-        gs_debug ("Getting pointer grab on %X",
-                  (guint32) GDK_WINDOW_XID (window));
-    }
-#endif
-
-    gs_debug ("*** doing X server grab");
-    gdk_x11_grab_server ();
-
-    old_window = grab->priv->mouse_grab_window;
-    old_screen = grab->priv->mouse_grab_screen;
-    old_hide_cursor = grab->priv->mouse_hide_cursor;
-
-    if (old_window)
-    {
-        gs_grab_release_mouse (grab);
-    }
-
-    result = gs_grab_get_mouse (grab, window, screen, hide_cursor);
-
-    if (result != GDK_GRAB_SUCCESS)
-    {
-        sleep (1);
-        result = gs_grab_get_mouse (grab, window, screen, hide_cursor);
-    }
-
-    if ((result != GDK_GRAB_SUCCESS) && old_window)
-    {
-        gs_debug ("Could not grab mouse for new window.  Resuming previous grab.");
-        gs_grab_get_mouse (grab, old_window, old_screen, old_hide_cursor);
-    }
-
-    gs_debug ("*** releasing X server grab");
-    gdk_x11_ungrab_server ();
-    gdk_flush ();
-
-    return (result == GDK_GRAB_SUCCESS);
-}
-
-static gboolean
-gs_grab_move_keyboard (GSGrab    *grab,
-                       GdkWindow *window,
-                       GdkScreen *screen)
-{
-    gboolean   result;
-    GdkWindow *old_window;
-    GdkScreen *old_screen;
-
-    if (grab->priv->keyboard_grab_window == window)
-    {
-        gs_debug ("Window %X is already grabbed, skipping",
-                  (guint32) GDK_WINDOW_XID (grab->priv->keyboard_grab_window));
-        return TRUE;
-    }
-
-    if (grab->priv->keyboard_grab_window != NULL)
-    {
-        gs_debug ("Moving keyboard grab from %X to %X",
-                  (guint32) GDK_WINDOW_XID (grab->priv->keyboard_grab_window),
-                  (guint32) GDK_WINDOW_XID (window));
-    }
-    else
-    {
-        gs_debug ("Getting keyboard grab on %X",
-                  (guint32) GDK_WINDOW_XID (window));
-
-    }
-
-    gs_debug ("*** doing X server grab");
-    gdk_x11_grab_server ();
-
-    old_window = grab->priv->keyboard_grab_window;
-    old_screen = grab->priv->keyboard_grab_screen;
-
-    if (old_window)
-    {
-        gs_grab_release_keyboard (grab);
-    }
-
-    result = gs_grab_get_keyboard (grab, window, screen);
-
-    if (result != GDK_GRAB_SUCCESS)
-    {
-        sleep (1);
-        result = gs_grab_get_keyboard (grab, window, screen);
-    }
-
-    if ((result != GDK_GRAB_SUCCESS) && old_window)
-    {
-        gs_debug ("Could not grab keyboard for new window.  Resuming previous grab.");
-        gs_grab_get_keyboard (grab, old_window, old_screen);
-    }
-
-    gs_debug ("*** releasing X server grab");
-    gdk_x11_ungrab_server ();
-    gdk_flush ();
-
-    return (result == GDK_GRAB_SUCCESS);
-}
-
-static void
-gs_grab_nuke_focus (void)
-{
-    Window focus = 0;
-    int    rev = 0;
-
-    gs_debug ("Nuking focus");
-
-    gdk_error_trap_push ();
-
-    XGetInputFocus (GDK_DISPLAY (), &focus, &rev);
-
-    XSetInputFocus (GDK_DISPLAY (), None, RevertToNone, CurrentTime);
-
-    gdk_display_sync (gdk_display_get_default ());
-    gdk_error_trap_pop ();
-}
-
-void
-gs_grab_release (GSGrab *grab)
-{
-    gs_debug ("Releasing all grabs");
-
-    gs_grab_release_mouse (grab);
-    gs_grab_release_keyboard (grab);
-
-    /* FIXME: is it right to enable this ? */
-    xorg_lock_smasher_set_active (grab, TRUE);
-
-    gdk_display_sync (gdk_display_get_default ());
-    gdk_flush ();
-}
-
-gboolean
-gs_grab_grab_window (GSGrab    *grab,
-                     GdkWindow *window,
-                     GdkScreen *screen,
-                     gboolean   hide_cursor)
-{
-    gboolean mstatus = FALSE;
-    gboolean kstatus = FALSE;
-    int      i;
-    int      retries = 4;
-    gboolean focus_fuckus = FALSE;
-
-AGAIN:
-
-    for (i = 0; i < retries; i++)
-    {
-        kstatus = gs_grab_get_keyboard (grab, window, screen);
-        if (kstatus == GDK_GRAB_SUCCESS)
-        {
-            break;
-        }
-
-        /* else, wait a second and try to grab again. */
-        sleep (1);
-    }
-
-    if (kstatus != GDK_GRAB_SUCCESS)
-    {
-        if (!focus_fuckus)
-        {
-            focus_fuckus = TRUE;
-            gs_grab_nuke_focus ();
-            goto AGAIN;
-        }
-    }
-
-    for (i = 0; i < retries; i++)
-    {
-        mstatus = gs_grab_get_mouse (grab, window, screen, hide_cursor);
-        if (mstatus == GDK_GRAB_SUCCESS)
-        {
-            break;
-        }
-
-        /* else, wait a second and try to grab again. */
-        sleep (1);
-    }
-
-    if (mstatus != GDK_GRAB_SUCCESS)
-    {
-        gs_debug ("Couldn't grab pointer!  (%s)",
-                  grab_string (mstatus));
-    }
-
-#if 0
-    /* FIXME: release the pointer grab so GTK will work */
-    gs_grab_release_mouse (grab);
-#endif
-
-    /* When should we allow blanking to proceed?  The current theory
-       is that both a keyboard grab and a mouse grab are mandatory
-
-       - If we don't have a keyboard grab, then we won't be able to
-       read a password to unlock, so the kbd grab is manditory.
-
-       - If we don't have a mouse grab, then we might not see mouse
-       clicks as a signal to unblank, on-screen widgets won't work ideally,
-       and gs_grab_move_to_window() will spin forever when it gets called.
-    */
-
-    if (kstatus != GDK_GRAB_SUCCESS || mstatus != GDK_GRAB_SUCCESS)
-    {
-        /* Do not blank without a keyboard and mouse grabs. */
-
-        /* Release keyboard or mouse which was grabbed. */
-        if (kstatus == GDK_GRAB_SUCCESS)
-        {
-            gs_grab_release_keyboard (grab);
-        }
-        if (mstatus == GDK_GRAB_SUCCESS)
-        {
-            gs_grab_release_mouse (grab);
-        }
-
-        return FALSE;
-    }
-
-    /* Grab is good, go ahead and blank.  */
-    return TRUE;
-}
-
-/* this is used to grab the keyboard and mouse to the root */
-gboolean
-gs_grab_grab_root (GSGrab  *grab,
-                   gboolean hide_cursor)
-{
-    GdkDisplay *display;
-    GdkWindow  *root;
-    GdkScreen  *screen;
-    gboolean    res;
-
-    gs_debug ("Grabbing the root window");
-
-    display = gdk_display_get_default ();
-    gdk_display_get_pointer (display, &screen, NULL, NULL, NULL);
-    root = gdk_screen_get_root_window (screen);
-
-    res = gs_grab_grab_window (grab, root, screen, hide_cursor);
-
-    return res;
-}
-
-/* this is used to grab the keyboard and mouse to an offscreen window */
-gboolean
-gs_grab_grab_offscreen (GSGrab *grab,
-                        gboolean hide_cursor)
-{
-    GdkScreen *screen;
-    gboolean   res;
-
-    gs_debug ("Grabbing an offscreen window");
-
-    screen = gtk_invisible_get_screen (GTK_INVISIBLE (grab->priv->invisible));
-    res = gs_grab_grab_window (grab, grab->priv->invisible->window, screen, hide_cursor);
-
-    return res;
-}
-
-/* This is similar to gs_grab_grab_window but doesn't fail */
-void
-gs_grab_move_to_window (GSGrab    *grab,
-                        GdkWindow *window,
-                        GdkScreen *screen,
-                        gboolean   hide_cursor)
-{
-    gboolean result = FALSE;
-
-    g_return_if_fail (GS_IS_GRAB (grab));
-
-    xorg_lock_smasher_set_active (grab, FALSE);
-
-    do
-    {
-        result = gs_grab_move_keyboard (grab, window, screen);
-        gdk_flush ();
-    }
-    while (!result);
-
-    do
-    {
-        result = gs_grab_move_mouse (grab, window, screen, hide_cursor);
-        gdk_flush ();
-    }
-    while (!result);
-}
-
-static void
-gs_grab_class_init (GSGrabClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize = gs_grab_finalize;
-
-    g_type_class_add_private (klass, sizeof (GSGrabPrivate));
-}
-
-static void
-gs_grab_init (GSGrab *grab)
-{
-    grab->priv = GS_GRAB_GET_PRIVATE (grab);
-
-    grab->priv->mouse_hide_cursor = FALSE;
-    grab->priv->invisible = gtk_invisible_new ();
-    gtk_widget_show (grab->priv->invisible);
-}
-
-static void
-gs_grab_finalize (GObject *object)
-{
-    GSGrab *grab;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_GRAB (object));
-
-    grab = GS_GRAB (object);
-
-    g_return_if_fail (grab->priv != NULL);
-
-    gtk_widget_destroy (grab->priv->invisible);
-
-    G_OBJECT_CLASS (gs_grab_parent_class)->finalize (object);
-}
-
-GSGrab *
-gs_grab_new (void)
-{
-    if (grab_object)
-    {
-        g_object_ref (grab_object);
-    }
-    else
-    {
-        grab_object = g_object_new (GS_TYPE_GRAB, NULL);
-        g_object_add_weak_pointer (grab_object,
-                                   (gpointer *) &grab_object);
-    }
-
-    return GS_GRAB (grab_object);
-}
diff --git a/src/gs-grab.h.orig b/src/gs-grab.h.orig
deleted file mode 100644
index a910403..0000000
--- a/src/gs-grab.h.orig
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_GRAB_H
-#define __GS_GRAB_H
-
-#include <glib.h>
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_GRAB         (gs_grab_get_type ())
-#define GS_GRAB(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_GRAB, GSGrab))
-#define GS_GRAB_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_GRAB, GSGrabClass))
-#define GS_IS_GRAB(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_GRAB))
-#define GS_IS_GRAB_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_GRAB))
-#define GS_GRAB_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_GRAB, GSGrabClass))
-
-typedef struct GSGrabPrivate GSGrabPrivate;
-
-typedef struct
-{
-    GObject        parent;
-    GSGrabPrivate *priv;
-} GSGrab;
-
-typedef struct
-{
-    GObjectClass   parent_class;
-
-} GSGrabClass;
-
-GType     gs_grab_get_type         (void);
-
-GSGrab  * gs_grab_new              (void);
-
-void      gs_grab_release          (GSGrab    *grab);
-gboolean  gs_grab_release_mouse    (GSGrab    *grab);
-
-gboolean  gs_grab_grab_window      (GSGrab    *grab,
-                                    GdkWindow *window,
-                                    GdkScreen *screen,
-                                    gboolean   hide_cursor);
-
-gboolean  gs_grab_grab_root        (GSGrab    *grab,
-                                    gboolean   hide_cursor);
-gboolean  gs_grab_grab_offscreen   (GSGrab    *grab,
-                                    gboolean   hide_cursor);
-
-void      gs_grab_move_to_window   (GSGrab    *grab,
-                                    GdkWindow *window,
-                                    GdkScreen *screen,
-                                    gboolean   hide_cursor);
-
-void      gs_grab_mouse_reset      (GSGrab    *grab);
-void      gs_grab_keyboard_reset   (GSGrab    *grab);
-
-G_END_DECLS
-
-#endif /* __GS_GRAB_H */
diff --git a/src/gs-job.c.orig b/src/gs-job.c.orig
deleted file mode 100644
index 896addc..0000000
--- a/src/gs-job.c.orig
+++ /dev/null
@@ -1,567 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at 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 (widget->window));
-    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 = gdk_spawn_on_screen_with_pipes (gtk_widget_get_screen (widget),
-             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.orig b/src/gs-job.h.orig
deleted file mode 100644
index b4fa3dc..0000000
--- a/src/gs-job.h.orig
+++ /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 at 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 at 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.orig b/src/gs-listener-dbus.c.orig
deleted file mode 100644
index b8d4fab..0000000
--- a/src/gs-listener-dbus.c.orig
+++ /dev/null
@@ -1,2272 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include "gs-listener-dbus.h"
-#include "gs-marshal.h"
-#include "gs-debug.h"
-
-/* this is for dbus < 0.3 */
-#if ((DBUS_VERSION_MAJOR == 0) && (DBUS_VERSION_MINOR < 30))
-#define dbus_bus_name_has_owner(connection, name, err)      dbus_bus_service_exists(connection, name, err)
-#define dbus_bus_request_name(connection, name, flags, err) dbus_bus_acquire_service(connection, name, flags, err)
-#endif
-
-static void              gs_listener_class_init         (GSListenerClass *klass);
-static void              gs_listener_init               (GSListener      *listener);
-static void              gs_listener_finalize           (GObject         *object);
-
-static void              gs_listener_unregister_handler (DBusConnection  *connection,
-        void            *data);
-
-static DBusHandlerResult gs_listener_message_handler    (DBusConnection  *connection,
-        DBusMessage     *message,
-        void            *user_data);
-
-#define GS_LISTENER_SERVICE   "org.mate.ScreenSaver"
-#define GS_LISTENER_PATH      "/org/mate/ScreenSaver"
-#define GS_LISTENER_INTERFACE "org.mate.ScreenSaver"
-
-#define HAL_DEVICE_INTERFACE "org.freedesktop.Hal.Device"
-
-#define CK_NAME              "org.freedesktop.ConsoleKit"
-#define CK_MANAGER_PATH      "/org/freedesktop/ConsoleKit/Manager"
-#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
-#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session"
-
-#define SESSION_NAME         "org.mate.SessionManager"
-#define SESSION_PATH         "/org/mate/SessionManager"
-#define SESSION_INTERFACE    "org.mate.SessionManager"
-
-#define TYPE_MISMATCH_ERROR GS_LISTENER_INTERFACE ".TypeMismatch"
-
-#define GS_LISTENER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_LISTENER, GSListenerPrivate))
-
-struct GSListenerPrivate
-{
-    DBusConnection *connection;
-    DBusConnection *system_connection;
-
-    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
-{
-    int      entry_type;
-    char    *application;
-    char    *reason;
-    char    *connection;
-    guint32  cookie;
-    guint32  foreign_cookie;
-    GTimeVal since;
-} GSListenerRefEntry;
-
-enum
-{
-    LOCK,
-    CYCLE,
-    QUIT,
-    SIMULATE_USER_ACTIVITY,
-    ACTIVE_CHANGED,
-    THROTTLE_CHANGED,
-    SHOW_MESSAGE,
-    LAST_SIGNAL
-};
-
-enum
-{
-    PROP_0,
-    PROP_ACTIVE,
-    PROP_SESSION_IDLE,
-    PROP_ACTIVATION_ENABLED,
-};
-
-enum
-{
-    REF_ENTRY_TYPE_INHIBIT,
-    REF_ENTRY_TYPE_THROTTLE
-};
-
-static DBusObjectPathVTable
-gs_listener_vtable = { &gs_listener_unregister_handler,
-                       &gs_listener_message_handler,
-                       NULL,
-                       NULL,
-                       NULL,
-                       NULL
-                     };
-
-static guint         signals [LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GSListener, gs_listener, G_TYPE_OBJECT)
-
-GQuark
-gs_listener_error_quark (void)
-{
-    static GQuark quark = 0;
-    if (!quark)
-    {
-        quark = g_quark_from_static_string ("gs_listener_error");
-    }
-
-    return quark;
-}
-
-static void
-gs_listener_ref_entry_free (GSListenerRefEntry *entry)
-{
-    g_free (entry->connection);
-    g_free (entry->application);
-    g_free (entry->reason);
-    g_free (entry);
-    entry = NULL;
-}
-
-static void
-gs_listener_unregister_handler (DBusConnection *connection,
-                                void           *data)
-{
-}
-
-static gboolean
-send_dbus_message (DBusConnection *connection,
-                   DBusMessage    *message)
-{
-    gboolean is_connected;
-    gboolean sent;
-
-    g_return_val_if_fail (message != NULL, FALSE);
-
-    if (! connection)
-    {
-        gs_debug ("There is no valid connection to the message bus");
-        return FALSE;
-    }
-
-    is_connected = dbus_connection_get_is_connected (connection);
-    if (! is_connected)
-    {
-        gs_debug ("Not connected to the message bus");
-        return FALSE;
-    }
-
-    sent = dbus_connection_send (connection, message, NULL);
-
-    return sent;
-}
-
-static void
-send_dbus_boolean_signal (GSListener *listener,
-                          const char *name,
-                          gboolean    value)
-{
-    DBusMessage    *message;
-    DBusMessageIter iter;
-
-    g_return_if_fail (listener != NULL);
-
-    message = dbus_message_new_signal (GS_LISTENER_PATH,
-                                       GS_LISTENER_SERVICE,
-                                       name);
-
-    dbus_message_iter_init_append (message, &iter);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &value);
-
-    if (! send_dbus_message (listener->priv->connection, message))
-    {
-        gs_debug ("Could not send %s signal", name);
-    }
-
-    dbus_message_unref (message);
-}
-
-static void
-gs_listener_send_signal_active_changed (GSListener *listener)
-{
-    g_return_if_fail (listener != NULL);
-
-    gs_debug ("Sending the ActiveChanged(%s) signal on the session bus",
-              listener->priv->active ? "TRUE" : "FALSE");
-
-    send_dbus_boolean_signal (listener, "ActiveChanged", listener->priv->active);
-}
-
-static const char *
-get_name_for_entry_type (int entry_type)
-{
-    const char *name;
-
-    switch (entry_type)
-    {
-    case REF_ENTRY_TYPE_INHIBIT:
-        name = "inhibitor";
-        break;
-    case REF_ENTRY_TYPE_THROTTLE:
-        name = "throttler";
-        break;
-    default:
-        g_assert_not_reached ();
-        break;
-    }
-
-    return name;
-}
-
-static GHashTable *
-get_hash_for_entry_type (GSListener         *listener,
-                         int                 entry_type)
-{
-    GHashTable *hash;
-
-    switch (entry_type)
-    {
-    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;
-    }
-
-    return hash;
-}
-
-static void
-list_ref_entry (gpointer key,
-                gpointer value,
-                gpointer user_data)
-{
-    GSListenerRefEntry *entry;
-
-    entry =  (GSListenerRefEntry *)value;
-
-    gs_debug ("%s: %s for reason: %s",
-              get_name_for_entry_type (entry->entry_type),
-              entry->application,
-              entry->reason);
-}
-
-static gboolean
-listener_ref_entry_is_present (GSListener *listener,
-                               int         entry_type)
-{
-    guint       n_entries;
-    gboolean    is_set;
-    GHashTable *hash;
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-
-    /* if we aren't inhibited then activate */
-    n_entries = 0;
-    if (hash != NULL)
-    {
-        n_entries = g_hash_table_size (hash);
-
-        g_hash_table_foreach (hash, list_ref_entry, NULL);
-    }
-
-    is_set = (n_entries > 0);
-
-    return is_set;
-}
-
-static gboolean
-listener_check_activation (GSListener *listener)
-{
-    gboolean inhibited;
-    gboolean res;
-
-    gs_debug ("Checking for activation");
-
-    if (! listener->priv->activation_enabled)
-    {
-        return TRUE;
-    }
-
-    if (! listener->priv->session_idle)
-    {
-        return TRUE;
-    }
-
-    /* if we aren't inhibited then activate */
-    inhibited = listener_ref_entry_is_present (listener, REF_ENTRY_TYPE_INHIBIT);
-
-    res = FALSE;
-    if (! inhibited)
-    {
-        gs_debug ("Trying to activate");
-        res = gs_listener_set_active (listener, TRUE);
-    }
-
-    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)
-{
-    listener->priv->session_idle = idle;
-
-    if (idle)
-    {
-        listener->priv->session_idle_start = time (NULL);
-    }
-    else
-    {
-        listener->priv->session_idle_start = 0;
-    }
-
-    return TRUE;
-}
-
-static gboolean
-listener_set_active_internal (GSListener *listener,
-                              gboolean    active)
-{
-    listener->priv->active = active;
-
-    /* if idle not in sync with active, change it */
-    if (listener->priv->session_idle != active)
-    {
-        listener_set_session_idle_internal (listener, active);
-    }
-
-    if (active)
-    {
-        listener->priv->active_start = time (NULL);
-    }
-    else
-    {
-        listener->priv->active_start = 0;
-    }
-
-    gs_listener_send_signal_active_changed (listener);
-
-    return TRUE;
-}
-
-gboolean
-gs_listener_set_active (GSListener *listener,
-                        gboolean    active)
-{
-    gboolean res;
-
-    g_return_val_if_fail (GS_IS_LISTENER (listener), FALSE);
-
-    if (listener->priv->active == active)
-    {
-        gs_debug ("Trying to set active state when already: %s",
-                  active ? "active" : "inactive");
-        return FALSE;
-    }
-
-    res = FALSE;
-    g_signal_emit (listener, signals [ACTIVE_CHANGED], 0, active, &res);
-    if (! res)
-    {
-        /* if the signal is not handled then we haven't changed state */
-        gs_debug ("Active-changed signal not handled");
-
-        /* clear the idle state */
-        if (active)
-        {
-            listener_set_session_idle_internal (listener, FALSE);
-        }
-
-        return FALSE;
-    }
-
-    listener_set_active_internal (listener, active);
-
-    return TRUE;
-}
-
-gboolean
-gs_listener_set_session_idle (GSListener *listener,
-                              gboolean    idle)
-{
-    gboolean res;
-
-    g_return_val_if_fail (GS_IS_LISTENER (listener), FALSE);
-
-    gs_debug ("Setting session idle: %d", idle);
-
-    if (listener->priv->session_idle == idle)
-    {
-        gs_debug ("Trying to set idle state when already %s",
-                  idle ? "idle" : "not idle");
-        return FALSE;
-    }
-
-    if (idle)
-    {
-        gboolean inhibited;
-
-        inhibited = listener_ref_entry_is_present (listener, REF_ENTRY_TYPE_INHIBIT);
-
-        /* if we are inhibited then do nothing */
-        if (inhibited)
-        {
-            return FALSE;
-        }
-    }
-
-    listener->priv->session_idle = idle;
-    res = listener_check_activation (listener);
-
-    /* if activation fails then don't set idle */
-    if (res)
-    {
-        listener_set_session_idle_internal (listener, idle);
-    }
-    else
-    {
-        gs_debug ("Idle activation failed");
-        listener->priv->session_idle = !idle;
-    }
-
-    return res;
-}
-
-gboolean
-gs_listener_get_activation_enabled (GSListener *listener)
-{
-    g_return_val_if_fail (GS_IS_LISTENER (listener), FALSE);
-
-    return listener->priv->activation_enabled;
-}
-
-gboolean
-gs_listener_is_inhibited (GSListener *listener)
-{
-    gboolean inhibited;
-
-    g_return_val_if_fail (GS_IS_LISTENER (listener), FALSE);
-
-    inhibited = listener_ref_entry_is_present (listener, REF_ENTRY_TYPE_INHIBIT);
-
-    return inhibited;
-}
-
-void
-gs_listener_set_activation_enabled (GSListener *listener,
-                                    gboolean    enabled)
-{
-    g_return_if_fail (GS_IS_LISTENER (listener));
-
-    if (listener->priv->activation_enabled != enabled)
-    {
-        listener->priv->activation_enabled = enabled;
-    }
-}
-
-static dbus_bool_t
-listener_property_set_bool (GSListener *listener,
-                            guint       prop_id,
-                            dbus_bool_t value)
-{
-    dbus_bool_t ret;
-
-    ret = FALSE;
-
-    switch (prop_id)
-    {
-    case PROP_ACTIVE:
-        gs_listener_set_active (listener, value);
-        ret = TRUE;
-        break;
-    default:
-        break;
-    }
-
-    return ret;
-}
-
-static void
-raise_error (DBusConnection *connection,
-             DBusMessage    *in_reply_to,
-             const char     *error_name,
-             char           *format, ...)
-{
-    char         buf[512];
-    DBusMessage *reply;
-
-    va_list args;
-    va_start (args, format);
-    vsnprintf (buf, sizeof (buf), format, args);
-    va_end (args);
-
-    gs_debug (buf);
-    reply = dbus_message_new_error (in_reply_to, error_name, buf);
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-}
-
-static void
-raise_syntax (DBusConnection *connection,
-              DBusMessage    *in_reply_to,
-              const char     *method_name)
-{
-    raise_error (connection, in_reply_to,
-                 GS_LISTENER_SERVICE ".SyntaxError",
-                 "There is a syntax error in the invocation of the method %s",
-                 method_name);
-}
-
-static guint32
-generate_cookie (void)
-{
-    guint32 cookie;
-
-    cookie = (guint32)g_random_int_range (1, G_MAXINT32);
-
-    return cookie;
-}
-
-static guint32
-listener_generate_unique_key (GSListener *listener,
-                              int         entry_type)
-{
-    guint32     cookie;
-    GHashTable *hash;
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-
-    do
-    {
-        cookie = generate_cookie ();
-    }
-    while (g_hash_table_lookup (hash, &cookie) != NULL);
-
-    return cookie;
-}
-
-static void
-listener_ref_entry_check (GSListener *listener,
-                          int         entry_type)
-{
-    switch (entry_type)
-    {
-    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;
-    }
-}
-
-static void
-add_session_inhibit (GSListener         *listener,
-                     GSListenerRefEntry *entry)
-{
-    DBusMessage    *message;
-    DBusMessage    *reply;
-    DBusMessageIter iter;
-    DBusMessageIter reply_iter;
-    DBusError       error;
-    guint           xid;
-    guint           flags;
-
-    g_return_if_fail (listener != NULL);
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (SESSION_NAME,
-                                            SESSION_PATH,
-                                            SESSION_INTERFACE,
-                                            "Inhibit");
-    if (message == NULL)
-    {
-        gs_debug ("Couldn't allocate the dbus message");
-        return;
-    }
-
-    dbus_message_iter_init_append (message, &iter);
-    xid = 0;
-    flags = 8;
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->application);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &xid);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->reason);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
-
-    /* FIXME: use async? */
-    reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
-            message,
-            -1,
-            &error);
-    dbus_message_unref (message);
-
-    if (dbus_error_is_set (&error))
-    {
-        gs_debug ("%s raised:\n %s\n\n", error.name, error.message);
-        dbus_error_free (&error);
-        return;
-    }
-
-    dbus_message_iter_init (reply, &reply_iter);
-    dbus_message_iter_get_basic (&reply_iter, &entry->foreign_cookie);
-
-    dbus_message_unref (reply);
-}
-
-static void
-remove_session_inhibit (GSListener         *listener,
-                        GSListenerRefEntry *entry)
-{
-    DBusMessage    *message;
-    DBusMessage    *reply;
-    DBusMessageIter iter;
-    DBusError       error;
-
-    g_return_if_fail (listener != NULL);
-
-    if (entry->foreign_cookie == 0)
-    {
-        gs_debug ("Can't remove inhibitor from session: Session cookie not set");
-        return;
-    }
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (SESSION_NAME,
-                                            SESSION_PATH,
-                                            SESSION_INTERFACE,
-                                            "Uninhibit");
-    if (message == NULL)
-    {
-        gs_debug ("Couldn't allocate the dbus message");
-        return;
-    }
-
-    dbus_message_iter_init_append (message, &iter);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &entry->foreign_cookie);
-
-    /* FIXME: use async? */
-    reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
-            message,
-            -1,
-            &error);
-    dbus_message_unref (message);
-
-    if (dbus_error_is_set (&error))
-    {
-        gs_debug ("%s raised:\n %s\n\n", error.name, error.message);
-        dbus_error_free (&error);
-        return;
-    }
-
-    dbus_message_unref (reply);
-}
-
-static void
-listener_add_ref_entry (GSListener         *listener,
-                        int                 entry_type,
-                        GSListenerRefEntry *entry)
-{
-    GHashTable *hash;
-
-    gs_debug ("adding %s from %s for reason '%s' on connection %s",
-              get_name_for_entry_type (entry_type),
-              entry->application,
-              entry->reason,
-              entry->connection);
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-    g_hash_table_insert (hash, &entry->cookie, entry);
-
-    if (entry_type == REF_ENTRY_TYPE_INHIBIT)
-    {
-        /* proxy inhibit over to mate session */
-        add_session_inhibit (listener, entry);
-    }
-
-    listener_ref_entry_check (listener, entry_type);
-}
-
-static gboolean
-listener_remove_ref_entry (GSListener *listener,
-                           int         entry_type,
-                           guint32     cookie)
-{
-    GHashTable         *hash;
-    gboolean            removed;
-    GSListenerRefEntry *entry;
-
-    removed = FALSE;
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-
-    entry = g_hash_table_lookup (hash, &cookie);
-    if (entry == NULL)
-    {
-        goto out;
-    }
-
-    gs_debug ("removing %s from %s for reason '%s' on connection %s",
-              get_name_for_entry_type (entry_type),
-              entry->application,
-              entry->reason,
-              entry->connection);
-
-    if (entry_type == REF_ENTRY_TYPE_INHIBIT)
-    {
-        /* remove inhibit from mate session */
-        remove_session_inhibit (listener, entry);
-    }
-
-    removed = g_hash_table_remove (hash, &cookie);
-out:
-    if (removed)
-    {
-        listener_ref_entry_check (listener, entry_type);
-    }
-    else
-    {
-        gs_debug ("Cookie %u was not in the list!", cookie);
-    }
-
-    return removed;
-}
-
-#if GLIB_CHECK_VERSION(2,12,0)
-#define _g_time_val_to_iso8601(t) g_time_val_to_iso8601(t)
-#else
-/* copied from GLib */
-static gchar *
-_g_time_val_to_iso8601 (GTimeVal *time_)
-{
-    gchar *retval;
-
-    g_return_val_if_fail (time_->tv_usec >= 0 && time_->tv_usec < G_USEC_PER_SEC, NULL);
-
-#define ISO_8601_LEN    21
-#define ISO_8601_FORMAT "%Y-%m-%dT%H:%M:%SZ"
-    retval = g_new0 (gchar, ISO_8601_LEN + 1);
-
-    strftime (retval, ISO_8601_LEN,
-              ISO_8601_FORMAT,
-              gmtime (&(time_->tv_sec)));
-
-    return retval;
-}
-#endif
-
-static void
-accumulate_ref_entry (gpointer            key,
-                      GSListenerRefEntry *entry,
-                      DBusMessageIter    *iter)
-{
-    char *description;
-    char *time;
-
-    time = _g_time_val_to_iso8601 (&entry->since);
-
-    description = g_strdup_printf ("Application=\"%s\"; Since=\"%s\"; Reason=\"%s\";",
-                                   entry->application,
-                                   time,
-                                   entry->reason);
-
-    dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &description);
-
-    g_free (description);
-    g_free (time);
-}
-
-static DBusHandlerResult
-listener_dbus_get_ref_entries (GSListener     *listener,
-                               int             entry_type,
-                               DBusConnection *connection,
-                               DBusMessage    *message)
-{
-    DBusMessage        *reply;
-    GHashTable         *hash;
-    DBusMessageIter     iter;
-    DBusMessageIter     iter_array;
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-
-    reply = dbus_message_new_method_return (message);
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_iter_init_append (reply, &iter);
-    dbus_message_iter_open_container (&iter,
-                                      DBUS_TYPE_ARRAY,
-                                      DBUS_TYPE_STRING_AS_STRING,
-                                      &iter_array);
-
-    if (hash != NULL)
-    {
-        g_hash_table_foreach (hash,
-                              (GHFunc)accumulate_ref_entry,
-                              &iter_array);
-    }
-
-    dbus_message_iter_close_container (&iter, &iter_array);
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    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,
-                             DBusConnection *connection,
-                             DBusMessage    *message)
-{
-    DBusMessage        *reply;
-    DBusError           error;
-    const char         *application;
-    const char         *reason;
-    GSListenerRefEntry *entry;
-    DBusMessageIter     iter;
-
-    dbus_error_init (&error);
-    if (! dbus_message_get_args (message, &error,
-                                 DBUS_TYPE_STRING, &application,
-                                 DBUS_TYPE_STRING, &reason,
-                                 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 ();
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-
-    reply = dbus_message_new_method_return (message);
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    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 (application);
-    entry->reason = g_strdup (reason);
-    g_get_current_time (&entry->since);
-
-    listener_add_ref_entry (listener, entry_type, entry);
-
-    dbus_message_iter_init_append (reply, &iter);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &entry->cookie);
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_dbus_remove_ref_entry (GSListener     *listener,
-                                int             entry_type,
-                                DBusConnection *connection,
-                                DBusMessage    *message)
-{
-    DBusMessage        *reply;
-    DBusError           error;
-    const char         *sender;
-    guint32             cookie;
-
-    dbus_error_init (&error);
-    if (! dbus_message_get_args (message, &error,
-                                 DBUS_TYPE_UINT32, &cookie,
-                                 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 ();
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-
-    reply = dbus_message_new_method_return (message);
-    if (reply == NULL)
-        g_error ("No memory");
-
-    /* FIXME: check sender is from same connection as entry */
-    sender = dbus_message_get_sender (message);
-
-    listener_remove_ref_entry (listener, entry_type, cookie);
-
-    /* FIXME:  Pointless? */
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static gboolean
-listener_ref_entry_remove_for_connection (GSListener  *listener,
-        int          entry_type,
-        const char  *connection)
-{
-    gboolean    removed;
-    GHashTable *hash;
-    GHashTableIter iter;
-    GSListenerRefEntry *entry;
-
-    if (connection == NULL)
-        return FALSE;
-
-    hash = get_hash_for_entry_type (listener, entry_type);
-
-    removed = FALSE;
-    g_hash_table_iter_init (&iter, hash);
-    while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&entry))
-    {
-        if (entry->connection != NULL &&
-                strcmp (connection, entry->connection) == 0)
-        {
-            gs_debug ("removing %s from %s for reason '%s' on connection %s",
-                      get_name_for_entry_type (entry->entry_type),
-                      entry->application,
-                      entry->reason,
-                      entry->connection);
-
-            if (entry->entry_type == REF_ENTRY_TYPE_INHIBIT)
-            {
-                /* remove inhibit from mate session */
-                remove_session_inhibit (listener, entry);
-            }
-
-            g_hash_table_iter_remove (&iter);
-            removed = TRUE;
-        }
-    }
-
-    return removed;
-}
-
-static void
-listener_service_deleted (GSListener  *listener,
-                          DBusMessage *message)
-{
-    const char *old_service_name;
-    const char *new_service_name;
-    gboolean    removed;
-
-    if (! dbus_message_get_args (message, NULL,
-                                 DBUS_TYPE_STRING, &old_service_name,
-                                 DBUS_TYPE_STRING, &new_service_name,
-                                 DBUS_TYPE_INVALID))
-    {
-        g_error ("Invalid NameOwnerChanged signal from bus!");
-        return;
-    }
-
-    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);
-    }
-
-}
-
-static void
-raise_property_type_error (DBusConnection *connection,
-                           DBusMessage    *in_reply_to,
-                           const char     *device_id)
-{
-    char         buf [512];
-    DBusMessage *reply;
-
-    snprintf (buf, 511,
-              "Type mismatch setting property with id %s",
-              device_id);
-    gs_debug (buf);
-
-    reply = dbus_message_new_error (in_reply_to,
-                                    TYPE_MISMATCH_ERROR,
-                                    buf);
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-listener_set_property (GSListener     *listener,
-                       DBusConnection *connection,
-                       DBusMessage    *message,
-                       guint           prop_id)
-{
-    const char     *path;
-    int             type;
-    gboolean        rc;
-    DBusMessageIter iter;
-    DBusMessage    *reply;
-
-    path = dbus_message_get_path (message);
-
-    dbus_message_iter_init (message, &iter);
-    type = dbus_message_iter_get_arg_type (&iter);
-    rc = FALSE;
-
-    switch (type)
-    {
-    case DBUS_TYPE_BOOLEAN:
-    {
-        dbus_bool_t v;
-        dbus_message_iter_get_basic (&iter, &v);
-        rc = listener_property_set_bool (listener, prop_id, v);
-        break;
-    }
-    default:
-        gs_debug ("Unsupported property type %d", type);
-        break;
-    }
-
-    if (! rc)
-    {
-        raise_property_type_error (connection, message, path);
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-
-    reply = dbus_message_new_method_return (message);
-
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_get_property (GSListener     *listener,
-                       DBusConnection *connection,
-                       DBusMessage    *message,
-                       guint           prop_id)
-{
-    DBusMessageIter iter;
-    DBusMessage    *reply;
-
-    reply = dbus_message_new_method_return (message);
-
-    dbus_message_iter_init_append (reply, &iter);
-
-    if (reply == NULL)
-        g_error ("No memory");
-
-    switch (prop_id)
-    {
-    case PROP_ACTIVE:
-    {
-        dbus_bool_t b;
-        b = listener->priv->active;
-        dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &b);
-    }
-    break;
-    default:
-        gs_debug ("Unsupported property id %u", prop_id);
-        break;
-    }
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_get_active_time (GSListener     *listener,
-                          DBusConnection *connection,
-                          DBusMessage    *message)
-{
-    DBusMessageIter iter;
-    DBusMessage    *reply;
-    dbus_uint32_t    secs;
-
-    reply = dbus_message_new_method_return (message);
-
-    dbus_message_iter_init_append (reply, &iter);
-
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    if (listener->priv->active)
-    {
-        time_t now = time (NULL);
-
-        if (now < listener->priv->active_start)
-        {
-            /* shouldn't happen */
-            gs_debug ("Active start time is in the future");
-            secs = 0;
-        }
-        else if (listener->priv->active_start <= 0)
-        {
-            /* shouldn't happen */
-            gs_debug ("Active start time was not set");
-            secs = 0;
-        }
-        else
-        {
-            secs = now - listener->priv->active_start;
-        }
-    }
-    else
-    {
-        secs = 0;
-    }
-
-    gs_debug ("Returning screensaver active for %u seconds", secs);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &secs);
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_show_message (GSListener     *listener,
-                       DBusConnection *connection,
-                       DBusMessage    *message)
-{
-    DBusMessageIter iter;
-    DBusMessage    *reply;
-    DBusError       error;
-
-    reply = dbus_message_new_method_return (message);
-
-    dbus_message_iter_init_append (reply, &iter);
-
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    if (listener->priv->active)
-    {
-        char *summary;
-        char *body;
-        char *icon;
-
-        /* if we're not active we ignore the request */
-
-        dbus_error_init (&error);
-        if (! dbus_message_get_args (message, &error,
-                                     DBUS_TYPE_STRING, &summary,
-                                     DBUS_TYPE_STRING, &body,
-                                     DBUS_TYPE_STRING, &icon,
-                                     DBUS_TYPE_INVALID))
-        {
-            raise_syntax (connection, message, "ShowMessage");
-            return DBUS_HANDLER_RESULT_HANDLED;
-        }
-
-        g_signal_emit (listener, signals [SHOW_MESSAGE], 0, summary, body, icon);
-    }
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-do_introspect (DBusConnection *connection,
-               DBusMessage    *message,
-               dbus_bool_t     local_interface)
-{
-    DBusMessage *reply;
-    GString     *xml;
-    char        *xml_string;
-
-    /* standard header */
-    xml = g_string_new ("<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-                        "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-                        "<node>\n"
-                        "  <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
-                        "    <method name=\"Introspect\">\n"
-                        "      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
-                        "    </method>\n"
-                        "  </interface>\n");
-
-    /* ScreenSaver interface */
-    xml = g_string_append (xml,
-                           "  <interface name=\"org.mate.ScreenSaver\">\n"
-                           "    <method name=\"Lock\">\n"
-                           "    </method>\n"
-                           "    <method name=\"Cycle\">\n"
-                           "    </method>\n"
-                           "    <method name=\"SimulateUserActivity\">\n"
-                           "    </method>\n"
-                           "    <method name=\"Inhibit\">\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=\"UnInhibit\">\n"
-                           "      <arg name=\"cookie\" direction=\"in\" type=\"u\"/>\n"
-                           "    </method>\n"
-                           "    <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"
-                           "    <method name=\"GetActiveTime\">\n"
-                           "      <arg name=\"seconds\" direction=\"out\" type=\"u\"/>\n"
-                           "    </method>\n"
-                           "    <method name=\"SetActive\">\n"
-                           "      <arg name=\"value\" direction=\"in\" type=\"b\"/>\n"
-                           "    </method>\n"
-                           "    <method name=\"ShowMessage\">\n"
-                           "      <arg name=\"summary\" direction=\"in\" type=\"s\"/>\n"
-                           "      <arg name=\"body\" direction=\"in\" type=\"s\"/>\n"
-                           "      <arg name=\"icon\" direction=\"in\" type=\"s\"/>\n"
-                           "    </method>\n"
-                           "    <signal name=\"ActiveChanged\">\n"
-                           "      <arg name=\"new_value\" type=\"b\"/>\n"
-                           "    </signal>\n"
-                           "  </interface>\n");
-
-    reply = dbus_message_new_method_return (message);
-
-    xml = g_string_append (xml, "</node>\n");
-    xml_string = g_string_free (xml, FALSE);
-
-    dbus_message_append_args (reply,
-                              DBUS_TYPE_STRING, &xml_string,
-                              DBUS_TYPE_INVALID);
-
-    g_free (xml_string);
-
-    if (reply == NULL)
-    {
-        g_error ("No memory");
-    }
-
-    if (! dbus_connection_send (connection, reply, NULL))
-    {
-        g_error ("No memory");
-    }
-
-    dbus_message_unref (reply);
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_dbus_handle_session_message (DBusConnection *connection,
-                                      DBusMessage    *message,
-                                      void           *user_data,
-                                      dbus_bool_t     local_interface)
-{
-    GSListener *listener = GS_LISTENER (user_data);
-
-#if 0
-    g_message ("obj_path=%s interface=%s method=%s destination=%s",
-               dbus_message_get_path (message),
-               dbus_message_get_interface (message),
-               dbus_message_get_member (message),
-               dbus_message_get_destination (message));
-#endif
-
-    g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-    g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Lock"))
-    {
-        g_signal_emit (listener, signals [LOCK], 0);
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Quit"))
-    {
-        g_signal_emit (listener, signals [QUIT], 0);
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Cycle"))
-    {
-        g_signal_emit (listener, signals [CYCLE], 0);
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "Inhibit"))
-    {
-        return listener_dbus_add_ref_entry (listener, REF_ENTRY_TYPE_INHIBIT, connection, message);
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "UnInhibit"))
-    {
-        return listener_dbus_remove_ref_entry (listener, REF_ENTRY_TYPE_INHIBIT, connection, message);
-    }
-    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);
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "GetActive"))
-    {
-        return listener_get_property (listener, connection, message, PROP_ACTIVE);
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "GetActiveTime"))
-    {
-        return listener_get_active_time (listener, connection, message);
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "ShowMessage"))
-    {
-        return listener_show_message (listener, connection, message);
-    }
-    if (dbus_message_is_method_call (message, GS_LISTENER_SERVICE, "SimulateUserActivity"))
-    {
-        g_signal_emit (listener, signals [SIMULATE_USER_ACTIVITY], 0);
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    if (dbus_message_is_method_call (message, "org.freedesktop.DBus.Introspectable", "Introspect"))
-    {
-        return do_introspect (connection, message, local_interface);
-    }
-
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static gboolean
-_listener_message_path_is_our_session (GSListener  *listener,
-                                       DBusMessage *message)
-{
-    const char *ssid;
-    gboolean    ours;
-
-    ours = FALSE;
-
-    ssid = dbus_message_get_path (message);
-    if (ssid != NULL
-            && listener->priv->session_id != NULL
-            && strcmp (ssid, listener->priv->session_id) == 0)
-    {
-        ours = TRUE;
-    }
-
-    return ours;
-}
-
-static DBusHandlerResult
-listener_dbus_handle_system_message (DBusConnection *connection,
-                                     DBusMessage    *message,
-                                     void           *user_data,
-                                     dbus_bool_t     local_interface)
-{
-    GSListener *listener = GS_LISTENER (user_data);
-
-    g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-    g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
-#if 1
-    gs_debug ("obj_path=%s interface=%s method=%s destination=%s",
-              dbus_message_get_path (message),
-              dbus_message_get_interface (message),
-              dbus_message_get_member (message),
-              dbus_message_get_destination (message));
-#endif
-
-    if (dbus_message_is_signal (message, HAL_DEVICE_INTERFACE, "Condition"))
-    {
-        DBusError   error;
-        const char *event;
-        const char *keyname;
-
-        dbus_error_init (&error);
-        if (dbus_message_get_args (message, &error,
-                                   DBUS_TYPE_STRING, &event,
-                                   DBUS_TYPE_STRING, &keyname,
-                                   DBUS_TYPE_INVALID))
-        {
-            if ((event && strcmp (event, "ButtonPressed") == 0) &&
-                    (keyname && strcmp (keyname, "coffee") == 0))
-            {
-                gs_debug ("Coffee key was pressed - locking");
-                g_signal_emit (listener, signals [LOCK], 0);
-            }
-        }
-
-        if (dbus_error_is_set (&error))
-        {
-            dbus_error_free (&error);
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    else if (dbus_message_is_signal (message, CK_SESSION_INTERFACE, "Unlock"))
-    {
-        if (_listener_message_path_is_our_session (listener, message))
-        {
-            gs_debug ("Console kit requested session unlock");
-            gs_listener_set_active (listener, FALSE);
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    else if (dbus_message_is_signal (message, CK_SESSION_INTERFACE, "Lock"))
-    {
-        if (_listener_message_path_is_our_session (listener, message))
-        {
-            gs_debug ("ConsoleKit requested session lock");
-            g_signal_emit (listener, signals [LOCK], 0);
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    else if (dbus_message_is_signal (message, CK_SESSION_INTERFACE, "ActiveChanged"))
-    {
-        /* NB that `ActiveChanged' refers to the active
-         * session in ConsoleKit terminology - ie which
-         * session is currently displayed on the screen.
-         * mate-screensaver uses `active' to mean `is the
-         * screensaver active' (ie, is the screen locked) but
-         * that's not what we're referring to here.
-         */
-
-        if (_listener_message_path_is_our_session (listener, message))
-        {
-            DBusError   error;
-            dbus_bool_t new_active;
-
-            dbus_error_init (&error);
-            if (dbus_message_get_args (message, &error,
-                                       DBUS_TYPE_BOOLEAN, &new_active,
-                                       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 */
-                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);
-                }
-            }
-
-            if (dbus_error_is_set (&error))
-            {
-                dbus_error_free (&error);
-            }
-        }
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static DBusHandlerResult
-gs_listener_message_handler (DBusConnection *connection,
-                             DBusMessage    *message,
-                             void           *user_data)
-{
-    g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-    g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
-#if 0
-    g_message ("obj_path=%s interface=%s method=%s destination=%s",
-               dbus_message_get_path (message),
-               dbus_message_get_interface (message),
-               dbus_message_get_member (message),
-               dbus_message_get_destination (message));
-#endif
-
-    if (dbus_message_is_method_call (message, "org.freedesktop.DBus", "AddMatch"))
-    {
-        DBusMessage *reply;
-
-        reply = dbus_message_new_method_return (message);
-
-        if (reply == NULL)
-        {
-            g_error ("No memory");
-        }
-
-        if (! dbus_connection_send (connection, reply, NULL))
-        {
-            g_error ("No memory");
-        }
-
-        dbus_message_unref (reply);
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    else if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") &&
-             strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0)
-    {
-        dbus_connection_unref (connection);
-
-        return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    else
-    {
-        return listener_dbus_handle_session_message (connection, message, user_data, TRUE);
-    }
-}
-
-static gboolean
-gs_listener_dbus_init (GSListener *listener)
-{
-    DBusError error;
-
-    dbus_error_init (&error);
-
-    if (listener->priv->connection == NULL)
-    {
-        listener->priv->connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
-        if (listener->priv->connection == NULL)
-        {
-            if (dbus_error_is_set (&error))
-            {
-                gs_debug ("couldn't connect to session bus: %s",
-                          error.message);
-                dbus_error_free (&error);
-            }
-            return FALSE;
-        }
-
-        dbus_connection_setup_with_g_main (listener->priv->connection, NULL);
-        dbus_connection_set_exit_on_disconnect (listener->priv->connection, FALSE);
-    }
-
-    if (listener->priv->system_connection == NULL)
-    {
-        listener->priv->system_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
-        if (listener->priv->system_connection == NULL)
-        {
-            if (dbus_error_is_set (&error))
-            {
-                gs_debug ("couldn't connect to system bus: %s",
-                          error.message);
-                dbus_error_free (&error);
-            }
-            return FALSE;
-        }
-
-        dbus_connection_setup_with_g_main (listener->priv->system_connection, NULL);
-        dbus_connection_set_exit_on_disconnect (listener->priv->system_connection, FALSE);
-    }
-
-    return TRUE;
-}
-
-static gboolean
-reinit_dbus (GSListener *listener)
-{
-    gboolean initialized;
-    gboolean try_again;
-
-    initialized = gs_listener_dbus_init (listener);
-
-    /* if we didn't initialize then try again */
-    /* FIXME: Should we keep trying forever?  If we fail more than
-       once or twice then the session bus may have died.  The
-       problem is that if it is restarted it will likely have a
-       different bus address and we won't be able to find it */
-    try_again = !initialized;
-
-    return try_again;
-}
-
-static DBusHandlerResult
-listener_dbus_filter_function (DBusConnection *connection,
-                               DBusMessage    *message,
-                               void           *user_data)
-{
-    GSListener *listener = GS_LISTENER (user_data);
-    const char *path;
-
-    path = dbus_message_get_path (message);
-
-    /*
-    g_message ("obj_path=%s interface=%s method=%s",
-               dbus_message_get_path (message),
-               dbus_message_get_interface (message),
-               dbus_message_get_member (message));
-    */
-
-    if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")
-            && strcmp (path, DBUS_PATH_LOCAL) == 0)
-    {
-
-        g_message ("Got disconnected from the session message bus; "
-                   "retrying to reconnect every 10 seconds");
-
-        dbus_connection_unref (connection);
-        listener->priv->connection = NULL;
-
-        g_timeout_add (10000, (GSourceFunc)reinit_dbus, listener);
-    }
-    else if (dbus_message_is_signal (message,
-                                     DBUS_INTERFACE_DBUS,
-                                     "NameOwnerChanged"))
-    {
-
-        if (listener->priv->inhibitors != NULL)
-        {
-            listener_service_deleted (listener, message);
-        }
-    }
-    else
-    {
-        return listener_dbus_handle_session_message (connection, message, user_data, FALSE);
-    }
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult
-listener_dbus_system_filter_function (DBusConnection *connection,
-                                      DBusMessage    *message,
-                                      void           *user_data)
-{
-    GSListener *listener = GS_LISTENER (user_data);
-    const char *path;
-
-    path = dbus_message_get_path (message);
-
-    if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected")
-            && strcmp (path, DBUS_PATH_LOCAL) == 0)
-    {
-
-        g_message ("Got disconnected from the system message bus; "
-                   "retrying to reconnect every 10 seconds");
-
-        dbus_connection_unref (connection);
-        listener->priv->system_connection = NULL;
-
-        g_timeout_add (10000, (GSourceFunc)reinit_dbus, listener);
-    }
-    else
-    {
-        return listener_dbus_handle_system_message (connection, message, user_data, FALSE);
-    }
-
-    return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static void
-gs_listener_set_property (GObject            *object,
-                          guint               prop_id,
-                          const GValue       *value,
-                          GParamSpec         *pspec)
-{
-    GSListener *self;
-
-    self = GS_LISTENER (object);
-
-    switch (prop_id)
-    {
-    case PROP_ACTIVE:
-        gs_listener_set_active (self, g_value_get_boolean (value));
-        break;
-    case PROP_SESSION_IDLE:
-        gs_listener_set_session_idle (self, g_value_get_boolean (value));
-        break;
-    case PROP_ACTIVATION_ENABLED:
-        gs_listener_set_activation_enabled (self, g_value_get_boolean (value));
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_listener_get_property (GObject            *object,
-                          guint               prop_id,
-                          GValue             *value,
-                          GParamSpec         *pspec)
-{
-    GSListener *self;
-
-    self = GS_LISTENER (object);
-
-    switch (prop_id)
-    {
-    case PROP_ACTIVE:
-        g_value_set_boolean (value, self->priv->active);
-        break;
-    case PROP_SESSION_IDLE:
-        g_value_set_boolean (value, self->priv->session_idle);
-        break;
-    case PROP_ACTIVATION_ENABLED:
-        g_value_set_boolean (value, self->priv->activation_enabled);
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_listener_class_init (GSListenerClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize     = gs_listener_finalize;
-    object_class->get_property = gs_listener_get_property;
-    object_class->set_property = gs_listener_set_property;
-
-    signals [LOCK] =
-        g_signal_new ("lock",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSListenerClass, lock),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-    signals [QUIT] =
-        g_signal_new ("quit",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSListenerClass, quit),
-                      NULL,
-                      NULL,
-                      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),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSListenerClass, simulate_user_activity),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-    signals [ACTIVE_CHANGED] =
-        g_signal_new ("active-changed",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSListenerClass, active_changed),
-                      NULL,
-                      NULL,
-                      gs_marshal_BOOLEAN__BOOLEAN,
-                      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),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSListenerClass, show_message),
-                      NULL,
-                      NULL,
-                      gs_marshal_VOID__STRING_STRING_STRING,
-                      G_TYPE_NONE,
-                      3,
-                      G_TYPE_STRING,
-                      G_TYPE_STRING,
-                      G_TYPE_STRING);
-
-    g_object_class_install_property (object_class,
-                                     PROP_ACTIVE,
-                                     g_param_spec_boolean ("active",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_ACTIVATION_ENABLED,
-                                     g_param_spec_boolean ("activation-enabled",
-                                             NULL,
-                                             NULL,
-                                             TRUE,
-                                             G_PARAM_READWRITE));
-
-    g_type_class_add_private (klass, sizeof (GSListenerPrivate));
-}
-
-
-static gboolean
-screensaver_is_running (DBusConnection *connection)
-{
-    DBusError error;
-    gboolean  exists;
-
-    g_return_val_if_fail (connection != NULL, FALSE);
-
-    dbus_error_init (&error);
-    exists = dbus_bus_name_has_owner (connection, GS_LISTENER_SERVICE, &error);
-    if (dbus_error_is_set (&error))
-    {
-        dbus_error_free (&error);
-    }
-
-    return exists;
-}
-
-gboolean
-gs_listener_acquire (GSListener *listener,
-                     GError    **error)
-{
-    gboolean  acquired;
-    DBusError buserror;
-    gboolean  is_connected;
-
-    g_return_val_if_fail (listener != NULL, FALSE);
-
-    if (! listener->priv->connection)
-    {
-        g_set_error (error,
-                     GS_LISTENER_ERROR,
-                     GS_LISTENER_ERROR_ACQUISITION_FAILURE,
-                     "%s",
-                     _("failed to register with the message bus"));
-        return FALSE;
-    }
-
-    is_connected = dbus_connection_get_is_connected (listener->priv->connection);
-    if (! is_connected)
-    {
-        g_set_error (error,
-                     GS_LISTENER_ERROR,
-                     GS_LISTENER_ERROR_ACQUISITION_FAILURE,
-                     "%s",
-                     _("not connected to the message bus"));
-        return FALSE;
-    }
-
-    if (screensaver_is_running (listener->priv->connection))
-    {
-        g_set_error (error,
-                     GS_LISTENER_ERROR,
-                     GS_LISTENER_ERROR_ACQUISITION_FAILURE,
-                     "%s",
-                     _("screensaver already running in this session"));
-        return FALSE;
-    }
-
-    dbus_error_init (&buserror);
-
-    if (dbus_connection_register_object_path (listener->priv->connection,
-            GS_LISTENER_PATH,
-            &gs_listener_vtable,
-            listener) == FALSE)
-    {
-        g_critical ("out of memory registering object path");
-        return FALSE;
-    }
-
-    acquired = dbus_bus_request_name (listener->priv->connection,
-                                      GS_LISTENER_SERVICE,
-                                      0, &buserror) != -1;
-    if (dbus_error_is_set (&buserror))
-    {
-        g_set_error (error,
-                     GS_LISTENER_ERROR,
-                     GS_LISTENER_ERROR_ACQUISITION_FAILURE,
-                     "%s",
-                     buserror.message);
-    }
-
-    dbus_error_free (&buserror);
-
-    dbus_connection_add_filter (listener->priv->connection, listener_dbus_filter_function, listener, NULL);
-
-    dbus_bus_add_match (listener->priv->connection,
-                        "type='signal'"
-                        ",interface='"DBUS_INTERFACE_DBUS"'"
-                        ",sender='"DBUS_SERVICE_DBUS"'"
-                        ",member='NameOwnerChanged'",
-                        NULL);
-
-    if (listener->priv->system_connection != NULL)
-    {
-        dbus_connection_add_filter (listener->priv->system_connection,
-                                    listener_dbus_system_filter_function,
-                                    listener,
-                                    NULL);
-
-        dbus_bus_add_match (listener->priv->system_connection,
-                            "type='signal'"
-                            ",interface='"HAL_DEVICE_INTERFACE"'"
-                            ",member='Condition'",
-                            NULL);
-        dbus_bus_add_match (listener->priv->system_connection,
-                            "type='signal'"
-                            ",interface='"CK_SESSION_INTERFACE"'"
-                            ",member='Unlock'",
-                            NULL);
-        dbus_bus_add_match (listener->priv->system_connection,
-                            "type='signal'"
-                            ",interface='"CK_SESSION_INTERFACE"'"
-                            ",member='Lock'",
-                            NULL);
-        dbus_bus_add_match (listener->priv->system_connection,
-                            "type='signal'"
-                            ",interface='"CK_SESSION_INTERFACE"'"
-                            ",member='ActiveChanged'",
-                            NULL);
-    }
-
-    return acquired;
-}
-
-static char *
-query_session_id (GSListener *listener)
-{
-    DBusMessage    *message;
-    DBusMessage    *reply;
-    DBusError       error;
-    DBusMessageIter reply_iter;
-    char           *ssid;
-
-    if (listener->priv->system_connection == NULL)
-    {
-        gs_debug ("No connection to the system bus");
-        return NULL;
-    }
-
-    ssid = NULL;
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (CK_NAME, CK_MANAGER_PATH, CK_MANAGER_INTERFACE, "GetCurrentSession");
-    if (message == NULL)
-    {
-        gs_debug ("Couldn't allocate the dbus message");
-        return NULL;
-    }
-
-    /* FIXME: use async? */
-    reply = dbus_connection_send_with_reply_and_block (listener->priv->system_connection,
-            message,
-            -1, &error);
-    dbus_message_unref (message);
-
-    if (dbus_error_is_set (&error))
-    {
-        gs_debug ("%s raised:\n %s\n\n", error.name, error.message);
-        dbus_error_free (&error);
-        return NULL;
-    }
-
-    dbus_message_iter_init (reply, &reply_iter);
-    dbus_message_iter_get_basic (&reply_iter, &ssid);
-
-    dbus_message_unref (reply);
-
-    return g_strdup (ssid);
-}
-
-static void
-init_session_id (GSListener *listener)
-{
-    g_free (listener->priv->session_id);
-    listener->priv->session_id = query_session_id (listener);
-    gs_debug ("Got session-id: %s", listener->priv->session_id);
-}
-
-static void
-gs_listener_init (GSListener *listener)
-{
-    listener->priv = GS_LISTENER_GET_PRIVATE (listener);
-
-    gs_listener_dbus_init (listener);
-
-    init_session_id (listener);
-
-    listener->priv->inhibitors = g_hash_table_new_full (g_int_hash,
-                                 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
-gs_listener_finalize (GObject *object)
-{
-    GSListener *listener;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_LISTENER (object));
-
-    listener = GS_LISTENER (object);
-
-    g_return_if_fail (listener->priv != NULL);
-
-    if (listener->priv->inhibitors)
-    {
-        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);
-}
-
-GSListener *
-gs_listener_new (void)
-{
-    GSListener *listener;
-
-    listener = g_object_new (GS_TYPE_LISTENER, NULL);
-
-    return GS_LISTENER (listener);
-}
diff --git a/src/gs-listener-dbus.h.orig b/src/gs-listener-dbus.h.orig
deleted file mode 100644
index 40a7e99..0000000
--- a/src/gs-listener-dbus.h.orig
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_LISTENER_H
-#define __GS_LISTENER_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_LISTENER         (gs_listener_get_type ())
-#define GS_LISTENER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_LISTENER, GSListener))
-#define GS_LISTENER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_LISTENER, GSListenerClass))
-#define GS_IS_LISTENER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_LISTENER))
-#define GS_IS_LISTENER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_LISTENER))
-#define GS_LISTENER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_LISTENER, GSListenerClass))
-
-typedef struct GSListenerPrivate GSListenerPrivate;
-
-typedef struct
-{
-    GObject            parent;
-    GSListenerPrivate *priv;
-} GSListener;
-
-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,
-            gboolean    active);
-    void            (* throttle_changed)         (GSListener *listener,
-            gboolean    throttled);
-    void            (* show_message)             (GSListener *listener,
-            const char *summary,
-            const char *body,
-            const char *icon);
-
-} GSListenerClass;
-
-typedef enum
-{
-    GS_LISTENER_ERROR_SERVICE_UNAVAILABLE,
-    GS_LISTENER_ERROR_ACQUISITION_FAILURE,
-    GS_LISTENER_ERROR_ACTIVATION_FAILURE
-} GSListenerError;
-
-#define GS_LISTENER_ERROR gs_listener_error_quark ()
-
-GQuark      gs_listener_error_quark             (void);
-
-GType       gs_listener_get_type                (void);
-
-GSListener *gs_listener_new                     (void);
-gboolean    gs_listener_acquire                 (GSListener *listener,
-        GError    **error);
-gboolean    gs_listener_set_active              (GSListener *listener,
-        gboolean    active);
-gboolean    gs_listener_set_session_idle        (GSListener *listener,
-        gboolean    idle);
-void        gs_listener_set_activation_enabled  (GSListener *listener,
-        gboolean    enabled);
-gboolean    gs_listener_get_activation_enabled  (GSListener *listener);
-gboolean    gs_listener_is_inhibited            (GSListener *listener);
-
-G_END_DECLS
-
-#endif /* __GS_LISTENER_H */
diff --git a/src/gs-lock-plug.c.orig b/src/gs-lock-plug.c.orig
deleted file mode 100644
index 6b5856c..0000000
--- a/src/gs-lock-plug.c.orig
+++ /dev/null
@@ -1,2050 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/utsname.h>
-
-#include <glib/gprintf.h>
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-#include <gdk/gdkx.h>
-#include <X11/XKBlib.h>
-#include <gtk/gtk.h>
-#include <mateconf/mateconf-client.h>
-
-#ifdef WITH_KBD_LAYOUT_INDICATOR
-#include <libmatekbd/matekbd-indicator.h>
-#endif
-
-#ifdef WITH_LIBMATENOTIFY
-#include <libmatenotify/notify.h>
-#endif
-
-#include "gs-lock-plug.h"
-
-#include "gs-debug.h"
-
-#define KEY_LOCK_DIALOG_THEME "/apps/mate-screensaver/lock_dialog_theme"
-#define MDM_FLEXISERVER_COMMAND "mdmflexiserver"
-#define MDM_FLEXISERVER_ARGS    "--startnew Standard"
-
-/* same as SMS ;) */
-#define NOTE_BUFFER_MAX_CHARS 160
-
-enum
-{
-    AUTH_PAGE = 0,
-};
-
-#define FACE_ICON_SIZE 48
-#define DIALOG_TIMEOUT_MSEC 60000
-
-static void gs_lock_plug_finalize   (GObject         *object);
-
-#define GS_LOCK_PLUG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_LOCK_PLUG, GSLockPlugPrivate))
-
-struct GSLockPlugPrivate
-{
-    GtkWidget   *vbox;
-    GtkWidget   *auth_action_area;
-
-    GtkWidget   *notebook;
-    GtkWidget   *auth_face_image;
-    GtkWidget   *auth_realname_label;
-    GtkWidget   *auth_username_label;
-    GtkWidget   *auth_prompt_label;
-    GtkWidget   *auth_prompt_entry;
-    GtkWidget   *auth_prompt_box;
-    GtkWidget   *auth_capslock_label;
-    GtkWidget   *auth_message_label;
-    GtkWidget   *status_message_label;
-
-    GtkWidget   *auth_unlock_button;
-    GtkWidget   *auth_switch_button;
-    GtkWidget   *auth_cancel_button;
-    GtkWidget   *auth_logout_button;
-    GtkWidget   *auth_note_button;
-    GtkWidget   *note_tab;
-    GtkWidget   *note_tab_label;
-    GtkWidget   *note_text_view;
-    GtkWidget   *note_ok_button;
-    GtkWidget   *note_cancel_button;
-
-    GtkWidget   *auth_prompt_kbd_layout_indicator;
-
-    gboolean     caps_lock_on;
-    gboolean     switch_enabled;
-    gboolean     leave_note_enabled;
-    gboolean     logout_enabled;
-    char        *logout_command;
-    char        *status_message;
-
-    guint        timeout;
-
-    guint        cancel_timeout_id;
-    guint        auth_check_idle_id;
-    guint        response_idle_id;
-
-    GList       *key_events;
-};
-
-typedef struct _ResponseData ResponseData;
-
-struct _ResponseData
-{
-    gint response_id;
-};
-
-
-enum
-{
-    RESPONSE,
-    CLOSE,
-    LAST_SIGNAL
-};
-
-enum
-{
-    PROP_0,
-    PROP_LOGOUT_ENABLED,
-    PROP_LOGOUT_COMMAND,
-    PROP_SWITCH_ENABLED,
-    PROP_STATUS_MESSAGE
-};
-
-static guint lock_plug_signals [LAST_SIGNAL];
-
-G_DEFINE_TYPE (GSLockPlug, gs_lock_plug, GTK_TYPE_PLUG)
-
-static void
-gs_lock_plug_style_set (GtkWidget *widget,
-                        GtkStyle  *previous_style)
-{
-    GSLockPlug *plug;
-
-    if (GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->style_set)
-    {
-        GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->style_set (widget, previous_style);
-    }
-
-    plug = GS_LOCK_PLUG (widget);
-
-    if (! plug->priv->vbox)
-    {
-        return;
-    }
-
-    gtk_container_set_border_width (GTK_CONTAINER (plug->priv->vbox), 12);
-    gtk_box_set_spacing (GTK_BOX (plug->priv->vbox), 12);
-
-    gtk_container_set_border_width (GTK_CONTAINER (plug->priv->auth_action_area), 0);
-    gtk_box_set_spacing (GTK_BOX (plug->priv->auth_action_area), 5);
-}
-
-static void
-do_user_switch (GSLockPlug *plug)
-{
-    GError  *error;
-    gboolean res;
-    char    *command;
-
-    command = g_strdup_printf ("%s %s",
-                               MDM_FLEXISERVER_COMMAND,
-                               MDM_FLEXISERVER_ARGS);
-
-    error = NULL;
-    res = gdk_spawn_command_line_on_screen (gdk_screen_get_default (),
-                                            command,
-                                            &error);
-
-    g_free (command);
-
-    if (! res)
-    {
-        gs_debug ("Unable to start MDM greeter: %s", error->message);
-        g_error_free (error);
-    }
-}
-
-static void
-set_status_text (GSLockPlug *plug,
-                 const char *text)
-{
-    if (plug->priv->auth_message_label != NULL)
-    {
-        gtk_label_set_text (GTK_LABEL (plug->priv->auth_message_label), text);
-    }
-}
-
-void
-gs_lock_plug_set_sensitive (GSLockPlug *plug,
-                            gboolean    sensitive)
-{
-    g_return_if_fail (GS_IS_LOCK_PLUG (plug));
-
-    gtk_widget_set_sensitive (plug->priv->auth_prompt_entry, sensitive);
-    gtk_widget_set_sensitive (plug->priv->auth_action_area, sensitive);
-}
-
-static void
-remove_cancel_timeout (GSLockPlug *plug)
-{
-    if (plug->priv->cancel_timeout_id > 0)
-    {
-        g_source_remove (plug->priv->cancel_timeout_id);
-        plug->priv->cancel_timeout_id = 0;
-    }
-}
-
-static void
-remove_response_idle (GSLockPlug *plug)
-{
-    if (plug->priv->response_idle_id > 0)
-    {
-        g_source_remove (plug->priv->response_idle_id);
-        plug->priv->response_idle_id = 0;
-    }
-}
-
-static void
-gs_lock_plug_response (GSLockPlug *plug,
-                       gint        response_id)
-{
-    int new_response;
-
-    new_response = response_id;
-
-    g_return_if_fail (GS_IS_LOCK_PLUG (plug));
-
-    /* Act only on response IDs we recognize */
-    if (!(response_id == GS_LOCK_PLUG_RESPONSE_OK
-            || response_id == GS_LOCK_PLUG_RESPONSE_CANCEL))
-    {
-        return;
-    }
-
-    remove_cancel_timeout (plug);
-    remove_response_idle (plug);
-
-    if (response_id == GS_LOCK_PLUG_RESPONSE_CANCEL)
-    {
-        gtk_entry_set_text (GTK_ENTRY (plug->priv->auth_prompt_entry), "");
-    }
-
-    g_signal_emit (plug,
-                   lock_plug_signals [RESPONSE],
-                   0,
-                   new_response);
-}
-
-static gboolean
-response_cancel_idle_cb (GSLockPlug *plug)
-{
-    plug->priv->response_idle_id = 0;
-
-    gs_lock_plug_response (plug, GS_LOCK_PLUG_RESPONSE_CANCEL);
-
-    return FALSE;
-}
-
-static gboolean
-dialog_timed_out (GSLockPlug *plug)
-{
-    gs_lock_plug_set_sensitive (plug, FALSE);
-    set_status_text (plug, _("Time has expired."));
-
-    if (plug->priv->response_idle_id != 0)
-    {
-        g_warning ("Response idle ID already set but shouldn't be");
-    }
-
-    remove_response_idle (plug);
-
-    plug->priv->response_idle_id = g_timeout_add (2000,
-                                   (GSourceFunc)response_cancel_idle_cb,
-                                   plug);
-    return FALSE;
-}
-
-
-static void
-capslock_update (GSLockPlug *plug,
-                 gboolean    is_on)
-{
-
-    plug->priv->caps_lock_on = is_on;
-
-    if (plug->priv->auth_capslock_label == NULL)
-    {
-        return;
-    }
-
-    if (is_on)
-    {
-        gtk_label_set_text (GTK_LABEL (plug->priv->auth_capslock_label),
-                            _("You have the Caps Lock key on."));
-    }
-    else
-    {
-        gtk_label_set_text (GTK_LABEL (plug->priv->auth_capslock_label),
-                            "");
-    }
-}
-
-static gboolean
-is_capslock_on (void)
-{
-    XkbStateRec states;
-    Display    *dsp;
-
-    dsp = GDK_DISPLAY ();
-    if (XkbGetState (dsp, XkbUseCoreKbd, &states) != Success)
-    {
-        return FALSE;
-    }
-
-    return (states.locked_mods & LockMask) != 0;
-}
-
-static void
-restart_cancel_timeout (GSLockPlug *plug)
-{
-    remove_cancel_timeout (plug);
-
-    plug->priv->cancel_timeout_id = g_timeout_add (plug->priv->timeout,
-                                    (GSourceFunc)dialog_timed_out,
-                                    plug);
-}
-
-void
-gs_lock_plug_get_text (GSLockPlug *plug,
-                       char      **text)
-{
-    const char *typed_text;
-    char       *null_text;
-    char       *local_text;
-
-    typed_text = gtk_entry_get_text (GTK_ENTRY (plug->priv->auth_prompt_entry));
-    local_text = g_locale_from_utf8 (typed_text, strlen (typed_text), NULL, NULL, NULL);
-
-    null_text = g_strnfill (strlen (typed_text) + 1, '\b');
-    gtk_entry_set_text (GTK_ENTRY (plug->priv->auth_prompt_entry), null_text);
-    gtk_entry_set_text (GTK_ENTRY (plug->priv->auth_prompt_entry), "");
-    g_free (null_text);
-
-    if (text != NULL)
-    {
-        *text = local_text;
-    }
-}
-
-typedef struct
-{
-    GSLockPlug *plug;
-    gint response_id;
-    GMainLoop *loop;
-    gboolean destroyed;
-} RunInfo;
-
-static void
-shutdown_loop (RunInfo *ri)
-{
-    if (g_main_loop_is_running (ri->loop))
-        g_main_loop_quit (ri->loop);
-}
-
-static void
-run_unmap_handler (GSLockPlug *plug,
-                   gpointer data)
-{
-    RunInfo *ri = data;
-
-    shutdown_loop (ri);
-}
-
-static void
-run_response_handler (GSLockPlug *plug,
-                      gint response_id,
-                      gpointer data)
-{
-    RunInfo *ri;
-
-    ri = data;
-
-    ri->response_id = response_id;
-
-    shutdown_loop (ri);
-}
-
-static gint
-run_delete_handler (GSLockPlug *plug,
-                    GdkEventAny *event,
-                    gpointer data)
-{
-    RunInfo *ri = data;
-
-    shutdown_loop (ri);
-
-    return TRUE; /* Do not destroy */
-}
-
-static void
-run_destroy_handler (GSLockPlug *plug,
-                     gpointer data)
-{
-    RunInfo *ri = data;
-
-    /* shutdown_loop will be called by run_unmap_handler */
-    ri->destroyed = TRUE;
-}
-
-/* adapted from GTK+ gtkdialog.c */
-int
-gs_lock_plug_run (GSLockPlug *plug)
-{
-    RunInfo ri = { NULL, GTK_RESPONSE_NONE, NULL, FALSE };
-    gboolean was_modal;
-    gulong response_handler;
-    gulong unmap_handler;
-    gulong destroy_handler;
-    gulong delete_handler;
-
-    g_return_val_if_fail (GS_IS_LOCK_PLUG (plug), -1);
-
-    g_object_ref (plug);
-
-    was_modal = GTK_WINDOW (plug)->modal;
-    if (!was_modal)
-    {
-        gtk_window_set_modal (GTK_WINDOW (plug), TRUE);
-    }
-
-    if (!GTK_WIDGET_VISIBLE (plug))
-    {
-        gtk_widget_show (GTK_WIDGET (plug));
-    }
-
-    response_handler =
-        g_signal_connect (plug,
-                          "response",
-                          G_CALLBACK (run_response_handler),
-                          &ri);
-
-    unmap_handler =
-        g_signal_connect (plug,
-                          "unmap",
-                          G_CALLBACK (run_unmap_handler),
-                          &ri);
-
-    delete_handler =
-        g_signal_connect (plug,
-                          "delete_event",
-                          G_CALLBACK (run_delete_handler),
-                          &ri);
-
-    destroy_handler =
-        g_signal_connect (plug,
-                          "destroy",
-                          G_CALLBACK (run_destroy_handler),
-                          &ri);
-
-    ri.loop = g_main_loop_new (NULL, FALSE);
-
-    GDK_THREADS_LEAVE ();
-    g_main_loop_run (ri.loop);
-    GDK_THREADS_ENTER ();
-
-    g_main_loop_unref (ri.loop);
-
-    ri.loop = NULL;
-
-    if (!ri.destroyed)
-    {
-        if (! was_modal)
-        {
-            gtk_window_set_modal (GTK_WINDOW (plug), FALSE);
-        }
-
-        g_signal_handler_disconnect (plug, response_handler);
-        g_signal_handler_disconnect (plug, unmap_handler);
-        g_signal_handler_disconnect (plug, delete_handler);
-        g_signal_handler_disconnect (plug, destroy_handler);
-    }
-
-    g_object_unref (plug);
-
-    return ri.response_id;
-}
-
-
-static cairo_surface_t *
-surface_from_pixbuf (GdkPixbuf *pixbuf)
-{
-    cairo_surface_t *surface;
-    cairo_t         *cr;
-
-    surface = cairo_image_surface_create (gdk_pixbuf_get_has_alpha (pixbuf) ?
-                                          CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24,
-                                          gdk_pixbuf_get_width (pixbuf),
-                                          gdk_pixbuf_get_height (pixbuf));
-    cr = cairo_create (surface);
-    gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
-    cairo_paint (cr);
-    cairo_destroy (cr);
-
-    return surface;
-}
-
-static void
-rounded_rectangle (cairo_t *cr,
-                   gdouble  aspect,
-                   gdouble  x,
-                   gdouble  y,
-                   gdouble  corner_radius,
-                   gdouble  width,
-                   gdouble  height)
-{
-    gdouble radius;
-    gdouble degrees;
-
-    radius = corner_radius / aspect;
-    degrees = G_PI / 180.0;
-
-    cairo_new_sub_path (cr);
-    cairo_arc (cr,
-               x + width - radius,
-               y + radius,
-               radius,
-               -90 * degrees,
-               0 * degrees);
-    cairo_arc (cr,
-               x + width - radius,
-               y + height - radius,
-               radius,
-               0 * degrees,
-               90 * degrees);
-    cairo_arc (cr,
-               x + radius,
-               y + height - radius,
-               radius,
-               90 * degrees,
-               180 * degrees);
-    cairo_arc (cr,
-               x + radius,
-               y + radius,
-               radius,
-               180 * degrees,
-               270 * degrees);
-    cairo_close_path (cr);
-}
-
-static void
-image_set_from_pixbuf (GtkImage  *image,
-                       GdkPixbuf *source)
-{
-    cairo_t         *cr;
-    cairo_t         *cr_mask;
-    cairo_surface_t *surface;
-    GdkPixmap       *pixmap;
-    GdkPixmap       *bitmask;
-    int              w;
-    int              h;
-    int              frame_width;
-    double           radius;
-    GdkColor         color;
-    double           r;
-    double           g;
-    double           b;
-
-    frame_width = 5;
-
-    w = gdk_pixbuf_get_width (source) + frame_width * 2;
-    h = gdk_pixbuf_get_height (source) + frame_width * 2;
-
-    radius = w / 10;
-
-    pixmap = gdk_pixmap_new (GTK_WIDGET (image)->window, w, h, -1);
-    bitmask = gdk_pixmap_new (GTK_WIDGET (image)->window, w, h, 1);
-
-    cr = gdk_cairo_create (pixmap);
-    cr_mask = gdk_cairo_create (bitmask);
-
-    /* setup mask */
-    cairo_rectangle (cr_mask, 0, 0, w, h);
-    cairo_set_operator (cr_mask, CAIRO_OPERATOR_CLEAR);
-    cairo_fill (cr_mask);
-
-    rounded_rectangle (cr_mask, 1.0, 0.5, 0.5, radius, w - 1, h - 1);
-    cairo_set_operator (cr_mask, CAIRO_OPERATOR_OVER);
-    cairo_set_source_rgb (cr_mask, 1, 1, 1);
-    cairo_fill (cr_mask);
-
-    color = GTK_WIDGET (image)->style->bg [GTK_STATE_NORMAL];
-    r = (float)color.red / 65535.0;
-    g = (float)color.green / 65535.0;
-    b = (float)color.blue / 65535.0;
-
-    /* set up image */
-    cairo_rectangle (cr, 0, 0, w, h);
-    cairo_set_source_rgb (cr, r, g, b);
-    cairo_fill (cr);
-
-    rounded_rectangle (cr,
-                       1.0,
-                       frame_width + 0.5,
-                       frame_width + 0.5,
-                       radius,
-                       w - frame_width * 2 - 1,
-                       h - frame_width * 2 - 1);
-    cairo_set_source_rgba (cr, 0.5, 0.5, 0.5, 0.3);
-    cairo_fill_preserve (cr);
-
-    surface = surface_from_pixbuf (source);
-    cairo_set_source_surface (cr, surface, frame_width, frame_width);
-    cairo_fill (cr);
-
-    gtk_image_set_from_pixmap (image, pixmap, bitmask);
-
-    cairo_surface_destroy (surface);
-
-    g_object_unref (bitmask);
-    g_object_unref (pixmap);
-
-    cairo_destroy (cr_mask);
-    cairo_destroy (cr);
-}
-
-
-static gboolean
-check_user_file (const gchar *filename,
-                 uid_t        user,
-                 gssize       max_file_size,
-                 gboolean     relax_group,
-                 gboolean     relax_other)
-{
-    struct stat fileinfo;
-
-    if (max_file_size < 0)
-    {
-        max_file_size = G_MAXSIZE;
-    }
-
-    /* Exists/Readable? */
-    if (g_stat (filename, &fileinfo) < 0)
-    {
-        return FALSE;
-    }
-
-    /* Is a regular file */
-    if (G_UNLIKELY (!S_ISREG (fileinfo.st_mode)))
-    {
-        return FALSE;
-    }
-
-    /* Owned by user? */
-    if (G_UNLIKELY (fileinfo.st_uid != user))
-    {
-        return FALSE;
-    }
-
-    /* Group not writable or relax_group? */
-    if (G_UNLIKELY ((fileinfo.st_mode & S_IWGRP) == S_IWGRP && !relax_group))
-    {
-        return FALSE;
-    }
-
-    /* Other not writable or relax_other? */
-    if (G_UNLIKELY ((fileinfo.st_mode & S_IWOTH) == S_IWOTH && !relax_other))
-    {
-        return FALSE;
-    }
-
-    /* Size is kosher? */
-    if (G_UNLIKELY (fileinfo.st_size > max_file_size))
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-static gboolean
-set_face_image (GSLockPlug *plug)
-{
-    GdkPixbuf    *pixbuf;
-    const char   *homedir;
-    char         *path;
-    int           icon_size = 96;
-    gsize         user_max_file = 65536;
-    uid_t         uid;
-
-    homedir = g_get_home_dir ();
-    uid = getuid ();
-
-    path = g_build_filename (homedir, ".face", NULL);
-
-    pixbuf = NULL;
-    if (check_user_file (path, uid, user_max_file, 0, 0))
-    {
-        pixbuf = gdk_pixbuf_new_from_file_at_size (path,
-                 icon_size,
-                 icon_size,
-                 NULL);
-    }
-
-    g_free (path);
-
-    if (pixbuf == NULL)
-    {
-        return FALSE;
-    }
-
-    image_set_from_pixbuf (GTK_IMAGE (plug->priv->auth_face_image), pixbuf);
-
-    g_object_unref (pixbuf);
-
-    return TRUE;
-}
-
-static void
-gs_lock_plug_show (GtkWidget *widget)
-{
-    GSLockPlug *plug = GS_LOCK_PLUG (widget);
-
-    gs_profile_start (NULL);
-
-    gs_profile_start ("parent");
-    if (GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->show)
-    {
-        GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->show (widget);
-    }
-
-    gs_profile_end ("parent");
-
-
-    if (plug->priv->auth_face_image)
-    {
-        set_face_image (plug);
-    }
-
-    capslock_update (plug, is_capslock_on ());
-
-    restart_cancel_timeout (plug);
-
-    gs_profile_end (NULL);
-}
-
-static void
-gs_lock_plug_hide (GtkWidget *widget)
-{
-    if (GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->hide)
-    {
-        GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->hide (widget);
-    }
-}
-
-static void
-queue_key_event (GSLockPlug  *plug,
-                 GdkEventKey *event)
-{
-    GdkEvent *saved_event;
-
-    saved_event = gdk_event_copy ((GdkEvent *)event);
-    plug->priv->key_events = g_list_prepend (plug->priv->key_events,
-                             saved_event);
-}
-
-static void
-forward_key_events (GSLockPlug *plug)
-{
-    plug->priv->key_events = g_list_reverse (plug->priv->key_events);
-    while (plug->priv->key_events != NULL)
-    {
-        GdkEventKey *event = plug->priv->key_events->data;
-
-        gtk_window_propagate_key_event (GTK_WINDOW (plug), event);
-
-        gdk_event_free ((GdkEvent *)event);
-
-        plug->priv->key_events = g_list_delete_link (plug->priv->key_events,
-                                 plug->priv->key_events);
-    }
-}
-
-static void
-gs_lock_plug_size_request (GtkWidget      *widget,
-                           GtkRequisition *requisition)
-{
-    GSLockPlug *plug = GS_LOCK_PLUG (widget);
-    int mod_width;
-    int mod_height;
-
-    if (GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->size_request)
-    {
-        GTK_WIDGET_CLASS (gs_lock_plug_parent_class)->size_request (widget, requisition);
-    }
-
-    /* don't constrain size when themed */
-    if (plug->priv->vbox == NULL)
-    {
-        return;
-    }
-
-    mod_width = requisition->height * 1.3;
-    mod_height = requisition->width / 1.6;
-    if (requisition->width < mod_width)
-    {
-        /* if the dialog is tall fill out the width */
-        requisition->width = mod_width;
-    }
-    else if (requisition->height < mod_height)
-    {
-        /* if the dialog is wide fill out the height */
-        requisition->height = mod_height;
-    }
-}
-
-static void
-gs_lock_plug_set_logout_enabled (GSLockPlug *plug,
-                                 gboolean    logout_enabled)
-{
-    g_return_if_fail (GS_LOCK_PLUG (plug));
-
-    if (plug->priv->logout_enabled == logout_enabled)
-    {
-        return;
-    }
-
-    plug->priv->logout_enabled = logout_enabled;
-    g_object_notify (G_OBJECT (plug), "logout-enabled");
-
-    if (plug->priv->auth_logout_button == NULL)
-    {
-        return;
-    }
-
-    if (logout_enabled)
-    {
-        gtk_widget_show (plug->priv->auth_logout_button);
-    }
-    else
-    {
-        gtk_widget_hide (plug->priv->auth_logout_button);
-    }
-}
-
-static void
-gs_lock_plug_set_logout_command (GSLockPlug *plug,
-                                 const char *command)
-{
-    g_return_if_fail (GS_LOCK_PLUG (plug));
-
-    g_free (plug->priv->logout_command);
-
-    if (command)
-    {
-        plug->priv->logout_command = g_strdup (command);
-    }
-    else
-    {
-        plug->priv->logout_command = NULL;
-    }
-}
-
-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
-gs_lock_plug_set_status_message (GSLockPlug *plug,
-                                 const char *status_message)
-{
-    g_return_if_fail (GS_LOCK_PLUG (plug));
-
-    g_free (plug->priv->status_message);
-    plug->priv->status_message = g_strdup (status_message);
-
-    if (plug->priv->status_message_label)
-    {
-        if (plug->priv->status_message)
-        {
-            gtk_label_set_text (GTK_LABEL (plug->priv->status_message_label),
-                                plug->priv->status_message);
-            gtk_widget_show (plug->priv->status_message_label);
-        }
-        else
-        {
-            gtk_widget_hide (plug->priv->status_message_label);
-        }
-    }
-}
-
-static void
-gs_lock_plug_get_property (GObject    *object,
-                           guint       prop_id,
-                           GValue     *value,
-                           GParamSpec *pspec)
-{
-    GSLockPlug *self;
-
-    self = GS_LOCK_PLUG (object);
-
-    switch (prop_id)
-    {
-    case PROP_LOGOUT_ENABLED:
-        g_value_set_boolean (value, self->priv->logout_enabled);
-        break;
-    case PROP_LOGOUT_COMMAND:
-        g_value_set_string (value, self->priv->logout_command);
-        break;
-    case PROP_SWITCH_ENABLED:
-        g_value_set_boolean (value, self->priv->switch_enabled);
-        break;
-    case PROP_STATUS_MESSAGE:
-        g_value_set_string (value, self->priv->status_message);
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_lock_plug_set_switch_enabled (GSLockPlug *plug,
-                                 gboolean    switch_enabled)
-{
-    g_return_if_fail (GS_LOCK_PLUG (plug));
-
-    if (plug->priv->switch_enabled == switch_enabled)
-    {
-        return;
-    }
-
-    plug->priv->switch_enabled = switch_enabled;
-    g_object_notify (G_OBJECT (plug), "switch-enabled");
-
-    if (plug->priv->auth_switch_button == NULL)
-    {
-        return;
-    }
-
-    if (switch_enabled)
-    {
-        gboolean found;
-        found = is_program_in_path (MDM_FLEXISERVER_COMMAND);
-        if (found)
-        {
-            gtk_widget_show (plug->priv->auth_switch_button);
-        }
-        else
-        {
-            gs_debug ("Waring: MDM flexiserver command not found: %s", MDM_FLEXISERVER_COMMAND);
-            gtk_widget_hide (plug->priv->auth_switch_button);
-        }
-    }
-    else
-    {
-        gtk_widget_hide (plug->priv->auth_switch_button);
-    }
-}
-
-static void
-gs_lock_plug_set_property (GObject            *object,
-                           guint               prop_id,
-                           const GValue       *value,
-                           GParamSpec         *pspec)
-{
-    GSLockPlug *self;
-
-    self = GS_LOCK_PLUG (object);
-
-    switch (prop_id)
-    {
-    case PROP_LOGOUT_ENABLED:
-        gs_lock_plug_set_logout_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_LOGOUT_COMMAND:
-        gs_lock_plug_set_logout_command (self, g_value_get_string (value));
-        break;
-    case PROP_STATUS_MESSAGE:
-        gs_lock_plug_set_status_message (self, g_value_get_string (value));
-        break;
-    case PROP_SWITCH_ENABLED:
-        gs_lock_plug_set_switch_enabled (self, g_value_get_boolean (value));
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_lock_plug_close (GSLockPlug *plug)
-{
-    /* Synthesize delete_event to close dialog. */
-
-    GtkWidget *widget = GTK_WIDGET (plug);
-    GdkEvent  *event;
-
-    event = gdk_event_new (GDK_DELETE);
-    event->any.window = g_object_ref (widget->window);
-    event->any.send_event = TRUE;
-
-    gtk_main_do_event (event);
-    gdk_event_free (event);
-}
-
-static void
-gs_lock_plug_class_init (GSLockPlugClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-    GtkBindingSet  *binding_set;
-
-    object_class->finalize     = gs_lock_plug_finalize;
-    object_class->get_property = gs_lock_plug_get_property;
-    object_class->set_property = gs_lock_plug_set_property;
-
-    widget_class->style_set    = gs_lock_plug_style_set;
-    widget_class->show         = gs_lock_plug_show;
-    widget_class->hide         = gs_lock_plug_hide;
-    widget_class->size_request = gs_lock_plug_size_request;
-
-    klass->close = gs_lock_plug_close;
-
-    g_type_class_add_private (klass, sizeof (GSLockPlugPrivate));
-
-    lock_plug_signals [RESPONSE] = g_signal_new ("response",
-                                   G_OBJECT_CLASS_TYPE (klass),
-                                   G_SIGNAL_RUN_LAST,
-                                   G_STRUCT_OFFSET (GSLockPlugClass, response),
-                                   NULL, NULL,
-                                   g_cclosure_marshal_VOID__INT,
-                                   G_TYPE_NONE, 1,
-                                   G_TYPE_INT);
-    lock_plug_signals [CLOSE] = g_signal_new ("close",
-                                G_OBJECT_CLASS_TYPE (klass),
-                                G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                                G_STRUCT_OFFSET (GSLockPlugClass, close),
-                                NULL, NULL,
-                                g_cclosure_marshal_VOID__VOID,
-                                G_TYPE_NONE, 0);
-
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_ENABLED,
-                                     g_param_spec_boolean ("logout-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_COMMAND,
-                                     g_param_spec_string ("logout-command",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_STATUS_MESSAGE,
-                                     g_param_spec_string ("status-message",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_SWITCH_ENABLED,
-                                     g_param_spec_boolean ("switch-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-
-    binding_set = gtk_binding_set_by_class (klass);
-
-    gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0,
-                                  "close", 0);
-}
-
-static void
-clear_clipboards (GSLockPlug *plug)
-{
-    GtkClipboard *clipboard;
-
-    clipboard = gtk_widget_get_clipboard (GTK_WIDGET (plug), GDK_SELECTION_PRIMARY);
-    gtk_clipboard_clear (clipboard);
-    gtk_clipboard_set_text (clipboard, "", -1);
-    clipboard = gtk_widget_get_clipboard (GTK_WIDGET (plug), GDK_SELECTION_CLIPBOARD);
-    gtk_clipboard_clear (clipboard);
-    gtk_clipboard_set_text (clipboard, "", -1);
-}
-
-static void
-take_note (GtkButton  *button,
-           GSLockPlug *plug)
-{
-    int page;
-
-    page = gtk_notebook_page_num (GTK_NOTEBOOK (plug->priv->notebook), plug->priv->note_tab);
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (plug->priv->notebook), page);
-    /* this counts as activity so restart the timer */
-    restart_cancel_timeout (plug);
-}
-
-static void
-submit_note (GtkButton  *button,
-             GSLockPlug *plug)
-{
-#ifdef WITH_LIBMATENOTIFY
-    char               *text;
-    char                summary[128];
-    char               *escaped_text;
-    GtkTextBuffer      *buffer;
-    GtkTextIter         start, end;
-    time_t              t;
-    struct tm          *tmp;
-    NotifyNotification *note;
-
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (plug->priv->notebook), AUTH_PAGE);
-    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (plug->priv->note_text_view));
-    gtk_text_buffer_get_bounds (buffer, &start, &end);
-    text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
-    gtk_text_buffer_set_text (buffer, "", 0);
-    escaped_text = g_markup_escape_text (text, -1);
-
-    t = time (NULL);
-    tmp = localtime (&t);
-    strftime (summary, 128, "%X", tmp);
-
-    notify_init ("mate-screensaver-dialog");
-    note = notify_notification_new (summary, escaped_text, NULL, NULL);
-    notify_notification_set_timeout (note, NOTIFY_EXPIRES_NEVER);
-    notify_notification_show (note, NULL);
-    g_object_unref (note);
-
-    g_free (text);
-    g_free (escaped_text);
-
-    gs_lock_plug_response (plug, GS_LOCK_PLUG_RESPONSE_CANCEL);
-#endif /* WITH_LIBMATENOTIFY */
-}
-
-static void
-cancel_note (GtkButton  *button,
-             GSLockPlug *plug)
-{
-    GtkTextBuffer *buffer;
-
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (plug->priv->notebook), AUTH_PAGE);
-    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (plug->priv->note_text_view));
-    gtk_text_buffer_set_text (buffer, "", 0);
-
-    /* this counts as activity so restart the timer */
-    restart_cancel_timeout (plug);
-
-    gtk_window_set_default (GTK_WINDOW (plug), plug->priv->auth_unlock_button);
-
-    clear_clipboards (plug);
-}
-
-static void
-logout_button_clicked (GtkButton  *button,
-                       GSLockPlug *plug)
-{
-    char   **argv  = NULL;
-    GError  *error = NULL;
-    gboolean res;
-
-    if (! plug->priv->logout_command)
-    {
-        return;
-    }
-
-    res = g_shell_parse_argv (plug->priv->logout_command, NULL, &argv, &error);
-
-    if (! res)
-    {
-        g_warning ("Could not parse logout command: %s", error->message);
-        g_error_free (error);
-        return;
-    }
-
-    g_spawn_async (g_get_home_dir (),
-                   argv,
-                   NULL,
-                   G_SPAWN_SEARCH_PATH,
-                   NULL,
-                   NULL,
-                   NULL,
-                   &error);
-
-    g_strfreev (argv);
-
-    if (error)
-    {
-        g_warning ("Could not run logout command: %s", error->message);
-        g_error_free (error);
-    }
-}
-
-void
-gs_lock_plug_set_busy (GSLockPlug *plug)
-{
-    GdkCursor *cursor;
-    GtkWidget *top_level;
-
-    top_level = gtk_widget_get_toplevel (GTK_WIDGET (plug));
-
-    cursor = gdk_cursor_new (GDK_WATCH);
-    gdk_window_set_cursor (top_level->window, cursor);
-    gdk_cursor_unref (cursor);
-}
-
-void
-gs_lock_plug_set_ready (GSLockPlug *plug)
-{
-    GdkCursor *cursor;
-    GtkWidget *top_level;
-
-    top_level = gtk_widget_get_toplevel (GTK_WIDGET (plug));
-
-    cursor = gdk_cursor_new (GDK_LEFT_PTR);
-    gdk_window_set_cursor (top_level->window, cursor);
-    gdk_cursor_unref (cursor);
-}
-
-void
-gs_lock_plug_enable_prompt (GSLockPlug *plug,
-                            const char *message,
-                            gboolean    visible)
-{
-    g_return_if_fail (GS_IS_LOCK_PLUG (plug));
-
-    gs_debug ("Setting prompt to: %s", message);
-
-    gtk_widget_set_sensitive (plug->priv->auth_unlock_button, TRUE);
-    gtk_widget_show (plug->priv->auth_unlock_button);
-    gtk_widget_grab_default (plug->priv->auth_unlock_button);
-    gtk_label_set_text (GTK_LABEL (plug->priv->auth_prompt_label), message);
-    gtk_widget_show (plug->priv->auth_prompt_label);
-    gtk_entry_set_visibility (GTK_ENTRY (plug->priv->auth_prompt_entry), visible);
-    gtk_widget_set_sensitive (plug->priv->auth_prompt_entry, TRUE);
-    gtk_widget_show (plug->priv->auth_prompt_entry);
-
-    if (! GTK_WIDGET_HAS_FOCUS (plug->priv->auth_prompt_entry))
-    {
-        gtk_widget_grab_focus (plug->priv->auth_prompt_entry);
-    }
-
-    /* were there any key events sent to the plug while the
-     * entry wasnt ready? If so, forward them along
-     */
-    forward_key_events (plug);
-
-    restart_cancel_timeout (plug);
-}
-
-void
-gs_lock_plug_disable_prompt (GSLockPlug *plug)
-{
-    g_return_if_fail (GS_IS_LOCK_PLUG (plug));
-
-    /* gtk_widget_hide (plug->priv->auth_prompt_entry); */
-    /* gtk_widget_hide (plug->priv->auth_prompt_label); */
-    gtk_widget_set_sensitive (plug->priv->auth_unlock_button, FALSE);
-    gtk_widget_set_sensitive (plug->priv->auth_prompt_entry, FALSE);
-    /* gtk_widget_hide (plug->priv->auth_unlock_button); */
-
-    gtk_widget_grab_default (plug->priv->auth_cancel_button);
-}
-
-void
-gs_lock_plug_show_message (GSLockPlug *plug,
-                           const char *message)
-{
-    g_return_if_fail (GS_IS_LOCK_PLUG (plug));
-
-    set_status_text (plug, message ? message : "");
-}
-
-/* button press handler used to inhibit popup menu */
-static gint
-entry_button_press (GtkWidget      *widget,
-                    GdkEventButton *event)
-{
-    if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
-    {
-        return TRUE;
-    }
-
-    return FALSE;
-}
-
-static gint
-entry_key_press (GtkWidget   *widget,
-                 GdkEventKey *event,
-                 GSLockPlug  *plug)
-{
-    gboolean capslock_on;
-
-    restart_cancel_timeout (plug);
-
-    capslock_on = is_capslock_on ();
-
-    if (capslock_on != plug->priv->caps_lock_on)
-    {
-        capslock_update (plug, capslock_on);
-    }
-
-    /* if the input widget is visible and ready for input
-     * then just carry on as usual
-     */
-    if (GTK_WIDGET_VISIBLE (plug->priv->auth_prompt_entry) &&
-            GTK_WIDGET_IS_SENSITIVE (plug->priv->auth_prompt_entry))
-    {
-        return FALSE;
-    }
-
-    if (strcmp (event->string, "") == 0)
-    {
-        return FALSE;
-    }
-
-    queue_key_event (plug, event);
-
-    return TRUE;
-}
-
-/* adapted from gtk_dialog_add_button */
-static GtkWidget *
-gs_lock_plug_add_button (GSLockPlug  *plug,
-                         GtkWidget   *action_area,
-                         const gchar *button_text)
-{
-    GtkWidget *button;
-
-    g_return_val_if_fail (GS_IS_LOCK_PLUG (plug), NULL);
-    g_return_val_if_fail (button_text != NULL, NULL);
-
-    button = gtk_button_new_from_stock (button_text);
-
-    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
-
-    gtk_widget_show (button);
-
-    gtk_box_pack_end (GTK_BOX (action_area),
-                      button,
-                      FALSE, TRUE, 0);
-
-    return button;
-}
-
-static char *
-get_user_display_name (void)
-{
-    const char *name;
-    char       *utf8_name;
-
-    name = g_get_real_name ();
-
-    if (name == NULL || strcmp (name, "Unknown") == 0)
-    {
-        name = g_get_user_name ();
-    }
-
-    utf8_name = NULL;
-
-    if (name != NULL)
-    {
-        utf8_name = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
-    }
-
-    return utf8_name;
-}
-
-static char *
-get_user_name (void)
-{
-    const char *name;
-    char       *utf8_name;
-
-    name = g_get_user_name ();
-
-    utf8_name = NULL;
-    if (name != NULL)
-    {
-        utf8_name = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
-    }
-
-    return utf8_name;
-}
-
-static void
-create_page_one_buttons (GSLockPlug *plug)
-{
-
-    gs_profile_start ("page one buttons");
-
-    plug->priv->auth_switch_button =  gs_lock_plug_add_button (GS_LOCK_PLUG (plug),
-                                      plug->priv->auth_action_area,
-                                      _("S_witch User..."));
-    gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (plug->priv->auth_action_area),
-                                        plug->priv->auth_switch_button,
-                                        TRUE);
-    gtk_button_set_focus_on_click (GTK_BUTTON (plug->priv->auth_switch_button), FALSE);
-    gtk_widget_set_no_show_all (plug->priv->auth_switch_button, TRUE);
-
-    plug->priv->auth_logout_button =  gs_lock_plug_add_button (GS_LOCK_PLUG (plug),
-                                      plug->priv->auth_action_area,
-                                      _("Log _Out"));
-    gtk_button_set_focus_on_click (GTK_BUTTON (plug->priv->auth_logout_button), FALSE);
-    gtk_widget_set_no_show_all (plug->priv->auth_logout_button, TRUE);
-
-    plug->priv->auth_cancel_button =  gs_lock_plug_add_button (GS_LOCK_PLUG (plug),
-                                      plug->priv->auth_action_area,
-                                      GTK_STOCK_CANCEL);
-    gtk_button_set_focus_on_click (GTK_BUTTON (plug->priv->auth_cancel_button), FALSE);
-
-    plug->priv->auth_unlock_button =  gs_lock_plug_add_button (GS_LOCK_PLUG (plug),
-                                      plug->priv->auth_action_area,
-                                      _("_Unlock"));
-    gtk_button_set_focus_on_click (GTK_BUTTON (plug->priv->auth_unlock_button), FALSE);
-
-    gtk_window_set_default (GTK_WINDOW (plug), plug->priv->auth_unlock_button);
-
-    gs_profile_end ("page one buttons");
-}
-
-/* adapted from MDM */
-static char *
-expand_string (const char *text)
-{
-    GString       *str;
-    const char    *p;
-    char          *username;
-    int            i;
-    int            n_chars;
-    struct utsname name;
-
-    str = g_string_sized_new (strlen (text));
-
-    p = text;
-    n_chars = g_utf8_strlen (text, -1);
-    i = 0;
-
-    while (i < n_chars)
-    {
-        gunichar ch;
-
-        ch = g_utf8_get_char (p);
-
-        /* Backslash commands */
-        if (ch == '\\')
-        {
-            p = g_utf8_next_char (p);
-            i++;
-            ch = g_utf8_get_char (p);
-
-            if (i >= n_chars || ch == '\0')
-            {
-                g_warning ("Unescaped \\ at end of text\n");
-                goto bail;
-            }
-            else if (ch == 'n')
-            {
-                g_string_append_unichar (str, '\n');
-            }
-            else
-            {
-                g_string_append_unichar (str, ch);
-            }
-        }
-        else if (ch == '%')
-        {
-            p = g_utf8_next_char (p);
-            i++;
-            ch = g_utf8_get_char (p);
-
-            if (i >= n_chars || ch == '\0')
-            {
-                g_warning ("Unescaped %% at end of text\n");
-                goto bail;
-            }
-
-            switch (ch)
-            {
-            case '%':
-                g_string_append (str, "%");
-                break;
-            case 'c':
-                /* clock */
-                break;
-            case 'd':
-                /* display */
-                g_string_append (str, g_getenv ("DISPLAY"));
-                break;
-            case 'h':
-                /* hostname */
-                g_string_append (str, g_get_host_name ());
-                break;
-            case 'm':
-                /* machine name */
-                uname (&name);
-                g_string_append (str, name.machine);
-                break;
-            case 'n':
-                /* nodename */
-                uname (&name);
-                g_string_append (str, name.nodename);
-                break;
-            case 'r':
-                /* release */
-                uname (&name);
-                g_string_append (str, name.release);
-                break;
-            case 'R':
-                /* Real name */
-                username = get_user_display_name ();
-                g_string_append (str, username);
-                g_free (username);
-                break;
-            case 's':
-                /* system name */
-                uname (&name);
-                g_string_append (str, name.sysname);
-                break;
-            case 'U':
-                /* Username */
-                username = get_user_name ();
-                g_string_append (str, username);
-                g_free (username);
-                break;
-            default:
-                if (ch < 127)
-                {
-                    g_warning ("unknown escape code %%%c in text\n", (char)ch);
-                }
-                else
-                {
-                    g_warning ("unknown escape code %%(U%x) in text\n", (int)ch);
-                }
-            }
-        }
-        else
-        {
-            g_string_append_unichar (str, ch);
-        }
-        p = g_utf8_next_char (p);
-        i++;
-    }
-
-bail:
-
-    return g_string_free (str, FALSE);
-}
-
-static void
-expand_string_for_label (GtkWidget *label)
-{
-    const char *template;
-    char       *str;
-
-    template = gtk_label_get_label (GTK_LABEL (label));
-    str = expand_string (template);
-    gtk_label_set_label (GTK_LABEL (label), str);
-    g_free (str);
-}
-
-static void
-create_page_one (GSLockPlug *plug)
-{
-    GtkWidget            *align;
-    GtkWidget            *vbox;
-    GtkWidget            *vbox2;
-    GtkWidget            *hbox;
-    char                 *str;
-
-    gs_profile_start ("page one");
-
-    align = gtk_alignment_new (0.5, 0.5, 1, 1);
-    gtk_notebook_append_page (GTK_NOTEBOOK (plug->priv->notebook), align, NULL);
-
-    vbox = gtk_vbox_new (FALSE, 12);
-    gtk_container_add (GTK_CONTAINER (align), vbox);
-
-    plug->priv->auth_face_image = gtk_image_new ();
-    gtk_box_pack_start (GTK_BOX (vbox), plug->priv->auth_face_image, TRUE, TRUE, 0);
-    gtk_misc_set_alignment (GTK_MISC (plug->priv->auth_face_image), 0.5, 1.0);
-
-    vbox2 = gtk_vbox_new (FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0);
-
-    str = g_strdup ("<span size=\"x-large\">%R</span>");
-    plug->priv->auth_realname_label = gtk_label_new (str);
-    g_free (str);
-    expand_string_for_label (plug->priv->auth_realname_label);
-    gtk_misc_set_alignment (GTK_MISC (plug->priv->auth_realname_label), 0.5, 0.5);
-    gtk_label_set_use_markup (GTK_LABEL (plug->priv->auth_realname_label), TRUE);
-    gtk_box_pack_start (GTK_BOX (vbox2), plug->priv->auth_realname_label, FALSE, FALSE, 0);
-
-    /* To translators: This expands to USERNAME on HOSTNAME */
-    str = g_strdup_printf ("<span size=\"small\">%s</span>", _("%U on %h"));
-    plug->priv->auth_username_label = gtk_label_new (str);
-    g_free (str);
-    expand_string_for_label (plug->priv->auth_username_label);
-    gtk_misc_set_alignment (GTK_MISC (plug->priv->auth_username_label), 0.5, 0.5);
-    gtk_label_set_use_markup (GTK_LABEL (plug->priv->auth_username_label), TRUE);
-    gtk_box_pack_start (GTK_BOX (vbox2), plug->priv->auth_username_label, FALSE, FALSE, 0);
-
-    vbox2 = gtk_vbox_new (FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (vbox), vbox2, TRUE, TRUE, 0);
-
-    hbox = gtk_hbox_new (FALSE, 6);
-    gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
-
-    plug->priv->auth_prompt_label = gtk_label_new_with_mnemonic (_("_Password:"));
-    gtk_misc_set_alignment (GTK_MISC (plug->priv->auth_prompt_label), 0, 0.5);
-    gtk_box_pack_start (GTK_BOX (hbox), plug->priv->auth_prompt_label, FALSE, FALSE, 0);
-
-    plug->priv->auth_prompt_entry = gtk_entry_new ();
-    gtk_box_pack_start (GTK_BOX (hbox), plug->priv->auth_prompt_entry, TRUE, TRUE, 0);
-
-    gtk_label_set_mnemonic_widget (GTK_LABEL (plug->priv->auth_prompt_label),
-                                   plug->priv->auth_prompt_entry);
-
-    plug->priv->auth_capslock_label = gtk_label_new ("");
-    gtk_misc_set_alignment (GTK_MISC (plug->priv->auth_capslock_label), 0.5, 0.5);
-    gtk_box_pack_start (GTK_BOX (vbox2), plug->priv->auth_capslock_label, FALSE, FALSE, 0);
-
-    /* Status text */
-
-    plug->priv->auth_message_label = gtk_label_new (NULL);
-    gtk_box_pack_start (GTK_BOX (vbox), plug->priv->auth_message_label,
-                        FALSE, FALSE, 0);
-    /* Buttons */
-    plug->priv->auth_action_area = gtk_hbutton_box_new ();
-
-    gtk_button_box_set_layout (GTK_BUTTON_BOX (plug->priv->auth_action_area),
-                               GTK_BUTTONBOX_END);
-
-    gtk_box_pack_end (GTK_BOX (vbox), plug->priv->auth_action_area,
-                      FALSE, TRUE, 0);
-    gtk_widget_show (plug->priv->auth_action_area);
-
-    create_page_one_buttons (plug);
-
-    gs_profile_end ("page one");
-}
-
-static void
-unlock_button_clicked (GtkButton  *button,
-                       GSLockPlug *plug)
-{
-    gs_lock_plug_response (plug, GS_LOCK_PLUG_RESPONSE_OK);
-}
-
-static void
-cancel_button_clicked (GtkButton  *button,
-                       GSLockPlug *plug)
-{
-    gs_lock_plug_response (plug, GS_LOCK_PLUG_RESPONSE_CANCEL);
-}
-
-static void
-switch_user_button_clicked (GtkButton  *button,
-                            GSLockPlug *plug)
-{
-
-    remove_response_idle (plug);
-
-    gs_lock_plug_set_sensitive (plug, FALSE);
-
-    plug->priv->response_idle_id = g_timeout_add (2000,
-            (GSourceFunc)response_cancel_idle_cb,
-            plug);
-
-    gs_lock_plug_set_busy (plug);
-    do_user_switch (plug);
-}
-
-static char *
-get_dialog_theme_name (GSLockPlug *plug)
-{
-    char        *name;
-    MateConfClient *client;
-
-    client = mateconf_client_get_default ();
-    name = mateconf_client_get_string (client, KEY_LOCK_DIALOG_THEME, NULL);
-    g_object_unref (client);
-
-    return name;
-}
-
-static gboolean
-load_theme (GSLockPlug *plug)
-{
-    char       *theme;
-    char       *filename;
-    char       *gtkbuilder;
-    char       *rc;
-    GtkBuilder *builder;
-    GtkWidget  *lock_dialog;
-    GError     *error=NULL;
-
-    theme = get_dialog_theme_name (plug);
-    if (theme == NULL)
-    {
-        return FALSE;
-    }
-
-    filename = g_strdup_printf ("lock-dialog-%s.ui", theme);
-    gtkbuilder = g_build_filename (GTKBUILDERDIR, filename, NULL);
-    g_free (filename);
-    if (! g_file_test (gtkbuilder, G_FILE_TEST_IS_REGULAR))
-    {
-        g_free (gtkbuilder);
-        g_free (theme);
-        return FALSE;
-    }
-
-    filename = g_strdup_printf ("lock-dialog-%s.gtkrc", theme);
-    g_free (theme);
-
-    rc = g_build_filename (GTKBUILDERDIR, filename, NULL);
-    g_free (filename);
-    if (g_file_test (rc, G_FILE_TEST_IS_REGULAR))
-    {
-        gtk_rc_parse (rc);
-    }
-    g_free (rc);
-
-    builder = gtk_builder_new();
-
-    if (!gtk_builder_add_from_file (builder,gtkbuilder,&error))
-    {
-        g_warning ("Couldn't load builder file '%s': %s", gtkbuilder, error->message);
-        g_error_free(error);
-        g_free (gtkbuilder);
-        return FALSE;
-    }
-    g_free (gtkbuilder);
-
-    lock_dialog = GTK_WIDGET (gtk_builder_get_object(builder, "lock-dialog"));
-    gtk_container_add (GTK_CONTAINER (plug), lock_dialog);
-
-    plug->priv->vbox = NULL;
-    plug->priv->notebook = GTK_WIDGET (gtk_builder_get_object(builder, "notebook"));
-
-    plug->priv->auth_face_image = GTK_WIDGET (gtk_builder_get_object(builder, "auth-face-image"));
-    plug->priv->auth_action_area = GTK_WIDGET (gtk_builder_get_object(builder, "auth-action-area"));
-    plug->priv->auth_realname_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-realname-label"));
-    plug->priv->auth_username_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-username-label"));
-    plug->priv->auth_prompt_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-prompt-label"));
-    plug->priv->auth_prompt_entry = GTK_WIDGET (gtk_builder_get_object(builder, "auth-prompt-entry"));
-    plug->priv->auth_prompt_box = GTK_WIDGET (gtk_builder_get_object(builder, "auth-prompt-box"));
-    plug->priv->auth_capslock_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-capslock-label"));
-    plug->priv->auth_message_label = GTK_WIDGET (gtk_builder_get_object(builder, "auth-status-label"));
-    plug->priv->auth_unlock_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-unlock-button"));
-    plug->priv->auth_cancel_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-cancel-button"));
-    plug->priv->auth_logout_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-logout-button"));
-    plug->priv->auth_switch_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-switch-button"));
-    plug->priv->auth_note_button = GTK_WIDGET (gtk_builder_get_object(builder, "auth-note-button"));
-    plug->priv->note_tab = GTK_WIDGET (gtk_builder_get_object(builder, "note-tab"));
-    plug->priv->note_tab_label = GTK_WIDGET (gtk_builder_get_object(builder, "note-tab-label"));
-    plug->priv->note_ok_button = GTK_WIDGET (gtk_builder_get_object(builder, "note-ok-button"));
-    plug->priv->note_text_view = GTK_WIDGET (gtk_builder_get_object(builder, "note-text-view"));
-    plug->priv->note_cancel_button = GTK_WIDGET (gtk_builder_get_object(builder, "note-cancel-button"));
-
-    /* Placeholder for the keyboard indicator */
-    plug->priv->auth_prompt_kbd_layout_indicator = GTK_WIDGET (gtk_builder_get_object(builder, "auth-prompt-kbd-layout-indicator"));
-    if (plug->priv->auth_logout_button != NULL)
-    {
-        gtk_widget_set_no_show_all (plug->priv->auth_logout_button, TRUE);
-    }
-    if (plug->priv->auth_switch_button != NULL)
-    {
-        gtk_widget_set_no_show_all (plug->priv->auth_switch_button, TRUE);
-    }
-    if (plug->priv->auth_note_button != NULL)
-    {
-        gtk_widget_set_no_show_all (plug->priv->auth_note_button, TRUE);
-    }
-
-    gtk_widget_show_all (lock_dialog);
-
-    plug->priv->status_message_label = GTK_WIDGET (gtk_builder_get_object(builder, "status-message-label"));
-
-    return TRUE;
-}
-
-static int
-delete_handler (GSLockPlug  *plug,
-                GdkEventAny *event,
-                gpointer     data)
-{
-    gs_lock_plug_response (plug, GS_LOCK_PLUG_RESPONSE_CANCEL);
-
-    return TRUE; /* Do not destroy */
-}
-
-static void
-on_note_text_buffer_changed (GtkTextBuffer *buffer,
-                             GSLockPlug    *plug)
-{
-    int len;
-
-    len = gtk_text_buffer_get_char_count (buffer);
-    if (len > NOTE_BUFFER_MAX_CHARS)
-    {
-        gtk_widget_set_sensitive (plug->priv->note_text_view, FALSE);
-    }
-}
-
-static void
-gs_lock_plug_init (GSLockPlug *plug)
-{
-    gs_profile_start (NULL);
-
-    plug->priv = GS_LOCK_PLUG_GET_PRIVATE (plug);
-
-    clear_clipboards (plug);
-
-#ifdef WITH_LIBMATENOTIFY
-    plug->priv->leave_note_enabled = TRUE;
-#else
-    plug->priv->leave_note_enabled = FALSE;
-#endif
-
-    if (! load_theme (plug))
-    {
-        gs_debug ("Unable to load theme!");
-
-        plug->priv->vbox = gtk_vbox_new (FALSE, 0);
-
-        gtk_container_add (GTK_CONTAINER (plug), plug->priv->vbox);
-
-        /* Notebook */
-
-        plug->priv->notebook = gtk_notebook_new ();
-        gtk_notebook_set_show_tabs (GTK_NOTEBOOK (plug->priv->notebook), FALSE);
-        gtk_notebook_set_show_border (GTK_NOTEBOOK (plug->priv->notebook), FALSE);
-        gtk_box_pack_start (GTK_BOX (plug->priv->vbox), plug->priv->notebook, TRUE, TRUE, 0);
-
-        /* Page 1 */
-
-        create_page_one (plug);
-
-        gtk_widget_show_all (plug->priv->vbox);
-    }
-
-    if (plug->priv->note_text_view != NULL)
-    {
-        GtkTextBuffer *buffer;
-        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (plug->priv->note_text_view));
-        g_signal_connect (buffer, "changed", G_CALLBACK (on_note_text_buffer_changed), plug);
-    }
-
-    /* Layout indicator */
-#ifdef WITH_KBD_LAYOUT_INDICATOR
-    if (plug->priv->auth_prompt_kbd_layout_indicator != NULL)
-    {
-        XklEngine *engine;
-
-        engine = xkl_engine_get_instance (GDK_DISPLAY ());
-        if (xkl_engine_get_num_groups (engine) > 1)
-        {
-            GtkWidget *layout_indicator;
-
-            layout_indicator = matekbd_indicator_new ();
-            matekbd_indicator_set_parent_tooltips (MATEKBD_INDICATOR (layout_indicator), TRUE);
-            gtk_box_pack_start (GTK_BOX (plug->priv->auth_prompt_kbd_layout_indicator),
-                                layout_indicator,
-                                FALSE,
-                                FALSE,
-                                6);
-
-            gtk_widget_show_all (layout_indicator);
-            gtk_widget_show (plug->priv->auth_prompt_kbd_layout_indicator);
-        }
-        else
-        {
-            gtk_widget_hide (plug->priv->auth_prompt_kbd_layout_indicator);
-        }
-
-        g_object_unref (engine);
-    }
-#endif
-
-    if (plug->priv->auth_note_button != NULL)
-    {
-        if (plug->priv->leave_note_enabled)
-        {
-            gtk_widget_show_all (plug->priv->auth_note_button);
-        }
-        else
-        {
-            gtk_widget_hide (plug->priv->auth_note_button);
-        }
-    }
-    if (plug->priv->auth_switch_button != NULL)
-    {
-        if (plug->priv->switch_enabled)
-        {
-            gtk_widget_show_all (plug->priv->auth_switch_button);
-        }
-        else
-        {
-            gtk_widget_hide (plug->priv->auth_switch_button);
-        }
-    }
-
-    gtk_widget_grab_default (plug->priv->auth_unlock_button);
-
-    if (plug->priv->auth_username_label != NULL)
-    {
-        expand_string_for_label (plug->priv->auth_username_label);
-    }
-
-    if (plug->priv->auth_realname_label != NULL)
-    {
-        expand_string_for_label (plug->priv->auth_realname_label);
-    }
-
-    if (! plug->priv->logout_enabled || ! plug->priv->logout_command)
-    {
-        if (plug->priv->auth_logout_button != NULL)
-        {
-            gtk_widget_hide (plug->priv->auth_logout_button);
-        }
-    }
-
-    plug->priv->timeout = DIALOG_TIMEOUT_MSEC;
-
-    g_signal_connect (plug, "key_press_event",
-                      G_CALLBACK (entry_key_press), plug);
-
-    /* button press handler used to inhibit popup menu */
-    g_signal_connect (plug->priv->auth_prompt_entry, "button_press_event",
-                      G_CALLBACK (entry_button_press), NULL);
-    gtk_entry_set_activates_default (GTK_ENTRY (plug->priv->auth_prompt_entry), TRUE);
-    gtk_entry_set_visibility (GTK_ENTRY (plug->priv->auth_prompt_entry), FALSE);
-
-    g_signal_connect (plug->priv->auth_unlock_button, "clicked",
-                      G_CALLBACK (unlock_button_clicked), plug);
-
-    g_signal_connect (plug->priv->auth_cancel_button, "clicked",
-                      G_CALLBACK (cancel_button_clicked), plug);
-
-    if (plug->priv->status_message_label)
-    {
-        if (plug->priv->status_message)
-        {
-            gtk_label_set_text (GTK_LABEL (plug->priv->status_message_label),
-                                plug->priv->status_message);
-        }
-        else
-        {
-            gtk_widget_hide (plug->priv->status_message_label);
-        }
-    }
-
-    if (plug->priv->auth_switch_button != NULL)
-    {
-        g_signal_connect (plug->priv->auth_switch_button, "clicked",
-                          G_CALLBACK (switch_user_button_clicked), plug);
-    }
-
-    if (plug->priv->auth_note_button != NULL)
-    {
-        g_signal_connect (plug->priv->auth_note_button, "clicked",
-                          G_CALLBACK (take_note), plug);
-        g_signal_connect (plug->priv->note_ok_button, "clicked",
-                          G_CALLBACK (submit_note), plug);
-        g_signal_connect (plug->priv->note_cancel_button, "clicked",
-                          G_CALLBACK (cancel_note), plug);
-    }
-
-    if (plug->priv->note_tab_label != NULL)
-    {
-        expand_string_for_label (plug->priv->note_tab_label);
-    }
-
-    if (plug->priv->auth_logout_button != NULL)
-    {
-        g_signal_connect (plug->priv->auth_logout_button, "clicked",
-                          G_CALLBACK (logout_button_clicked), plug);
-    }
-
-    g_signal_connect (plug, "delete_event", G_CALLBACK (delete_handler), NULL);
-
-    gs_profile_end (NULL);
-}
-
-static void
-gs_lock_plug_finalize (GObject *object)
-{
-    GSLockPlug *plug;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_LOCK_PLUG (object));
-
-    plug = GS_LOCK_PLUG (object);
-
-    g_return_if_fail (plug->priv != NULL);
-
-    g_free (plug->priv->logout_command);
-
-    remove_response_idle (plug);
-    remove_cancel_timeout (plug);
-
-    G_OBJECT_CLASS (gs_lock_plug_parent_class)->finalize (object);
-}
-
-GtkWidget *
-gs_lock_plug_new (void)
-{
-    GtkWidget *result;
-
-    result = g_object_new (GS_TYPE_LOCK_PLUG, NULL);
-
-    gtk_window_set_focus_on_map (GTK_WINDOW (result), TRUE);
-
-    return result;
-}
diff --git a/src/gs-lock-plug.h.orig b/src/gs-lock-plug.h.orig
deleted file mode 100644
index cc71f21..0000000
--- a/src/gs-lock-plug.h.orig
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_LOCK_PLUG_H
-#define __GS_LOCK_PLUG_H
-
-G_BEGIN_DECLS
-
-typedef enum
-{
-    GS_LOCK_PLUG_RESPONSE_NONE   = -1,
-    GS_LOCK_PLUG_RESPONSE_OK     = -2,
-    GS_LOCK_PLUG_RESPONSE_CANCEL = -3
-} GSPlugResponseType;
-
-#define GS_TYPE_LOCK_PLUG         (gs_lock_plug_get_type ())
-#define GS_LOCK_PLUG(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_LOCK_PLUG, GSLockPlug))
-#define GS_LOCK_PLUG_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_LOCK_PLUG, GSLockPlugClass))
-#define GS_IS_LOCK_PLUG(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_LOCK_PLUG))
-#define GS_IS_LOCK_PLUG_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_LOCK_PLUG))
-#define GS_LOCK_PLUG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_LOCK_PLUG, GSLockPlugClass))
-
-typedef struct GSLockPlugPrivate GSLockPlugPrivate;
-
-typedef struct
-{
-    GtkPlug            parent;
-
-    GSLockPlugPrivate *priv;
-} GSLockPlug;
-
-typedef struct
-{
-    GtkPlugClass         parent_class;
-
-    void (* response) (GSLockPlug *plug, gint response_id);
-
-    /* Keybinding signals */
-    void (* close)    (GSLockPlug *plug);
-
-} GSLockPlugClass;
-
-GType       gs_lock_plug_get_type       (void);
-GtkWidget * gs_lock_plug_new            (void);
-
-int         gs_lock_plug_run            (GSLockPlug *plug);
-void        gs_lock_plug_set_sensitive  (GSLockPlug *plug,
-        gboolean    sensitive);
-void        gs_lock_plug_enable_prompt  (GSLockPlug *plug,
-        const char *message,
-        gboolean    visible);
-void        gs_lock_plug_disable_prompt (GSLockPlug *plug);
-void        gs_lock_plug_set_busy       (GSLockPlug *plug);
-void        gs_lock_plug_set_ready      (GSLockPlug *plug);
-
-void        gs_lock_plug_get_text       (GSLockPlug *plug,
-        char      **text);
-void        gs_lock_plug_show_message   (GSLockPlug *plug,
-        const char *message);
-
-G_END_DECLS
-
-#endif /* __GS_LOCK_PLUG_H */
diff --git a/src/gs-manager.c.orig b/src/gs-manager.c.orig
deleted file mode 100644
index 47c5005..0000000
--- a/src/gs-manager.c.orig
+++ /dev/null
@@ -1,2030 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2008 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <time.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-
-#include <mateconf/mateconf-engine.h>
-#include <mateconf/mateconf-client.h>
-
-#define MATE_DESKTOP_USE_UNSTABLE_API
-#include <libmateui/mate-bg.h>
-
-#include "gs-prefs.h"        /* for GSSaverMode */
-
-#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"
-
-static void gs_manager_class_init (GSManagerClass *klass);
-static void gs_manager_init       (GSManager      *manager);
-static void gs_manager_finalize   (GObject        *object);
-
-#define GS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_MANAGER, GSManagerPrivate))
-
-struct GSManagerPrivate
-{
-    GSList      *windows;
-    GHashTable  *jobs;
-
-    GSThemeManager *theme_manager;
-    MateConfClient    *client;
-    MateBG        *bg;
-    guint           bg_notify_id;
-
-    /* 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;
-
-    char        *status_message;
-
-    /* State */
-    guint        active : 1;
-    guint        lock_active : 1;
-
-    guint        fading : 1;
-    guint        dialog_up : 1;
-
-    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;
-};
-
-enum
-{
-    ACTIVATED,
-    DEACTIVATED,
-    AUTH_REQUEST_BEGIN,
-    AUTH_REQUEST_END,
-    LAST_SIGNAL
-};
-
-enum
-{
-    PROP_0,
-    PROP_LOCK_ENABLED,
-    PROP_LOGOUT_ENABLED,
-    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
-
-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)
-{
-    if (lock_active != NULL)
-    {
-        *lock_active = FALSE;
-    }
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    *lock_active = manager->priv->lock_active;
-}
-
-void
-gs_manager_set_lock_active (GSManager *manager,
-                            gboolean   lock_active)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    gs_debug ("Setting lock active: %d", lock_active);
-
-    if (manager->priv->lock_active != lock_active)
-    {
-        GSList *l;
-
-        manager->priv->lock_active = lock_active;
-        for (l = manager->priv->windows; l; l = l->next)
-        {
-            gs_window_set_lock_enabled (l->data, lock_active);
-        }
-    }
-}
-
-void
-gs_manager_get_lock_enabled (GSManager *manager,
-                             gboolean  *lock_enabled)
-{
-    if (lock_enabled != NULL)
-    {
-        *lock_enabled = FALSE;
-    }
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    *lock_enabled = manager->priv->lock_enabled;
-}
-
-void
-gs_manager_set_lock_enabled (GSManager *manager,
-                             gboolean   lock_enabled)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->lock_enabled != lock_enabled)
-    {
-        manager->priv->lock_enabled = lock_enabled;
-    }
-}
-
-void
-gs_manager_set_logout_enabled (GSManager *manager,
-                               gboolean   logout_enabled)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->logout_enabled != logout_enabled)
-    {
-        GSList *l;
-
-        manager->priv->logout_enabled = logout_enabled;
-        for (l = manager->priv->windows; l; l = l->next)
-        {
-            gs_window_set_logout_enabled (l->data, logout_enabled);
-        }
-    }
-}
-
-void
-gs_manager_set_keyboard_enabled (GSManager *manager,
-                                 gboolean   enabled)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->keyboard_enabled != enabled)
-    {
-        GSList *l;
-
-        manager->priv->keyboard_enabled = enabled;
-        for (l = manager->priv->windows; l; l = l->next)
-        {
-            gs_window_set_keyboard_enabled (l->data, enabled);
-        }
-    }
-}
-
-void
-gs_manager_set_user_switch_enabled (GSManager *manager,
-                                    gboolean   user_switch_enabled)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->user_switch_enabled != user_switch_enabled)
-    {
-        GSList *l;
-
-        manager->priv->user_switch_enabled = user_switch_enabled;
-        for (l = manager->priv->windows; l; l = l->next)
-        {
-            gs_window_set_user_switch_enabled (l->data, user_switch_enabled);
-        }
-    }
-}
-
-static gboolean
-activate_lock_timeout (GSManager *manager)
-{
-    if (manager->priv->lock_enabled)
-    {
-        gs_manager_set_lock_active (manager, TRUE);
-    }
-
-    manager->priv->lock_timeout_id = 0;
-
-    return FALSE;
-}
-
-static void
-remove_lock_timer (GSManager *manager)
-{
-    if (manager->priv->lock_timeout_id != 0)
-    {
-        g_source_remove (manager->priv->lock_timeout_id);
-        manager->priv->lock_timeout_id = 0;
-    }
-}
-
-static void
-add_lock_timer (GSManager *manager,
-                glong      timeout)
-{
-    manager->priv->lock_timeout_id = g_timeout_add (timeout,
-                                     (GSourceFunc)activate_lock_timeout,
-                                     manager);
-}
-
-void
-gs_manager_set_lock_timeout (GSManager *manager,
-                             glong      lock_timeout)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->lock_timeout != lock_timeout)
-    {
-
-        manager->priv->lock_timeout = lock_timeout;
-
-        if (manager->priv->active
-                && ! manager->priv->lock_active
-                && (lock_timeout >= 0))
-        {
-
-            glong elapsed = (time (NULL) - manager->priv->activate_time) * 1000;
-
-            remove_lock_timer (manager);
-
-            if (elapsed >= lock_timeout)
-            {
-                activate_lock_timeout (manager);
-            }
-            else
-            {
-                add_lock_timer (manager, lock_timeout - elapsed);
-            }
-        }
-    }
-}
-
-void
-gs_manager_set_logout_timeout (GSManager *manager,
-                               glong      logout_timeout)
-{
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->logout_timeout != logout_timeout)
-    {
-        GSList *l;
-
-        manager->priv->logout_timeout = logout_timeout;
-        for (l = manager->priv->windows; l; l = l->next)
-        {
-            gs_window_set_logout_timeout (l->data, logout_timeout);
-        }
-    }
-}
-
-void
-gs_manager_set_logout_command (GSManager  *manager,
-                               const char *command)
-{
-    GSList *l;
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    g_free (manager->priv->logout_command);
-
-    if (command)
-    {
-        manager->priv->logout_command = g_strdup (command);
-    }
-    else
-    {
-        manager->priv->logout_command = NULL;
-    }
-
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gs_window_set_logout_command (l->data, manager->priv->logout_command);
-    }
-}
-
-void
-gs_manager_set_keyboard_command (GSManager  *manager,
-                                 const char *command)
-{
-    GSList *l;
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    g_free (manager->priv->keyboard_command);
-
-    if (command)
-    {
-        manager->priv->keyboard_command = g_strdup (command);
-    }
-    else
-    {
-        manager->priv->keyboard_command = NULL;
-    }
-
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gs_window_set_keyboard_command (l->data, manager->priv->keyboard_command);
-    }
-}
-
-void
-gs_manager_set_status_message (GSManager  *manager,
-                               const char *status_message)
-{
-    GSList *l;
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    g_free (manager->priv->status_message);
-
-    manager->priv->status_message = g_strdup (status_message);
-
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gs_window_set_status_message (l->data, manager->priv->status_message);
-    }
-}
-
-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,
-                         const GValue       *value,
-                         GParamSpec         *pspec)
-{
-    GSManager *self;
-
-    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;
-    case PROP_LOCK_TIMEOUT:
-        gs_manager_set_lock_timeout (self, g_value_get_long (value));
-        break;
-    case PROP_LOGOUT_ENABLED:
-        gs_manager_set_logout_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_KEYBOARD_ENABLED:
-        gs_manager_set_keyboard_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_USER_SWITCH_ENABLED:
-        gs_manager_set_user_switch_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_LOGOUT_TIMEOUT:
-        gs_manager_set_logout_timeout (self, g_value_get_long (value));
-        break;
-    case PROP_LOGOUT_COMMAND:
-        gs_manager_set_logout_command (self, g_value_get_string (value));
-        break;
-    case PROP_KEYBOARD_COMMAND:
-        gs_manager_set_keyboard_command (self, g_value_get_string (value));
-        break;
-    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;
-    }
-}
-
-static void
-gs_manager_get_property (GObject            *object,
-                         guint               prop_id,
-                         GValue             *value,
-                         GParamSpec         *pspec)
-{
-    GSManager *self;
-
-    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;
-    case PROP_LOCK_TIMEOUT:
-        g_value_set_long (value, self->priv->lock_timeout);
-        break;
-    case PROP_LOGOUT_ENABLED:
-        g_value_set_boolean (value, self->priv->logout_enabled);
-        break;
-    case PROP_KEYBOARD_ENABLED:
-        g_value_set_boolean (value, self->priv->keyboard_enabled);
-        break;
-    case PROP_USER_SWITCH_ENABLED:
-        g_value_set_boolean (value, self->priv->user_switch_enabled);
-        break;
-    case PROP_LOGOUT_TIMEOUT:
-        g_value_set_long (value, self->priv->logout_timeout);
-        break;
-    case PROP_LOGOUT_COMMAND:
-        g_value_set_string (value, self->priv->logout_command);
-        break;
-    case PROP_KEYBOARD_COMMAND:
-        g_value_set_string (value, self->priv->keyboard_command);
-        break;
-    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:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_manager_class_init (GSManagerClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize     = gs_manager_finalize;
-    object_class->get_property = gs_manager_get_property;
-    object_class->set_property = gs_manager_set_property;
-
-    signals [ACTIVATED] =
-        g_signal_new ("activated",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSManagerClass, activated),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-    signals [DEACTIVATED] =
-        g_signal_new ("deactivated",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSManagerClass, deactivated),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-    signals [AUTH_REQUEST_BEGIN] =
-        g_signal_new ("auth-request-begin",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSManagerClass, auth_request_begin),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-    signals [AUTH_REQUEST_END] =
-        g_signal_new ("auth-request-end",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSManagerClass, auth_request_end),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-
-    g_object_class_install_property (object_class,
-                                     PROP_ACTIVE,
-                                     g_param_spec_boolean ("active",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READABLE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOCK_ENABLED,
-                                     g_param_spec_boolean ("lock-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOCK_TIMEOUT,
-                                     g_param_spec_long ("lock-timeout",
-                                             NULL,
-                                             NULL,
-                                             -1,
-                                             G_MAXLONG,
-                                             0,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_ENABLED,
-                                     g_param_spec_boolean ("logout-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_USER_SWITCH_ENABLED,
-                                     g_param_spec_boolean ("user-switch-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_TIMEOUT,
-                                     g_param_spec_long ("logout-timeout",
-                                             NULL,
-                                             NULL,
-                                             -1,
-                                             G_MAXLONG,
-                                             0,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_COMMAND,
-                                     g_param_spec_string ("logout-command",
-                                             NULL,
-                                             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));
-}
-
-static void
-on_bg_changed (MateBG   *bg,
-               GSManager *manager)
-{
-    gs_debug ("background changed");
-}
-
-static void
-mateconf_changed_callback (MateConfClient *client,
-                           guint        cnxn_id,
-                           MateConfEntry  *entry,
-                           GSManager   *manager)
-{
-    mate_bg_load_from_preferences (manager->priv->bg,
-                                   manager->priv->client);
-}
-
-static void
-watch_bg_preferences (GSManager *manager)
-{
-    g_assert (manager->priv->bg_notify_id == 0);
-
-    mateconf_client_add_dir (manager->priv->client,
-                             MATE_BG_KEY_DIR,
-                             MATECONF_CLIENT_PRELOAD_NONE,
-                             NULL);
-    manager->priv->bg_notify_id = mateconf_client_notify_add (manager->priv->client,
-                                  MATE_BG_KEY_DIR,
-                                  (MateConfClientNotifyFunc)mateconf_changed_callback,
-                                  manager,
-                                  NULL,
-                                  NULL);
-}
-
-static MateConfClient *
-get_mateconf_client (void)
-{
-    MateConfClient        *client;
-    GSList             *addresses;
-    GError             *error;
-    MateConfEngine        *engine;
-
-    client = NULL;
-    addresses = NULL;
-
-    addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/mateconf/mateconf.xml.mandatory");
-    addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/mateconf/mateconf.xml.system");
-    addresses = g_slist_prepend (addresses, "xml:merged:" SYSCONFDIR "/mateconf/mateconf.xml.defaults");
-    addresses = g_slist_reverse (addresses);
-
-    error = NULL;
-    engine = mateconf_engine_get_for_addresses (addresses, &error);
-    if (engine == NULL)
-    {
-        gs_debug ("Unable to get mateconf engine for addresses: %s", error->message);
-        g_error_free (error);
-    }
-    else
-    {
-        client = mateconf_client_get_for_engine (engine);
-    }
-
-    g_slist_free (addresses);
-
-    return client;
-}
-
-static void
-gs_manager_init (GSManager *manager)
-{
-    manager->priv = GS_MANAGER_GET_PRIVATE (manager);
-
-    manager->priv->fade = gs_fade_new ();
-    manager->priv->grab = gs_grab_new ();
-    manager->priv->theme_manager = gs_theme_manager_new ();
-
-    manager->priv->client = get_mateconf_client ();
-    if (manager->priv->client != NULL)
-    {
-        manager->priv->bg = mate_bg_new ();
-
-        g_signal_connect (manager->priv->bg,
-                          "changed",
-                          G_CALLBACK (on_bg_changed),
-                          manager);
-        watch_bg_preferences (manager);
-
-        mate_bg_load_from_preferences (manager->priv->bg, manager->priv->client);
-    }
-}
-
-static void
-remove_timers (GSManager *manager)
-{
-    remove_lock_timer (manager);
-    remove_cycle_timer (manager);
-}
-
-static void
-remove_unfade_idle (GSManager *manager)
-{
-    if (manager->priv->unfade_idle_id > 0)
-    {
-        g_source_remove (manager->priv->unfade_idle_id);
-        manager->priv->unfade_idle_id = 0;
-    }
-}
-
-
-static gboolean
-window_deactivated_idle (GSManager *manager)
-{
-    g_return_val_if_fail (manager != NULL, FALSE);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
-
-    /* don't deactivate directly but only emit a signal
-       so that we let the parent deactivate */
-    g_signal_emit (manager, signals [DEACTIVATED], 0);
-
-    return FALSE;
-}
-
-static void
-window_deactivated_cb (GSWindow  *window,
-                       GSManager *manager)
-{
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    g_idle_add ((GSourceFunc)window_deactivated_idle, manager);
-}
-
-static GSWindow *
-find_window_at_pointer (GSManager *manager)
-{
-    GdkDisplay *display;
-    GdkScreen  *screen;
-    int         monitor;
-    int         x, y;
-    GSWindow   *window;
-    int         screen_num;
-    GSList     *l;
-
-    display = gdk_display_get_default ();
-    gdk_display_get_pointer (display, &screen, &x, &y, NULL);
-    monitor = gdk_screen_get_monitor_at_point (screen, x, y);
-    screen_num = gdk_screen_get_number (screen);
-
-    /* Find the gs-window that is on that screen */
-    window = NULL;
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        GSWindow *win = GS_WINDOW (l->data);
-        if (gs_window_get_screen (win) == screen
-                && gs_window_get_monitor (win) == monitor)
-        {
-            window = win;
-        }
-    }
-
-    if (window == NULL)
-    {
-        gs_debug ("WARNING: Could not find the GSWindow for screen %d", screen_num);
-        /* take the first one */
-        window = manager->priv->windows->data;
-    }
-    else
-    {
-        gs_debug ("Requesting unlock for screen %d", screen_num);
-    }
-
-    return window;
-}
-
-void
-gs_manager_show_message (GSManager  *manager,
-                         const char *summary,
-                         const char *body,
-                         const char *icon)
-{
-    GSWindow *window;
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    /* Find the GSWindow that contains the pointer */
-    window = find_window_at_pointer (manager);
-    gs_window_show_message (window, summary, body, icon);
-
-    gs_manager_request_unlock (manager);
-}
-
-static gboolean
-manager_maybe_grab_window (GSManager *manager,
-                           GSWindow  *window)
-{
-    GdkDisplay *display;
-    GdkScreen  *screen;
-    int         monitor;
-    int         x, y;
-    gboolean    grabbed;
-
-    display = gdk_display_get_default ();
-    gdk_display_get_pointer (display, &screen, &x, &y, NULL);
-    monitor = gdk_screen_get_monitor_at_point (screen, x, y);
-
-    gdk_flush ();
-    grabbed = FALSE;
-    if (gs_window_get_screen (window) == screen
-            && gs_window_get_monitor (window) == monitor)
-    {
-        gs_debug ("Moving grab to %p", window);
-        gs_grab_move_to_window (manager->priv->grab,
-                                gs_window_get_gdk_window (window),
-                                gs_window_get_screen (window),
-                                FALSE);
-        grabbed = TRUE;
-    }
-
-    return grabbed;
-}
-
-static void
-window_grab_broken_cb (GSWindow           *window,
-                       GdkEventGrabBroken *event,
-                       GSManager          *manager)
-{
-    gs_debug ("GRAB BROKEN!");
-    if (event->keyboard)
-    {
-        gs_grab_keyboard_reset (manager->priv->grab);
-    }
-    else
-    {
-        gs_grab_mouse_reset (manager->priv->grab);
-    }
-}
-
-static gboolean
-unfade_idle (GSManager *manager)
-{
-    gs_debug ("resetting fade");
-    gs_fade_reset (manager->priv->fade);
-    manager->priv->unfade_idle_id = 0;
-    return FALSE;
-}
-
-
-static void
-add_unfade_idle (GSManager *manager)
-{
-    remove_unfade_idle (manager);
-    manager->priv->unfade_idle_id = g_timeout_add (500, (GSourceFunc)unfade_idle, manager);
-}
-
-static gboolean
-window_map_event_cb (GSWindow  *window,
-                     GdkEvent  *event,
-                     GSManager *manager)
-{
-    gs_debug ("Handling window map_event event");
-
-    manager_maybe_grab_window (manager, window);
-
-    manager_maybe_start_job_for_window (manager, window);
-
-    return FALSE;
-}
-
-static void
-window_map_cb (GSWindow  *window,
-               GSManager *manager)
-{
-    gs_debug ("Handling window map event");
-}
-
-static void
-window_unmap_cb (GSWindow  *window,
-                 GSManager *manager)
-{
-    gs_debug ("window unmapped!");
-}
-
-static void
-apply_background_to_window (GSManager *manager,
-                            GSWindow  *window)
-{
-    GdkPixmap       *pixmap;
-    GdkScreen       *screen;
-    int              width;
-    int              height;
-
-    if (manager->priv->bg == NULL)
-    {
-        gs_debug ("No background available");
-        gs_window_set_background_pixmap (window, NULL);
-    }
-
-    screen = gs_window_get_screen (window);
-    width = gdk_screen_get_width (screen);
-    height = gdk_screen_get_height (screen);
-    gs_debug ("Creating pixmap background w:%d h:%d", width, height);
-    pixmap = mate_bg_create_pixmap (manager->priv->bg,
-                                    gs_window_get_gdk_window (window),
-                                    width,
-                                    height,
-                                    FALSE);
-    gs_window_set_background_pixmap (window, pixmap);
-    g_object_unref (pixmap);
-}
-
-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)
-    {
-        remove_lock_timer (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 */
-    g_signal_emit (manager, signals [ACTIVATED], 0);
-}
-
-static void
-window_show_cb (GSWindow  *window,
-                GSManager *manager)
-{
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-    g_return_if_fail (window != NULL);
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gs_debug ("Handling window show");
-    manager_show_window (manager, 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)
-{
-    GSList *l;
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    gs_debug ("Handling dialog up");
-
-    g_signal_emit (manager, signals [AUTH_REQUEST_BEGIN], 0);
-
-    manager->priv->dialog_up = TRUE;
-    /* Make all other windows insensitive so we don't get events */
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        if (l->data != window)
-        {
-            gtk_widget_set_sensitive (GTK_WIDGET (l->data), FALSE);
-        }
-    }
-
-    /* Move keyboard and mouse grabs so dialog can be used */
-    gs_grab_move_to_window (manager->priv->grab,
-                            gs_window_get_gdk_window (window),
-                            gs_window_get_screen (window),
-                            FALSE);
-
-    /* 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
-handle_window_dialog_down (GSManager *manager,
-                           GSWindow  *window)
-{
-    GSList *l;
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    gs_debug ("Handling dialog down");
-
-    /* Regrab the mouse */
-    gs_grab_move_to_window (manager->priv->grab,
-                            gs_window_get_gdk_window (window),
-                            gs_window_get_screen (window),
-                            FALSE);
-
-    /* Make all windows sensitive so we get events */
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gtk_widget_set_sensitive (GTK_WIDGET (l->data), TRUE);
-    }
-
-    manager->priv->dialog_up = FALSE;
-
-    if (! manager->priv->throttled)
-    {
-        manager_resume_jobs (manager);
-    }
-
-    g_signal_emit (manager, signals [AUTH_REQUEST_END], 0);
-}
-
-static void
-window_dialog_up_changed_cb (GSWindow   *window,
-                             GParamSpec *pspec,
-                             GSManager  *manager)
-{
-    gboolean up;
-
-    up = gs_window_is_dialog_up (window);
-    gs_debug ("Handling window dialog up changed: %s", up ? "up" : "down");
-    if (up)
-    {
-        handle_window_dialog_up (manager, window);
-    }
-    else
-    {
-        handle_window_dialog_down (manager, window);
-    }
-}
-
-static gboolean
-window_activity_cb (GSWindow  *window,
-                    GSManager *manager)
-{
-    gboolean handled;
-
-    handled = gs_manager_request_unlock (manager);
-
-    return handled;
-}
-
-static void
-disconnect_window_signals (GSManager *manager,
-                           GSWindow  *window)
-{
-    g_signal_handlers_disconnect_by_func (window, window_deactivated_cb, manager);
-    g_signal_handlers_disconnect_by_func (window, window_activity_cb, 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);
-}
-
-static void
-window_destroyed_cb (GtkWindow *window,
-                     GSManager *manager)
-{
-    disconnect_window_signals (manager, GS_WINDOW (window));
-}
-
-static void
-connect_window_signals (GSManager *manager,
-                        GSWindow  *window)
-{
-    g_signal_connect_object (window, "destroy",
-                             G_CALLBACK (window_destroyed_cb), manager, 0);
-    g_signal_connect_object (window, "activity",
-                             G_CALLBACK (window_activity_cb), manager, 0);
-    g_signal_connect_object (window, "deactivated",
-                             G_CALLBACK (window_deactivated_cb), manager, 0);
-    g_signal_connect_object (window, "show",
-                             G_CALLBACK (window_show_cb), manager, G_CONNECT_AFTER);
-    g_signal_connect_object (window, "map",
-                             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",
-                             G_CALLBACK (window_unmap_cb), manager, G_CONNECT_AFTER);
-    g_signal_connect_object (window, "grab_broken_event",
-                             G_CALLBACK (window_grab_broken_cb), manager, G_CONNECT_AFTER);
-}
-
-static void
-gs_manager_create_window_for_monitor (GSManager *manager,
-                                      GdkScreen *screen,
-                                      int        monitor)
-{
-    GSWindow    *window;
-    GdkRectangle rect;
-
-    gdk_screen_get_monitor_geometry (screen, monitor, &rect);
-
-    gs_debug ("Creating window for monitor %d [%d,%d] (%dx%d)",
-              monitor, rect.x, rect.y, rect.width, rect.height);
-
-    window = gs_window_new (screen, monitor, manager->priv->lock_active);
-
-    gs_window_set_user_switch_enabled (window, manager->priv->user_switch_enabled);
-    gs_window_set_logout_enabled (window, manager->priv->logout_enabled);
-    gs_window_set_logout_timeout (window, manager->priv->logout_timeout);
-    gs_window_set_logout_command (window, manager->priv->logout_command);
-    gs_window_set_keyboard_enabled (window, manager->priv->keyboard_enabled);
-    gs_window_set_keyboard_command (window, manager->priv->keyboard_command);
-    gs_window_set_status_message (window, manager->priv->status_message);
-
-    connect_window_signals (manager, window);
-
-    manager->priv->windows = g_slist_append (manager->priv->windows, window);
-
-    if (manager->priv->active && !manager->priv->fading)
-    {
-        gtk_widget_show (GTK_WIDGET (window));
-    }
-}
-
-static void
-on_screen_monitors_changed (GdkScreen *screen,
-                            GSManager *manager)
-{
-    GSList *l;
-    int     n_monitors;
-    int     n_windows;
-    int     i;
-
-    n_monitors = gdk_screen_get_n_monitors (screen);
-    n_windows = g_slist_length (manager->priv->windows);
-
-    gs_debug ("Monitors changed for screen %d: num=%d",
-              gdk_screen_get_number (screen),
-              n_monitors);
-
-    if (n_monitors > n_windows)
-    {
-
-        /* Tear down unlock dialog in case we want to move it
-         * to a new monitor
-         */
-        l = manager->priv->windows;
-        while (l != NULL)
-        {
-            gs_window_cancel_unlock_request (GS_WINDOW (l->data));
-            l = l->next;
-        }
-
-        /* add more windows */
-        for (i = n_windows; i < n_monitors; i++)
-        {
-            gs_manager_create_window_for_monitor (manager, screen, i);
-        }
-
-        /* And put unlock dialog up where ever it's supposed to be
-         */
-        gs_manager_request_unlock (manager);
-    }
-    else
-    {
-
-        gdk_x11_grab_server ();
-
-        /* remove the extra windows */
-        l = manager->priv->windows;
-        while (l != NULL)
-        {
-            GdkScreen *this_screen;
-            int        this_monitor;
-            GSList    *next = l->next;
-
-            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);
-            }
-            l = next;
-        }
-
-        /* make sure there is a lock dialog on a connected monitor,
-         * and that the keyboard is still properly grabbed after all
-         * the windows above got destroyed*/
-        if (n_windows > n_monitors)
-        {
-            gs_manager_request_unlock (manager);
-        }
-
-        gdk_flush ();
-        gdk_x11_ungrab_server ();
-    }
-}
-
-static void
-gs_manager_destroy_windows (GSManager *manager)
-{
-    GdkDisplay  *display;
-    GSList      *l;
-    int          n_screens;
-    int          i;
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (manager->priv->windows == NULL)
-    {
-        return;
-    }
-
-    display = gdk_display_get_default ();
-
-    n_screens = gdk_display_get_n_screens (display);
-
-    for (i = 0; i < n_screens; i++)
-    {
-        g_signal_handlers_disconnect_by_func (gdk_display_get_screen (display, i),
-                                              on_screen_monitors_changed,
-                                              manager);
-    }
-
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gs_window_destroy (l->data);
-    }
-    g_slist_free (manager->priv->windows);
-    manager->priv->windows = NULL;
-}
-
-static void
-gs_manager_finalize (GObject *object)
-{
-    GSManager *manager;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_MANAGER (object));
-
-    manager = GS_MANAGER (object);
-
-    g_return_if_fail (manager->priv != NULL);
-
-    if (manager->priv->bg_notify_id != 0)
-    {
-        mateconf_client_remove_dir (manager->priv->client,
-                                    MATE_BG_KEY_DIR,
-                                    NULL);
-        mateconf_client_notify_remove (manager->priv->client,
-                                       manager->priv->bg_notify_id);
-        manager->priv->bg_notify_id = 0;
-    }
-    if (manager->priv->bg != NULL)
-    {
-        g_object_unref (manager->priv->bg);
-    }
-    if (manager->priv->client != NULL)
-    {
-        g_object_unref (manager->priv->client);
-    }
-
-    free_themes (manager);
-    g_free (manager->priv->logout_command);
-    g_free (manager->priv->keyboard_command);
-    g_free (manager->priv->status_message);
-
-    remove_unfade_idle (manager);
-    remove_timers (manager);
-
-    gs_grab_release (manager->priv->grab);
-
-    manager_stop_jobs (manager);
-
-    gs_manager_destroy_windows (manager);
-
-    manager->priv->active = FALSE;
-    manager->priv->activate_time = 0;
-    manager->priv->lock_enabled = FALSE;
-
-    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);
-}
-
-static void
-gs_manager_create_windows_for_screen (GSManager *manager,
-                                      GdkScreen *screen)
-{
-    int       n_monitors;
-    int       i;
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-    g_return_if_fail (GDK_IS_SCREEN (screen));
-
-    g_object_ref (manager);
-    g_object_ref (screen);
-
-    n_monitors = gdk_screen_get_n_monitors (screen);
-
-    gs_debug ("Creating %d windows for screen %d", n_monitors, gdk_screen_get_number (screen));
-
-    for (i = 0; i < n_monitors; i++)
-    {
-        gs_manager_create_window_for_monitor (manager, screen, i);
-    }
-
-    g_object_unref (screen);
-    g_object_unref (manager);
-}
-
-static void
-gs_manager_create_windows (GSManager *manager)
-{
-    GdkDisplay  *display;
-    int          n_screens;
-    int          i;
-
-    g_return_if_fail (manager != NULL);
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    g_assert (manager->priv->windows == NULL);
-
-    display = gdk_display_get_default ();
-    n_screens = gdk_display_get_n_screens (display);
-
-    for (i = 0; i < n_screens; i++)
-    {
-        g_signal_connect (gdk_display_get_screen (display, i),
-                          "monitors-changed",
-                          G_CALLBACK (on_screen_monitors_changed),
-                          manager);
-
-        gs_manager_create_windows_for_screen (manager, gdk_display_get_screen (display, i));
-    }
-}
-
-GSManager *
-gs_manager_new (void)
-{
-    GObject *manager;
-
-    manager = g_object_new (GS_TYPE_MANAGER, NULL);
-
-    return GS_MANAGER (manager);
-}
-
-static void
-show_windows (GSList *windows)
-{
-    GSList *l;
-
-    for (l = windows; l; l = l->next)
-    {
-        gtk_widget_show (GTK_WIDGET (l->data));
-    }
-}
-
-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)
-{
-    gs_debug ("fade completed, showing windows");
-    show_windows (manager->priv->windows);
-    manager->priv->fading = FALSE;
-}
-
-static gboolean
-gs_manager_activate (GSManager *manager)
-{
-    gboolean    do_fade;
-    gboolean    res;
-
-    g_return_val_if_fail (manager != NULL, FALSE);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
-
-    if (manager->priv->active)
-    {
-        gs_debug ("Trying to activate manager when already active");
-        return FALSE;
-    }
-
-    res = gs_grab_grab_root (manager->priv->grab, FALSE);
-    if (! res)
-    {
-        return FALSE;
-    }
-
-    if (manager->priv->windows == NULL)
-    {
-        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 */
-    do_fade = TRUE;
-    if (do_fade)
-    {
-        manager->priv->fading = TRUE;
-        gs_debug ("fading out");
-        gs_fade_async (manager->priv->fade,
-                       FADE_TIMEOUT,
-                       (GSFadeDoneFunc)fade_done_cb,
-                       manager);
-
-        while (manager->priv->fading)
-        {
-            gtk_main_iteration ();
-        }
-    }
-    else
-    {
-        show_windows (manager->priv->windows);
-    }
-
-    return TRUE;
-}
-
-static gboolean
-gs_manager_deactivate (GSManager *manager)
-{
-    g_return_val_if_fail (manager != NULL, FALSE);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
-
-    if (! manager->priv->active)
-    {
-        gs_debug ("Trying to deactivate a screensaver that is not active");
-        return FALSE;
-    }
-
-    remove_unfade_idle (manager);
-    gs_fade_reset (manager->priv->fade);
-    remove_timers (manager);
-
-    gs_grab_release (manager->priv->grab);
-
-    manager_stop_jobs (manager);
-
-    gs_manager_destroy_windows (manager);
-
-    /* reset state */
-    manager->priv->active = FALSE;
-    manager->priv->activate_time = 0;
-    manager->priv->lock_active = FALSE;
-    manager->priv->dialog_up = FALSE;
-    manager->priv->fading = FALSE;
-
-    return TRUE;
-}
-
-gboolean
-gs_manager_set_active (GSManager *manager,
-                       gboolean   active)
-{
-    gboolean res;
-
-    if (active)
-    {
-        res = gs_manager_activate (manager);
-    }
-    else
-    {
-        res = gs_manager_deactivate (manager);
-    }
-
-    return res;
-}
-
-gboolean
-gs_manager_get_active (GSManager *manager)
-{
-    g_return_val_if_fail (manager != NULL, FALSE);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
-
-    return manager->priv->active;
-}
-
-gboolean
-gs_manager_request_unlock (GSManager *manager)
-{
-    GSWindow *window;
-
-    g_return_val_if_fail (manager != NULL, FALSE);
-    g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
-
-    if (! manager->priv->active)
-    {
-        gs_debug ("Request unlock but manager is not active");
-        return FALSE;
-    }
-
-    if (manager->priv->dialog_up)
-    {
-        gs_debug ("Request unlock but dialog is already up");
-        return FALSE;
-    }
-
-    if (manager->priv->fading)
-    {
-        gs_debug ("Request unlock so finishing fade");
-        gs_fade_finish (manager->priv->fade);
-    }
-
-    if (manager->priv->windows == NULL)
-    {
-        gs_debug ("We don't have any windows!");
-        return FALSE;
-    }
-
-    /* Find the GSWindow that contains the pointer */
-    window = find_window_at_pointer (manager);
-    gs_window_request_unlock (window);
-
-    return TRUE;
-}
-
-void
-gs_manager_cancel_unlock_request (GSManager *manager)
-{
-    GSList *l;
-    for (l = manager->priv->windows; l; l = l->next)
-    {
-        gs_window_cancel_unlock_request (l->data);
-    }
-}
diff --git a/src/gs-manager.h.orig b/src/gs-manager.h.orig
deleted file mode 100644
index 6ef8db2..0000000
--- a/src/gs-manager.h.orig
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_MANAGER_H
-#define __GS_MANAGER_H
-
-#include "gs-prefs.h"
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_MANAGER         (gs_manager_get_type ())
-#define GS_MANAGER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_MANAGER, GSManager))
-#define GS_MANAGER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_MANAGER, GSManagerClass))
-#define GS_IS_MANAGER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_MANAGER))
-#define GS_IS_MANAGER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_MANAGER))
-#define GS_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_MANAGER, GSManagerClass))
-
-typedef struct GSManagerPrivate GSManagerPrivate;
-
-typedef struct
-{
-    GObject          parent;
-    GSManagerPrivate *priv;
-} GSManager;
-
-typedef struct
-{
-    GObjectClass     parent_class;
-
-    void            (* activated)          (GSManager *manager);
-    void            (* deactivated)        (GSManager *manager);
-    void            (* auth_request_begin) (GSManager *manager);
-    void            (* auth_request_end)   (GSManager *manager);
-
-} GSManagerClass;
-
-GType       gs_manager_get_type             (void);
-
-GSManager * gs_manager_new                  (void);
-
-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,
-        gboolean    lock_active);
-void        gs_manager_set_keyboard_enabled (GSManager  *manager,
-        gboolean    enabled);
-void        gs_manager_set_keyboard_command (GSManager  *manager,
-        const char *command);
-void        gs_manager_set_status_message   (GSManager  *manager,
-        const char *message);
-void        gs_manager_get_lock_enabled     (GSManager  *manager,
-        gboolean   *lock_enabled);
-void        gs_manager_set_lock_enabled     (GSManager  *manager,
-        gboolean    lock_enabled);
-void        gs_manager_set_lock_timeout     (GSManager  *manager,
-        glong       lock_timeout);
-void        gs_manager_set_logout_enabled   (GSManager  *manager,
-        gboolean    logout_enabled);
-void        gs_manager_set_user_switch_enabled (GSManager  *manager,
-        gboolean    user_switch_enabled);
-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,
-        const char *icon);
-gboolean    gs_manager_request_unlock       (GSManager  *manager);
-void        gs_manager_cancel_unlock_request (GSManager *manager);
-
-G_END_DECLS
-
-#endif /* __GS_MANAGER_H */
diff --git a/src/gs-monitor.c.orig b/src/gs-monitor.c.orig
deleted file mode 100644
index c8478a4..0000000
--- a/src/gs-monitor.c.orig
+++ /dev/null
@@ -1,528 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include "mate-screensaver.h"
-
-#include "gs-manager.h"
-#include "gs-watcher.h"
-#include "gs-fade.h"
-#include "gs-grab.h"
-
-#include "gs-listener-dbus.h"
-#include "gs-monitor.h"
-#include "gs-prefs.h"
-#include "gs-debug.h"
-
-static void     gs_monitor_class_init (GSMonitorClass *klass);
-static void     gs_monitor_init       (GSMonitor      *monitor);
-static void     gs_monitor_finalize   (GObject        *object);
-
-#define GS_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_MONITOR, GSMonitorPrivate))
-
-struct GSMonitorPrivate
-{
-    GSWatcher      *watcher;
-    GSListener     *listener;
-    GSManager      *manager;
-    GSPrefs        *prefs;
-    GSFade         *fade;
-    GSGrab         *grab;
-    guint           release_grab_id;
-};
-
-#define FADE_TIMEOUT 10000
-
-G_DEFINE_TYPE (GSMonitor, gs_monitor, G_TYPE_OBJECT)
-
-static void
-gs_monitor_class_init (GSMonitorClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize = gs_monitor_finalize;
-
-    g_type_class_add_private (klass, sizeof (GSMonitorPrivate));
-}
-
-static void
-manager_activated_cb (GSManager *manager,
-                      GSMonitor *monitor)
-{
-}
-
-static void
-manager_deactivated_cb (GSManager *manager,
-                        GSMonitor *monitor)
-{
-    gs_listener_set_active (monitor->priv->listener, FALSE);
-}
-
-static gboolean
-watcher_idle_cb (GSWatcher *watcher,
-                 gboolean   is_idle,
-                 GSMonitor *monitor)
-{
-    gboolean res;
-
-    gs_debug ("Idle signal detected: %d", is_idle);
-
-    res = gs_listener_set_session_idle (monitor->priv->listener, is_idle);
-
-    return res;
-}
-
-static gboolean
-release_grab_timeout (GSMonitor *monitor)
-{
-    gboolean manager_active;
-
-    manager_active = gs_manager_get_active (monitor->priv->manager);
-    if (! manager_active)
-    {
-        gs_grab_release (monitor->priv->grab);
-    }
-
-    monitor->priv->release_grab_id = 0;
-    return FALSE;
-}
-
-static gboolean
-watcher_idle_notice_cb (GSWatcher *watcher,
-                        gboolean   in_effect,
-                        GSMonitor *monitor)
-{
-    gboolean activation_enabled;
-    gboolean inhibited;
-    gboolean handled;
-
-    gs_debug ("Idle notice signal detected: %d", in_effect);
-
-    /* only fade if screensaver can activate */
-    activation_enabled = gs_listener_get_activation_enabled (monitor->priv->listener);
-    inhibited = gs_listener_is_inhibited (monitor->priv->listener);
-
-    handled = FALSE;
-    if (in_effect)
-    {
-        if (activation_enabled && ! inhibited)
-        {
-            /* start slow fade */
-            if (gs_grab_grab_offscreen (monitor->priv->grab, FALSE))
-            {
-                gs_fade_async (monitor->priv->fade, FADE_TIMEOUT, NULL, NULL);
-            }
-            else
-            {
-                gs_debug ("Could not grab the keyboard so not performing idle warning fade-out");
-            }
-
-            handled = TRUE;
-        }
-    }
-    else
-    {
-        gboolean manager_active;
-
-        manager_active = gs_manager_get_active (monitor->priv->manager);
-        /* cancel the fade unless manager was activated */
-        if (! manager_active)
-        {
-            gs_debug ("manager not active, performing fade cancellation");
-            gs_fade_reset (monitor->priv->fade);
-
-            /* don't release the grab immediately to prevent typing passwords into windows */
-            if (monitor->priv->release_grab_id != 0)
-            {
-                g_source_remove (monitor->priv->release_grab_id);
-            }
-            monitor->priv->release_grab_id = g_timeout_add (1000, (GSourceFunc)release_grab_timeout, monitor);
-        }
-        else
-        {
-            gs_debug ("manager active, skipping fade cancellation");
-        }
-
-        handled = TRUE;
-    }
-
-    return handled;
-}
-
-static void
-gs_monitor_lock_screen (GSMonitor *monitor)
-{
-    gboolean res;
-    gboolean locked;
-
-    /* set lock flag before trying to activate screensaver
-       in case something tries to react to the ActiveChanged signal */
-
-    gs_manager_get_lock_active (monitor->priv->manager, &locked);
-    gs_manager_set_lock_active (monitor->priv->manager, TRUE);
-    res = gs_listener_set_active (monitor->priv->listener, TRUE);
-    if (! res)
-    {
-        /* If we've failed then restore lock status */
-        gs_manager_set_lock_active (monitor->priv->manager, locked);
-        gs_debug ("Unable to lock the screen");
-    }
-}
-
-static void
-gs_monitor_simulate_user_activity (GSMonitor *monitor)
-{
-    /* FIXME: reset the xsync timer? */
-
-    /* request that the manager unlock -
-       will pop up a dialog if necessary */
-    gs_manager_request_unlock (monitor->priv->manager);
-}
-
-static void
-listener_lock_cb (GSListener *listener,
-                  GSMonitor  *monitor)
-{
-    if (! monitor->priv->prefs->lock_disabled)
-    {
-        gs_monitor_lock_screen (monitor);
-    }
-    else
-    {
-        gs_debug ("Locking disabled by the administrator");
-    }
-
-}
-
-static void
-listener_quit_cb (GSListener *listener,
-                  GSMonitor  *monitor)
-{
-    gs_listener_set_active (monitor->priv->listener, FALSE);
-    mate_screensaver_quit ();
-}
-
-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,
-                          const char *icon,
-                          GSMonitor  *monitor)
-{
-    gs_manager_show_message (monitor->priv->manager,
-                             summary,
-                             body,
-                             icon);
-}
-
-static gboolean
-listener_active_changed_cb (GSListener *listener,
-                            gboolean    active,
-                            GSMonitor  *monitor)
-{
-    gboolean res;
-    gboolean ret;
-    gboolean idle_watch_enabled;
-
-    res = gs_manager_set_active (monitor->priv->manager, active);
-    if (! res)
-    {
-        gs_debug ("Unable to set manager active: %d", active);
-        ret = FALSE;
-        goto done;
-    }
-
-    ret = TRUE;
-
-done:
-
-    idle_watch_enabled = gs_watcher_get_enabled (monitor->priv->watcher);
-    if (ret && idle_watch_enabled)
-    {
-        res = gs_watcher_set_active (monitor->priv->watcher, !active);
-        if (! res)
-        {
-            gs_debug ("Unable to set the idle watcher active: %d", !active);
-        }
-    }
-
-    return ret;
-}
-
-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)
-{
-    gs_monitor_simulate_user_activity (monitor);
-}
-
-static void
-_gs_monitor_update_from_prefs (GSMonitor *monitor,
-                               GSPrefs   *prefs)
-{
-    gboolean idle_detection_enabled;
-    gboolean idle_detection_active;
-    gboolean activate_watch;
-    gboolean manager_active;
-    gboolean lock_enabled;
-    gboolean user_switch_enabled;
-
-    lock_enabled = (monitor->priv->prefs->lock_enabled && !monitor->priv->prefs->lock_disabled);
-    user_switch_enabled = (monitor->priv->prefs->user_switch_enabled && !monitor->priv->prefs->user_switch_disabled);
-
-    gs_manager_set_lock_enabled (monitor->priv->manager, lock_enabled);
-    gs_manager_set_lock_timeout (monitor->priv->manager, monitor->priv->prefs->lock_timeout);
-    gs_manager_set_logout_enabled (monitor->priv->manager, monitor->priv->prefs->logout_enabled);
-    gs_manager_set_user_switch_enabled (monitor->priv->manager, user_switch_enabled);
-    gs_manager_set_keyboard_enabled (monitor->priv->manager, monitor->priv->prefs->keyboard_enabled);
-    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,
-                                        monitor->priv->prefs->idle_activation_enabled);
-
-    /* idle detection always enabled */
-    idle_detection_enabled = TRUE;
-
-    gs_watcher_set_enabled (monitor->priv->watcher, idle_detection_enabled);
-
-    /* in the case where idle detection is reenabled we may need to
-       activate the watcher too */
-
-    manager_active = gs_manager_get_active (monitor->priv->manager);
-    idle_detection_active = gs_watcher_get_active (monitor->priv->watcher);
-    activate_watch = (! manager_active
-                      && ! idle_detection_active
-                      && idle_detection_enabled);
-    if (activate_watch)
-    {
-        gs_watcher_set_active (monitor->priv->watcher, TRUE);
-    }
-
-    if (monitor->priv->prefs->status_message_enabled)
-    {
-        char *text;
-        g_object_get (monitor->priv->watcher,
-                      "status-message", &text,
-                      NULL);
-        gs_manager_set_status_message (monitor->priv->manager, text);
-        g_free (text);
-    }
-    else
-    {
-        gs_manager_set_status_message (monitor->priv->manager, NULL);
-    }
-}
-
-static void
-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);
-}
-
-static void
-connect_listener_signals (GSMonitor *monitor)
-{
-    g_signal_connect (monitor->priv->listener, "lock",
-                      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",
-                      G_CALLBACK (listener_show_message_cb), monitor);
-}
-
-static void
-on_watcher_status_message_changed (GSWatcher  *watcher,
-                                   GParamSpec *pspec,
-                                   GSMonitor  *monitor)
-{
-    char *text;
-    g_object_get (watcher, "status-message", &text, NULL);
-    gs_manager_set_status_message (monitor->priv->manager, text);
-    g_free (text);
-}
-
-static void
-disconnect_watcher_signals (GSMonitor *monitor)
-{
-    g_signal_handlers_disconnect_by_func (monitor->priv->watcher, watcher_idle_cb, monitor);
-    g_signal_handlers_disconnect_by_func (monitor->priv->watcher, watcher_idle_notice_cb, monitor);
-    g_signal_handlers_disconnect_by_func (monitor->priv->watcher, on_watcher_status_message_changed, monitor);
-}
-
-static void
-connect_watcher_signals (GSMonitor *monitor)
-{
-    g_signal_connect (monitor->priv->watcher, "idle-changed",
-                      G_CALLBACK (watcher_idle_cb), monitor);
-    g_signal_connect (monitor->priv->watcher, "idle-notice-changed",
-                      G_CALLBACK (watcher_idle_notice_cb), monitor);
-    g_signal_connect (monitor->priv->watcher, "notify::status-message",
-                      G_CALLBACK (on_watcher_status_message_changed), monitor);
-
-}
-
-static void
-disconnect_manager_signals (GSMonitor *monitor)
-{
-    g_signal_handlers_disconnect_by_func (monitor->priv->manager, manager_activated_cb, monitor);
-    g_signal_handlers_disconnect_by_func (monitor->priv->manager, manager_deactivated_cb, monitor);
-}
-
-static void
-connect_manager_signals (GSMonitor *monitor)
-{
-    g_signal_connect (monitor->priv->manager, "activated",
-                      G_CALLBACK (manager_activated_cb), monitor);
-    g_signal_connect (monitor->priv->manager, "deactivated",
-                      G_CALLBACK (manager_deactivated_cb), monitor);
-}
-
-static void
-disconnect_prefs_signals (GSMonitor *monitor)
-{
-    g_signal_handlers_disconnect_by_func (monitor->priv->prefs, _gs_monitor_update_from_prefs, monitor);
-}
-
-static void
-connect_prefs_signals (GSMonitor *monitor)
-{
-    g_signal_connect_swapped (monitor->priv->prefs, "changed",
-                              G_CALLBACK (_gs_monitor_update_from_prefs), monitor);
-}
-
-static void
-gs_monitor_init (GSMonitor *monitor)
-{
-
-    monitor->priv = GS_MONITOR_GET_PRIVATE (monitor);
-
-    monitor->priv->prefs = gs_prefs_new ();
-    connect_prefs_signals (monitor);
-
-    monitor->priv->listener = gs_listener_new ();
-    connect_listener_signals (monitor);
-
-    monitor->priv->fade = gs_fade_new ();
-    monitor->priv->grab = gs_grab_new ();
-
-    monitor->priv->watcher = gs_watcher_new ();
-    connect_watcher_signals (monitor);
-
-    monitor->priv->manager = gs_manager_new ();
-    connect_manager_signals (monitor);
-
-    _gs_monitor_update_from_prefs (monitor, monitor->priv->prefs);
-}
-
-static void
-gs_monitor_finalize (GObject *object)
-{
-    GSMonitor *monitor;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_MONITOR (object));
-
-    monitor = GS_MONITOR (object);
-
-    g_return_if_fail (monitor->priv != NULL);
-
-    disconnect_watcher_signals (monitor);
-    disconnect_listener_signals (monitor);
-    disconnect_manager_signals (monitor);
-    disconnect_prefs_signals (monitor);
-
-    g_object_unref (monitor->priv->fade);
-    g_object_unref (monitor->priv->grab);
-    g_object_unref (monitor->priv->watcher);
-    g_object_unref (monitor->priv->listener);
-    g_object_unref (monitor->priv->manager);
-    g_object_unref (monitor->priv->prefs);
-
-    G_OBJECT_CLASS (gs_monitor_parent_class)->finalize (object);
-}
-
-GSMonitor *
-gs_monitor_new (void)
-{
-    GSMonitor *monitor;
-
-    monitor = g_object_new (GS_TYPE_MONITOR, NULL);
-
-    return GS_MONITOR (monitor);
-}
-
-gboolean
-gs_monitor_start (GSMonitor *monitor,
-                  GError   **error)
-{
-    g_return_val_if_fail (GS_IS_MONITOR (monitor), FALSE);
-
-    if (! gs_listener_acquire (monitor->priv->listener, error))
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
diff --git a/src/gs-monitor.h.orig b/src/gs-monitor.h.orig
deleted file mode 100644
index 8ab3b0d..0000000
--- a/src/gs-monitor.h.orig
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_MONITOR_H
-#define __GS_MONITOR_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_MONITOR         (gs_monitor_get_type ())
-#define GS_MONITOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_MONITOR, GSMonitor))
-#define GS_MONITOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_MONITOR, GSMonitorClass))
-#define GS_IS_MONITOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_MONITOR))
-#define GS_IS_MONITOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_MONITOR))
-#define GS_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_MONITOR, GSMonitorClass))
-
-typedef struct GSMonitorPrivate GSMonitorPrivate;
-
-typedef struct
-{
-    GObject          parent;
-    GSMonitorPrivate *priv;
-} GSMonitor;
-
-typedef struct
-{
-    GObjectClass     parent_class;
-} GSMonitorClass;
-
-GType       gs_monitor_get_type (void);
-
-GSMonitor * gs_monitor_new              (void);
-gboolean    gs_monitor_start            (GSMonitor *monitor,
-        GError   **error);
-void        gs_monitor_set_lock_enabled (GSMonitor *monitor,
-        gboolean   lock_enabled);
-G_END_DECLS
-
-#endif /* __GS_MONITOR_H */
diff --git a/src/gs-prefs.c.orig b/src/gs-prefs.c.orig
deleted file mode 100644
index 2aaf2d3..0000000
--- a/src/gs-prefs.c.orig
+++ /dev/null
@@ -1,995 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <mateconf/mateconf-client.h>
-
-#include "gs-prefs.h"
-
-static void gs_prefs_class_init (GSPrefsClass *klass);
-static void gs_prefs_init       (GSPrefs      *prefs);
-static void gs_prefs_finalize   (GObject      *object);
-
-#define MATE_LOCKDOWN_DIR "/desktop/mate/lockdown"
-#define KEY_LOCK_DISABLE          MATE_LOCKDOWN_DIR "/disable_lock_screen"
-#define KEY_USER_SWITCH_DISABLE   MATE_LOCKDOWN_DIR "/disable_user_switching"
-
-#define KEY_DIR            "/apps/mate-screensaver"
-#define MATE_SESSION_DIR  "/desktop/mate/session"
-#define KEY_IDLE_ACTIVATION_ENABLED         KEY_DIR "/idle_activation_enabled"
-#define KEY_LOCK_ENABLED   KEY_DIR "/lock_enabled"
-#define KEY_MODE           KEY_DIR "/mode"
-#define KEY_ACTIVATE_DELAY MATE_SESSION_DIR "/idle_delay"
-#define KEY_POWER_DELAY    KEY_DIR "/power_management_delay"
-#define KEY_LOCK_DELAY     KEY_DIR "/lock_delay"
-#define KEY_CYCLE_DELAY    KEY_DIR "/cycle_delay"
-#define KEY_THEMES         KEY_DIR "/themes"
-#define KEY_USER_SWITCH_ENABLED KEY_DIR "/user_switch_enabled"
-#define KEY_LOGOUT_ENABLED KEY_DIR "/logout_enabled"
-#define KEY_LOGOUT_DELAY   KEY_DIR "/logout_delay"
-#define KEY_LOGOUT_COMMAND KEY_DIR "/logout_command"
-#define KEY_KEYBOARD_ENABLED KEY_DIR "/embedded_keyboard_enabled"
-#define KEY_KEYBOARD_COMMAND KEY_DIR "/embedded_keyboard_command"
-#define KEY_STATUS_MESSAGE_ENABLED   KEY_DIR "/status_message_enabled"
-
-#define GS_PREFS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_PREFS, GSPrefsPrivate))
-
-struct GSPrefsPrivate
-{
-    MateConfClient *mateconf_client;
-};
-
-enum
-{
-    CHANGED,
-    LAST_SIGNAL
-};
-
-enum
-{
-    PROP_0
-};
-
-static MateConfEnumStringPair mode_enum_map [] =
-{
-    { GS_MODE_BLANK_ONLY,       "blank-only" },
-    { GS_MODE_RANDOM,           "random"     },
-    { GS_MODE_SINGLE,           "single"     },
-    { 0, NULL }
-};
-
-static guint         signals [LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GSPrefs, gs_prefs, G_TYPE_OBJECT)
-
-static void
-gs_prefs_set_property (GObject            *object,
-                       guint               prop_id,
-                       const GValue       *value,
-                       GParamSpec         *pspec)
-{
-    switch (prop_id)
-    {
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_prefs_get_property (GObject            *object,
-                       guint               prop_id,
-                       GValue             *value,
-                       GParamSpec         *pspec)
-{
-    switch (prop_id)
-    {
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_prefs_class_init (GSPrefsClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize     = gs_prefs_finalize;
-    object_class->get_property = gs_prefs_get_property;
-    object_class->set_property = gs_prefs_set_property;
-
-
-    signals [CHANGED] =
-        g_signal_new ("changed",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSPrefsClass, changed),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-
-    g_type_class_add_private (klass, sizeof (GSPrefsPrivate));
-
-}
-
-static void
-_gs_prefs_set_timeout (GSPrefs *prefs,
-                       int      value)
-{
-    if (value < 1)
-        value = 10;
-
-    /* pick a reasonable large number for the
-       upper bound */
-    if (value > 480)
-        value = 480;
-
-    prefs->timeout = value * 60000;
-}
-
-static void
-_gs_prefs_set_power_timeout (GSPrefs *prefs,
-                             int      value)
-{
-    if (value < 1)
-        value = 60;
-
-    /* pick a reasonable large number for the
-       upper bound */
-    if (value > 480)
-        value = 480;
-
-    /* this value is in seconds - others are in minutes */
-    prefs->power_timeout = value * 1000;
-}
-
-static void
-_gs_prefs_set_lock_timeout (GSPrefs *prefs,
-                            int      value)
-{
-    if (value < 0)
-        value = 0;
-
-    /* pick a reasonable large number for the
-       upper bound */
-    if (value > 480)
-        value = 480;
-
-    prefs->lock_timeout = value * 60000;
-}
-
-static void
-_gs_prefs_set_cycle_timeout (GSPrefs *prefs,
-                             int      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,
-                    const char *value)
-{
-    int mode;
-
-    if (value && mateconf_string_to_enum (mode_enum_map, value, &mode))
-        prefs->mode = mode;
-    else
-        prefs->mode = GS_MODE_BLANK_ONLY;
-}
-
-static void
-_gs_prefs_set_themes (GSPrefs *prefs,
-                      GSList  *list)
-{
-    if (prefs->themes)
-    {
-        g_slist_foreach (prefs->themes, (GFunc)g_free, NULL);
-        g_slist_free (prefs->themes);
-    }
-
-    /* take ownership of the list */
-    prefs->themes = list;
-}
-
-static void
-_gs_prefs_set_idle_activation_enabled (GSPrefs *prefs,
-                                       gboolean value)
-{
-    prefs->idle_activation_enabled = value;
-}
-
-static void
-_gs_prefs_set_lock_enabled (GSPrefs *prefs,
-                            gboolean value)
-{
-    prefs->lock_enabled = value;
-}
-
-static void
-_gs_prefs_set_lock_disabled (GSPrefs *prefs,
-                             gboolean value)
-{
-    prefs->lock_disabled = value;
-}
-
-static void
-_gs_prefs_set_user_switch_disabled (GSPrefs *prefs,
-                                    gboolean value)
-{
-    prefs->user_switch_disabled = value;
-}
-
-static void
-_gs_prefs_set_keyboard_enabled (GSPrefs *prefs,
-                                gboolean value)
-{
-    prefs->keyboard_enabled = value;
-}
-
-static void
-_gs_prefs_set_keyboard_command (GSPrefs    *prefs,
-                                const char *value)
-{
-    g_free (prefs->keyboard_command);
-    prefs->keyboard_command = NULL;
-
-    if (value)
-    {
-        /* FIXME: check command */
-
-        prefs->keyboard_command = g_strdup (value);
-    }
-}
-
-static void
-_gs_prefs_set_status_message_enabled (GSPrefs  *prefs,
-                                      gboolean  enabled)
-{
-    prefs->status_message_enabled = enabled;
-}
-
-static void
-_gs_prefs_set_logout_enabled (GSPrefs *prefs,
-                              gboolean value)
-{
-    prefs->logout_enabled = value;
-}
-
-static void
-_gs_prefs_set_logout_command (GSPrefs    *prefs,
-                              const char *value)
-{
-    g_free (prefs->logout_command);
-    prefs->logout_command = NULL;
-
-    if (value)
-    {
-        /* FIXME: check command */
-
-        prefs->logout_command = g_strdup (value);
-    }
-}
-
-static void
-_gs_prefs_set_logout_timeout (GSPrefs *prefs,
-                              int      value)
-{
-    if (value < 0)
-        value = 0;
-
-    /* pick a reasonable large number for the
-       upper bound */
-    if (value > 480)
-        value = 480;
-
-    prefs->logout_timeout = value * 60000;
-}
-
-static void
-_gs_prefs_set_user_switch_enabled (GSPrefs *prefs,
-                                   gboolean value)
-{
-    prefs->user_switch_enabled = value;
-}
-
-static void
-key_error_and_free (const char *key,
-                    GError     *error)
-{
-    g_warning ("Error retrieving configuration key '%s': %s", key, error->message);
-    g_error_free (error);
-    error = NULL;
-}
-
-static void
-gs_prefs_load_from_mateconf (GSPrefs *prefs)
-{
-    glong    value;
-    gboolean bvalue;
-    char    *string;
-    GSList  *list;
-    GError  *error;
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_IDLE_ACTIVATION_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_idle_activation_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_IDLE_ACTIVATION_ENABLED, error);
-    }
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_LOCK_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_lock_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOCK_ENABLED, error);
-    }
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_LOCK_DISABLE, &error);
-    if (! error)
-    {
-        _gs_prefs_set_lock_disabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOCK_DISABLE, error);
-    }
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_USER_SWITCH_DISABLE, &error);
-    if (! error)
-    {
-        _gs_prefs_set_user_switch_disabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_USER_SWITCH_DISABLE, error);
-    }
-
-    error = NULL;
-    value = mateconf_client_get_int (prefs->priv->mateconf_client, KEY_ACTIVATE_DELAY, &error);
-    if (! error)
-    {
-        _gs_prefs_set_timeout (prefs, value);
-    }
-    else
-    {
-        key_error_and_free (KEY_ACTIVATE_DELAY, error);
-    }
-
-    error = NULL;
-    value = mateconf_client_get_int (prefs->priv->mateconf_client, KEY_POWER_DELAY, &error);
-    if (! error)
-    {
-        _gs_prefs_set_power_timeout (prefs, value);
-    }
-    else
-    {
-        key_error_and_free (KEY_POWER_DELAY, error);
-    }
-
-    error = NULL;
-    value = mateconf_client_get_int (prefs->priv->mateconf_client, KEY_LOCK_DELAY, &error);
-    if (! error)
-    {
-        _gs_prefs_set_lock_timeout (prefs, value);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOCK_DELAY, error);
-    }
-
-    error = NULL;
-    value = mateconf_client_get_int (prefs->priv->mateconf_client, KEY_CYCLE_DELAY, &error);
-    if (! error)
-    {
-        _gs_prefs_set_cycle_timeout (prefs, value);
-    }
-    else
-    {
-        key_error_and_free (KEY_CYCLE_DELAY, error);
-    }
-
-    error = NULL;
-    string = mateconf_client_get_string (prefs->priv->mateconf_client, KEY_MODE, &error);
-    if (! error)
-    {
-        _gs_prefs_set_mode (prefs, string);
-    }
-    else
-    {
-        key_error_and_free (KEY_MODE, error);
-    }
-    g_free (string);
-
-    error = NULL;
-    list = mateconf_client_get_list (prefs->priv->mateconf_client,
-                                     KEY_THEMES,
-                                     MATECONF_VALUE_STRING,
-                                     &error);
-    if (! error)
-    {
-        _gs_prefs_set_themes (prefs, list);
-    }
-    else
-    {
-        key_error_and_free (KEY_THEMES, error);
-    }
-
-    /* Embedded keyboard options */
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_KEYBOARD_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_keyboard_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_KEYBOARD_ENABLED, error);
-    }
-
-    error = NULL;
-    string = mateconf_client_get_string (prefs->priv->mateconf_client, KEY_KEYBOARD_COMMAND, &error);
-    if (! error)
-    {
-        _gs_prefs_set_keyboard_command (prefs, string);
-    }
-    else
-    {
-        key_error_and_free (KEY_KEYBOARD_COMMAND, error);
-    }
-    g_free (string);
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_STATUS_MESSAGE_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_status_message_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_STATUS_MESSAGE_ENABLED, error);
-    }
-
-    /* Logout options */
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_LOGOUT_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_logout_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOGOUT_ENABLED, error);
-    }
-
-    error = NULL;
-    string = mateconf_client_get_string (prefs->priv->mateconf_client, KEY_LOGOUT_COMMAND, &error);
-    if (! error)
-    {
-        _gs_prefs_set_logout_command (prefs, string);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOGOUT_COMMAND, error);
-    }
-    g_free (string);
-
-    error = NULL;
-    value = mateconf_client_get_int (prefs->priv->mateconf_client, KEY_LOGOUT_DELAY, &error);
-    if (! error)
-    {
-        _gs_prefs_set_logout_timeout (prefs, value);
-    }
-    else
-    {
-        key_error_and_free (KEY_LOGOUT_DELAY, error);
-    }
-
-    /* User switching options */
-
-    error = NULL;
-    bvalue = mateconf_client_get_bool (prefs->priv->mateconf_client, KEY_USER_SWITCH_ENABLED, &error);
-    if (! error)
-    {
-        _gs_prefs_set_user_switch_enabled (prefs, bvalue);
-    }
-    else
-    {
-        key_error_and_free (KEY_USER_SWITCH_ENABLED, error);
-    }
-}
-
-static void
-invalid_type_warning (const char *type)
-{
-    g_warning ("Error retrieving configuration key '%s': Invalid type",
-               type);
-}
-
-static void
-key_changed_cb (MateConfClient *client,
-                guint        cnxn_id,
-                MateConfEntry  *entry,
-                GSPrefs     *prefs)
-{
-    gboolean    changed = FALSE;
-    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_MODE) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_STRING)
-        {
-            const char *str;
-
-            str = mateconf_value_get_string (value);
-            _gs_prefs_set_mode (prefs, str);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_THEMES) == 0)
-    {
-        GSList *list = NULL;
-
-        if (value == NULL
-                || value->type != MATECONF_VALUE_LIST)
-        {
-            return;
-        }
-
-        list = mateconf_value_get_list (value);
-
-        if (list
-                && mateconf_value_get_list_type (value) == MATECONF_VALUE_STRING)
-        {
-            GSList *l;
-            GSList *new_list;
-
-            changed = TRUE;
-
-            new_list = NULL;
-            for (l = list; l; l = l->next)
-            {
-                char *s;
-
-                s = mateconf_value_to_string (l->data);
-
-                new_list = g_slist_prepend (new_list, g_strdup (s));
-
-                g_free (s);
-            }
-
-            new_list = g_slist_reverse (new_list);
-
-            _gs_prefs_set_themes (prefs, new_list);
-
-        }
-
-    }
-    else if (strcmp (key, KEY_ACTIVATE_DELAY) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_INT)
-        {
-            int delay;
-
-            delay = mateconf_value_get_int (value);
-            _gs_prefs_set_timeout (prefs, delay);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_POWER_DELAY) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_INT)
-        {
-            int delay;
-
-            delay = mateconf_value_get_int (value);
-            _gs_prefs_set_power_timeout (prefs, delay);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_LOCK_DELAY) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_INT)
-        {
-            int delay;
-
-            delay = mateconf_value_get_int (value);
-            _gs_prefs_set_lock_timeout (prefs, delay);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_IDLE_ACTIVATION_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_idle_activation_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_LOCK_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_lock_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        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);
-            _gs_prefs_set_lock_disabled (prefs, disabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_USER_SWITCH_DISABLE) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean disabled;
-
-            disabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_user_switch_disabled (prefs, disabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_CYCLE_DELAY) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_INT)
-        {
-            int delay;
-
-            delay = mateconf_value_get_int (value);
-            _gs_prefs_set_cycle_timeout (prefs, delay);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_KEYBOARD_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_keyboard_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_KEYBOARD_COMMAND) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_STRING)
-        {
-            const char *command;
-
-            command = mateconf_value_get_string (value);
-            _gs_prefs_set_keyboard_command (prefs, command);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_STATUS_MESSAGE_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_status_message_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_LOGOUT_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_logout_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_LOGOUT_DELAY) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_INT)
-        {
-            int delay;
-
-            delay = mateconf_value_get_int (value);
-            _gs_prefs_set_logout_timeout (prefs, delay);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_LOGOUT_COMMAND) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_STRING)
-        {
-            const char *command;
-
-            command = mateconf_value_get_string (value);
-            _gs_prefs_set_logout_command (prefs, command);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else if (strcmp (key, KEY_USER_SWITCH_ENABLED) == 0)
-    {
-
-        if (value->type == MATECONF_VALUE_BOOL)
-        {
-            gboolean enabled;
-
-            enabled = mateconf_value_get_bool (value);
-            _gs_prefs_set_user_switch_enabled (prefs, enabled);
-
-            changed = TRUE;
-        }
-        else
-        {
-            invalid_type_warning (key);
-        }
-
-    }
-    else
-    {
-        g_warning ("Config key not handled: %s", key);
-    }
-
-    if (changed && prefs)
-    {
-        g_signal_emit (prefs, signals [CHANGED], 0);
-    }
-}
-
-static void
-gs_prefs_init (GSPrefs *prefs)
-{
-    prefs->priv = GS_PREFS_GET_PRIVATE (prefs);
-
-    prefs->priv->mateconf_client      = mateconf_client_get_default ();
-
-    prefs->idle_activation_enabled = TRUE;
-    prefs->lock_enabled            = TRUE;
-    prefs->lock_disabled           = FALSE;
-    prefs->logout_enabled          = FALSE;
-    prefs->user_switch_enabled     = FALSE;
-
-    prefs->timeout                 = 600000;
-    prefs->power_timeout           = 60000;
-    prefs->lock_timeout            = 0;
-    prefs->logout_timeout          = 14400000;
-    prefs->cycle                   = 600000;
-
-    prefs->mode                    = GS_MODE_SINGLE;
-
-    /* MateConf setup */
-    mateconf_client_add_dir (prefs->priv->mateconf_client,
-                             KEY_DIR,
-                             MATECONF_CLIENT_PRELOAD_NONE, NULL);
-    mateconf_client_add_dir (prefs->priv->mateconf_client,
-                             MATE_LOCKDOWN_DIR,
-                             MATECONF_CLIENT_PRELOAD_NONE, NULL);
-    mateconf_client_add_dir (prefs->priv->mateconf_client,
-                             MATE_SESSION_DIR,
-                             MATECONF_CLIENT_PRELOAD_NONE, NULL);
-
-
-    mateconf_client_notify_add (prefs->priv->mateconf_client,
-                                KEY_DIR,
-                                (MateConfClientNotifyFunc)key_changed_cb,
-                                prefs,
-                                NULL, NULL);
-    mateconf_client_notify_add (prefs->priv->mateconf_client,
-                                MATE_LOCKDOWN_DIR,
-                                (MateConfClientNotifyFunc)key_changed_cb,
-                                prefs,
-                                NULL, NULL);
-
-    gs_prefs_load_from_mateconf (prefs);
-}
-
-static void
-gs_prefs_finalize (GObject *object)
-{
-    GSPrefs *prefs;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_PREFS (object));
-
-    prefs = GS_PREFS (object);
-
-    g_return_if_fail (prefs->priv != NULL);
-
-    if (prefs->priv->mateconf_client)
-    {
-        g_object_unref (prefs->priv->mateconf_client);
-        prefs->priv->mateconf_client = 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);
-
-    G_OBJECT_CLASS (gs_prefs_parent_class)->finalize (object);
-}
-
-GSPrefs *
-gs_prefs_new (void)
-{
-    GObject *prefs;
-
-    prefs = g_object_new (GS_TYPE_PREFS, NULL);
-
-    return GS_PREFS (prefs);
-}
diff --git a/src/gs-prefs.h.orig b/src/gs-prefs.h.orig
deleted file mode 100644
index 3545471..0000000
--- a/src/gs-prefs.h.orig
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_PREFS_H
-#define __GS_PREFS_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_PREFS         (gs_prefs_get_type ())
-#define GS_PREFS(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_PREFS, GSPrefs))
-#define GS_PREFS_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_PREFS, GSPrefsClass))
-#define GS_IS_PREFS(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_PREFS))
-#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
-{
-    GObject          parent;
-
-    GSPrefsPrivate  *priv;
-
-    guint            idle_activation_enabled : 1; /* whether to activate when idle */
-    guint            lock_enabled : 1;              /* whether to lock when active */
-    guint            logout_enabled : 1;    /* Whether to offer the logout option */
-    guint            lock_disabled : 1;     /* Whether locking the system is disabled */
-    guint            user_switch_disabled : 1;      /* Whether user switching is disabled */
-    guint            user_switch_enabled : 1;       /* Whether to offer the user switch option */
-    guint            keyboard_enabled : 1;  /* Whether to try to embed a keyboard */
-    guint            status_message_enabled : 1; /* show the status message in the lock */
-
-    guint            power_timeout;         /* how much idle time before power management */
-    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
-{
-    GObjectClass     parent_class;
-
-    void            (* changed)        (GSPrefs *prefs);
-} GSPrefsClass;
-
-GType       gs_prefs_get_type        (void);
-GSPrefs   * gs_prefs_new             (void);
-void        gs_prefs_load            (GSPrefs *prefs);
-
-G_END_DECLS
-
-#endif /* __GS_PREFS_H */
diff --git a/src/gs-theme-manager.c.orig b/src/gs-theme-manager.c.orig
deleted file mode 100644
index 48b3c41..0000000
--- a/src/gs-theme-manager.c.orig
+++ /dev/null
@@ -1,453 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at 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 at 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 <matemenu-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
-{
-    MateMenuTree *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_matemenu_tree_entry (MateMenuTreeEntry *entry)
-{
-    GSThemeInfo *info;
-    const char     *str;
-    char           *pos;
-
-    info = g_new0 (GSThemeInfo, 1);
-
-    info->refcount = 1;
-    info->name     = g_strdup (matemenu_tree_entry_get_name (entry));
-    info->exec     = g_strdup (matemenu_tree_entry_get_exec (entry));
-
-    /* remove the .desktop suffix */
-    str = matemenu_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 (MateMenuTree  *tree,
-                  const char *id)
-{
-    GSThemeInfo     *info;
-    MateMenuTreeDirectory *root;
-    GSList             *items;
-    GSList             *l;
-
-    root = matemenu_tree_get_root_directory (tree);
-    if (root == NULL)
-    {
-        return NULL;
-    }
-
-    items = matemenu_tree_directory_get_contents (root);
-
-    info = NULL;
-
-    for (l = items; l; l = l->next)
-    {
-        if (info == NULL
-                && matemenu_tree_item_get_type (l->data) == MATEMENU_TREE_ITEM_ENTRY)
-        {
-            MateMenuTreeEntry *entry = l->data;
-            const char     *file_id;
-
-            file_id = matemenu_tree_entry_get_desktop_file_id (entry);
-            if (file_id && id && strcmp (file_id, id) == 0)
-            {
-                info = gs_theme_info_new_from_matemenu_tree_entry (entry);
-            }
-        }
-
-        matemenu_tree_item_unref (l->data);
-    }
-
-    g_slist_free (items);
-    matemenu_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,
-                     MateMenuTreeEntry  *entry,
-                     const char      *filename)
-{
-    GSThemeInfo *info;
-
-    info = gs_theme_info_new_from_matemenu_tree_entry (entry);
-
-    *parent_list = g_slist_prepend (*parent_list, info);
-}
-
-static void
-make_theme_list (GSList             **parent_list,
-                 MateMenuTreeDirectory  *directory,
-                 const char          *filename)
-{
-    GSList *items;
-    GSList *l;
-
-    items = matemenu_tree_directory_get_contents (directory);
-
-    for (l = items; l; l = l->next)
-    {
-        switch (matemenu_tree_item_get_type (l->data))
-        {
-
-        case MATEMENU_TREE_ITEM_ENTRY:
-            theme_prepend_entry (parent_list, l->data, filename);
-            break;
-
-        case MATEMENU_TREE_ITEM_ALIAS:
-        case MATEMENU_TREE_ITEM_DIRECTORY:
-        default:
-            break;
-        }
-
-        matemenu_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;
-    MateMenuTreeDirectory *root;
-
-    g_return_val_if_fail (GS_IS_THEME_MANAGER (theme_manager), NULL);
-
-    root = matemenu_tree_get_root_directory (theme_manager->priv->menu_tree);
-
-    if (root != NULL)
-    {
-        make_theme_list (&l, root, "mate-screensavers.menu");
-        matemenu_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 MateMenuTree *
-get_themes_tree (void)
-{
-    MateMenuTree *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 = matemenu_tree_lookup ("mate-screensavers.menu", MATEMENU_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)
-    {
-        matemenu_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);
-}
diff --git a/src/gs-theme-manager.h.orig b/src/gs-theme-manager.h.orig
deleted file mode 100644
index 8472961..0000000
--- a/src/gs-theme-manager.h.orig
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_THEME_MANAGER_H
-#define __GS_THEME_MANAGER_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_THEME_MANAGER         (gs_theme_manager_get_type ())
-#define GS_THEME_MANAGER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_THEME_MANAGER, GSThemeManager))
-#define GS_THEME_MANAGER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_THEME_MANAGER, GSThemeManagerClass))
-#define GS_IS_THEME_MANAGER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_THEME_MANAGER))
-#define GS_IS_THEME_MANAGER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_THEME_MANAGER))
-#define GS_THEME_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_THEME_MANAGER, GSThemeManagerClass))
-
-typedef struct GSThemeManagerPrivate GSThemeManagerPrivate;
-
-typedef struct
-{
-    GObject                parent;
-    GSThemeManagerPrivate *priv;
-} GSThemeManager;
-
-typedef struct
-{
-    GObjectClass   parent_class;
-} GSThemeManagerClass;
-
-typedef struct _GSThemeInfo GSThemeInfo;
-
-GType              gs_theme_manager_get_type          (void);
-
-GSThemeManager    *gs_theme_manager_new               (void);
-
-GSList            *gs_theme_manager_get_info_list     (GSThemeManager *manager);
-GSThemeInfo       *gs_theme_manager_lookup_theme_info (GSThemeManager *manager,
-        const char     *theme);
-GSThemeInfo       *gs_theme_info_ref                  (GSThemeInfo    *info);
-void               gs_theme_info_unref                (GSThemeInfo    *info);
-const char        *gs_theme_info_get_id               (GSThemeInfo    *info);
-const char        *gs_theme_info_get_name             (GSThemeInfo    *info);
-const char        *gs_theme_info_get_exec             (GSThemeInfo    *info);
-
-G_END_DECLS
-
-#endif /* __GS_THEME_MANAGER_H */
diff --git a/src/gs-visual-gl.c.orig b/src/gs-visual-gl.c.orig
deleted file mode 100644
index e253b28..0000000
--- a/src/gs-visual-gl.c.orig
+++ /dev/null
@@ -1,116 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at jhu.edu>
- * Copyright (C) 1999, 2000, 2003 Jamie Zawinski <jwz at jwz.org>
- *
- * 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.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#ifdef HAVE_LIBGL
-#include <GL/gl.h>
-#include <GL/glx.h>
-#endif /* HAVE_GL */
-
-#include "gs-visual-gl.h"
-#include "gs-debug.h"
-
-GdkVisual *
-gs_visual_gl_get_best_for_screen (GdkScreen *screen)
-{
-    GdkVisual  *visual;
-#ifdef HAVE_LIBGL
-    GdkDisplay *display;
-    int         screen_num;
-    int         i;
-
-# define R GLX_RED_SIZE
-# define G GLX_GREEN_SIZE
-# define B GLX_BLUE_SIZE
-# define D GLX_DEPTH_SIZE
-# define I GLX_BUFFER_SIZE
-# define DB GLX_DOUBLEBUFFER
-# define ST GLX_STENCIL_SIZE
-
-    static int attrs [][20] =
-    {
-        { GLX_RGBA, R, 8, G, 8, B, 8, D, 8, DB, ST,1, 0 }, /* rgb double, stencil */
-        { GLX_RGBA, R, 4, G, 4, B, 4, D, 4, DB, ST,1, 0 },
-        { GLX_RGBA, R, 2, G, 2, B, 2, D, 2, DB, ST,1, 0 },
-        { GLX_RGBA, R, 8, G, 8, B, 8, D, 8, DB,       0 }, /* rgb double */
-        { GLX_RGBA, R, 4, G, 4, B, 4, D, 4, DB,       0 },
-        { GLX_RGBA, R, 2, G, 2, B, 2, D, 2, DB,       0 },
-        { GLX_RGBA, R, 8, G, 8, B, 8, D, 8,           0 }, /* rgb single */
-        { GLX_RGBA, R, 4, G, 4, B, 4, D, 4,           0 },
-        { GLX_RGBA, R, 2, G, 2, B, 2, D, 2,           0 },
-        { I, 8,                       D, 8, DB,       0 }, /* cmap double */
-        { I, 4,                       D, 4, DB,       0 },
-        { I, 8,                       D, 8,           0 }, /* cmap single */
-        { I, 4,                       D, 4,           0 },
-        { GLX_RGBA, R, 1, G, 1, B, 1, D, 1,           0 }  /* monochrome */
-    };
-
-    g_return_val_if_fail (screen != NULL, NULL);
-
-    display = gdk_screen_get_display (screen);
-    screen_num = gdk_screen_get_number (screen);
-
-    gdk_error_trap_push ();
-
-    visual = NULL;
-    for (i = 0; i < G_N_ELEMENTS (attrs); i++)
-    {
-        XVisualInfo *vi;
-
-        vi = glXChooseVisual (GDK_DISPLAY_XDISPLAY (display), screen_num, attrs [i]);
-
-        if (vi != NULL)
-        {
-            VisualID   vid;
-
-            vid = XVisualIDFromVisual (vi->visual);
-
-            visual = gdkx_visual_get (vid);
-
-            XFree (vi);
-
-            if (visual != NULL)
-            {
-                break;
-            }
-        }
-    }
-
-    gdk_display_sync (display);
-    gdk_error_trap_pop ();
-
-#else
-    visual = NULL;
-
-#endif /* HAVE_LIBGL */
-
-    return visual;
-}
diff --git a/src/gs-watcher-x11.c.orig b/src/gs-watcher-x11.c.orig
deleted file mode 100644
index a9c90e8..0000000
--- a/src/gs-watcher-x11.c.orig
+++ /dev/null
@@ -1,680 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at jhu.edu>
- * Copyright (C) 2008      Red Hat, Inc.
- *
- * 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <errno.h>
-
-#include <string.h>
-#include <gdk/gdkx.h>
-
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-
-#include "gs-watcher.h"
-#include "gs-marshal.h"
-#include "gs-debug.h"
-
-static void     gs_watcher_class_init (GSWatcherClass *klass);
-static void     gs_watcher_init       (GSWatcher      *watcher);
-static void     gs_watcher_finalize   (GObject        *object);
-
-static gboolean watchdog_timer        (GSWatcher      *watcher);
-
-#define GS_WATCHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_WATCHER, GSWatcherPrivate))
-
-struct GSWatcherPrivate
-{
-    /* settings */
-    guint           enabled : 1;
-    guint           delta_notice_timeout;
-
-    /* state */
-    guint           active : 1;
-    guint           idle : 1;
-    guint           idle_notice : 1;
-
-    guint           idle_id;
-    char           *status_message;
-
-    DBusGProxy     *presence_proxy;
-    guint           watchdog_timer_id;
-};
-
-enum
-{
-    PROP_0,
-    PROP_STATUS_MESSAGE
-};
-
-enum
-{
-    IDLE_CHANGED,
-    IDLE_NOTICE_CHANGED,
-    LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GSWatcher, gs_watcher, G_TYPE_OBJECT)
-
-static void
-remove_watchdog_timer (GSWatcher *watcher)
-{
-    if (watcher->priv->watchdog_timer_id != 0)
-    {
-        g_source_remove (watcher->priv->watchdog_timer_id);
-        watcher->priv->watchdog_timer_id = 0;
-    }
-}
-
-static void
-add_watchdog_timer (GSWatcher *watcher,
-                    glong      timeout)
-{
-    watcher->priv->watchdog_timer_id = g_timeout_add (timeout,
-                                       (GSourceFunc)watchdog_timer,
-                                       watcher);
-}
-
-static void
-gs_watcher_get_property (GObject    *object,
-                         guint       prop_id,
-                         GValue     *value,
-                         GParamSpec *pspec)
-{
-    GSWatcher *self;
-
-    self = GS_WATCHER (object);
-
-    switch (prop_id)
-    {
-    case PROP_STATUS_MESSAGE:
-        g_value_set_string (value, self->priv->status_message);
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-set_status_text (GSWatcher  *watcher,
-                 const char *text)
-{
-    g_free (watcher->priv->status_message);
-
-    watcher->priv->status_message = g_strdup (text);
-    g_object_notify (G_OBJECT (watcher), "status-message");
-}
-
-static void
-gs_watcher_set_property (GObject          *object,
-                         guint             prop_id,
-                         const GValue     *value,
-                         GParamSpec       *pspec)
-{
-    GSWatcher *self;
-
-    self = GS_WATCHER (object);
-
-    switch (prop_id)
-    {
-    case PROP_STATUS_MESSAGE:
-        set_status_text (self, g_value_get_string (value));
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_watcher_class_init (GSWatcherClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->finalize = gs_watcher_finalize;
-    object_class->get_property = gs_watcher_get_property;
-    object_class->set_property = gs_watcher_set_property;
-
-    g_object_class_install_property (object_class,
-                                     PROP_STATUS_MESSAGE,
-                                     g_param_spec_string ("status-message",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-
-    signals [IDLE_CHANGED] =
-        g_signal_new ("idle-changed",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSWatcherClass, idle_changed),
-                      NULL,
-                      NULL,
-                      gs_marshal_BOOLEAN__BOOLEAN,
-                      G_TYPE_BOOLEAN,
-                      1, G_TYPE_BOOLEAN);
-    signals [IDLE_NOTICE_CHANGED] =
-        g_signal_new ("idle-notice-changed",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSWatcherClass, idle_notice_changed),
-                      NULL,
-                      NULL,
-                      gs_marshal_BOOLEAN__BOOLEAN,
-                      G_TYPE_BOOLEAN,
-                      1, G_TYPE_BOOLEAN);
-
-    g_type_class_add_private (klass, sizeof (GSWatcherPrivate));
-}
-
-static gboolean
-_gs_watcher_set_session_idle_notice (GSWatcher *watcher,
-                                     gboolean   in_effect)
-{
-    gboolean res;
-
-    res = FALSE;
-
-    if (in_effect != watcher->priv->idle_notice)
-    {
-
-        g_signal_emit (watcher, signals [IDLE_NOTICE_CHANGED], 0, in_effect, &res);
-        if (res)
-        {
-            gs_debug ("Changing idle notice state: %d", in_effect);
-
-            watcher->priv->idle_notice = in_effect;
-        }
-        else
-        {
-            gs_debug ("Idle notice signal not handled: %d", in_effect);
-        }
-    }
-
-    return res;
-}
-
-static gboolean
-_gs_watcher_set_session_idle (GSWatcher *watcher,
-                              gboolean   is_idle)
-{
-    gboolean res;
-
-    res = FALSE;
-
-    if (is_idle != watcher->priv->idle)
-    {
-
-        g_signal_emit (watcher, signals [IDLE_CHANGED], 0, is_idle, &res);
-        if (res)
-        {
-            gs_debug ("Changing idle state: %d", is_idle);
-
-            watcher->priv->idle = is_idle;
-        }
-        else
-        {
-            gs_debug ("Idle changed signal not handled: %d", is_idle);
-        }
-    }
-
-    return res;
-}
-
-gboolean
-gs_watcher_get_active (GSWatcher *watcher)
-{
-    gboolean active;
-
-    g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE);
-
-    active = watcher->priv->active;
-
-    return active;
-}
-
-static void
-_gs_watcher_reset_state (GSWatcher *watcher)
-{
-    watcher->priv->idle = FALSE;
-    watcher->priv->idle_notice = FALSE;
-}
-
-static gboolean
-_gs_watcher_set_active_internal (GSWatcher *watcher,
-                                 gboolean   active)
-{
-    if (active != watcher->priv->active)
-    {
-        /* reset state */
-        _gs_watcher_reset_state (watcher);
-
-        watcher->priv->active = active;
-    }
-
-    return TRUE;
-}
-
-gboolean
-gs_watcher_set_active (GSWatcher *watcher,
-                       gboolean   active)
-{
-    g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE);
-
-    gs_debug ("turning watcher: %s", active ? "ON" : "OFF");
-
-    if (watcher->priv->active == active)
-    {
-        gs_debug ("Idle detection is already %s",
-                  active ? "active" : "inactive");
-        return FALSE;
-    }
-
-    if (! watcher->priv->enabled)
-    {
-        gs_debug ("Idle detection is disabled, cannot activate");
-        return FALSE;
-    }
-
-    return _gs_watcher_set_active_internal (watcher, active);
-}
-
-gboolean
-gs_watcher_set_enabled (GSWatcher *watcher,
-                        gboolean   enabled)
-{
-    g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE);
-
-    if (watcher->priv->enabled != enabled)
-    {
-        gboolean is_active = gs_watcher_get_active (watcher);
-
-        watcher->priv->enabled = enabled;
-
-        /* if we are disabling the watcher and we are
-           active shut it down */
-        if (! enabled && is_active)
-        {
-            _gs_watcher_set_active_internal (watcher, FALSE);
-        }
-    }
-
-    return TRUE;
-}
-
-gboolean
-gs_watcher_get_enabled (GSWatcher *watcher)
-{
-    gboolean enabled;
-
-    g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE);
-
-    enabled = watcher->priv->enabled;
-
-    return enabled;
-}
-
-static gboolean
-on_idle_timeout (GSWatcher *watcher)
-{
-    gboolean res;
-
-    res = _gs_watcher_set_session_idle (watcher, TRUE);
-
-    _gs_watcher_set_session_idle_notice (watcher, FALSE);
-
-    /* try again if we failed i guess */
-    return !res;
-}
-
-static void
-set_status (GSWatcher *watcher,
-            guint      status)
-{
-    gboolean res;
-    gboolean is_idle;
-
-    if (! watcher->priv->active)
-    {
-        gs_debug ("GSWatcher: not active, ignoring status changes");
-        return;
-    }
-
-    is_idle = (status == 3);
-
-    if (!is_idle && !watcher->priv->idle_notice)
-    {
-        /* no change in idleness */
-        return;
-    }
-
-    if (is_idle)
-    {
-        res = _gs_watcher_set_session_idle_notice (watcher, is_idle);
-        /* queue an activation */
-        if (watcher->priv->idle_id > 0)
-        {
-            g_source_remove (watcher->priv->idle_id);
-        }
-        watcher->priv->idle_id = g_timeout_add (watcher->priv->delta_notice_timeout,
-                                                (GSourceFunc)on_idle_timeout,
-                                                watcher);
-    }
-    else
-    {
-        /* cancel notice too */
-        if (watcher->priv->idle_id > 0)
-        {
-            g_source_remove (watcher->priv->idle_id);
-        }
-        res = _gs_watcher_set_session_idle (watcher, FALSE);
-        res = _gs_watcher_set_session_idle_notice (watcher, FALSE);
-    }
-}
-
-static void
-on_presence_status_changed (DBusGProxy    *presence_proxy,
-                            guint          status,
-                            GSWatcher     *watcher)
-{
-    set_status (watcher, status);
-}
-
-static void
-on_presence_status_text_changed (DBusGProxy    *presence_proxy,
-                                 const char    *status_text,
-                                 GSWatcher     *watcher)
-{
-    set_status_text (watcher, status_text);
-}
-
-static gboolean
-connect_presence_watcher (GSWatcher *watcher)
-{
-    DBusGConnection   *bus;
-    GError            *error;
-    gboolean           ret;
-
-    ret = FALSE;
-
-    error = NULL;
-    bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-    if (bus == NULL)
-    {
-        g_warning ("Unable to get session bus: %s", error->message);
-        g_error_free (error);
-        goto done;
-    }
-
-    error = NULL;
-    watcher->priv->presence_proxy = dbus_g_proxy_new_for_name_owner (bus,
-                                    "org.mate.SessionManager",
-                                    "/org/mate/SessionManager/Presence",
-                                    "org.mate.SessionManager.Presence",
-                                    &error);
-    if (watcher->priv->presence_proxy != NULL)
-    {
-        DBusGProxy *proxy;
-
-        dbus_g_proxy_add_signal (watcher->priv->presence_proxy,
-                                 "StatusChanged",
-                                 G_TYPE_UINT,
-                                 G_TYPE_INVALID);
-        dbus_g_proxy_connect_signal (watcher->priv->presence_proxy,
-                                     "StatusChanged",
-                                     G_CALLBACK (on_presence_status_changed),
-                                     watcher,
-                                     NULL);
-        dbus_g_proxy_add_signal (watcher->priv->presence_proxy,
-                                 "StatusTextChanged",
-                                 G_TYPE_STRING,
-                                 G_TYPE_INVALID);
-        dbus_g_proxy_connect_signal (watcher->priv->presence_proxy,
-                                     "StatusTextChanged",
-                                     G_CALLBACK (on_presence_status_text_changed),
-                                     watcher,
-                                     NULL);
-
-        proxy = dbus_g_proxy_new_from_proxy (watcher->priv->presence_proxy,
-                                             "org.freedesktop.DBus.Properties",
-                                             "/org/mate/SessionManager/Presence");
-        if (proxy != NULL)
-        {
-            guint       status;
-            const char *status_text;
-            GValue      value = { 0, };
-
-            status = 0;
-            status_text = NULL;
-
-            error = NULL;
-            dbus_g_proxy_call (proxy,
-                               "Get",
-                               &error,
-                               G_TYPE_STRING, "org.mate.SessionManager.Presence",
-                               G_TYPE_STRING, "status",
-                               G_TYPE_INVALID,
-                               G_TYPE_VALUE, &value,
-                               G_TYPE_INVALID);
-
-            if (error != NULL)
-            {
-                g_warning ("Couldn't get presence status: %s", error->message);
-                g_error_free (error);
-                goto done;
-            }
-            else
-            {
-                status = g_value_get_uint (&value);
-            }
-
-            g_value_unset (&value);
-
-            error = NULL;
-            dbus_g_proxy_call (proxy,
-                               "Get",
-                               &error,
-                               G_TYPE_STRING, "org.mate.SessionManager.Presence",
-                               G_TYPE_STRING, "status-text",
-                               G_TYPE_INVALID,
-                               G_TYPE_VALUE, &value,
-                               G_TYPE_INVALID);
-
-            if (error != NULL)
-            {
-                g_warning ("Couldn't get presence status text: %s", error->message);
-                g_error_free (error);
-            }
-            else
-            {
-                status_text = g_value_get_string (&value);
-            }
-
-            set_status (watcher, status);
-            set_status_text (watcher, status_text);
-        }
-    }
-    else
-    {
-        g_warning ("Failed to get session presence proxy: %s", error->message);
-        g_error_free (error);
-        goto done;
-    }
-
-    ret = TRUE;
-
-done:
-    return ret;
-}
-
-static void
-gs_watcher_init (GSWatcher *watcher)
-{
-    watcher->priv = GS_WATCHER_GET_PRIVATE (watcher);
-
-    watcher->priv->enabled = TRUE;
-    watcher->priv->active = FALSE;
-
-    connect_presence_watcher (watcher);
-
-    /* time before idle signal to send notice signal */
-    watcher->priv->delta_notice_timeout = 10000;
-
-    add_watchdog_timer (watcher, 600000);
-}
-
-static void
-gs_watcher_finalize (GObject *object)
-{
-    GSWatcher *watcher;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_WATCHER (object));
-
-    watcher = GS_WATCHER (object);
-
-    g_return_if_fail (watcher->priv != NULL);
-
-    remove_watchdog_timer (watcher);
-
-    if (watcher->priv->idle_id > 0)
-    {
-        g_source_remove (watcher->priv->idle_id);
-    }
-
-    watcher->priv->active = FALSE;
-
-    if (watcher->priv->presence_proxy != NULL)
-    {
-        g_object_unref (watcher->priv->presence_proxy);
-    }
-
-    g_free (watcher->priv->status_message);
-
-    G_OBJECT_CLASS (gs_watcher_parent_class)->finalize (object);
-}
-
-/* Figuring out what the appropriate XSetScreenSaver() parameters are
-   (one wouldn't expect this to be rocket science.)
-*/
-static void
-disable_builtin_screensaver (GSWatcher *watcher,
-                             gboolean   unblank_screen)
-{
-    int current_server_timeout, current_server_interval;
-    int current_prefer_blank,   current_allow_exp;
-    int desired_server_timeout, desired_server_interval;
-    int desired_prefer_blank,   desired_allow_exp;
-
-    XGetScreenSaver (GDK_DISPLAY (),
-                     &current_server_timeout,
-                     &current_server_interval,
-                     &current_prefer_blank,
-                     &current_allow_exp);
-
-    desired_server_timeout  = current_server_timeout;
-    desired_server_interval = current_server_interval;
-    desired_prefer_blank    = current_prefer_blank;
-    desired_allow_exp       = current_allow_exp;
-
-    desired_server_interval = 0;
-
-    /* I suspect (but am not sure) that DontAllowExposures might have
-       something to do with powering off the monitor as well, at least
-       on some systems that don't support XDPMS?  Who know... */
-    desired_allow_exp = AllowExposures;
-
-    /* When we're not using an extension, set the server-side timeout to 0,
-       so that the server never gets involved with screen blanking, and we
-       do it all ourselves.  (However, when we *are* using an extension,
-       we tell the server when to notify us, and rather than blanking the
-       screen, the server will send us an X event telling us to blank.)
-    */
-    desired_server_timeout = 0;
-
-    if (desired_server_timeout     != current_server_timeout
-            || desired_server_interval != current_server_interval
-            || desired_prefer_blank    != current_prefer_blank
-            || desired_allow_exp       != current_allow_exp)
-    {
-
-        gs_debug ("disabling server builtin screensaver:"
-                  " (xset s %d %d; xset s %s; xset s %s)",
-                  desired_server_timeout,
-                  desired_server_interval,
-                  (desired_prefer_blank ? "blank" : "noblank"),
-                  (desired_allow_exp ? "expose" : "noexpose"));
-
-        XSetScreenSaver (GDK_DISPLAY (),
-                         desired_server_timeout,
-                         desired_server_interval,
-                         desired_prefer_blank,
-                         desired_allow_exp);
-
-        XSync (GDK_DISPLAY (), FALSE);
-    }
-
-    if (unblank_screen)
-    {
-        /* Turn off the server builtin saver if it is now running. */
-        XForceScreenSaver (GDK_DISPLAY (), ScreenSaverReset);
-    }
-}
-
-
-/* This timer goes off every few minutes, whether the user is idle or not,
-   to try and clean up anything that has gone wrong.
-
-   It calls disable_builtin_screensaver() so that if xset has been used,
-   or some other program (like xlock) has messed with the XSetScreenSaver()
-   settings, they will be set back to sensible values (if a server extension
-   is in use, messing with xlock can cause the screensaver to never get a wakeup
-   event, and could cause monitor power-saving to occur, and all manner of
-   heinousness.)
-
- */
-
-static gboolean
-watchdog_timer (GSWatcher *watcher)
-{
-
-    disable_builtin_screensaver (watcher, FALSE);
-
-    return TRUE;
-}
-
-GSWatcher *
-gs_watcher_new (void)
-{
-    GSWatcher *watcher;
-
-    watcher = g_object_new (GS_TYPE_WATCHER,
-                            NULL);
-
-    return GS_WATCHER (watcher);
-}
diff --git a/src/gs-watcher.h.orig b/src/gs-watcher.h.orig
deleted file mode 100644
index cc42dea..0000000
--- a/src/gs-watcher.h.orig
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_WATCHER_H
-#define __GS_WATCHER_H
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_WATCHER         (gs_watcher_get_type ())
-#define GS_WATCHER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_WATCHER, GSWatcher))
-#define GS_WATCHER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_WATCHER, GSWatcherClass))
-#define GS_IS_WATCHER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_WATCHER))
-#define GS_IS_WATCHER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_WATCHER))
-#define GS_WATCHER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_WATCHER, GSWatcherClass))
-
-typedef struct GSWatcherPrivate GSWatcherPrivate;
-
-typedef struct
-{
-    GObject           parent;
-    GSWatcherPrivate *priv;
-} GSWatcher;
-
-typedef struct
-{
-    GObjectClass      parent_class;
-
-    gboolean          (* idle_changed)        (GSWatcher *watcher,
-            gboolean   is_idle);
-    gboolean          (* idle_notice_changed) (GSWatcher *watcher,
-            gboolean   in_effect);
-} GSWatcherClass;
-
-GType       gs_watcher_get_type         (void);
-
-GSWatcher * gs_watcher_new              (void);
-gboolean    gs_watcher_set_enabled      (GSWatcher *watcher,
-        gboolean   enabled);
-gboolean    gs_watcher_get_enabled      (GSWatcher *watcher);
-gboolean    gs_watcher_set_active       (GSWatcher *watcher,
-        gboolean   active);
-gboolean    gs_watcher_get_active       (GSWatcher *watcher);
-
-G_END_DECLS
-
-#endif /* __GS_WATCHER_H */
diff --git a/src/gs-window-x11.c.orig b/src/gs-window-x11.c.orig
deleted file mode 100644
index f7c3c70..0000000
--- a/src/gs-window-x11.c.orig
+++ /dev/null
@@ -1,2647 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2008 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <errno.h>
-#include <sys/wait.h>
-#include <string.h>
-
-#include <gdk/gdkx.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include "gs-window.h"
-#include "gs-marshal.h"
-#include "subprocs.h"
-#include "gs-debug.h"
-
-#ifdef HAVE_SHAPE_EXT
-#include <X11/extensions/shape.h>
-#endif
-
-static void gs_window_class_init (GSWindowClass *klass);
-static void gs_window_init       (GSWindow      *window);
-static void gs_window_finalize   (GObject       *object);
-
-static gboolean popup_dialog_idle (GSWindow *window);
-static void gs_window_dialog_finish (GSWindow *window);
-static void remove_command_watches (GSWindow *window);
-
-enum
-{
-    DIALOG_RESPONSE_CANCEL,
-    DIALOG_RESPONSE_OK
-};
-
-#define MAX_QUEUED_EVENTS 16
-#define INFO_BAR_SECONDS 30
-
-#define GS_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_WINDOW, GSWindowPrivate))
-
-struct GSWindowPrivate
-{
-    int        monitor;
-
-    GdkRectangle geometry;
-    guint      obscured : 1;
-    guint      dialog_up : 1;
-
-    guint      lock_enabled : 1;
-    guint      user_switch_enabled : 1;
-    guint      logout_enabled : 1;
-    guint      keyboard_enabled : 1;
-
-    guint64    logout_timeout;
-    char      *logout_command;
-    char      *keyboard_command;
-    char      *status_message;
-
-    GtkWidget *vbox;
-    GtkWidget *drawing_area;
-    GtkWidget *lock_box;
-    GtkWidget *lock_socket;
-    GtkWidget *keyboard_socket;
-    GtkWidget *info_bar;
-    GtkWidget *info_content;
-
-    GdkPixmap *background_pixmap;
-
-    guint      popup_dialog_idle_id;
-
-    guint      dialog_map_signal_id;
-    guint      dialog_unmap_signal_id;
-    guint      dialog_response_signal_id;
-
-    guint      watchdog_timer_id;
-    guint      info_bar_timer_id;
-
-    gint       lock_pid;
-    gint       lock_watch_id;
-    gint       dialog_response;
-    gboolean   dialog_quit_requested;
-    gboolean   dialog_shake_in_progress;
-
-    gint       keyboard_pid;
-    gint       keyboard_watch_id;
-
-    GList     *key_events;
-
-    gdouble    last_x;
-    gdouble    last_y;
-
-    GTimer    *timer;
-
-#ifdef HAVE_SHAPE_EXT
-    int        shape_event_base;
-#endif
-};
-
-enum
-{
-    ACTIVITY,
-    DEACTIVATED,
-    LAST_SIGNAL
-};
-
-enum
-{
-    PROP_0,
-    PROP_OBSCURED,
-    PROP_DIALOG_UP,
-    PROP_LOCK_ENABLED,
-    PROP_LOGOUT_ENABLED,
-    PROP_KEYBOARD_ENABLED,
-    PROP_KEYBOARD_COMMAND,
-    PROP_LOGOUT_COMMAND,
-    PROP_LOGOUT_TIMEOUT,
-    PROP_MONITOR,
-    PROP_STATUS_MESSAGE
-};
-
-static guint           signals [LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GSWindow, gs_window, GTK_TYPE_WINDOW)
-
-static void
-set_invisible_cursor (GdkWindow *window,
-                      gboolean   invisible)
-{
-    GdkBitmap *empty_bitmap;
-    GdkCursor *cursor = NULL;
-    GdkColor   useless;
-    char       invisible_cursor_bits [] = { 0x0 };
-
-    if (invisible)
-    {
-        useless.red = useless.green = useless.blue = 0;
-        useless.pixel = 0;
-
-        empty_bitmap = gdk_bitmap_create_from_data (window,
-                       invisible_cursor_bits,
-                       1, 1);
-
-        cursor = gdk_cursor_new_from_pixmap (empty_bitmap,
-                                             empty_bitmap,
-                                             &useless,
-                                             &useless, 0, 0);
-
-        g_object_unref (empty_bitmap);
-    }
-
-    gdk_window_set_cursor (window, cursor);
-
-    if (cursor)
-    {
-        gdk_cursor_unref (cursor);
-    }
-}
-
-/* derived from tomboy */
-static void
-gs_window_override_user_time (GSWindow *window)
-{
-    guint32 ev_time = gtk_get_current_event_time ();
-
-    if (ev_time == 0)
-    {
-        gint ev_mask = gtk_widget_get_events (GTK_WIDGET (window));
-        if (!(ev_mask & GDK_PROPERTY_CHANGE_MASK))
-        {
-            gtk_widget_add_events (GTK_WIDGET (window),
-                                   GDK_PROPERTY_CHANGE_MASK);
-        }
-
-        /*
-         * NOTE: Last resort for D-BUS or other non-interactive
-         *       openings.  Causes roundtrip to server.  Lame.
-         */
-        ev_time = gdk_x11_get_server_time (GTK_WIDGET (window)->window);
-    }
-
-    gdk_x11_window_set_user_time (GTK_WIDGET (window)->window, ev_time);
-}
-
-static void
-force_no_pixmap_background (GtkWidget *widget)
-{
-    static gboolean first_time = TRUE;
-
-    if (first_time)
-    {
-        gtk_rc_parse_string ("\n"
-                             "   style \"gs-theme-engine-style\"\n"
-                             "   {\n"
-                             "      bg_pixmap[NORMAL] = \"<none>\"\n"
-                             "      bg_pixmap[INSENSITIVE] = \"<none>\"\n"
-                             "      bg_pixmap[ACTIVE] = \"<none>\"\n"
-                             "      bg_pixmap[PRELIGHT] = \"<none>\"\n"
-                             "      bg[NORMAL] = { 0.0, 0.0, 0.0 }\n"
-                             "      bg[INSENSITIVE] = { 0.0, 0.0, 0.0 }\n"
-                             "      bg[ACTIVE] = { 0.0, 0.0, 0.0 }\n"
-                             "      bg[PRELIGHT] = { 0.0, 0.0, 0.0 }\n"
-                             "   }\n"
-                             "   widget \"gs-window-drawing-area*\" style : highest \"gs-theme-engine-style\"\n"
-                             "\n");
-        first_time = FALSE;
-    }
-
-    gtk_widget_set_name (widget, "gs-window-drawing-area");
-}
-
-static void
-clear_children (Window window)
-{
-    Window            root;
-    Window            parent;
-    Window           *children;
-    unsigned int      n_children;
-    int               status;
-
-    children = NULL;
-    status = XQueryTree (GDK_DISPLAY (), window, &root, &parent, &children, &n_children);
-
-    if (status == 0)
-    {
-        if (children)
-        {
-            XFree (children);
-        }
-        return;
-    }
-
-    if (children)
-    {
-        while (n_children)
-        {
-            Window child;
-
-            child = children [--n_children];
-
-            XClearWindow (GDK_DISPLAY (), child);
-            clear_children (child);
-        }
-
-        XFree (children);
-    }
-}
-
-static void
-widget_clear_all_children (GtkWidget *widget)
-{
-    GdkWindow *w;
-
-    gs_debug ("Clearing all child windows");
-
-    gdk_error_trap_push ();
-
-    w = widget->window;
-
-    clear_children (GDK_WINDOW_XID (w));
-
-    gdk_display_sync (gtk_widget_get_display (widget));
-    gdk_error_trap_pop ();
-}
-
-void
-gs_window_set_background_pixmap (GSWindow  *window,
-                                 GdkPixmap *pixmap)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    if (window->priv->background_pixmap != NULL)
-    {
-        g_object_unref (window->priv->background_pixmap);
-    }
-
-    if (pixmap != NULL)
-    {
-        window->priv->background_pixmap = g_object_ref (pixmap);
-        gdk_window_set_back_pixmap (GTK_WIDGET (window)->window,
-                                    pixmap,
-                                    FALSE);
-    }
-}
-
-static void
-gs_window_clear_to_background_pixmap (GSWindow *window)
-{
-    GtkStateType state;
-    GtkStyle    *style;
-
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    if (! GTK_WIDGET_VISIBLE (GTK_WIDGET (window)))
-    {
-        return;
-    }
-
-    if (window->priv->background_pixmap == NULL)
-    {
-        /* don't allow null pixmaps */
-        return;
-    }
-
-    gs_debug ("Clearing window to background pixmap");
-
-    style = gtk_style_copy (GTK_WIDGET (window)->style);
-
-    state = (GtkStateType) 0;
-    while (state < (GtkStateType) G_N_ELEMENTS (GTK_WIDGET (window)->style->bg_pixmap))
-    {
-
-        if (style->bg_pixmap[state] != NULL)
-        {
-            g_object_unref (style->bg_pixmap[state]);
-        }
-
-        style->bg_pixmap[state] = g_object_ref (window->priv->background_pixmap);
-        state++;
-    }
-
-    gtk_widget_set_style (GTK_WIDGET (window), style);
-    g_object_unref (style);
-
-    if (window->priv->background_pixmap != NULL)
-    {
-        gdk_window_set_back_pixmap (GTK_WIDGET (window)->window,
-                                    window->priv->background_pixmap,
-                                    FALSE);
-    }
-
-    gdk_window_clear (GTK_WIDGET (window)->window);
-
-    gdk_flush ();
-}
-
-static void
-clear_widget (GtkWidget *widget)
-{
-    GdkColor     color = { 0, 0x0000, 0x0000, 0x0000 };
-    GdkColormap *colormap;
-    GtkStateType state;
-    GtkStyle    *style;
-
-    if (! GTK_WIDGET_VISIBLE (widget))
-    {
-        return;
-    }
-
-    gs_debug ("Clearing widget");
-
-    state = (GtkStateType) 0;
-    while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg))
-    {
-        gtk_widget_modify_bg (widget, state, &color);
-        state++;
-    }
-
-    style = gtk_style_copy (widget->style);
-
-    state = (GtkStateType) 0;
-    while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg_pixmap))
-    {
-
-        if (style->bg_pixmap[state] != NULL)
-        {
-            g_object_unref (style->bg_pixmap[state]);
-        }
-
-        style->bg_pixmap[state] = NULL;
-        state++;
-    }
-
-    colormap = gdk_drawable_get_colormap (widget->window);
-    gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE);
-    gdk_window_set_background (widget->window, &color);
-
-    gtk_widget_set_style (widget, style);
-    g_object_unref (style);
-
-    gdk_window_clear (widget->window);
-
-    /* If a screensaver theme adds child windows we need to clear them too */
-    widget_clear_all_children (widget);
-
-    gdk_flush ();
-}
-
-void
-gs_window_clear (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    clear_widget (GTK_WIDGET (window));
-    clear_widget (window->priv->drawing_area);
-}
-
-static GdkRegion *
-get_outside_region (GSWindow *window)
-{
-    int        i;
-    GdkRegion *region;
-
-    region = gdk_region_new ();
-    for (i = 0; i < window->priv->monitor; i++)
-    {
-        GdkRectangle geometry;
-
-        gdk_screen_get_monitor_geometry (GTK_WINDOW (window)->screen,
-                                         i, &geometry);
-        gdk_region_union_with_rect (region, &geometry);
-    }
-
-    return region;
-}
-
-static void
-update_geometry (GSWindow *window)
-{
-    GdkRectangle geometry;
-    GdkRegion   *outside_region;
-    GdkRegion   *monitor_region;
-
-    outside_region = get_outside_region (window);
-
-    gdk_screen_get_monitor_geometry (GTK_WINDOW (window)->screen,
-                                     window->priv->monitor,
-                                     &geometry);
-    gs_debug ("got geometry for monitor %d: x=%d y=%d w=%d h=%d",
-              window->priv->monitor,
-              geometry.x,
-              geometry.y,
-              geometry.width,
-              geometry.height);
-    monitor_region = gdk_region_rectangle (&geometry);
-    gdk_region_subtract (monitor_region, outside_region);
-    gdk_region_destroy (outside_region);
-
-    gdk_region_get_clipbox (monitor_region, &geometry);
-    gdk_region_destroy (monitor_region);
-
-    gs_debug ("using geometry for monitor %d: x=%d y=%d w=%d h=%d",
-              window->priv->monitor,
-              geometry.x,
-              geometry.y,
-              geometry.width,
-              geometry.height);
-
-    window->priv->geometry.x = geometry.x;
-    window->priv->geometry.y = geometry.y;
-    window->priv->geometry.width = geometry.width;
-    window->priv->geometry.height = geometry.height;
-}
-
-static void
-screen_size_changed (GdkScreen *screen,
-                     GSWindow  *window)
-{
-    gs_debug ("Got screen size changed signal");
-    gtk_widget_queue_resize (GTK_WIDGET (window));
-}
-
-/* copied from panel-toplevel.c */
-static void
-gs_window_move_resize_window (GSWindow *window,
-                              gboolean  move,
-                              gboolean  resize)
-{
-    GtkWidget *widget;
-
-    widget = GTK_WIDGET (window);
-
-    g_assert (GTK_WIDGET_REALIZED (widget));
-
-    gs_debug ("Move and/or resize window on monitor %d: x=%d y=%d w=%d h=%d",
-              window->priv->monitor,
-              window->priv->geometry.x,
-              window->priv->geometry.y,
-              window->priv->geometry.width,
-              window->priv->geometry.height);
-
-    if (move && resize)
-    {
-        gdk_window_move_resize (widget->window,
-                                window->priv->geometry.x,
-                                window->priv->geometry.y,
-                                window->priv->geometry.width,
-                                window->priv->geometry.height);
-    }
-    else if (move)
-    {
-        gdk_window_move (widget->window,
-                         window->priv->geometry.x,
-                         window->priv->geometry.y);
-    }
-    else if (resize)
-    {
-        gdk_window_resize (widget->window,
-                           window->priv->geometry.width,
-                           window->priv->geometry.height);
-    }
-}
-
-static void
-gs_window_real_unrealize (GtkWidget *widget)
-{
-    g_signal_handlers_disconnect_by_func (gtk_window_get_screen (GTK_WINDOW (widget)),
-                                          screen_size_changed,
-                                          widget);
-
-    if (GTK_WIDGET_CLASS (gs_window_parent_class)->unrealize)
-    {
-        GTK_WIDGET_CLASS (gs_window_parent_class)->unrealize (widget);
-    }
-}
-
-/* copied from gdk */
-extern char **environ;
-
-static gchar **
-spawn_make_environment_for_screen (GdkScreen  *screen,
-                                   gchar     **envp)
-{
-    gchar **retval = NULL;
-    gchar  *display_name;
-    gint    display_index = -1;
-    gint    i, env_len;
-
-    g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
-    if (envp == NULL)
-        envp = environ;
-
-    for (env_len = 0; envp[env_len]; env_len++)
-        if (strncmp (envp[env_len], "DISPLAY", strlen ("DISPLAY")) == 0)
-            display_index = env_len;
-
-    retval = g_new (char *, env_len + 1);
-    retval[env_len] = NULL;
-
-    display_name = gdk_screen_make_display_name (screen);
-
-    for (i = 0; i < env_len; i++)
-        if (i == display_index)
-            retval[i] = g_strconcat ("DISPLAY=", display_name, NULL);
-        else
-            retval[i] = g_strdup (envp[i]);
-
-    g_assert (i == env_len);
-
-    g_free (display_name);
-
-    return retval;
-}
-
-static gboolean
-spawn_command_line_on_screen_sync (GdkScreen    *screen,
-                                   const gchar  *command_line,
-                                   char        **standard_output,
-                                   char        **standard_error,
-                                   int          *exit_status,
-                                   GError      **error)
-{
-    char     **argv = NULL;
-    char     **envp = NULL;
-    gboolean   retval;
-
-    g_return_val_if_fail (command_line != NULL, FALSE);
-
-    if (! g_shell_parse_argv (command_line, NULL, &argv, error))
-    {
-        return FALSE;
-    }
-
-    envp = spawn_make_environment_for_screen (screen, NULL);
-
-    retval = g_spawn_sync (NULL,
-                           argv,
-                           envp,
-                           G_SPAWN_SEARCH_PATH,
-                           NULL,
-                           NULL,
-                           standard_output,
-                           standard_error,
-                           exit_status,
-                           error);
-
-    g_strfreev (argv);
-    g_strfreev (envp);
-
-    return retval;
-}
-
-static GdkVisual *
-get_best_visual_for_screen (GdkScreen *screen)
-{
-    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;
-    std_output = NULL;
-    res = spawn_command_line_on_screen_sync (screen,
-            command,
-            &std_output,
-            NULL,
-            &exit_status,
-            &error);
-    if (! res)
-    {
-        gs_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);
-
-            gs_debug ("Found best GL visual for screen %d: 0x%x",
-                      gdk_screen_get_number (screen),
-                      (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_for_screen (screen);
-
-    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 void
-gs_window_real_realize (GtkWidget *widget)
-{
-    widget_set_best_colormap (widget);
-
-    if (GTK_WIDGET_CLASS (gs_window_parent_class)->realize)
-    {
-        GTK_WIDGET_CLASS (gs_window_parent_class)->realize (widget);
-    }
-
-    gs_window_override_user_time (GS_WINDOW (widget));
-
-    gs_window_move_resize_window (GS_WINDOW (widget), TRUE, TRUE);
-
-    g_signal_connect (gtk_window_get_screen (GTK_WINDOW (widget)),
-                      "size_changed",
-                      G_CALLBACK (screen_size_changed),
-                      widget);
-}
-
-/* every so often we should raise the window in case
-   another window has somehow gotten on top */
-static gboolean
-watchdog_timer (GSWindow *window)
-{
-    GtkWidget *widget = GTK_WIDGET (window);
-
-    gdk_window_focus (widget->window, GDK_CURRENT_TIME);
-
-    return TRUE;
-}
-
-static void
-remove_watchdog_timer (GSWindow *window)
-{
-    if (window->priv->watchdog_timer_id != 0)
-    {
-        g_source_remove (window->priv->watchdog_timer_id);
-        window->priv->watchdog_timer_id = 0;
-    }
-}
-
-static void
-add_watchdog_timer (GSWindow *window,
-                    glong     timeout)
-{
-    window->priv->watchdog_timer_id = g_timeout_add (timeout,
-                                      (GSourceFunc)watchdog_timer,
-                                      window);
-}
-
-static void
-remove_popup_dialog_idle (GSWindow *window)
-{
-    if (window->priv->popup_dialog_idle_id != 0)
-    {
-        g_source_remove (window->priv->popup_dialog_idle_id);
-        window->priv->popup_dialog_idle_id = 0;
-    }
-}
-
-static void
-add_popup_dialog_idle (GSWindow *window)
-{
-    window->priv->popup_dialog_idle_id = g_idle_add ((GSourceFunc)popup_dialog_idle, window);
-}
-
-static gboolean
-emit_deactivated_idle (GSWindow *window)
-{
-    g_signal_emit (window, signals [DEACTIVATED], 0);
-
-    return FALSE;
-}
-
-static void
-add_emit_deactivated_idle (GSWindow *window)
-{
-    g_idle_add ((GSourceFunc)emit_deactivated_idle, window);
-}
-
-static void
-gs_window_raise (GSWindow *window)
-{
-    GdkWindow *win;
-
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gs_debug ("Raising screensaver window");
-
-    win = GTK_WIDGET (window)->window;
-
-    gdk_window_raise (win);
-}
-
-static gboolean
-x11_window_is_ours (Window window)
-{
-    GdkWindow *gwindow;
-    gboolean   ret;
-
-    ret = FALSE;
-
-    gwindow = gdk_window_lookup (window);
-    if (gwindow && (window != GDK_ROOT_WINDOW ()))
-    {
-        ret = TRUE;
-    }
-
-    return ret;
-}
-
-#ifdef HAVE_SHAPE_EXT
-static void
-unshape_window (GSWindow *window)
-{
-    gdk_window_shape_combine_region (GTK_WIDGET (window)->window,
-                                     NULL,
-                                     0,
-                                     0);
-}
-#endif
-
-static void
-gs_window_xevent (GSWindow  *window,
-                  GdkXEvent *xevent)
-{
-    XEvent *ev;
-
-    ev = xevent;
-
-    /* MapNotify is used to tell us when new windows are mapped.
-       ConfigureNofify is used to tell us when windows are raised. */
-    switch (ev->xany.type)
-    {
-    case MapNotify:
-    {
-        XMapEvent *xme = &ev->xmap;
-
-        if (! x11_window_is_ours (xme->window))
-        {
-            gs_window_raise (window);
-        }
-        else
-        {
-            gs_debug ("not raising our windows");
-        }
-
-        break;
-    }
-    case ConfigureNotify:
-    {
-        XConfigureEvent *xce = &ev->xconfigure;
-
-        if (! x11_window_is_ours (xce->window))
-        {
-            gs_window_raise (window);
-        }
-        else
-        {
-            gs_debug ("not raising our windows");
-        }
-
-        break;
-    }
-    default:
-        /* extension events */
-#ifdef HAVE_SHAPE_EXT
-        if (ev->xany.type == (window->priv->shape_event_base + ShapeNotify))
-        {
-            /*XShapeEvent *xse = (XShapeEvent *) ev;*/
-            unshape_window (window);
-            gs_debug ("Window was reshaped!");
-        }
-#endif
-
-        break;
-    }
-
-}
-
-static GdkFilterReturn
-xevent_filter (GdkXEvent *xevent,
-               GdkEvent  *event,
-               GSWindow  *window)
-{
-    gs_window_xevent (window, xevent);
-
-    return GDK_FILTER_CONTINUE;
-}
-
-static void
-select_popup_events (void)
-{
-    XWindowAttributes attr;
-    unsigned long     events;
-
-    gdk_error_trap_push ();
-
-    memset (&attr, 0, sizeof (attr));
-    XGetWindowAttributes (GDK_DISPLAY (), GDK_ROOT_WINDOW (), &attr);
-
-    events = SubstructureNotifyMask | attr.your_event_mask;
-    XSelectInput (GDK_DISPLAY (), GDK_ROOT_WINDOW (), events);
-
-    gdk_display_sync (gdk_display_get_default ());
-    gdk_error_trap_pop ();
-}
-
-static void
-window_select_shape_events (GSWindow *window)
-{
-#ifdef HAVE_SHAPE_EXT
-    unsigned long events;
-    int           shape_error_base;
-
-    gdk_error_trap_push ();
-
-    if (XShapeQueryExtension (GDK_DISPLAY (), &window->priv->shape_event_base, &shape_error_base))
-    {
-        events = ShapeNotifyMask;
-        XShapeSelectInput (GDK_DISPLAY (), GDK_WINDOW_XID (GTK_WIDGET (window)->window), events);
-    }
-
-    gdk_display_sync (gdk_display_get_default ());
-    gdk_error_trap_pop ();
-#endif
-}
-
-static void
-gs_window_real_show (GtkWidget *widget)
-{
-    GSWindow *window;
-
-    if (GTK_WIDGET_CLASS (gs_window_parent_class)->show)
-    {
-        GTK_WIDGET_CLASS (gs_window_parent_class)->show (widget);
-    }
-
-    gs_window_clear (GS_WINDOW (widget));
-
-    set_invisible_cursor (widget->window, TRUE);
-
-    window = GS_WINDOW (widget);
-    if (window->priv->timer)
-    {
-        g_timer_destroy (window->priv->timer);
-    }
-    window->priv->timer = g_timer_new ();
-
-    remove_watchdog_timer (window);
-    add_watchdog_timer (window, 30000);
-
-    select_popup_events ();
-    window_select_shape_events (window);
-    gdk_window_add_filter (NULL, (GdkFilterFunc)xevent_filter, window);
-}
-
-static void
-set_info_text_and_icon (GSWindow   *window,
-                        const char *icon_stock_id,
-                        const char *primary_text,
-                        const char *secondary_text)
-{
-    GtkWidget *content_area;
-    GtkWidget *hbox_content;
-    GtkWidget *image;
-    GtkWidget *vbox;
-    gchar *primary_markup;
-    gchar *secondary_markup;
-    GtkWidget *primary_label;
-    GtkWidget *secondary_label;
-
-    hbox_content = gtk_hbox_new (FALSE, 8);
-    gtk_widget_show (hbox_content);
-
-    image = gtk_image_new_from_stock (icon_stock_id, GTK_ICON_SIZE_DIALOG);
-    gtk_widget_show (image);
-    gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
-    gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
-    vbox = gtk_vbox_new (FALSE, 6);
-    gtk_widget_show (vbox);
-    gtk_box_pack_start (GTK_BOX (hbox_content), vbox, FALSE, FALSE, 0);
-
-    primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
-    primary_label = gtk_label_new (primary_markup);
-    g_free (primary_markup);
-    gtk_widget_show (primary_label);
-    gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
-    gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
-    gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
-    gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
-
-    if (secondary_text != NULL)
-    {
-        secondary_markup = g_strdup_printf ("<small>%s</small>",
-                                            secondary_text);
-        secondary_label = gtk_label_new (secondary_markup);
-        g_free (secondary_markup);
-        gtk_widget_show (secondary_label);
-        gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
-        gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
-        gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
-        gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
-    }
-
-    /* remove old content */
-    content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (window->priv->info_bar));
-    if (window->priv->info_content != NULL)
-    {
-        gtk_container_remove (GTK_CONTAINER (content_area), window->priv->info_content);
-    }
-    gtk_box_pack_start (GTK_BOX (content_area),
-                        hbox_content,
-                        TRUE, FALSE, 0);
-    window->priv->info_content = hbox_content;
-}
-
-static gboolean
-info_bar_timeout (GSWindow *window)
-{
-    window->priv->info_bar_timer_id = 0;
-    gtk_widget_hide (window->priv->info_bar);
-    return FALSE;
-}
-
-void
-gs_window_show_message (GSWindow   *window,
-                        const char *summary,
-                        const char *body,
-                        const char *icon)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    set_info_text_and_icon (window,
-                            icon,
-                            summary,
-                            body);
-    gtk_widget_show (window->priv->info_bar);
-
-    if (window->priv->info_bar_timer_id > 0)
-    {
-        g_source_remove (window->priv->info_bar_timer_id);
-    }
-
-    window->priv->info_bar_timer_id = g_timeout_add_seconds (INFO_BAR_SECONDS,
-                                      (GSourceFunc)info_bar_timeout,
-                                      window);
-}
-
-void
-gs_window_show (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gtk_widget_show (GTK_WIDGET (window));
-}
-
-static void
-gs_window_real_hide (GtkWidget *widget)
-{
-    GSWindow *window;
-
-    window = GS_WINDOW (widget);
-
-    gdk_window_remove_filter (NULL, (GdkFilterFunc)xevent_filter, window);
-
-    remove_watchdog_timer (window);
-
-    if (GTK_WIDGET_CLASS (gs_window_parent_class)->hide)
-    {
-        GTK_WIDGET_CLASS (gs_window_parent_class)->hide (widget);
-    }
-}
-
-void
-gs_window_destroy (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gs_window_cancel_unlock_request (window);
-
-    gtk_widget_destroy (GTK_WIDGET (window));
-}
-
-GdkWindow *
-gs_window_get_gdk_window (GSWindow *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), NULL);
-
-    return GTK_WIDGET (window)->window;
-}
-
-GtkWidget *
-gs_window_get_drawing_area (GSWindow *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), NULL);
-
-    return window->priv->drawing_area;
-}
-
-/* just for debugging */
-static gboolean
-error_watch (GIOChannel   *source,
-             GIOCondition  condition,
-             gpointer      data)
-{
-    gboolean finished = FALSE;
-
-    if (condition & G_IO_IN)
-    {
-        GIOStatus status;
-        GError   *error = NULL;
-        char     *line;
-
-        line = NULL;
-        status = g_io_channel_read_line (source, &line, NULL, NULL, &error);
-
-        switch (status)
-        {
-        case G_IO_STATUS_NORMAL:
-            gs_debug ("command error output: %s", line);
-            break;
-        case G_IO_STATUS_EOF:
-            finished = TRUE;
-            break;
-        case G_IO_STATUS_ERROR:
-            finished = TRUE;
-            gs_debug ("Error reading from child: %s\n", error->message);
-            g_error_free (error);
-            return FALSE;
-        case G_IO_STATUS_AGAIN:
-        default:
-            break;
-        }
-        g_free (line);
-    }
-    else if (condition & G_IO_HUP)
-    {
-        finished = TRUE;
-    }
-
-    if (finished)
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-static gboolean
-spawn_on_window (GSWindow *window,
-                 char     *command,
-                 int      *pid,
-                 GIOFunc   watch_func,
-                 gpointer  user_data,
-                 gint     *watch_id)
-{
-    int         argc;
-    char      **argv;
-    GError     *error;
-    gboolean    result;
-    GIOChannel *channel;
-    int         standard_output;
-    int         standard_error;
-    int         child_pid;
-    int         id;
-
-    error = NULL;
-    if (! g_shell_parse_argv (command, &argc, &argv, &error))
-    {
-        gs_debug ("Could not parse command: %s", error->message);
-        g_error_free (error);
-        return FALSE;
-    }
-
-    error = NULL;
-    result = gdk_spawn_on_screen_with_pipes (GTK_WINDOW (window)->screen,
-             NULL,
-             argv,
-             NULL,
-             G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
-             NULL,
-             NULL,
-             &child_pid,
-             NULL,
-             &standard_output,
-             &standard_error,
-             &error);
-
-    if (! result)
-    {
-        gs_debug ("Could not start command '%s': %s", command, error->message);
-        g_error_free (error);
-        g_strfreev (argv);
-        return FALSE;
-    }
-
-    if (pid != NULL)
-    {
-        *pid = child_pid;
-    }
-    else
-    {
-        g_spawn_close_pid (child_pid);
-    }
-
-    /* output channel */
-    channel = g_io_channel_unix_new (standard_output);
-    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);
-
-    /* error channel */
-    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,
-                         error_watch,
-                         NULL);
-    g_io_channel_unref (channel);
-
-    g_strfreev (argv);
-
-    return result;
-}
-
-static void
-lock_plug_added (GtkWidget *widget,
-                 GSWindow  *window)
-{
-    gtk_widget_show (widget);
-}
-
-static gboolean
-lock_plug_removed (GtkWidget *widget,
-                   GSWindow  *window)
-{
-    gtk_widget_hide (widget);
-    gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->lock_box));
-    window->priv->lock_box = NULL;
-
-    return TRUE;
-}
-
-static void
-keyboard_plug_added (GtkWidget *widget,
-                     GSWindow  *window)
-{
-    gtk_widget_show (widget);
-}
-
-static gboolean
-keyboard_plug_removed (GtkWidget *widget,
-                       GSWindow  *window)
-{
-    gtk_widget_hide (widget);
-    gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->keyboard_socket));
-
-    return TRUE;
-}
-
-static void
-keyboard_socket_destroyed (GtkWidget *widget,
-                           GSWindow  *window)
-{
-    g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window);
-    g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window);
-    g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window);
-
-    window->priv->keyboard_socket = NULL;
-}
-
-static void
-forward_key_events (GSWindow *window)
-{
-    window->priv->key_events = g_list_reverse (window->priv->key_events);
-
-    while (window->priv->key_events != NULL)
-    {
-        GdkEventKey *event = window->priv->key_events->data;
-
-        gtk_window_propagate_key_event (GTK_WINDOW (window), event);
-
-        gdk_event_free ((GdkEvent *)event);
-        window->priv->key_events = g_list_delete_link (window->priv->key_events,
-                                   window->priv->key_events);
-    }
-}
-
-static void
-remove_key_events (GSWindow *window)
-{
-    window->priv->key_events = g_list_reverse (window->priv->key_events);
-
-    while (window->priv->key_events)
-    {
-        GdkEventKey *event = window->priv->key_events->data;
-
-        gdk_event_free ((GdkEvent *)event);
-        window->priv->key_events = g_list_delete_link (window->priv->key_events,
-                                   window->priv->key_events);
-    }
-}
-
-static void
-lock_socket_show (GtkWidget *widget,
-                  GSWindow  *window)
-{
-    gtk_widget_child_focus (window->priv->lock_socket, GTK_DIR_TAB_FORWARD);
-
-    /* send queued events to the dialog */
-    forward_key_events (window);
-}
-
-static void
-lock_socket_destroyed (GtkWidget *widget,
-                       GSWindow  *window)
-{
-    g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window);
-    g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window);
-    g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window);
-    g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window);
-
-    window->priv->lock_socket = NULL;
-}
-
-static void
-create_keyboard_socket (GSWindow *window,
-                        guint32   id)
-{
-    int height;
-
-    height = (gdk_screen_get_height (gtk_widget_get_screen (GTK_WIDGET (window)))) / 4;
-
-    window->priv->keyboard_socket = gtk_socket_new ();
-    gtk_widget_set_size_request (window->priv->keyboard_socket, -1, height);
-
-    g_signal_connect (window->priv->keyboard_socket, "destroy",
-                      G_CALLBACK (keyboard_socket_destroyed), window);
-    g_signal_connect (window->priv->keyboard_socket, "plug_added",
-                      G_CALLBACK (keyboard_plug_added), window);
-    g_signal_connect (window->priv->keyboard_socket, "plug_removed",
-                      G_CALLBACK (keyboard_plug_removed), window);
-    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->keyboard_socket, FALSE, FALSE, 0);
-    gtk_socket_add_id (GTK_SOCKET (window->priv->keyboard_socket), id);
-}
-
-/* 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 'GSWindow'");
-        }
-    }
-
-    return status;
-}
-
-static void
-kill_keyboard_command (GSWindow *window)
-{
-    if (window->priv->keyboard_pid > 0)
-    {
-        signal_pid (window->priv->keyboard_pid, SIGTERM);
-    }
-}
-
-static void
-kill_dialog_command (GSWindow *window)
-{
-    /* If a dialog is up we need to signal it
-       and wait on it */
-    if (window->priv->lock_pid > 0)
-    {
-        signal_pid (window->priv->lock_pid, SIGTERM);
-    }
-}
-
-static void
-keyboard_command_finish (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    /* send a signal just in case */
-    kill_keyboard_command (window);
-
-    gs_debug ("Keyboard finished");
-
-    if (window->priv->keyboard_pid > 0)
-    {
-        int exit_status;
-
-        exit_status = wait_on_child (window->priv->keyboard_pid);
-
-        g_spawn_close_pid (window->priv->keyboard_pid);
-        window->priv->keyboard_pid = 0;
-    }
-}
-
-static gboolean
-keyboard_command_watch (GIOChannel   *source,
-                        GIOCondition  condition,
-                        GSWindow     *window)
-{
-    gboolean finished = FALSE;
-
-    g_return_val_if_fail (GS_IS_WINDOW (window), FALSE);
-
-    if (condition & G_IO_IN)
-    {
-        GIOStatus status;
-        GError   *error = NULL;
-        char     *line;
-
-        line = NULL;
-        status = g_io_channel_read_line (source, &line, NULL, NULL, &error);
-
-        switch (status)
-        {
-        case G_IO_STATUS_NORMAL:
-        {
-            guint32 id;
-            char    c;
-            gs_debug ("keyboard command output: %s", line);
-            if (1 == sscanf (line, " %" G_GUINT32_FORMAT " %c", &id, &c))
-            {
-                create_keyboard_socket (window, id);
-            }
-        }
-        break;
-        case G_IO_STATUS_EOF:
-            finished = TRUE;
-            break;
-        case G_IO_STATUS_ERROR:
-            finished = TRUE;
-            gs_debug ("Error reading from child: %s\n", error->message);
-            g_error_free (error);
-            return FALSE;
-        case G_IO_STATUS_AGAIN:
-        default:
-            break;
-        }
-
-        g_free (line);
-    }
-    else if (condition & G_IO_HUP)
-    {
-        finished = TRUE;
-    }
-
-    if (finished)
-    {
-        window->priv->keyboard_watch_id = 0;
-        keyboard_command_finish (window);
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-static void
-embed_keyboard (GSWindow *window)
-{
-    gboolean res;
-
-    if (! window->priv->keyboard_enabled
-            || window->priv->keyboard_command == NULL)
-        return;
-
-    gs_debug ("Adding embedded keyboard widget");
-
-    /* FIXME: verify command is safe */
-
-    gs_debug ("Running command: %s", window->priv->keyboard_command);
-
-    res = spawn_on_window (window,
-                           window->priv->keyboard_command,
-                           &window->priv->keyboard_pid,
-                           (GIOFunc)keyboard_command_watch,
-                           window,
-                           &window->priv->keyboard_watch_id);
-    if (! res)
-    {
-        gs_debug ("Could not start command: %s", window->priv->keyboard_command);
-    }
-}
-
-static void
-create_lock_socket (GSWindow *window,
-                    guint32   id)
-{
-    window->priv->lock_socket = gtk_socket_new ();
-    window->priv->lock_box = gtk_alignment_new (0.5, 0.5, 0, 0);
-    gtk_widget_show (window->priv->lock_box);
-    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->lock_box, TRUE, TRUE, 0);
-
-    gtk_container_add (GTK_CONTAINER (window->priv->lock_box), window->priv->lock_socket);
-
-    g_signal_connect (window->priv->lock_socket, "show",
-                      G_CALLBACK (lock_socket_show), window);
-    g_signal_connect (window->priv->lock_socket, "destroy",
-                      G_CALLBACK (lock_socket_destroyed), window);
-    g_signal_connect (window->priv->lock_socket, "plug_added",
-                      G_CALLBACK (lock_plug_added), window);
-    g_signal_connect (window->priv->lock_socket, "plug_removed",
-                      G_CALLBACK (lock_plug_removed), window);
-
-    gtk_socket_add_id (GTK_SOCKET (window->priv->lock_socket), id);
-
-    if (window->priv->keyboard_enabled)
-    {
-        embed_keyboard (window);
-    }
-}
-
-static void
-gs_window_dialog_finish (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gs_debug ("Dialog finished");
-
-    /* make sure we finish the keyboard thing too */
-    keyboard_command_finish (window);
-
-    /* send a signal just in case */
-    kill_dialog_command (window);
-
-    if (window->priv->lock_pid > 0)
-    {
-        int exit_status;
-
-        exit_status = wait_on_child (window->priv->lock_pid);
-
-        g_spawn_close_pid (window->priv->lock_pid);
-        window->priv->lock_pid = 0;
-    }
-
-    /* remove events for the case were we failed to show socket */
-    remove_key_events (window);
-}
-
-static void
-maybe_kill_dialog (GSWindow *window)
-{
-    if (!window->priv->dialog_shake_in_progress
-            && window->priv->dialog_quit_requested
-            && window->priv->lock_pid > 0)
-    {
-        kill (window->priv->lock_pid, SIGTERM);
-    }
-}
-
-/* very rudimentary animation for indicating an auth failure */
-static void
-shake_dialog (GSWindow *window)
-{
-    int   i;
-    guint left;
-    guint right;
-
-    window->priv->dialog_shake_in_progress = TRUE;
-
-    for (i = 0; i < 9; i++)
-    {
-        if (i % 2 == 0)
-        {
-            left = 30;
-            right = 0;
-        }
-        else
-        {
-            left = 0;
-            right = 30;
-        }
-
-        if (! window->priv->lock_box)
-        {
-            break;
-        }
-
-        gtk_alignment_set_padding (GTK_ALIGNMENT (window->priv->lock_box),
-                                   0, 0,
-                                   left,
-                                   right);
-
-        while (gtk_events_pending ())
-        {
-            gtk_main_iteration ();
-        }
-
-        g_usleep (10000);
-    }
-
-    window->priv->dialog_shake_in_progress = FALSE;
-    maybe_kill_dialog (window);
-}
-
-static void
-window_set_dialog_up (GSWindow *window,
-                      gboolean  dialog_up)
-{
-    if (window->priv->dialog_up == dialog_up)
-    {
-        return;
-    }
-
-    window->priv->dialog_up = dialog_up;
-    g_object_notify (G_OBJECT (window), "dialog-up");
-}
-
-static void
-popdown_dialog (GSWindow *window)
-{
-    gs_window_dialog_finish (window);
-
-    gtk_widget_show (window->priv->drawing_area);
-
-    gs_window_clear (window);
-    set_invisible_cursor (GTK_WIDGET (window)->window, TRUE);
-
-    window_set_dialog_up (window, FALSE);
-
-    /* reset the pointer positions */
-    window->priv->last_x = -1;
-    window->priv->last_y = -1;
-
-    if (window->priv->lock_box != NULL)
-    {
-        gtk_container_remove (GTK_CONTAINER (window->priv->vbox), GTK_WIDGET (window->priv->lock_box));
-        window->priv->lock_box = NULL;
-    }
-
-    remove_popup_dialog_idle (window);
-    remove_command_watches (window);
-}
-
-static gboolean
-lock_command_watch (GIOChannel   *source,
-                    GIOCondition  condition,
-                    GSWindow     *window)
-{
-    gboolean finished = FALSE;
-
-    g_return_val_if_fail (GS_IS_WINDOW (window), FALSE);
-
-    if (condition & G_IO_IN)
-    {
-        GIOStatus status;
-        GError   *error = NULL;
-        char     *line;
-
-        line = NULL;
-        status = g_io_channel_read_line (source, &line, NULL, NULL, &error);
-
-        switch (status)
-        {
-        case G_IO_STATUS_NORMAL:
-            gs_debug ("command output: %s", line);
-
-            if (strstr (line, "WINDOW ID=") != NULL)
-            {
-                guint32 id;
-                char    c;
-                if (1 == sscanf (line, " WINDOW ID= %" G_GUINT32_FORMAT " %c", &id, &c))
-                {
-                    create_lock_socket (window, id);
-                }
-            }
-            else if (strstr (line, "NOTICE=") != NULL)
-            {
-                if (strstr (line, "NOTICE=AUTH FAILED") != NULL)
-                {
-                    shake_dialog (window);
-                }
-            }
-            else if (strstr (line, "RESPONSE=") != NULL)
-            {
-                if (strstr (line, "RESPONSE=OK") != NULL)
-                {
-                    gs_debug ("Got OK response");
-                    window->priv->dialog_response = DIALOG_RESPONSE_OK;
-                }
-                else
-                {
-                    gs_debug ("Got CANCEL response");
-                    window->priv->dialog_response = DIALOG_RESPONSE_CANCEL;
-                }
-                finished = TRUE;
-            }
-            else if (strstr (line, "REQUEST QUIT") != NULL)
-            {
-                gs_debug ("Got request for quit");
-                window->priv->dialog_quit_requested = TRUE;
-                maybe_kill_dialog (window);
-            }
-            break;
-        case G_IO_STATUS_EOF:
-            finished = TRUE;
-            break;
-        case G_IO_STATUS_ERROR:
-            finished = TRUE;
-            gs_debug ("Error reading from child: %s\n", error->message);
-            g_error_free (error);
-            return FALSE;
-        case G_IO_STATUS_AGAIN:
-        default:
-            break;
-        }
-
-        g_free (line);
-    }
-    else if (condition & G_IO_HUP)
-    {
-        finished = TRUE;
-    }
-
-    if (finished)
-    {
-        popdown_dialog (window);
-
-        if (window->priv->dialog_response == DIALOG_RESPONSE_OK)
-        {
-            add_emit_deactivated_idle (window);
-        }
-
-        window->priv->lock_watch_id = 0;
-
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-static gboolean
-is_logout_enabled (GSWindow *window)
-{
-    double elapsed;
-
-    if (! window->priv->logout_enabled)
-    {
-        return FALSE;
-    }
-
-    if (! window->priv->logout_command)
-    {
-        return FALSE;
-    }
-
-    elapsed = g_timer_elapsed (window->priv->timer, NULL);
-
-    if (window->priv->logout_timeout < (elapsed * 1000))
-    {
-        return TRUE;
-    }
-
-    return FALSE;
-}
-
-static gboolean
-is_user_switch_enabled (GSWindow *window)
-{
-    return window->priv->user_switch_enabled;
-}
-
-static void
-popup_dialog (GSWindow *window)
-{
-    gboolean  result;
-    char     *tmp;
-    GString  *command;
-
-    gs_debug ("Popping up dialog");
-
-    tmp = g_build_filename (LIBEXECDIR, "mate-screensaver-dialog", NULL);
-    command = g_string_new (tmp);
-    g_free (tmp);
-
-    if (is_logout_enabled (window))
-    {
-        command = g_string_append (command, " --enable-logout");
-        g_string_append_printf (command, " --logout-command='%s'", window->priv->logout_command);
-    }
-
-    if (window->priv->status_message)
-    {
-        char *quoted;
-
-        quoted = g_shell_quote (window->priv->status_message);
-        g_string_append_printf (command, " --status-message=%s", quoted);
-        g_free (quoted);
-    }
-
-    if (is_user_switch_enabled (window))
-    {
-        command = g_string_append (command, " --enable-switch");
-    }
-
-    if (gs_debug_enabled ())
-    {
-        command = g_string_append (command, " --verbose");
-    }
-
-    gtk_widget_hide (window->priv->drawing_area);
-
-    gs_window_clear_to_background_pixmap (window);
-
-    set_invisible_cursor (GTK_WIDGET (window)->window, FALSE);
-
-    window->priv->dialog_quit_requested = FALSE;
-    window->priv->dialog_shake_in_progress = FALSE;
-
-    result = spawn_on_window (window,
-                              command->str,
-                              &window->priv->lock_pid,
-                              (GIOFunc)lock_command_watch,
-                              window,
-                              &window->priv->lock_watch_id);
-    if (! result)
-    {
-        gs_debug ("Could not start command: %s", command->str);
-    }
-
-    g_string_free (command, TRUE);
-}
-
-static gboolean
-popup_dialog_idle (GSWindow *window)
-{
-    popup_dialog (window);
-
-    window->priv->popup_dialog_idle_id = 0;
-
-    return FALSE;
-}
-
-void
-gs_window_request_unlock (GSWindow *window)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    gs_debug ("Requesting unlock");
-
-    if (! GTK_WIDGET_VISIBLE (GTK_WIDGET (window)))
-    {
-        gs_debug ("Request unlock but window is not visible!");
-        return;
-    }
-
-    if (window->priv->lock_watch_id > 0)
-    {
-        return;
-    }
-
-    if (! window->priv->lock_enabled)
-    {
-        add_emit_deactivated_idle (window);
-
-        return;
-    }
-
-    if (window->priv->popup_dialog_idle_id == 0)
-    {
-        add_popup_dialog_idle (window);
-    }
-
-    window_set_dialog_up (window, TRUE);
-}
-
-void
-gs_window_cancel_unlock_request (GSWindow  *window)
-{
-    /* FIXME: This is a bit of a hammer approach...
-    * Maybe we should send a delete-event to
-     * the plug?
-     */
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    popdown_dialog (window);
-}
-
-void
-gs_window_set_lock_enabled (GSWindow *window,
-                            gboolean  lock_enabled)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    if (window->priv->lock_enabled == lock_enabled)
-    {
-        return;
-    }
-
-    window->priv->lock_enabled = lock_enabled;
-    g_object_notify (G_OBJECT (window), "lock-enabled");
-}
-
-void
-gs_window_set_screen (GSWindow  *window,
-                      GdkScreen *screen)
-{
-
-    g_return_if_fail (GS_IS_WINDOW (window));
-    g_return_if_fail (GDK_IS_SCREEN (screen));
-
-    gtk_window_set_screen (GTK_WINDOW (window), screen);
-}
-
-GdkScreen *
-gs_window_get_screen (GSWindow  *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), NULL);
-
-    return GTK_WINDOW (window)->screen;
-}
-
-void
-gs_window_set_keyboard_enabled (GSWindow *window,
-                                gboolean  enabled)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    window->priv->keyboard_enabled = enabled;
-}
-
-void
-gs_window_set_keyboard_command (GSWindow   *window,
-                                const char *command)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    g_free (window->priv->keyboard_command);
-
-    if (command != NULL)
-    {
-        window->priv->keyboard_command = g_strdup (command);
-    }
-    else
-    {
-        window->priv->keyboard_command = NULL;
-    }
-}
-
-void
-gs_window_set_logout_enabled (GSWindow *window,
-                              gboolean  logout_enabled)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    window->priv->logout_enabled = logout_enabled;
-}
-
-void
-gs_window_set_user_switch_enabled (GSWindow *window,
-                                   gboolean  user_switch_enabled)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    window->priv->user_switch_enabled = user_switch_enabled;
-}
-
-void
-gs_window_set_logout_timeout (GSWindow *window,
-                              glong     logout_timeout)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    if (logout_timeout < 0)
-    {
-        window->priv->logout_timeout = 0;
-    }
-    else
-    {
-        window->priv->logout_timeout = logout_timeout;
-    }
-}
-
-void
-gs_window_set_logout_command (GSWindow   *window,
-                              const char *command)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    g_free (window->priv->logout_command);
-
-    if (command)
-    {
-        window->priv->logout_command = g_strdup (command);
-    }
-    else
-    {
-        window->priv->logout_command = NULL;
-    }
-}
-
-void
-gs_window_set_status_message (GSWindow   *window,
-                              const char *status_message)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    g_free (window->priv->status_message);
-    window->priv->status_message = g_strdup (status_message);
-}
-
-void
-gs_window_set_monitor (GSWindow *window,
-                       int       monitor)
-{
-    g_return_if_fail (GS_IS_WINDOW (window));
-
-    if (window->priv->monitor == monitor)
-    {
-        return;
-    }
-
-    window->priv->monitor = monitor;
-
-    gtk_widget_queue_resize (GTK_WIDGET (window));
-
-    g_object_notify (G_OBJECT (window), "monitor");
-}
-
-int
-gs_window_get_monitor (GSWindow *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), -1);
-
-    return window->priv->monitor;
-}
-
-static void
-gs_window_set_property (GObject            *object,
-                        guint               prop_id,
-                        const GValue       *value,
-                        GParamSpec         *pspec)
-{
-    GSWindow *self;
-
-    self = GS_WINDOW (object);
-
-    switch (prop_id)
-    {
-    case PROP_LOCK_ENABLED:
-        gs_window_set_lock_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_KEYBOARD_ENABLED:
-        gs_window_set_keyboard_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_KEYBOARD_COMMAND:
-        gs_window_set_keyboard_command (self, g_value_get_string (value));
-        break;
-    case PROP_LOGOUT_ENABLED:
-        gs_window_set_logout_enabled (self, g_value_get_boolean (value));
-        break;
-    case PROP_LOGOUT_COMMAND:
-        gs_window_set_logout_command (self, g_value_get_string (value));
-        break;
-    case PROP_STATUS_MESSAGE:
-        gs_window_set_status_message (self, g_value_get_string (value));
-        break;
-    case PROP_LOGOUT_TIMEOUT:
-        gs_window_set_logout_timeout (self, g_value_get_long (value));
-        break;
-    case PROP_MONITOR:
-        gs_window_set_monitor (self, g_value_get_int (value));
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-gs_window_get_property (GObject    *object,
-                        guint       prop_id,
-                        GValue     *value,
-                        GParamSpec *pspec)
-{
-    GSWindow *self;
-
-    self = GS_WINDOW (object);
-
-    switch (prop_id)
-    {
-    case PROP_LOCK_ENABLED:
-        g_value_set_boolean (value, self->priv->lock_enabled);
-        break;
-    case PROP_KEYBOARD_ENABLED:
-        g_value_set_boolean (value, self->priv->keyboard_enabled);
-        break;
-    case PROP_KEYBOARD_COMMAND:
-        g_value_set_string (value, self->priv->keyboard_command);
-        break;
-    case PROP_LOGOUT_ENABLED:
-        g_value_set_boolean (value, self->priv->logout_enabled);
-        break;
-    case PROP_LOGOUT_COMMAND:
-        g_value_set_string (value, self->priv->logout_command);
-        break;
-    case PROP_STATUS_MESSAGE:
-        g_value_set_string (value, self->priv->status_message);
-        break;
-    case PROP_LOGOUT_TIMEOUT:
-        g_value_set_long (value, self->priv->logout_timeout);
-        break;
-    case PROP_MONITOR:
-        g_value_set_int (value, self->priv->monitor);
-        break;
-    case PROP_OBSCURED:
-        g_value_set_boolean (value, self->priv->obscured);
-        break;
-    case PROP_DIALOG_UP:
-        g_value_set_boolean (value, self->priv->dialog_up);
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
-}
-
-static void
-queue_key_event (GSWindow    *window,
-                 GdkEventKey *event)
-{
-    /* Eat the first return, enter, escape, or space */
-    if (window->priv->key_events == NULL
-            && (event->keyval == GDK_Return
-                || event->keyval == GDK_KP_Enter
-                || event->keyval == GDK_Escape
-                || event->keyval == GDK_space))
-    {
-        return;
-    }
-
-    /* Only cache MAX_QUEUED_EVENTS key events.  If there are any more than this then
-       something is wrong */
-    /* Don't queue keys that may cause focus navigation in the dialog */
-    if (g_list_length (window->priv->key_events) < MAX_QUEUED_EVENTS
-            && event->keyval != GDK_Tab
-            && event->keyval != GDK_Up
-            && event->keyval != GDK_Down)
-    {
-        window->priv->key_events = g_list_prepend (window->priv->key_events,
-                                   gdk_event_copy ((GdkEvent *)event));
-    }
-}
-
-static gboolean
-maybe_handle_activity (GSWindow *window)
-{
-    gboolean handled;
-
-    handled = FALSE;
-
-    /* if we already have a socket then don't bother */
-    if (! window->priv->lock_socket
-            && GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (window)))
-    {
-        g_signal_emit (window, signals [ACTIVITY], 0, &handled);
-    }
-
-    return handled;
-}
-
-static gboolean
-gs_window_real_key_press_event (GtkWidget   *widget,
-                                GdkEventKey *event)
-{
-    /*g_message ("KEY PRESS state: %u keyval %u", event->state, event->keyval);*/
-
-    /* Ignore brightness keys */
-    if (event->hardware_keycode == 101 || event->hardware_keycode == 212)
-    {
-        gs_debug ("Ignoring brightness keys");
-        return TRUE;
-    }
-
-    maybe_handle_activity (GS_WINDOW (widget));
-
-    queue_key_event (GS_WINDOW (widget), event);
-
-    if (GTK_WIDGET_CLASS (gs_window_parent_class)->key_press_event)
-    {
-        GTK_WIDGET_CLASS (gs_window_parent_class)->key_press_event (widget, event);
-    }
-
-    return TRUE;
-}
-
-static gboolean
-gs_window_real_motion_notify_event (GtkWidget      *widget,
-                                    GdkEventMotion *event)
-{
-    GSWindow  *window;
-    gdouble    distance;
-    gdouble    min_distance;
-    gdouble    min_percentage = 0.1;
-    GdkScreen *screen;
-
-    window = GS_WINDOW (widget);
-
-    screen = gs_window_get_screen (window);
-    min_distance = gdk_screen_get_width (screen) * min_percentage;
-
-    /* if the last position was not set then don't detect motion */
-    if (window->priv->last_x < 0 || window->priv->last_y < 0)
-    {
-        window->priv->last_x = event->x;
-        window->priv->last_y = event->y;
-
-        return FALSE;
-    }
-
-    /* just an approximate distance */
-    distance = MAX (ABS (window->priv->last_x - event->x),
-                    ABS (window->priv->last_y - event->y));
-
-    if (distance > min_distance)
-    {
-        maybe_handle_activity (window);
-
-        window->priv->last_x = -1;
-        window->priv->last_y = -1;
-    }
-
-    return FALSE;
-}
-
-static gboolean
-gs_window_real_button_press_event (GtkWidget      *widget,
-                                   GdkEventButton *event)
-{
-    GSWindow *window;
-
-    window = GS_WINDOW (widget);
-    maybe_handle_activity (window);
-
-    return FALSE;
-}
-
-static gboolean
-gs_window_real_scroll_event (GtkWidget      *widget,
-                             GdkEventScroll *event)
-{
-    GSWindow *window;
-
-    window = GS_WINDOW (widget);
-    maybe_handle_activity (window);
-
-    return FALSE;
-}
-
-static void
-gs_window_real_size_request (GtkWidget      *widget,
-                             GtkRequisition *requisition)
-{
-    GSWindow      *window;
-    GtkBin        *bin;
-    GdkRectangle   old_geometry;
-    int            position_changed = FALSE;
-    int            size_changed = FALSE;
-
-    window = GS_WINDOW (widget);
-    bin = GTK_BIN (widget);
-
-    if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
-    {
-        gtk_widget_size_request (bin->child, requisition);
-    }
-
-    old_geometry = window->priv->geometry;
-
-    update_geometry (window);
-
-    requisition->width  = window->priv->geometry.width;
-    requisition->height = window->priv->geometry.height;
-
-    if (! GTK_WIDGET_REALIZED (widget))
-    {
-        return;
-    }
-
-    if (old_geometry.width  != window->priv->geometry.width ||
-            old_geometry.height != window->priv->geometry.height)
-    {
-        size_changed = TRUE;
-    }
-
-    if (old_geometry.x != window->priv->geometry.x ||
-            old_geometry.y != window->priv->geometry.y)
-    {
-        position_changed = TRUE;
-    }
-
-    gs_window_move_resize_window (window, position_changed, size_changed);
-}
-
-static gboolean
-gs_window_real_grab_broken (GtkWidget          *widget,
-                            GdkEventGrabBroken *event)
-{
-    if (event->grab_window != NULL)
-    {
-        gs_debug ("Grab broken on window %X %s, new grab on window %X",
-                  (guint32) GDK_WINDOW_XID (event->window),
-                  event->keyboard ? "keyboard" : "pointer",
-                  (guint32) GDK_WINDOW_XID (event->grab_window));
-    }
-    else
-    {
-        gs_debug ("Grab broken on window %X %s, new grab is outside application",
-                  (guint32) GDK_WINDOW_XID (event->window),
-                  event->keyboard ? "keyboard" : "pointer");
-    }
-
-    return FALSE;
-}
-
-gboolean
-gs_window_is_obscured (GSWindow *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), FALSE);
-
-    return window->priv->obscured;
-}
-
-gboolean
-gs_window_is_dialog_up (GSWindow *window)
-{
-    g_return_val_if_fail (GS_IS_WINDOW (window), FALSE);
-
-    return window->priv->dialog_up;
-}
-
-static void
-window_set_obscured (GSWindow *window,
-                     gboolean  obscured)
-{
-    if (window->priv->obscured == obscured)
-    {
-        return;
-    }
-
-    window->priv->obscured = obscured;
-    g_object_notify (G_OBJECT (window), "obscured");
-}
-
-static gboolean
-gs_window_real_visibility_notify_event (GtkWidget          *widget,
-                                        GdkEventVisibility *event)
-{
-    switch (event->state)
-    {
-    case GDK_VISIBILITY_FULLY_OBSCURED:
-        window_set_obscured (GS_WINDOW (widget), TRUE);
-        break;
-    case GDK_VISIBILITY_PARTIAL:
-        break;
-    case GDK_VISIBILITY_UNOBSCURED:
-        window_set_obscured (GS_WINDOW (widget), FALSE);
-        break;
-    default:
-        break;
-    }
-
-    return FALSE;
-}
-
-static void
-gs_window_class_init (GSWindowClass *klass)
-{
-    GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-    object_class->finalize     = gs_window_finalize;
-    object_class->get_property = gs_window_get_property;
-    object_class->set_property = gs_window_set_property;
-
-    widget_class->show                = gs_window_real_show;
-    widget_class->hide                = gs_window_real_hide;
-    widget_class->realize             = gs_window_real_realize;
-    widget_class->unrealize           = gs_window_real_unrealize;
-    widget_class->key_press_event     = gs_window_real_key_press_event;
-    widget_class->motion_notify_event = gs_window_real_motion_notify_event;
-    widget_class->button_press_event  = gs_window_real_button_press_event;
-    widget_class->scroll_event        = gs_window_real_scroll_event;
-    widget_class->size_request        = gs_window_real_size_request;
-    widget_class->grab_broken_event   = gs_window_real_grab_broken;
-    widget_class->visibility_notify_event = gs_window_real_visibility_notify_event;
-
-    g_type_class_add_private (klass, sizeof (GSWindowPrivate));
-
-    signals [ACTIVITY] =
-        g_signal_new ("activity",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSWindowClass, activity),
-                      NULL,
-                      NULL,
-                      gs_marshal_BOOLEAN__VOID,
-                      G_TYPE_BOOLEAN,
-                      0);
-    signals [DEACTIVATED] =
-        g_signal_new ("deactivated",
-                      G_TYPE_FROM_CLASS (object_class),
-                      G_SIGNAL_RUN_LAST,
-                      G_STRUCT_OFFSET (GSWindowClass, deactivated),
-                      NULL,
-                      NULL,
-                      g_cclosure_marshal_VOID__VOID,
-                      G_TYPE_NONE,
-                      0);
-
-    g_object_class_install_property (object_class,
-                                     PROP_OBSCURED,
-                                     g_param_spec_boolean ("obscured",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READABLE));
-    g_object_class_install_property (object_class,
-                                     PROP_DIALOG_UP,
-                                     g_param_spec_boolean ("dialog-up",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READABLE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOCK_ENABLED,
-                                     g_param_spec_boolean ("lock-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_ENABLED,
-                                     g_param_spec_boolean ("logout-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_TIMEOUT,
-                                     g_param_spec_long ("logout-timeout",
-                                             NULL,
-                                             NULL,
-                                             -1,
-                                             G_MAXLONG,
-                                             0,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_LOGOUT_COMMAND,
-                                     g_param_spec_string ("logout-command",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_STATUS_MESSAGE,
-                                     g_param_spec_string ("status-message",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_KEYBOARD_ENABLED,
-                                     g_param_spec_boolean ("keyboard-enabled",
-                                             NULL,
-                                             NULL,
-                                             FALSE,
-                                             G_PARAM_READWRITE));
-    g_object_class_install_property (object_class,
-                                     PROP_KEYBOARD_COMMAND,
-                                     g_param_spec_string ("keyboard-command",
-                                             NULL,
-                                             NULL,
-                                             NULL,
-                                             G_PARAM_READWRITE));
-
-    g_object_class_install_property (object_class,
-                                     PROP_MONITOR,
-                                     g_param_spec_int ("monitor",
-                                             "Xinerama monitor",
-                                             "The monitor (in terms of Xinerama) which the window is on",
-                                             0,
-                                             G_MAXINT,
-                                             0,
-                                             G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
-}
-
-static void
-create_info_bar (GSWindow *window)
-{
-    window->priv->info_bar = gtk_info_bar_new ();
-    gtk_widget_set_no_show_all (window->priv->info_bar, TRUE);
-    gtk_box_pack_end (GTK_BOX (window->priv->vbox), window->priv->info_bar, FALSE, FALSE, 0);
-}
-
-static void
-gs_window_init (GSWindow *window)
-{
-    window->priv = GS_WINDOW_GET_PRIVATE (window);
-
-    window->priv->geometry.x      = -1;
-    window->priv->geometry.y      = -1;
-    window->priv->geometry.width  = -1;
-    window->priv->geometry.height = -1;
-
-    window->priv->last_x = -1;
-    window->priv->last_y = -1;
-
-    gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
-
-    gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
-    gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE);
-
-    gtk_window_set_keep_above (GTK_WINDOW (window), TRUE);
-
-    gtk_window_fullscreen (GTK_WINDOW (window));
-
-    gtk_widget_set_events (GTK_WIDGET (window),
-                           gtk_widget_get_events (GTK_WIDGET (window))
-                           | GDK_POINTER_MOTION_MASK
-                           | GDK_BUTTON_PRESS_MASK
-                           | GDK_BUTTON_RELEASE_MASK
-                           | GDK_KEY_PRESS_MASK
-                           | GDK_KEY_RELEASE_MASK
-                           | GDK_EXPOSURE_MASK
-                           | GDK_VISIBILITY_NOTIFY_MASK
-                           | GDK_ENTER_NOTIFY_MASK
-                           | GDK_LEAVE_NOTIFY_MASK);
-
-    window->priv->vbox = gtk_vbox_new (FALSE, 12);
-    gtk_widget_show (window->priv->vbox);
-    gtk_container_add (GTK_CONTAINER (window), window->priv->vbox);
-
-    window->priv->drawing_area = gtk_drawing_area_new ();
-    gtk_widget_show (window->priv->drawing_area);
-    gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->drawing_area, TRUE, TRUE, 0);
-    create_info_bar (window);
-
-    force_no_pixmap_background (window->priv->drawing_area);
-}
-
-static void
-remove_command_watches (GSWindow *window)
-{
-    if (window->priv->lock_watch_id != 0)
-    {
-        g_source_remove (window->priv->lock_watch_id);
-        window->priv->lock_watch_id = 0;
-    }
-    if (window->priv->keyboard_watch_id != 0)
-    {
-        g_source_remove (window->priv->keyboard_watch_id);
-        window->priv->keyboard_watch_id = 0;
-    }
-}
-
-static void
-gs_window_finalize (GObject *object)
-{
-    GSWindow *window;
-
-    g_return_if_fail (object != NULL);
-    g_return_if_fail (GS_IS_WINDOW (object));
-
-    window = GS_WINDOW (object);
-
-    g_return_if_fail (window->priv != NULL);
-
-    g_free (window->priv->logout_command);
-    g_free (window->priv->keyboard_command);
-
-    if (window->priv->info_bar_timer_id > 0)
-    {
-        g_source_remove (window->priv->info_bar_timer_id);
-    }
-
-    remove_watchdog_timer (window);
-    remove_popup_dialog_idle (window);
-
-    if (window->priv->timer)
-    {
-        g_timer_destroy (window->priv->timer);
-    }
-
-    remove_key_events (window);
-
-    remove_command_watches (window);
-
-    gs_window_dialog_finish (window);
-
-    if (window->priv->background_pixmap)
-    {
-        g_object_unref (window->priv->background_pixmap);
-    }
-
-    G_OBJECT_CLASS (gs_window_parent_class)->finalize (object);
-}
-
-GSWindow *
-gs_window_new (GdkScreen *screen,
-               int        monitor,
-               gboolean   lock_enabled)
-{
-    GObject     *result;
-
-    result = g_object_new (GS_TYPE_WINDOW,
-                           "type", GTK_WINDOW_POPUP,
-                           "screen", screen,
-                           "monitor", monitor,
-                           "lock-enabled", lock_enabled,
-                           NULL);
-
-    return GS_WINDOW (result);
-}
diff --git a/src/gs-window.h.orig b/src/gs-window.h.orig
deleted file mode 100644
index 39537fe..0000000
--- a/src/gs-window.h.orig
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#ifndef __GS_WINDOW_H
-#define __GS_WINDOW_H
-
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GS_TYPE_WINDOW         (gs_window_get_type ())
-#define GS_WINDOW(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_WINDOW, GSWindow))
-#define GS_WINDOW_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_WINDOW, GSWindowClass))
-#define GS_IS_WINDOW(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_WINDOW))
-#define GS_IS_WINDOW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_WINDOW))
-#define GS_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_WINDOW, GSWindowClass))
-
-typedef struct GSWindowPrivate GSWindowPrivate;
-
-typedef struct
-{
-    GtkWindow        window;
-
-    GSWindowPrivate *priv;
-} GSWindow;
-
-typedef struct
-{
-    GtkWindowClass   parent_class;
-
-    gboolean        (* activity)            (GSWindow *window);
-    void            (* deactivated)         (GSWindow *window);
-    void            (* dialog_up)           (GSWindow *window);
-    void            (* dialog_down)         (GSWindow *window);
-} GSWindowClass;
-
-GType       gs_window_get_type           (void);
-
-gboolean    gs_window_is_obscured        (GSWindow  *window);
-gboolean    gs_window_is_dialog_up       (GSWindow  *window);
-
-void        gs_window_set_screen         (GSWindow  *window,
-        GdkScreen *screen);
-GdkScreen * gs_window_get_screen         (GSWindow  *window);
-void        gs_window_set_monitor        (GSWindow  *window,
-        int        monitor);
-int         gs_window_get_monitor        (GSWindow  *window);
-
-void        gs_window_set_background_pixmap (GSWindow  *window,
-        GdkPixmap *pixmap);
-void        gs_window_set_lock_enabled   (GSWindow  *window,
-        gboolean   lock_enabled);
-void        gs_window_set_logout_enabled (GSWindow  *window,
-        gboolean   logout_enabled);
-void        gs_window_set_keyboard_enabled (GSWindow  *window,
-        gboolean   enabled);
-void        gs_window_set_keyboard_command (GSWindow   *window,
-        const char *command);
-void        gs_window_set_user_switch_enabled (GSWindow  *window,
-        gboolean   user_switch_enabled);
-void        gs_window_set_logout_timeout (GSWindow  *window,
-        glong      timeout);
-void        gs_window_set_logout_command (GSWindow   *window,
-        const char *command);
-void        gs_window_set_status_message   (GSWindow   *window,
-        const char *status_message);
-void        gs_window_show_message         (GSWindow   *window,
-        const char *summary,
-        const char *body,
-        const char *icon);
-
-void        gs_window_request_unlock     (GSWindow  *window);
-void        gs_window_cancel_unlock_request (GSWindow  *window);
-
-GSWindow  * gs_window_new                (GdkScreen *screen,
-        int        monitor,
-        gboolean   lock_enabled);
-void        gs_window_show               (GSWindow  *window);
-void        gs_window_destroy            (GSWindow  *window);
-GdkWindow * gs_window_get_gdk_window     (GSWindow  *window);
-GtkWidget * gs_window_get_drawing_area   (GSWindow  *window);
-void        gs_window_clear              (GSWindow  *window);
-
-G_END_DECLS
-
-#endif /* __GS_WINDOW_H */
diff --git a/src/mate-screensaver-command.c.orig b/src/mate-screensaver-command.c.orig
deleted file mode 100644
index 441f81e..0000000
--- a/src/mate-screensaver-command.c.orig
+++ /dev/null
@@ -1,551 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <locale.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#define GS_SERVICE   "org.mate.ScreenSaver"
-#define GS_PATH      "/org/mate/ScreenSaver"
-#define GS_INTERFACE "org.mate.ScreenSaver"
-
-/* this is for dbus < 0.3 */
-#if ((DBUS_VERSION_MAJOR == 0) && (DBUS_VERSION_MINOR < 30))
-#define dbus_bus_name_has_owner(connection, name, err) dbus_bus_service_exists(connection, name, err)
-#endif
-
-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;
-static gboolean do_poke       = FALSE;
-static gboolean do_inhibit    = FALSE;
-
-static gboolean do_query      = FALSE;
-static gboolean do_time       = FALSE;
-
-static char    *inhibit_reason      = NULL;
-static char    *inhibit_application = NULL;
-
-static GOptionEntry entries [] =
-{
-    {
-        "exit", 0, 0, G_OPTION_ARG_NONE, &do_quit,
-        N_("Causes the screensaver to exit gracefully"), NULL
-    },
-    {
-        "query", 'q', 0, G_OPTION_ARG_NONE, &do_query,
-        N_("Query the state of the screensaver"), NULL
-    },
-    {
-        "time", 't', 0, G_OPTION_ARG_NONE, &do_time,
-        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,
-        N_("If the screensaver is active then deactivate it (un-blank the screen)"), NULL
-    },
-    {
-        "poke", 'p', 0, G_OPTION_ARG_NONE, &do_poke,
-        N_("Poke the running screensaver to simulate user activity"), NULL
-    },
-    {
-        "inhibit", 'i', 0, G_OPTION_ARG_NONE, &do_inhibit,
-        N_("Inhibit the screensaver from activating.  Command blocks while inhibit is active."), NULL
-    },
-    {
-        "application-name", 'n', 0, G_OPTION_ARG_STRING, &inhibit_application,
-        N_("The calling application that is inhibiting the screensaver"), NULL
-    },
-    {
-        "reason", 'r', 0, G_OPTION_ARG_STRING, &inhibit_reason,
-        N_("The reason for inhibiting the screensaver"), NULL
-    },
-    {
-        "version", 'V', 0, G_OPTION_ARG_NONE, &do_version,
-        N_("Version of this application"), NULL
-    },
-    { NULL }
-};
-
-static GMainLoop *loop = NULL;
-
-static gboolean
-screensaver_is_running (DBusConnection *connection)
-{
-    DBusError               error;
-    gboolean                exists;
-
-    g_return_val_if_fail (connection != NULL, FALSE);
-
-    dbus_error_init (&error);
-    exists = dbus_bus_name_has_owner (connection, GS_SERVICE, &error);
-    if (dbus_error_is_set (&error))
-        dbus_error_free (&error);
-
-    return exists;
-}
-
-static DBusMessage *
-screensaver_send_message_inhibit (DBusConnection *connection,
-                                  const char     *application,
-                                  const char     *reason)
-{
-    DBusMessage    *message;
-    DBusMessage    *reply;
-    DBusError       error;
-    DBusMessageIter iter;
-
-    g_return_val_if_fail (connection != NULL, NULL);
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, "Inhibit");
-    if (message == NULL)
-    {
-        g_warning ("Couldn't allocate the dbus message");
-        return NULL;
-    }
-
-    dbus_message_iter_init_append (message, &iter);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &application);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &reason);
-
-    reply = dbus_connection_send_with_reply_and_block (connection,
-            message,
-            -1, &error);
-    if (dbus_error_is_set (&error))
-    {
-        g_warning ("%s raised:\n %s\n\n", error.name, error.message);
-        reply = NULL;
-    }
-
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (message);
-    dbus_error_free (&error);
-
-    return reply;
-}
-
-static DBusMessage *
-screensaver_send_message_bool (DBusConnection *connection,
-                               const char     *name,
-                               gboolean        value)
-{
-    DBusMessage    *message;
-    DBusMessage    *reply;
-    DBusError       error;
-    DBusMessageIter iter;
-
-    g_return_val_if_fail (connection != NULL, NULL);
-    g_return_val_if_fail (name != NULL, NULL);
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, name);
-    if (message == NULL)
-    {
-        g_warning ("Couldn't allocate the dbus message");
-        return NULL;
-    }
-
-    dbus_message_iter_init_append (message, &iter);
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &value);
-
-    reply = dbus_connection_send_with_reply_and_block (connection,
-            message,
-            -1, &error);
-    if (dbus_error_is_set (&error))
-    {
-        g_warning ("%s raised:\n %s\n\n", error.name, error.message);
-        reply = NULL;
-    }
-
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (message);
-    dbus_error_free (&error);
-
-    return reply;
-}
-
-static DBusMessage *
-screensaver_send_message_void (DBusConnection *connection,
-                               const char     *name,
-                               gboolean        expect_reply)
-{
-    DBusMessage *message;
-    DBusMessage *reply;
-    DBusError    error;
-
-    g_return_val_if_fail (connection != NULL, NULL);
-    g_return_val_if_fail (name != NULL, NULL);
-
-    dbus_error_init (&error);
-
-    message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, name);
-    if (message == NULL)
-    {
-        g_warning ("Couldn't allocate the dbus message");
-        return NULL;
-    }
-
-    if (! expect_reply)
-    {
-        if (!dbus_connection_send (connection, message, NULL))
-            g_warning ("could not send message");
-        reply = NULL;
-    }
-    else
-    {
-        reply = dbus_connection_send_with_reply_and_block (connection,
-                message,
-                -1, &error);
-        if (dbus_error_is_set (&error))
-        {
-            g_warning ("%s raised:\n %s\n\n", error.name, error.message);
-            reply = NULL;
-        }
-    }
-    dbus_connection_flush (connection);
-
-    dbus_message_unref (message);
-    dbus_error_free (&error);
-
-    return reply;
-}
-
-static char **
-get_string_from_iter (DBusMessageIter *iter,
-                      int             *num_elements)
-{
-    int    count;
-    char **buffer;
-
-    if (num_elements != NULL)
-    {
-        *num_elements = 0;
-    }
-
-    count = 0;
-    buffer = (char **)malloc (sizeof (char *) * 8);
-
-    if (buffer == NULL)
-    {
-        goto oom;
-    }
-
-    buffer[0] = NULL;
-    while (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_STRING)
-    {
-        const char *value;
-        char       *str;
-
-        if ((count % 8) == 0 && count != 0)
-        {
-            buffer = realloc (buffer, sizeof (char *) * (count + 8));
-            if (buffer == NULL)
-            {
-                goto oom;
-            }
-        }
-
-        dbus_message_iter_get_basic (iter, &value);
-        str = strdup (value);
-        if (str == NULL)
-        {
-            goto oom;
-        }
-
-        buffer[count] = str;
-
-        dbus_message_iter_next (iter);
-        count++;
-    }
-
-    if ((count % 8) == 0)
-    {
-        buffer = realloc (buffer, sizeof (char *) * (count + 1));
-        if (buffer == NULL)
-        {
-            goto oom;
-        }
-    }
-
-    buffer[count] = NULL;
-    if (num_elements != NULL)
-    {
-        *num_elements = count;
-    }
-    return buffer;
-
-oom:
-    g_debug ("%s %d : error allocating memory\n", __FILE__, __LINE__);
-    return NULL;
-
-}
-
-static gboolean
-do_command (DBusConnection *connection)
-{
-    DBusMessage *reply;
-
-    if (do_quit)
-    {
-        reply = screensaver_send_message_void (connection, "Quit", FALSE);
-        goto done;
-    }
-
-    if (do_query)
-    {
-        DBusMessageIter iter;
-        DBusMessageIter array;
-        dbus_bool_t     v;
-
-        reply = screensaver_send_message_void (connection, "GetActive", TRUE);
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from the screensaver.");
-            goto done;
-        }
-
-        dbus_message_iter_init (reply, &iter);
-        dbus_message_iter_get_basic (&iter, &v);
-        g_print (_("The screensaver is %s\n"), v ? _("active") : _("inactive"));
-
-        dbus_message_unref (reply);
-
-        reply = screensaver_send_message_void (connection, "GetInhibitors", TRUE);
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from screensaver.");
-            goto done;
-        }
-
-        dbus_message_iter_init (reply, &iter);
-        dbus_message_iter_recurse (&iter, &array);
-
-        if (dbus_message_iter_get_arg_type (&array) == DBUS_TYPE_INVALID)
-        {
-            g_print (_("The screensaver is not inhibited\n"));
-        }
-        else
-        {
-            char **inhibitors;
-            int    i;
-            int    num;
-
-            g_print (_("The screensaver is being inhibited by:\n"));
-            inhibitors = get_string_from_iter (&array, &num);
-            for (i = 0; i < num; i++)
-            {
-                g_print ("\t%s\n", inhibitors[i]);
-            }
-            g_strfreev (inhibitors);
-        }
-
-        dbus_message_unref (reply);
-    }
-
-    if (do_time)
-    {
-        DBusMessageIter iter;
-        dbus_bool_t     v;
-        dbus_int32_t    t;
-
-        reply = screensaver_send_message_void (connection, "GetActive", TRUE);
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from the screensaver.");
-            goto done;
-        }
-
-        dbus_message_iter_init (reply, &iter);
-        dbus_message_iter_get_basic (&iter, &v);
-        dbus_message_unref (reply);
-
-        if (v)
-        {
-
-            reply = screensaver_send_message_void (connection, "GetActiveTime", TRUE);
-            dbus_message_iter_init (reply, &iter);
-            dbus_message_iter_get_basic (&iter, &t);
-            g_print (_("The screensaver has been active for %d seconds.\n"), t);
-
-            dbus_message_unref (reply);
-        }
-        else
-        {
-            g_print (_("The screensaver is not currently active.\n"));
-        }
-    }
-
-    if (do_lock)
-    {
-        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);
-    }
-
-    if (do_activate)
-    {
-        reply = screensaver_send_message_bool (connection, "SetActive", TRUE);
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from the screensaver.");
-            goto done;
-        }
-        dbus_message_unref (reply);
-    }
-
-    if (do_deactivate)
-    {
-        reply = screensaver_send_message_bool (connection, "SetActive", FALSE);
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from the screensaver.");
-            goto done;
-        }
-        dbus_message_unref (reply);
-    }
-
-    if (do_inhibit)
-    {
-        reply = screensaver_send_message_inhibit (connection,
-                inhibit_application ? inhibit_application : "Unknown",
-                inhibit_reason ? inhibit_reason : "Unknown");
-        if (! reply)
-        {
-            g_message ("Did not receive a reply from the screensaver.");
-            goto done;
-        }
-        dbus_message_unref (reply);
-
-        return FALSE;
-    }
-
-done:
-    g_main_loop_quit (loop);
-
-    return FALSE;
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    DBusConnection *connection;
-    DBusError       dbus_error;
-    GOptionContext *context;
-    gboolean        retval;
-    GError         *error = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    g_type_init ();
-
-    g_set_prgname (argv[0]);
-
-    if (setlocale (LC_ALL, "") == NULL)
-        g_warning ("Locale not understood by C library, internationalization will not work\n");
-
-    context = g_option_context_new (NULL);
-    g_option_context_add_main_entries (context, entries, NULL);
-    retval = g_option_context_parse (context, &argc, &argv, &error);
-
-    g_option_context_free (context);
-
-    if (! retval)
-    {
-        g_warning ("%s", error->message);
-        g_error_free (error);
-        exit (1);
-    }
-
-    if (do_version)
-    {
-        g_print ("%s %s\n", argv [0], VERSION);
-        exit (1);
-    }
-
-    dbus_error_init (&dbus_error);
-    connection = dbus_bus_get (DBUS_BUS_SESSION, &dbus_error);
-    if (! connection)
-    {
-        g_message ("Failed to connect to the D-BUS daemon: %s", dbus_error.message);
-        dbus_error_free (&dbus_error);
-        exit (1);
-    }
-
-    dbus_connection_setup_with_g_main (connection, NULL);
-
-    if (! screensaver_is_running (connection))
-    {
-        g_message ("Screensaver is not running!");
-        exit (1);
-    }
-
-    g_idle_add ((GSourceFunc)do_command, connection);
-
-    loop = g_main_loop_new (NULL, FALSE);
-    g_main_loop_run (loop);
-
-    return 0;
-}
diff --git a/src/mate-screensaver-dialog.c.orig b/src/mate-screensaver-dialog.c.orig
deleted file mode 100644
index 9c7f143..0000000
--- a/src/mate-screensaver-dialog.c.orig
+++ /dev/null
@@ -1,665 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include <glib/gi18n.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "gs-lock-plug.h"
-
-#include "gs-auth.h"
-#include "setuid.h"
-
-#include "gs-debug.h"
-
-#define MAX_FAILURES 5
-
-static gboolean verbose        = FALSE;
-static gboolean show_version   = FALSE;
-static gboolean enable_logout  = FALSE;
-static gboolean enable_switch  = FALSE;
-static char    *logout_command = NULL;
-static char    *status_message   = NULL;
-static char    *away_message     = NULL;
-
-static GOptionEntry entries [] =
-{
-    {
-        "verbose", 0, 0, G_OPTION_ARG_NONE, &verbose,
-        N_("Show debugging output"), NULL
-    },
-    {
-        "version", 0, 0, G_OPTION_ARG_NONE, &show_version,
-        N_("Version of this application"), NULL
-    },
-    {
-        "enable-logout", 0, 0, G_OPTION_ARG_NONE, &enable_logout,
-        N_("Show the logout button"), NULL
-    },
-    {
-        "logout-command", 0, 0, G_OPTION_ARG_STRING, &logout_command,
-        N_("Command to invoke from the logout button"), NULL
-    },
-    {
-        "enable-switch", 0, 0, G_OPTION_ARG_NONE, &enable_switch,
-        N_("Show the switch user button"), NULL
-    },
-    {
-        "status-message", 0, 0, G_OPTION_ARG_STRING, &status_message,
-        N_("Message to show in the dialog"), N_("MESSAGE")
-    },
-    {
-        "away-message", 0, 0, G_OPTION_ARG_STRING, &away_message,
-        N_("Not used"), N_("MESSAGE")
-    },
-    { NULL }
-};
-
-static char *
-get_id_string (GtkWidget *widget)
-{
-    char *id = NULL;
-
-    g_return_val_if_fail (widget != NULL, NULL);
-    g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-
-    id = g_strdup_printf ("%" G_GUINT32_FORMAT,
-                          (guint32) GDK_WINDOW_XID (widget->window));
-    return id;
-}
-
-static gboolean
-print_id (GtkWidget *widget)
-{
-    char *id;
-
-    gs_profile_start (NULL);
-
-    id = get_id_string (widget);
-    printf ("WINDOW ID=%s\n", id);
-    fflush (stdout);
-
-    gs_profile_end (NULL);
-
-    g_free (id);
-
-    return FALSE;
-}
-
-static void
-response_cancel (void)
-{
-    printf ("RESPONSE=CANCEL\n");
-    fflush (stdout);
-}
-
-static void
-response_ok (void)
-{
-    printf ("RESPONSE=OK\n");
-    fflush (stdout);
-}
-
-static gboolean
-quit_response_ok (void)
-{
-    response_ok ();
-    gtk_main_quit ();
-    return FALSE;
-}
-
-static gboolean
-quit_response_cancel (void)
-{
-    response_cancel ();
-    gtk_main_quit ();
-    return FALSE;
-}
-
-static void
-response_lock_init_failed (void)
-{
-    /* if we fail to lock then we should drop the dialog */
-    response_ok ();
-}
-
-static char *
-request_response (GSLockPlug *plug,
-                  const char *prompt,
-                  gboolean    visible)
-{
-    int   response;
-    char *text;
-
-    gs_lock_plug_set_sensitive (plug, TRUE);
-    gs_lock_plug_enable_prompt (plug, prompt, visible);
-    response = gs_lock_plug_run (plug);
-
-    gs_debug ("got response: %d", response);
-
-    text = NULL;
-    if (response == GS_LOCK_PLUG_RESPONSE_OK)
-    {
-        gs_lock_plug_get_text (plug, &text);
-    }
-    gs_lock_plug_disable_prompt (plug);
-
-    return text;
-}
-
-/* Adapted from MDM2 daemon/verify-pam.c on 2006-06-13 */
-static const char *
-maybe_translate_message (const char *msg)
-{
-    char              *s;
-    const char        *ret;
-    static GHashTable *hash = NULL;
-
-    if (hash == NULL)
-    {
-        /* Here we come with some fairly standard messages so that
-           we have as much as possible translated.  Should really be
-           translated in pam I suppose.  This way we can "change"
-           some of these messages to be more sane. */
-        hash = g_hash_table_new (g_str_hash, g_str_equal);
-        /* login: is whacked always translate to Username: */
-        g_hash_table_insert (hash, "login:", _("Username:"));
-        g_hash_table_insert (hash, "Username:", _("Username:"));
-        g_hash_table_insert (hash, "username:", _("Username:"));
-        g_hash_table_insert (hash, "Password:", _("Password:"));
-        g_hash_table_insert (hash, "password:", _("Password:"));
-        g_hash_table_insert (hash, "You are required to change your password immediately (password aged)", _("You are required to change your password immediately (password aged)"));
-        g_hash_table_insert (hash, "You are required to change your password immediately (root enforced)", _("You are required to change your password immediately (root enforced)"));
-        g_hash_table_insert (hash, "Your account has expired; please contact your system administrator", _("Your account has expired; please contact your system administrator"));
-        g_hash_table_insert (hash, "No password supplied", _("No password supplied"));
-        g_hash_table_insert (hash, "Password unchanged", _("Password unchanged"));
-        g_hash_table_insert (hash, "Can not get username", _("Can not get username"));
-        g_hash_table_insert (hash, "Retype new UNIX password:", _("Retype new UNIX password:"));
-        g_hash_table_insert (hash, "Enter new UNIX password:", _("Enter new UNIX password:"));
-        g_hash_table_insert (hash, "(current) UNIX password:", _("(current) UNIX password:"));
-        g_hash_table_insert (hash, "Error while changing NIS password.", _("Error while changing NIS password."));
-        g_hash_table_insert (hash, "You must choose a longer password", _("You must choose a longer password"));
-        g_hash_table_insert (hash, "Password has been already used. Choose another.", _("Password has been already used. Choose another."));
-        g_hash_table_insert (hash, "You must wait longer to change your password", _("You must wait longer to change your password"));
-        g_hash_table_insert (hash, "Sorry, passwords do not match", _("Sorry, passwords do not match"));
-        /* FIXME: what about messages which have some variables in them, perhaps try to do those as well */
-    }
-
-    s = g_strstrip (g_strdup (msg));
-    ret = g_hash_table_lookup (hash, s);
-    g_free (s);
-
-    if (ret != NULL)
-    {
-        return ret;
-    }
-    else
-    {
-        return msg;
-    }
-}
-
-static gboolean
-auth_message_handler (GSAuthMessageStyle style,
-                      const char        *msg,
-                      char             **response,
-                      gpointer           data)
-{
-    gboolean    ret;
-    GSLockPlug *plug;
-    const char *message;
-
-    plug = GS_LOCK_PLUG (data);
-
-    gs_profile_start (NULL);
-    gs_debug ("Got message style %d: '%s'", style, msg);
-
-    gtk_widget_show (GTK_WIDGET (plug));
-    gs_lock_plug_set_ready (plug);
-
-    ret = TRUE;
-    *response = NULL;
-    message = maybe_translate_message (msg);
-
-    switch (style)
-    {
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_ON:
-        if (msg != NULL)
-        {
-            char *resp;
-            resp = request_response (plug, message, TRUE);
-            *response = resp;
-        }
-        break;
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:
-        if (msg != NULL)
-        {
-            char *resp;
-            resp = request_response (plug, message, FALSE);
-            *response = resp;
-        }
-        break;
-    case GS_AUTH_MESSAGE_ERROR_MSG:
-        gs_lock_plug_show_message (plug, message);
-        break;
-    case GS_AUTH_MESSAGE_TEXT_INFO:
-        gs_lock_plug_show_message (plug, message);
-        break;
-    default:
-        g_assert_not_reached ();
-    }
-
-    if (*response == NULL)
-    {
-        gs_debug ("Got no response");
-        ret = FALSE;
-    }
-    else
-    {
-        gs_lock_plug_show_message (plug, _("Checking..."));
-        gs_lock_plug_set_sensitive (plug, FALSE);
-    }
-
-    /* we may have pending events that should be processed before continuing back into PAM */
-    while (gtk_events_pending ())
-    {
-        gtk_main_iteration ();
-    }
-
-    gs_lock_plug_set_busy (plug);
-    gs_profile_end (NULL);
-
-    return ret;
-}
-
-static gboolean
-reset_idle_cb (GSLockPlug *plug)
-{
-    gs_lock_plug_set_sensitive (plug, TRUE);
-    gs_lock_plug_show_message (plug, NULL);
-
-    return FALSE;
-}
-
-static gboolean
-do_auth_check (GSLockPlug *plug)
-{
-    GError *error;
-    gboolean res;
-
-    error = NULL;
-
-    gs_lock_plug_disable_prompt (plug);
-    gs_lock_plug_set_busy (plug);
-    res = gs_auth_verify_user (g_get_user_name (), g_getenv ("DISPLAY"), auth_message_handler, plug, &error);
-
-    gs_debug ("Verify user returned: %s", res ? "TRUE" : "FALSE");
-    if (! res)
-    {
-        if (error != NULL)
-        {
-            gs_debug ("Verify user returned error: %s", error->message);
-            gs_lock_plug_show_message (plug, error->message);
-        }
-        else
-        {
-            gs_lock_plug_show_message (plug, _("Authentication failed."));
-        }
-
-        printf ("NOTICE=AUTH FAILED\n");
-        fflush (stdout);
-
-        if (error != NULL)
-        {
-            g_error_free (error);
-        }
-    }
-
-    return res;
-}
-
-static void
-response_cb (GSLockPlug *plug,
-             gint        response_id)
-{
-    if ((response_id == GS_LOCK_PLUG_RESPONSE_CANCEL) ||
-            (response_id == GTK_RESPONSE_DELETE_EVENT))
-    {
-        quit_response_cancel ();
-    }
-}
-
-static gboolean
-response_request_quit (void)
-{
-    printf ("REQUEST QUIT\n");
-    fflush (stdout);
-    return FALSE;
-}
-
-static gboolean
-quit_timeout_cb (gpointer data)
-{
-    gtk_main_quit ();
-    return FALSE;
-}
-
-static gboolean
-auth_check_idle (GSLockPlug *plug)
-{
-    gboolean     res;
-    gboolean     again;
-    static guint loop_counter = 0;
-
-    again = TRUE;
-    res = do_auth_check (plug);
-
-    if (res)
-    {
-        again = FALSE;
-        g_idle_add ((GSourceFunc)quit_response_ok, NULL);
-    }
-    else
-    {
-        loop_counter++;
-
-        if (loop_counter < MAX_FAILURES)
-        {
-            gs_debug ("Authentication failed, retrying (%u)", loop_counter);
-            g_timeout_add (3000, (GSourceFunc)reset_idle_cb, plug);
-        }
-        else
-        {
-            gs_debug ("Authentication failed, quitting (max failures)");
-            again = FALSE;
-            /* Don't quit immediately, but rather request that mate-screensaver
-             * terminates us after it has finished the dialog shake. Time out
-             * after 5 seconds and quit anyway if this doesn't happen though */
-            g_idle_add ((GSourceFunc)response_request_quit, NULL);
-            g_timeout_add (5000, (GSourceFunc)quit_timeout_cb, NULL);
-        }
-    }
-
-    return again;
-}
-
-static void
-show_cb (GtkWidget *widget,
-         gpointer   data)
-{
-    print_id (widget);
-}
-
-static gboolean
-popup_dialog_idle (void)
-{
-    GtkWidget *widget;
-
-    gs_profile_start (NULL);
-
-    widget = gs_lock_plug_new ();
-
-    if (enable_logout)
-    {
-        g_object_set (widget, "logout-enabled", TRUE, NULL);
-    }
-
-    if (logout_command)
-    {
-        g_object_set (widget, "logout-command", logout_command, NULL);
-    }
-
-    if (enable_switch)
-    {
-        g_object_set (widget, "switch-enabled", TRUE, NULL);
-    }
-
-    if (status_message)
-    {
-        g_object_set (widget, "status-message", status_message, NULL);
-    }
-
-    g_signal_connect (GS_LOCK_PLUG (widget), "response", G_CALLBACK (response_cb), NULL);
-    g_signal_connect (widget, "show", G_CALLBACK (show_cb), NULL);
-
-    gtk_widget_realize (widget);
-
-    g_idle_add ((GSourceFunc)auth_check_idle, widget);
-
-    gs_profile_end (NULL);
-
-    return FALSE;
-}
-
-
-/*
- * Copyright (c) 1991-2004 Jamie Zawinski <jwz at jwz.org>
- * Copyright (c) 2005 William Jon McCann <mccann at jhu.edu>
- *
- * Initializations that potentially take place as a priveleged user:
-   If the executable is setuid root, then these initializations
-   are run as root, before discarding privileges.
-*/
-static gboolean
-privileged_initialization (int     *argc,
-                           char   **argv,
-                           gboolean verbose)
-{
-    gboolean ret;
-    char    *nolock_reason;
-    char    *orig_uid;
-    char    *uid_message;
-
-    gs_profile_start (NULL);
-
-#ifndef NO_LOCKING
-    /* before hack_uid () for proper permissions */
-    gs_auth_priv_init ();
-#endif /* NO_LOCKING */
-
-    ret = hack_uid (&nolock_reason,
-                    &orig_uid,
-                    &uid_message);
-
-    if (nolock_reason)
-    {
-        g_debug ("Locking disabled: %s", nolock_reason);
-    }
-
-    if (uid_message && verbose)
-    {
-        g_print ("Modified UID: %s", uid_message);
-    }
-
-    g_free (nolock_reason);
-    g_free (orig_uid);
-    g_free (uid_message);
-
-    gs_profile_end (NULL);
-
-    return ret;
-}
-
-
-/*
- * Copyright (c) 1991-2004 Jamie Zawinski <jwz at jwz.org>
- * Copyright (c) 2005 William Jon McCann <mccann at jhu.edu>
- *
- * Figure out what locking mechanisms are supported.
- */
-static gboolean
-lock_initialization (int     *argc,
-                     char   **argv,
-                     char   **nolock_reason,
-                     gboolean verbose)
-{
-    if (nolock_reason != NULL)
-    {
-        *nolock_reason = NULL;
-    }
-
-#ifdef NO_LOCKING
-    if (nolock_reason != NULL)
-    {
-        *nolock_reason = g_strdup ("not compiled with locking support");
-    }
-
-    return FALSE;
-#else /* !NO_LOCKING */
-
-    /* Finish initializing locking, now that we're out of privileged code. */
-    if (! gs_auth_init ())
-    {
-        if (nolock_reason != NULL)
-        {
-            *nolock_reason = g_strdup ("error getting password");
-        }
-
-        return FALSE;
-    }
-
-    /* If locking is currently enabled, but the environment indicates that
-       we have been launched as MDM's "Background" program, then disable
-       locking just in case.
-    */
-    if (getenv ("RUNNING_UNDER_MDM"))
-    {
-        if (nolock_reason != NULL)
-        {
-            *nolock_reason = g_strdup ("running under MDM");
-        }
-
-        return FALSE;
-    }
-
-    /* If the server is XDarwin (MacOS X) then disable locking.
-       (X grabs only affect X programs, so you can use Command-Tab
-       to bring any other Mac program to the front, e.g., Terminal.)
-    */
-    {
-        gboolean macos = FALSE;
-
-#ifdef __APPLE__
-        /* Disable locking if *running* on Apple hardware, since we have no
-           reliable way to determine whether the server is running on MacOS.
-           Hopefully __APPLE__ means "MacOS" and not "Linux on Mac hardware"
-           but I'm not really sure about that.
-        */
-        macos = TRUE;
-#endif
-
-        if (macos)
-        {
-            if (nolock_reason != NULL)
-            {
-                *nolock_reason = g_strdup ("Cannot lock securely on MacOS X");
-            }
-
-            return FALSE;
-        }
-    }
-
-#endif /* NO_LOCKING */
-
-    return TRUE;
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GError *error = NULL;
-    char   *nolock_reason = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (! g_thread_supported ())
-    {
-        g_thread_init (NULL);
-    }
-
-    g_type_init ();
-
-    gs_profile_start (NULL);
-
-    if (! privileged_initialization (&argc, argv, verbose))
-    {
-        response_lock_init_failed ();
-        exit (1);
-    }
-
-    error = NULL;
-    if (! gtk_init_with_args (&argc, &argv, NULL, entries, NULL, &error))
-    {
-        if (error != NULL)
-        {
-            fprintf (stderr, "%s", error->message);
-            g_error_free (error);
-        }
-        exit (1);
-    }
-
-    if (show_version)
-    {
-        g_print ("%s %s\n", argv [0], VERSION);
-        exit (1);
-    }
-
-    if (! lock_initialization (&argc, argv, &nolock_reason, verbose))
-    {
-        if (nolock_reason != NULL)
-        {
-            g_debug ("Screen locking disabled: %s", nolock_reason);
-            g_free (nolock_reason);
-        }
-        response_lock_init_failed ();
-        exit (1);
-    }
-
-    gs_debug_init (verbose, FALSE);
-
-    g_idle_add ((GSourceFunc)popup_dialog_idle, NULL);
-
-    gtk_main ();
-
-    gs_profile_end (NULL);
-    gs_debug_shutdown ();
-
-    return 0;
-}
diff --git a/src/mate-screensaver-gl-helper.c.orig b/src/mate-screensaver-gl-helper.c.orig
deleted file mode 100644
index 70b56e4..0000000
--- a/src/mate-screensaver-gl-helper.c.orig
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006 William Jon McCann <mccann at 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.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-
-#include "gs-visual-gl.h"
-
-int
-main (int    argc,
-      char **argv)
-{
-    GdkDisplay     *display;
-    GdkScreen      *screen;
-    GdkVisual      *visual;
-    Visual         *xvisual;
-    GError         *error = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    g_type_init ();
-
-    g_set_prgname (argv[0]);
-    if (! gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error))
-    {
-        if (error != NULL)
-        {
-            g_warning ("%s", error->message);
-            g_error_free (error);
-        }
-        else
-        {
-            g_warning ("Unable to initialize GTK+");
-        }
-        exit (1);
-    }
-
-    display = gdk_display_get_default ();
-    screen = gdk_display_get_default_screen (display);
-    visual = gs_visual_gl_get_best_for_screen (screen);
-
-    if (visual != NULL)
-    {
-        xvisual = gdk_x11_visual_get_xvisual (visual);
-        printf ("0x%x\n", (unsigned int) XVisualIDFromVisual (xvisual));
-    }
-    else
-    {
-        printf ("none\n");
-    }
-
-    return 0;
-}
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 <mccann at 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 at jhu.edu>
- *          Rodrigo Moya <rodrigo at novell.com>
- *
- */
-
-#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;
-}
diff --git a/src/mate-screensaver.c.orig b/src/mate-screensaver.c.orig
deleted file mode 100644
index 456d377..0000000
--- a/src/mate-screensaver.c.orig
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-
- *
- * Copyright (C) 2004-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "mate-screensaver.h"
-#include "gs-monitor.h"
-#include "gs-debug.h"
-
-void
-mate_screensaver_quit (void)
-{
-    gtk_main_quit ();
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GSMonitor          *monitor;
-    GError             *error = NULL;
-    static gboolean     show_version = FALSE;
-    static gboolean     no_daemon    = FALSE;
-    static gboolean     debug        = FALSE;
-    static GOptionEntry entries []   =
-    {
-        { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL },
-        { "no-daemon", 0, 0, G_OPTION_ARG_NONE, &no_daemon, N_("Don't become a daemon"), NULL },
-        { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
-        { NULL }
-    };
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (! gtk_init_with_args (&argc, &argv, NULL, entries, NULL, &error))
-    {
-        if (error)
-        {
-            g_warning ("%s", error->message);
-            g_error_free (error);
-        }
-        else
-        {
-            g_warning ("Unable to initialize GTK+");
-        }
-        exit (1);
-    }
-
-    if (show_version)
-    {
-        g_print ("%s %s\n", argv [0], VERSION);
-        exit (1);
-    }
-
-    /* debug to a file if in deamon mode */
-    gs_debug_init (debug, ! no_daemon);
-    gs_debug ("initializing mate-screensaver %s", VERSION);
-
-    monitor = gs_monitor_new ();
-
-    if (monitor == NULL)
-    {
-        exit (1);
-    }
-
-    error = NULL;
-    if (! gs_monitor_start (monitor, &error))
-    {
-        if (error)
-        {
-            g_warning ("%s", error->message);
-            g_error_free (error);
-        }
-        else
-        {
-            g_warning ("Unable to start screensaver");
-        }
-        exit (1);
-    }
-
-    /* Don't close stdout and stderr for now */
-    if (! no_daemon && daemon (0, 1))
-    {
-        g_error ("Could not daemonize: %s", g_strerror (errno));
-    }
-
-    gtk_main ();
-
-    g_object_unref (monitor);
-
-    gs_debug ("mate-screensaver finished");
-
-    gs_debug_shutdown ();
-
-    return 0;
-}
diff --git a/src/setuid.c.orig b/src/setuid.c.orig
deleted file mode 100644
index 2c55c2e..0000000
--- a/src/setuid.c.orig
+++ /dev/null
@@ -1,247 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * setuid.c --- management of runtime privileges.
- *
- * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <jwz at jwz.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or
- * implied warranty.
- */
-
-#include "config.h"
-
-#ifndef EPERM
-#include <errno.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <pwd.h>		/* for getpwnam() and struct passwd */
-#include <grp.h>		/* for getgrgid() and struct group */
-#include <glib.h>
-
-#include "setuid.h"
-
-static char *
-uid_gid_string (uid_t uid,
-                gid_t gid)
-{
-    static char   *buf;
-    struct passwd *p = NULL;
-    struct group  *g = NULL;
-
-    p = getpwuid (uid);
-    g = getgrgid (gid);
-
-    buf = g_strdup_printf ("%s/%s (%ld/%ld)",
-                           (p && p->pw_name ? p->pw_name : "???"),
-                           (g && g->gr_name ? g->gr_name : "???"),
-                           (long) uid, (long) gid);
-
-    return buf;
-}
-
-static gboolean
-set_ids_by_number (uid_t  uid,
-                   gid_t  gid,
-                   char **message_ret)
-{
-    int uid_errno = 0;
-    int gid_errno = 0;
-    int sgs_errno = 0;
-    struct passwd *p = getpwuid (uid);
-    struct group  *g = getgrgid (gid);
-
-    if (message_ret)
-        *message_ret = NULL;
-
-    /* Rumor has it that some implementations of of setuid() do nothing
-       when called with -1; therefore, if the "nobody" user has a uid of
-       -1, then that would be Really Bad.  Rumor further has it that such
-       systems really ought to be using -2 for "nobody", since that works.
-       So, if we get a uid (or gid, for good measure) of -1, switch to -2
-       instead.  Note that this must be done after we've looked up the
-       user/group names with getpwuid(-1) and/or getgrgid(-1).
-    */
-    if (gid == (gid_t) -1) gid = (gid_t) -2;
-    if (uid == (uid_t) -1) uid = (uid_t) -2;
-
-    errno = 0;
-    if (setgroups (1, &gid) < 0)
-        sgs_errno = errno ? errno : -1;
-
-    errno = 0;
-    if (setgid (gid) != 0)
-        gid_errno = errno ? errno : -1;
-
-    errno = 0;
-    if (setuid (uid) != 0)
-        uid_errno = errno ? errno : -1;
-
-    if (uid_errno == 0 && gid_errno == 0 && sgs_errno == 0)
-    {
-        static char *reason;
-        reason = g_strdup_printf ("changed uid/gid to %s/%s (%ld/%ld).",
-                                  (p && p->pw_name ? p->pw_name : "???"),
-                                  (g && g->gr_name ? g->gr_name : "???"),
-                                  (long) uid, (long) gid);
-        if (message_ret)
-            *message_ret = g_strdup (reason);
-
-        g_free (reason);
-
-        return TRUE;
-    }
-    else
-    {
-        char *reason = NULL;
-
-        if (sgs_errno)
-        {
-            reason = g_strdup_printf ("couldn't setgroups to %s (%ld)",
-                                      (g && g->gr_name ? g->gr_name : "???"),
-                                      (long) gid);
-            if (sgs_errno == -1)
-                fprintf (stderr, "%s: unknown error\n", reason);
-            else
-            {
-                errno = sgs_errno;
-                perror (reason);
-            }
-            g_free (reason);
-            reason = NULL;
-        }
-
-        if (gid_errno)
-        {
-            reason = g_strdup_printf ("couldn't set gid to %s (%ld)",
-                                      (g && g->gr_name ? g->gr_name : "???"),
-                                      (long) gid);
-            if (gid_errno == -1)
-                fprintf (stderr, "%s: unknown error\n", reason);
-            else
-            {
-                errno = gid_errno;
-                perror (reason);
-            }
-            g_free (reason);
-            reason = NULL;
-        }
-
-        if (uid_errno)
-        {
-            reason = g_strdup_printf ("couldn't set uid to %s (%ld)",
-                                      (p && p->pw_name ? p->pw_name : "???"),
-                                      (long) uid);
-            if (uid_errno == -1)
-                fprintf (stderr, "%s: unknown error\n", reason);
-            else
-            {
-                errno = uid_errno;
-                perror (reason);
-            }
-            g_free (reason);
-            reason = NULL;
-        }
-        return FALSE;
-    }
-    return FALSE;
-}
-
-
-/* If we've been run as setuid or setgid to someone else (most likely root)
-   turn off the extra permissions so that random user-specified programs
-   don't get special privileges.  (On some systems it is necessary to install
-   this program as setuid root in order to read the passwd file to implement
-   lock-mode.)
-
-   *** WARNING: DO NOT DISABLE ANY OF THE FOLLOWING CODE!
-   If you do so, you will open a security hole.  See the sections
-   of the xscreensaver manual titled "LOCKING AND ROOT LOGINS",
-   and "USING XDM".
-*/
-
-/* Returns TRUE if OK to lock, FALSE otherwise */
-gboolean
-hack_uid (char **nolock_reason,
-          char **orig_uid,
-          char **uid_message)
-{
-    char    *reason;
-    gboolean ret;
-
-    ret = TRUE;
-    reason = NULL;
-
-    if (nolock_reason != NULL)
-    {
-        *nolock_reason = NULL;
-    }
-    if (orig_uid != NULL)
-    {
-        *orig_uid = NULL;
-    }
-    if (uid_message != NULL)
-    {
-        *uid_message = NULL;
-    }
-
-    /* Discard privileges, and set the effective user/group ids to the
-       real user/group ids.  That is, give up our "chmod +s" rights.
-    */
-    {
-        uid_t euid = geteuid ();
-        gid_t egid = getegid ();
-        uid_t uid  = getuid ();
-        gid_t gid  = getgid ();
-
-        if (orig_uid != NULL)
-        {
-            *orig_uid = uid_gid_string (euid, egid);
-        }
-
-        if (uid != euid || gid != egid)
-        {
-            if (! set_ids_by_number (uid, gid, uid_message))
-            {
-                reason = g_strdup ("unable to discard privileges.");
-
-                ret = FALSE;
-                goto out;
-            }
-        }
-    }
-
-
-    /* Locking can't work when running as root, because we have no way of
-       knowing what the user id of the logged in user is (so we don't know
-       whose password to prompt for.)
-
-       *** WARNING: DO NOT DISABLE THIS CODE!
-       If you do so, you will open a security hole.  See the sections
-       of the xscreensaver manual titled "LOCKING AND ROOT LOGINS",
-       and "USING XDM".
-    */
-    if (getuid () == (uid_t) 0)
-    {
-        reason = g_strdup ("running as root");
-        ret = FALSE;
-        goto out;
-    }
-
-out:
-    if (nolock_reason != NULL)
-    {
-        *nolock_reason = g_strdup (reason);
-    }
-    g_free (reason);
-
-    return ret;
-}
diff --git a/src/setuid.h.orig b/src/setuid.h.orig
deleted file mode 100644
index 8cb8808..0000000
--- a/src/setuid.h.orig
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * xscreensaver, Copyright (c) 1993-2004 Jamie Zawinski <jwz at jwz.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or 
- * implied warranty.
- */
-
-#ifndef __GS_SETUID_H
-#define __GS_SETUID_H
-
-G_BEGIN_DECLS
-
-gboolean hack_uid (char **nolock_reason,
-                   char **orig_uid,
-                   char **uid_message);
-
-G_END_DECLS
-
-#endif /* __GS_SETUID_H */
diff --git a/src/subprocs.c.orig b/src/subprocs.c.orig
deleted file mode 100644
index 3c18e08..0000000
--- a/src/subprocs.c.orig
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * subprocs.c --- choosing, spawning, and killing screenhacks.
- *
- * xscreensaver, Copyright (c) 1991-2003 Jamie Zawinski <jwz at jwz.org>
- * Modified:     Copyright (c) 2004 William Jon McCann <mccann at jhu.edu>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or
- * implied warranty.
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifndef ESRCH
-# include <errno.h>
-#endif
-
-#include <sys/time.h>		/* sys/resource.h needs this for timeval */
-# include <sys/wait.h>		/* for waitpid() and associated macros */
-
-#ifdef VMS
-# include <processes.h>
-# include <unixio.h>		/* for close */
-# include <unixlib.h>		/* for getpid */
-# define pid_t int
-# define fork  vfork
-#endif /* VMS */
-
-#include <signal.h>		/* for the signal names */
-
-#include <glib.h>
-#include "subprocs.h"
-
-#if !defined(SIGCHLD) && defined(SIGCLD)
-# define SIGCHLD SIGCLD
-#endif
-
-/* Semaphore to temporarily turn the SIGCHLD handler into a no-op.
-   Don't alter this directly -- use block_sigchld() / unblock_sigchld().
-*/
-static int block_sigchld_handler = 0;
-
-
-#ifdef HAVE_SIGACTION
-sigset_t
-#else  /* !HAVE_SIGACTION */
-int
-#endif /* !HAVE_SIGACTION */
-block_sigchld (void)
-{
-#ifdef HAVE_SIGACTION
-    sigset_t child_set;
-    sigemptyset (&child_set);
-    sigaddset (&child_set, SIGCHLD);
-    sigaddset (&child_set, SIGPIPE);
-    sigprocmask (SIG_BLOCK, &child_set, 0);
-#endif /* HAVE_SIGACTION */
-
-    block_sigchld_handler++;
-
-#ifdef HAVE_SIGACTION
-    return child_set;
-#else  /* !HAVE_SIGACTION */
-    return 0;
-#endif /* !HAVE_SIGACTION */
-}
-
-void
-unblock_sigchld (void)
-{
-#ifdef HAVE_SIGACTION
-    sigset_t child_set;
-    sigemptyset (&child_set);
-    sigaddset (&child_set, SIGCHLD);
-    sigaddset (&child_set, SIGPIPE);
-    sigprocmask (SIG_UNBLOCK, &child_set, 0);
-#endif /* HAVE_SIGACTION */
-
-    block_sigchld_handler--;
-}
-
-int
-signal_pid (int    pid,
-            int    signal)
-{
-    int status = -1;
-    gboolean verbose = TRUE;
-
-    if (block_sigchld_handler)
-        /* This function should not be called from the signal handler. */
-        abort();
-
-    block_sigchld ();                      /* we control the horizontal... */
-
-    status = kill (pid, signal);
-
-    if (verbose && status < 0)
-    {
-        if (errno == ESRCH)
-            g_message ("Child process %lu was already dead.",
-                       (unsigned long) pid);
-        else
-        {
-            char buf [1024];
-            snprintf (buf, sizeof (buf), "Couldn't kill child process %lu",
-                      (unsigned long) pid);
-            perror (buf);
-        }
-    }
-
-    unblock_sigchld ();
-
-    if (block_sigchld_handler < 0)
-        abort ();
-
-    return status;
-}
-
-#ifndef VMS
-
-void
-await_dying_children (int      pid,
-                      gboolean debug)
-{
-    while (1)
-    {
-        int wait_status = 0;
-        pid_t kid;
-
-        errno = 0;
-        kid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED);
-
-        if (debug)
-        {
-            if (kid < 0 && errno)
-                g_message ("waitpid(%d) ==> %ld (%d)", pid, (long) kid, errno);
-            else if (kid != 0)
-                g_message ("waitpid(%d) ==> %ld", pid, (long) kid);
-        }
-
-        /* 0 means no more children to reap.
-           -1 means error -- except "interrupted system call" isn't a "real"
-           error, so if we get that, we should just try again. */
-        if (kid < 0 && errno != EINTR)
-            break;
-    }
-}
-
-
-#else  /* VMS */
-static void await_dying_children (saver_info *si)
-{
-    return;
-}
-#endif /* VMS */
-
diff --git a/src/subprocs.h.orig b/src/subprocs.h.orig
deleted file mode 100644
index 30fec7b..0000000
--- a/src/subprocs.h.orig
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * subprocs.c --- choosing, spawning, and killing screenhacks.
- *
- * xscreensaver, Copyright (c) 1991-2003 Jamie Zawinski <jwz at jwz.org>
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or 
- * implied warranty.
- */
-
-#ifndef __GS_SUBPROCS_H
-#define __GS_SUBPROCS_H
-
-#include <signal.h>
-
-G_BEGIN_DECLS
-
-void unblock_sigchld (void);
-
-#ifdef HAVE_SIGACTION
-sigset_t
-#else  /* !HAVE_SIGACTION */
-int
-#endif /* !HAVE_SIGACTION */
-block_sigchld (void);
-
-int  signal_pid           (int    pid,
-                           int    signal);
-void await_dying_children (int      pid,
-                           gboolean debug);
-
-G_END_DECLS
-
-#endif /* __GS_SUBPROCS_H */
diff --git a/src/test-fade.c.orig b/src/test-fade.c.orig
deleted file mode 100644
index 894085c..0000000
--- a/src/test-fade.c.orig
+++ /dev/null
@@ -1,134 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <termios.h>
-#include <unistd.h>
-
-#include <glib/gi18n.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-#include "gs-fade.h"
-#include "gs-debug.h"
-
-#ifdef HAVE_XF86VMODE_GAMMA
-# include <X11/extensions/xf86vmode.h>
-#endif
-
-#define XF86_VIDMODE_NAME "XFree86-VidModeExtension"
-
-static void
-test_fade (void)
-{
-    GSFade *fade;
-    int     reps = 2;
-    int     delay = 2;
-
-    fade = gs_fade_new ();
-
-    while (reps-- > 0)
-    {
-
-        g_print ("fading out...");
-        gs_fade_sync (fade, 1000);
-        g_print ("done.\n");
-
-        g_print ("fading in...");
-        gs_fade_reset (fade);
-        g_print ("done.\n");
-
-        if (delay)
-        {
-            sleep (delay);
-        }
-    }
-
-    g_object_unref (fade);
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GError *error = NULL;
-    int     op, event, err;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (error)
-    {
-        fprintf (stderr, "%s\n", error->message);
-        exit (1);
-    }
-
-    if (! gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error))
-    {
-        fprintf (stderr, "%s", error->message);
-        g_error_free (error);
-        exit (1);
-    }
-
-    if (! XQueryExtension (GDK_DISPLAY (), XF86_VIDMODE_NAME, &op, &event, &err))
-    {
-        g_message ("no " XF86_VIDMODE_NAME " extension");
-    }
-    else
-    {
-# ifdef HAVE_XF86VMODE_GAMMA
-        int major;
-        int minor;
-
-        if (! XF86VidModeQueryVersion (GDK_DISPLAY (), &major, &minor))
-        {
-            g_message ("unable to get " XF86_VIDMODE_NAME " version");
-        }
-        else
-        {
-            g_message (XF86_VIDMODE_NAME " version %d.%d", major, minor);
-        }
-# else /* !HAVE_XF86VMODE_GAMMA */
-        g_message ("no support for display's " XF86_VIDMODE_NAME " extension");
-# endif /* !HAVE_XF86VMODE_GAMMA */
-    }
-
-    gs_debug_init (TRUE, FALSE);
-
-    test_fade ();
-
-    gs_debug_shutdown ();
-
-    return 0;
-}
diff --git a/src/test-passwd.c.orig b/src/test-passwd.c.orig
deleted file mode 100644
index 70bccce..0000000
--- a/src/test-passwd.c.orig
+++ /dev/null
@@ -1,288 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005-2006 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <termios.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gs-auth.h"
-#include "setuid.h"
-
-/* Initializations that potentially take place as a priveleged user:
-   If the executable is setuid root, then these initializations
-   are run as root, before discarding privileges.
-*/
-static gboolean
-privileged_initialization (void)
-{
-    gboolean ret;
-    char    *nolock_reason;
-    char    *orig_uid;
-    char    *uid_message;
-
-#ifndef NO_LOCKING
-    /* before hack_uid () for proper permissions */
-    gs_auth_priv_init ();
-#endif /* NO_LOCKING */
-
-    ret = hack_uid (&nolock_reason,
-                    &orig_uid,
-                    &uid_message);
-    if (nolock_reason)
-    {
-        g_warning ("Locking disabled: %s", nolock_reason);
-    }
-    if (uid_message && gs_auth_get_verbose ())
-    {
-        g_print ("Modified UID: %s", uid_message);
-    }
-
-    g_free (nolock_reason);
-    g_free (orig_uid);
-    g_free (uid_message);
-
-    return ret;
-}
-
-
-/* Figure out what locking mechanisms are supported.
- */
-static gboolean
-lock_initialization (char **nolock_reason)
-{
-    if (nolock_reason)
-    {
-        *nolock_reason = NULL;
-    }
-
-#ifdef NO_LOCKING
-    if (nolock_reason)
-    {
-        *nolock_reason = g_strdup ("not compiled with locking support");
-    }
-    return FALSE;
-#else /* !NO_LOCKING */
-
-    /* Finish initializing locking, now that we're out of privileged code. */
-    if (! gs_auth_init ())
-    {
-        if (nolock_reason)
-        {
-            *nolock_reason = g_strdup ("error getting password");
-        }
-        return FALSE;
-    }
-
-    /* If locking is currently enabled, but the environment indicates that
-       we have been launched as MDM's "Background" program, then disable
-       locking just in case.
-    */
-    if (getenv ("RUNNING_UNDER_MDM"))
-    {
-        if (nolock_reason)
-        {
-            *nolock_reason = g_strdup ("running under MDM");
-        }
-        return FALSE;
-    }
-
-    /* If the server is XDarwin (MacOS X) then disable locking.
-       (X grabs only affect X programs, so you can use Command-Tab
-       to bring any other Mac program to the front, e.g., Terminal.)
-    */
-    {
-        gboolean macos = FALSE;
-
-#ifdef __APPLE__
-        /* Disable locking if *running* on Apple hardware, since we have no
-           reliable way to determine whether the server is running on MacOS.
-           Hopefully __APPLE__ means "MacOS" and not "Linux on Mac hardware"
-           but I'm not really sure about that.
-        */
-        macos = TRUE;
-#endif
-
-        if (macos)
-        {
-            if (nolock_reason)
-            {
-                *nolock_reason = g_strdup ("Cannot lock securely on MacOS X");
-            }
-            return FALSE;
-        }
-    }
-
-#endif /* NO_LOCKING */
-
-    return TRUE;
-}
-
-static char *
-request_password (const char *prompt)
-{
-    char           buf [255];
-    char          *pass;
-    char          *password;
-    struct termios ts0;
-    struct termios ts1;
-
-    tcgetattr (fileno (stdin), &ts0);
-    ts1 = ts0;
-    ts1.c_lflag &= ~ECHO;
-
-    printf ("%s", prompt);
-
-    if (tcsetattr (fileno (stdin), TCSAFLUSH, &ts1) != 0)
-    {
-        fprintf (stderr, "Could not set terminal attributes\n");
-        exit (1);
-    }
-
-    pass = fgets (buf, sizeof (buf) - 1, stdin);
-
-    tcsetattr (fileno (stdin), TCSANOW, &ts0);
-
-    if (!pass || !*pass)
-    {
-        exit (0);
-    }
-
-    if (pass [strlen (pass) - 1] == '\n')
-    {
-        pass [strlen (pass) - 1] = 0;
-    }
-
-    password = g_strdup (pass);
-
-    memset (pass, '\b', strlen (pass));
-
-    return password;
-}
-
-static gboolean
-auth_message_handler (GSAuthMessageStyle style,
-                      const char        *msg,
-                      char             **response,
-                      gpointer           data)
-{
-    gboolean ret;
-
-    g_message ("Got message style %d: '%s'", style, msg);
-
-    ret = TRUE;
-
-    switch (style)
-    {
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_ON:
-        break;
-    case GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:
-    {
-        char *password;
-        password = request_password (msg);
-        *response = password;
-    }
-    break;
-    case GS_AUTH_MESSAGE_ERROR_MSG:
-        break;
-    case GS_AUTH_MESSAGE_TEXT_INFO:
-        break;
-    default:
-        g_assert_not_reached ();
-    }
-
-    return ret;
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GError         *error         = NULL;
-    gboolean        verbose       = TRUE;
-    char           *nolock_reason = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (! g_thread_supported ())
-    {
-        g_thread_init (NULL);
-    }
-
-    gs_auth_set_verbose (verbose);
-    if (! privileged_initialization ())
-    {
-        exit (1);
-    }
-
-    if (! gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error))
-    {
-        fprintf (stderr, "%s", error->message);
-        g_error_free (error);
-        exit (1);
-    }
-
-    if (! lock_initialization (&nolock_reason))
-    {
-        if (nolock_reason)
-        {
-            g_warning ("Screen locking disabled: %s", nolock_reason);
-            g_free (nolock_reason);
-        }
-
-        exit (1);
-    }
-
-again:
-    error = NULL;
-
-    if (gs_auth_verify_user (g_get_user_name (), g_getenv ("DISPLAY"), auth_message_handler, NULL, &error))
-    {
-        printf ("Correct!\n");
-    }
-    else
-    {
-        if (error != NULL)
-        {
-            fprintf (stderr, "ERROR: %s\n", error->message);
-            g_error_free (error);
-        }
-        printf ("Incorrect\n");
-        goto again;
-    }
-
-    return 0;
-}
diff --git a/src/test-watcher.c.orig b/src/test-watcher.c.orig
deleted file mode 100644
index 28c7678..0000000
--- a/src/test-watcher.c.orig
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gs-watcher.h"
-#include "gs-debug.h"
-
-static gboolean
-watcher_idle_cb (GSWatcher *watcher,
-                 gboolean   is_idle,
-                 gpointer   data)
-{
-    g_message ("Idle status changed: %s", is_idle ? "idle" : "not idle");
-
-    /* return FALSE so that the idle watcher continues */
-    return FALSE;
-}
-
-static gboolean
-watcher_idle_notice_cb (GSWatcher *watcher,
-                        gboolean   is_idle,
-                        gpointer   data)
-{
-    g_message ("Idle notice status changed: %s", is_idle ? "idle" : "not idle");
-
-    return TRUE;
-}
-
-static void
-connect_watcher_signals (GSWatcher *watcher)
-{
-    g_signal_connect (watcher, "idle-changed",
-                      G_CALLBACK (watcher_idle_cb), NULL);
-    g_signal_connect (watcher, "idle-notice-changed",
-                      G_CALLBACK (watcher_idle_notice_cb), NULL);
-}
-
-static void
-test_watcher (void)
-{
-    GSWatcher *watcher;
-
-    watcher = gs_watcher_new ();
-    gs_watcher_set_enabled (watcher, TRUE);
-    gs_watcher_set_active (watcher, TRUE);
-
-    connect_watcher_signals (watcher);
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GError *error = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (! gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error))
-    {
-        fprintf (stderr, "%s", error->message);
-        g_error_free (error);
-        exit (1);
-    }
-
-    gs_debug_init (TRUE, FALSE);
-
-    test_watcher ();
-
-    gtk_main ();
-
-    gs_debug_shutdown ();
-
-    return 0;
-}
diff --git a/src/test-window.c.orig b/src/test-window.c.orig
deleted file mode 100644
index bc4d37b..0000000
--- a/src/test-window.c.orig
+++ /dev/null
@@ -1,180 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2005 William Jon McCann <mccann at 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 at jhu.edu>
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gs-window.h"
-#include "gs-grab.h"
-#include "gs-debug.h"
-
-static GSGrab *grab = NULL;
-
-static void
-window_deactivated_cb (GSWindow  *window,
-                       gpointer   data)
-{
-    gs_window_destroy (window);
-}
-
-static void
-window_dialog_up_cb (GSWindow  *window,
-                     gpointer   data)
-{
-}
-
-static void
-window_dialog_down_cb (GSWindow  *window,
-                       gpointer   data)
-{
-}
-
-static void
-window_show_cb (GSWindow  *window,
-                gpointer   data)
-{
-    /* Grab keyboard so dialog can be used */
-    gs_grab_move_to_window (grab,
-                            gs_window_get_gdk_window (window),
-                            gs_window_get_screen (window),
-                            FALSE);
-
-}
-
-static gboolean
-window_activity_cb (GSWindow  *window,
-                    gpointer   data)
-{
-    gs_window_request_unlock (window);
-
-    return TRUE;
-}
-
-static void
-disconnect_window_signals (GSWindow *window)
-{
-    gpointer data;
-
-    data = NULL;
-    g_signal_handlers_disconnect_by_func (window, window_activity_cb, data);
-    g_signal_handlers_disconnect_by_func (window, window_deactivated_cb, data);
-    g_signal_handlers_disconnect_by_func (window, window_dialog_up_cb, data);
-    g_signal_handlers_disconnect_by_func (window, window_dialog_down_cb, data);
-    g_signal_handlers_disconnect_by_func (window, window_show_cb, data);
-}
-
-static void
-window_destroyed_cb (GtkWindow *window,
-                     gpointer   data)
-{
-    disconnect_window_signals (GS_WINDOW (window));
-    gs_grab_release (grab);
-    gtk_main_quit ();
-}
-
-static void
-connect_window_signals (GSWindow *window)
-{
-    gpointer data;
-
-    data = NULL;
-
-    g_signal_connect_object (window, "activity",
-                             G_CALLBACK (window_activity_cb), data, 0);
-    g_signal_connect_object (window, "destroy",
-                             G_CALLBACK (window_destroyed_cb), data, 0);
-    g_signal_connect_object (window, "deactivated",
-                             G_CALLBACK (window_deactivated_cb), data, 0);
-    g_signal_connect_object (window, "dialog-up",
-                             G_CALLBACK (window_dialog_up_cb), data, 0);
-    g_signal_connect_object (window, "dialog-down",
-                             G_CALLBACK (window_dialog_down_cb), data, 0);
-    g_signal_connect_object (window, "show",
-                             G_CALLBACK (window_show_cb), data, 0);
-}
-
-static void
-test_window (void)
-{
-    GSWindow  *window;
-    gboolean   lock_active;
-    gboolean   user_switch_enabled;
-    GdkScreen *screen;
-    int        monitor;
-
-    lock_active = TRUE;
-    user_switch_enabled = TRUE;
-    screen = gdk_screen_get_default ();
-    monitor = 0;
-
-    window = gs_window_new (screen, monitor, lock_active);
-
-    gs_window_set_user_switch_enabled (window, user_switch_enabled);
-
-    connect_window_signals (window);
-
-    gs_window_show (window);
-}
-
-int
-main (int    argc,
-      char **argv)
-{
-    GError *error = NULL;
-
-#ifdef ENABLE_NLS
-    bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
-# ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-# endif
-    textdomain (GETTEXT_PACKAGE);
-#endif
-
-    if (! gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error))
-    {
-        fprintf (stderr, "%s", error->message);
-        g_error_free (error);
-        exit (1);
-    }
-
-    gs_debug_init (TRUE, FALSE);
-
-    grab = gs_grab_new ();
-
-    test_window ();
-
-    /* safety valve in case we can't authenticate */
-    g_timeout_add (30000, (GSourceFunc)gtk_main_quit, NULL);
-
-    gtk_main ();
-
-    g_object_unref (grab);
-
-    gs_debug_shutdown ();
-
-    return 0;
-}

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list