rpms/control-center/devel control-center-2.18.0-be-more-async.patch, 1.2, 1.3 control-center.spec, 1.245, 1.246
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Wed Apr 18 03:30:48 UTC 2007
Author: rstrode
Update of /cvs/dist/rpms/control-center/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv12571
Modified Files:
control-center-2.18.0-be-more-async.patch control-center.spec
Log Message:
- clean up be-more-async patch to have less repetitive code
control-center-2.18.0-be-more-async.patch:
gnome-settings-daemon.c | 282 +++++++++++++++++++++++++++++-------------------
1 files changed, 173 insertions(+), 109 deletions(-)
Index: control-center-2.18.0-be-more-async.patch
===================================================================
RCS file: /cvs/dist/rpms/control-center/devel/control-center-2.18.0-be-more-async.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- control-center-2.18.0-be-more-async.patch 17 Apr 2007 22:21:45 -0000 1.2
+++ control-center-2.18.0-be-more-async.patch 18 Apr 2007 03:30:45 -0000 1.3
@@ -1,17 +1,48 @@
--- control-center-2.18.0/gnome-settings-daemon/gnome-settings-daemon.c.be-more-async 2007-01-02 07:47:00.000000000 -0500
-+++ control-center-2.18.0/gnome-settings-daemon/gnome-settings-daemon.c 2007-04-17 18:14:47.000000000 -0400
-@@ -255,15 +255,177 @@
- G_DEFINE_TYPE (GnomeSettingsDaemon, gnome_settings_daemon,
- G_TYPE_OBJECT)
++++ control-center-2.18.0/gnome-settings-daemon/gnome-settings-daemon.c 2007-04-17 23:25:30.000000000 -0400
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright © 2001 Red Hat, Inc.
++ * Copyright © 2001, 2007 Red Hat, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+@@ -18,7 +18,7 @@
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+- * Authors: Owen Taylor, Havoc Pennington
++ * Authors: Owen Taylor, Havoc Pennington, Ray Strode
+ */
+ #include <config.h>
+ #include <stdlib.h>
+@@ -61,16 +61,67 @@
-+static void load_subsystems (void);
-+static void watch_for_xsetting_changes (void);
+ #include "clipboard-manager.h"
+
+-static GObjectClass *parent_class = NULL;
+-
+ struct _GnomeSettingsDaemonPrivate {
+- int dummy;
++ GObject *dbus_service;
+ };
+
+ static GSList *directories = NULL;
+ XSettingsManager **managers = NULL;
+ static ClipboardManager *clipboard_manager;
+
++static gboolean process_action (guint action_number);
++static void queue_action (guint action_number);
++static void queue_transaction (void);
++
++static void watch_for_xsetting_changes (GConfClient *client);
+static void watch_for_configuration_changes (GConfClient *client);
+
-+typedef void (* GnomeSettingsSubsystemInitFunc) (GConfClient *client);
++typedef void (* GnomeSettingsActionFunc) (GConfClient *client);
+
-+static GnomeSettingsSubsystemInitFunc subsystem_init_funcs[] =
++static GnomeSettingsActionFunc transaction[] =
+{
++ /* Subsystem Initialization */
+/* gnome_settings_disk_init */
+ gnome_settings_font_init,
+ gnome_settings_xsettings_init,
@@ -28,42 +59,12 @@
+ gnome_settings_gtk1_theme_init,
+ gnome_settings_xrdb_init,
+ gnome_settings_typing_break_init,
-+ watch_for_configuration_changes,
-+ (GnomeSettingsSubsystemInitFunc) watch_for_xsetting_changes,
-+ (GnomeSettingsSubsystemInitFunc) load_subsystems,
-+ NULL
-+};
-+
-+static gboolean
-+call_init_func_and_queue_next (guint func_index)
-+{
-+ GConfClient *client;
-+
-+ client = gnome_settings_daemon_get_conf_client ();
-+
-+ subsystem_init_funcs[func_index] (client);
-+
-+ if (subsystem_init_funcs[func_index + 1] != NULL)
-+ g_idle_add ((GSourceFunc) call_init_func_and_queue_next,
-+ GUINT_TO_POINTER (func_index + 1));
-+
-+ return FALSE;
-+}
-+
-+static void
-+initialize_subsystems (void)
-+{
-+ /* Essential - xkb initialization should happen before */
-+ gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)gnome_settings_load_modmap_files, NULL);
-+
-+ g_idle_add ((GSourceFunc) call_init_func_and_queue_next,
-+ GUINT_TO_POINTER (0));
-+}
+
-+typedef void (* GnomeSettingsSubsystemLoadFunc) (GConfClient *client);
++ /* Post initialization setup */
++ watch_for_configuration_changes,
++ watch_for_xsetting_changes,
+
-+static GnomeSettingsSubsystemLoadFunc subsystem_load_funcs[] =
-+{
++ /* Subsystem work */
+/* gnome_settings_disk_load,*/
+ gnome_settings_font_load,
+ gnome_settings_xsettings_load,
@@ -83,31 +84,154 @@
+ NULL
+};
+
-+static gboolean
-+call_load_func_and_queue_next (guint func_index)
-+{
-+ GConfClient *client;
+ typedef struct DirElement
+ {
+ char *dir;
+@@ -212,6 +263,8 @@
+ return GDK_FILTER_CONTINUE;
+ }
+
++G_DEFINE_TYPE (GnomeSettingsDaemon, gnome_settings_daemon, G_TYPE_OBJECT)
+
-+ client = gnome_settings_daemon_get_conf_client ();
+ static void
+ finalize (GObject *object)
+ {
+@@ -219,19 +272,15 @@
+ int i;
+
+ daemon = GNOME_SETTINGS_DAEMON (object);
+- if (daemon->private == NULL) {
+- return;
+- }
+
+ for (i = 0; managers && managers [i]; i++)
+ xsettings_manager_destroy (managers [i]);
+
+ clipboard_manager_destroy (clipboard_manager);
+
+- g_free (daemon->private);
+- daemon->private = NULL;
++ g_object_unref (daemon->private->dbus_service);
+
+- G_OBJECT_CLASS (parent_class)->finalize (object);
++ G_OBJECT_CLASS (gnome_settings_daemon_parent_class)->finalize (object);
+ }
+
+ static void
+@@ -243,103 +292,94 @@
+
+ object_class->finalize = finalize;
+
+- parent_class = g_type_class_peek_parent (klass);
++ gnome_settings_daemon_parent_class = g_type_class_peek_parent (klass);
+
-+ subsystem_load_funcs[func_index] (client);
++ g_type_class_add_private (object_class,
++ sizeof (GnomeSettingsDaemonPrivate));
+ }
+
+ static void
+ gnome_settings_daemon_init (GnomeSettingsDaemon *settings)
+ {
+- settings->private = g_new (GnomeSettingsDaemonPrivate, 1);
++ settings->private = G_TYPE_INSTANCE_GET_PRIVATE (settings,
++ GNOME_SETTINGS_DAEMON_TYPE,
++ GnomeSettingsDaemonPrivate);
+
-+ if (subsystem_load_funcs[func_index + 1] != NULL)
-+ g_idle_add ((GSourceFunc) call_load_func_and_queue_next,
-+ GUINT_TO_POINTER (func_index + 1));
-+
-+ return FALSE;
-+}
++ settings->private->dbus_service = g_object_new (gnome_settings_server_get_type (), NULL);
+
++ queue_transaction ();
+ }
+
+-G_DEFINE_TYPE (GnomeSettingsDaemon, gnome_settings_daemon,
+- G_TYPE_OBJECT)
+static void
-+load_subsystems (void)
++queue_action (guint action_number)
+{
-+ g_idle_add ((GSourceFunc) call_load_func_and_queue_next,
-+ GUINT_TO_POINTER (0));
++ g_assert (action_number < G_N_ELEMENTS (transaction));
+
+-GObject *
+-gnome_settings_daemon_new (void)
++ if (transaction[action_number] == NULL)
++ return;
++
++ g_idle_add ((GSourceFunc) process_action, GUINT_TO_POINTER (action_number));
+}
+
++static gboolean
++process_action (guint action_number)
+ {
+- gboolean terminated = FALSE;
++ GnomeSettingsActionFunc action;
+ GConfClient *client;
+- GSList *list;
+- GnomeSettingsDaemon *daemon;
+- GdkDisplay *display;
+- GObject *dbusServer;
+- int i;
+- int n_screens;
+
+- display = gdk_display_get_default ();
+- n_screens = gdk_display_get_n_screens (display);
++ g_assert (action_number < G_N_ELEMENTS (transaction));
+
+- daemon = g_object_new (gnome_settings_daemon_get_type (), NULL);
++ action = transaction[action_number];
+
+- if (xsettings_manager_check_running (
+- gdk_x11_display_get_xdisplay (display),
+- gdk_screen_get_number (gdk_screen_get_default ())))
+- {
+- fprintf (stderr, "You can only run one xsettings manager at a time; exiting\n");
+- exit (1);
+- }
++ g_assert (action != NULL);
+
+-
+- if (!terminated)
+- {
+- managers = g_new (XSettingsManager *, n_screens + 1);
++ client = gnome_settings_daemon_get_conf_client ();
++ action (client);
+
+- for (i = 0; i < n_screens; i++)
+- {
+- GdkScreen *screen;
++ queue_action (action_number + 1);
+
+- screen = gdk_display_get_screen (display, i);
++ return FALSE;
++}
+
+- managers [i] = xsettings_manager_new (
+- gdk_x11_display_get_xdisplay (display),
+- gdk_screen_get_number (screen),
+- terminate_cb, &terminated);
+- if (!managers [i])
+- {
+- fprintf (stderr, "Could not create xsettings manager for screen %d!\n", i);
+- exit (1);
+- }
+- }
+static void
-+watch_for_xsetting_changes (void)
++queue_transaction (void)
++{
++ /* Essential - xkb initialization should happen before */
++ gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)
++ gnome_settings_load_modmap_files,
++ NULL);
+
+- g_assert (i == n_screens);
+- managers [i] = NULL;
+- }
++ /* queue first action in transaction array to run on idle and get the ball
++ * rolling (the first action will queue the second and so on)
++ */
++ queue_action (0);
++}
+
+- if (!clipboard_manager_check_running (GDK_DISPLAY_XDISPLAY (display)))
++static void
++watch_for_xsetting_changes (GConfClient *client)
+{
+ GdkDisplay *display;
+ int i;
@@ -117,79 +241,27 @@
+ n_screens = gdk_display_get_n_screens (display);
+
+ for (i = 0; i < n_screens; i++)
-+ {
+ {
+- clipboard_manager = clipboard_manager_new (GDK_DISPLAY_XDISPLAY (display),
+- gdk_error_trap_push,
+- gdk_error_trap_pop,
+- clipboard_manager_terminate_cb,
+- clipboard_manager_watch_cb,
+- NULL);
+- }
+ GdkScreen *screen;
-+
+
+- /* We use GConfClient not GConfClient because a cache isn't useful
+- * for us
+- */
+- client = gnome_settings_daemon_get_conf_client ();
+ screen = gdk_display_get_screen (display, i);
+ gdk_window_add_filter (
+ gdk_screen_get_root_window (screen),
+ manager_event_filter, GINT_TO_POINTER (i));
+ }
+}
-+
-+static void
-+watch_for_configuration_changes (GConfClient *client)
-+{
-+ GSList *list;
-+
-+ for (list = directories; list; list = list->next)
-+ {
-+ GError *error = NULL;
-+ DirElement *dir_element = list->data;
-+
-+ gconf_client_add_dir (client,
-+ dir_element->dir,
-+ GCONF_CLIENT_PRELOAD_ONELEVEL,
-+ NULL);
-+
-+ gconf_client_notify_add (client,
-+ dir_element->dir,
-+ config_notify,
-+ NULL,
-+ NULL,
-+ &error);
-+
-+ if (error)
-+ {
-+ fprintf (stderr, "Could not listen for changes to configuration in '%s': %s\n",
-+ dir_element->dir, error->message);
-+ g_error_free (error);
-+ }
-+ }
-+}
-+
-+static gboolean
-+initialize_and_load (GnomeSettingsDaemon *daemon)
-+{
-+ GObject *dbus_service;
-+
-+ dbus_service = g_object_new (gnome_settings_server_get_type (), NULL);
-+
-+ initialize_subsystems ();
-+ return FALSE;
-+}
-+
- GObject *
- gnome_settings_daemon_new (void)
- {
- gboolean terminated = FALSE;
-- GConfClient *client;
-- GSList *list;
- GnomeSettingsDaemon *daemon;
- GdkDisplay *display;
-- GObject *dbusServer;
- int i;
- int n_screens;
-
-@@ -316,86 +478,7 @@
- NULL);
- }
-- /* We use GConfClient not GConfClient because a cache isn't useful
-- * for us
-- */
-- client = gnome_settings_daemon_get_conf_client ();
--
-/* gnome_settings_disk_init (client);*/
- gnome_settings_font_init (client);
- gnome_settings_xsettings_init (client);
@@ -209,42 +281,62 @@
- gnome_settings_gtk1_theme_init (client);
- gnome_settings_xrdb_init (client);
- gnome_settings_typing_break_init (client);
--
-- for (list = directories; list; list = list->next)
-- {
-- GError *error = NULL;
-- DirElement *dir_element = list->data;
--
-- gconf_client_add_dir (client,
-- dir_element->dir,
-- GCONF_CLIENT_PRELOAD_ONELEVEL,
-- NULL);
--
-- gconf_client_notify_add (client,
-- dir_element->dir,
-- config_notify,
-- NULL,
-- NULL,
-- &error);
--
-- if (error)
-- {
-- fprintf (stderr, "Could not listen for changes to configuration in '%s': %s\n",
-- dir_element->dir, error->message);
-- g_error_free (error);
-- }
-- }
--
++static void
++watch_for_configuration_changes (GConfClient *client)
++{
++ GSList *list;
+
+ for (list = directories; list; list = list->next)
+ {
+@@ -365,37 +405,61 @@
+ g_error_free (error);
+ }
+ }
++}
+
- for (i = 0; i < n_screens; i++)
-- {
-- GdkScreen *screen;
--
-- screen = gdk_display_get_screen (display, i);
++GObject *
++gnome_settings_daemon_new (void)
++{
++ gboolean terminated = FALSE;
++ GnomeSettingsDaemon *daemon;
++ GdkDisplay *display;
++ int i;
++ int n_screens;
++
++ display = gdk_display_get_default ();
++ n_screens = gdk_display_get_n_screens (display);
++
++ if (xsettings_manager_check_running (
++ gdk_x11_display_get_xdisplay (display),
++ gdk_screen_get_number (gdk_screen_get_default ())))
++ {
++ fprintf (stderr, "You can only run one xsettings manager at a time; exiting\n");
++ exit (1);
++ }
++
++ managers = g_new (XSettingsManager *, n_screens + 1);
++
++ for (i = 0; i < n_screens; i++)
+ {
+ GdkScreen *screen;
+
+ screen = gdk_display_get_screen (display, i);
- gdk_window_add_filter (
- gdk_screen_get_root_window (screen),
- manager_event_filter, GINT_TO_POINTER (i));
-- }
--
++
++ managers [i] = xsettings_manager_new (
++ gdk_x11_display_get_xdisplay (display),
++ gdk_screen_get_number (screen),
++ terminate_cb, &terminated);
++ if (!managers [i])
++ {
++ fprintf (stderr, "Could not create xsettings manager for screen %d!\n", i);
++ exit (1);
++ }
+ }
+
-/* gnome_settings_disk_load (client);*/
- gnome_settings_font_load (client);
- gnome_settings_xsettings_load (client);
@@ -263,9 +355,21 @@
- gnome_settings_gtk1_theme_load (client);
- gnome_settings_xrdb_load (client);
- gnome_settings_typing_break_load (client);
--
++ g_assert (i == n_screens);
++ managers [i] = NULL;
++
++ if (!clipboard_manager_check_running (GDK_DISPLAY_XDISPLAY (display)))
++ {
++ clipboard_manager = clipboard_manager_new (GDK_DISPLAY_XDISPLAY (display),
++ gdk_error_trap_push,
++ gdk_error_trap_pop,
++ clipboard_manager_terminate_cb,
++ clipboard_manager_watch_cb,
++ NULL);
++ }
+
- dbusServer = g_object_new (gnome_settings_server_get_type (), NULL);
-+ g_idle_add ((GSourceFunc) initialize_and_load, daemon);
++ daemon = g_object_new (GNOME_SETTINGS_DAEMON_TYPE, NULL);
return G_OBJECT (daemon);
}
Index: control-center.spec
===================================================================
RCS file: /cvs/dist/rpms/control-center/devel/control-center.spec,v
retrieving revision 1.245
retrieving revision 1.246
diff -u -r1.245 -r1.246
--- control-center.spec 17 Apr 2007 22:21:46 -0000 1.245
+++ control-center.spec 18 Apr 2007 03:30:45 -0000 1.246
@@ -21,7 +21,7 @@
Summary: GNOME Control Center
Name: control-center
Version: 2.18.0
-Release: 12%{?dist}
+Release: 13%{?dist}
Epoch: 1
License: GPL/LGPL
Group: User Interface/Desktops
@@ -328,6 +328,9 @@
%{_libdir}/pkgconfig/*
%changelog
+* Tue Apr 17 2007 Ray Strode <rstrode at redhat.com> - 2.18.0-13
+- clean up be-more-async patch to have less repetitive code
+
* Tue Apr 17 2007 Ray Strode <rstrode at redhat.com> - 2.18.0-12
- Make theme changes work again (among other things).
Bug 236752.
More information about the fedora-cvs-commits
mailing list