changed to use the new GnomeSettingsModule class for loadable modules.
2007-05-08 Rodrigo Moya <rodrigo@gnome-db.org> * gnome-settings-background.c: changed to use the new GnomeSettingsModule class for loadable modules. * gnome-settings-daemon.c (initialize_modules, start_modules, stop_modules): new functions to call modules's methods. (gnome_settings_daemon_init): get all module types and create objects from each of them. (gnome_settings_daemon_new): added code to call loadable modules's methods where appropriate. svn path=/trunk/; revision=7580
This commit is contained in:
parent
1cf628cbef
commit
55b39ed23a
5 changed files with 292 additions and 81 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2007-05-08 Rodrigo Moya <rodrigo@gnome-db.org>
|
||||||
|
|
||||||
|
* gnome-settings-background.c: changed to use the new GnomeSettingsModule
|
||||||
|
class for loadable modules.
|
||||||
|
|
||||||
|
* gnome-settings-daemon.c (initialize_modules, start_modules,
|
||||||
|
stop_modules): new functions to call modules's methods.
|
||||||
|
(gnome_settings_daemon_init): get all module types and create objects
|
||||||
|
from each of them.
|
||||||
|
(gnome_settings_daemon_new): added code to call loadable modules's
|
||||||
|
methods where appropriate.
|
||||||
|
|
||||||
|
2007-04-24 Rodrigo Moya <rodrigo@gnome-db.org>
|
||||||
|
|
||||||
|
* gnome-settings-module.h: added missing prototype.
|
||||||
|
|
||||||
2007-04-23 Rodrigo Moya <rodrigo@gnome-db.org>
|
2007-04-23 Rodrigo Moya <rodrigo@gnome-db.org>
|
||||||
|
|
||||||
* gnome-settings-module.[ch] (gnome_settings_module_get_runlevel):
|
* gnome-settings-module.[ch] (gnome_settings_module_get_runlevel):
|
||||||
|
|
|
@ -31,72 +31,160 @@
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
#include <gconf/gconf.h>
|
#include <gconf/gconf.h>
|
||||||
|
|
||||||
#include "gnome-settings-background.h"
|
|
||||||
#include "gnome-settings-keyboard.h"
|
#include "gnome-settings-keyboard.h"
|
||||||
|
#include "gnome-settings-module.h"
|
||||||
#include "gnome-settings-daemon.h"
|
#include "gnome-settings-daemon.h"
|
||||||
|
|
||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
#include "applier.h"
|
#include "applier.h"
|
||||||
|
|
||||||
static BGApplier **bg_appliers;
|
G_BEGIN_DECLS
|
||||||
static BGPreferences *prefs;
|
|
||||||
|
|
||||||
static guint applier_idle_id = 0;
|
typedef struct _GnomeSettingsModuleBackground GnomeSettingsModuleBackground;
|
||||||
|
typedef struct _GnomeSettingsModuleBackgroundClass GnomeSettingsModuleBackgroundClass;
|
||||||
|
|
||||||
|
struct _GnomeSettingsModuleBackground {
|
||||||
|
GnomeSettingsModule parent;
|
||||||
|
|
||||||
|
BGApplier **bg_appliers;
|
||||||
|
BGPreferences *prefs;
|
||||||
|
guint applier_idle_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _GnomeSettingsModuleBackgroundClass {
|
||||||
|
GnomeSettingsModuleClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void gnome_settings_module_background_class_init (GnomeSettingsModuleBackgroundClass *klass);
|
||||||
|
static void gnome_settings_module_background_init (GnomeSettingsModuleBackground *module);
|
||||||
|
static gboolean gnome_settings_module_background_initialize (GnomeSettingsModule *module, GConfClient *client);
|
||||||
|
static gboolean gnome_settings_module_background_start (GnomeSettingsModule *module);
|
||||||
|
static GnomeSettingsModuleRunlevel gnome_settings_module_background_get_runlevel (GnomeSettingsModule *module);
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
applier_idle (gpointer data)
|
applier_idle (gpointer data)
|
||||||
{
|
{
|
||||||
|
GnomeSettingsModuleBackground *module;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; bg_appliers [i]; i++)
|
|
||||||
bg_applier_apply_prefs (bg_appliers [i], prefs);
|
module = (GnomeSettingsModuleBackground *) data;
|
||||||
applier_idle_id = 0;
|
|
||||||
|
for (i = 0; module->bg_appliers [i]; i++)
|
||||||
|
bg_applier_apply_prefs (module->bg_appliers [i], module->prefs);
|
||||||
|
module->applier_idle_id = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
background_callback (GConfEntry *entry)
|
background_callback (GConfClient *client,
|
||||||
|
guint cnxn_id,
|
||||||
|
GConfEntry *entry,
|
||||||
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
bg_preferences_merge_entry (prefs, entry);
|
GnomeSettingsModuleBackground *module_bg;
|
||||||
|
|
||||||
|
module_bg = (GnomeSettingsModuleBackground *) user_data;
|
||||||
|
|
||||||
|
bg_preferences_merge_entry (module_bg->prefs, entry);
|
||||||
|
|
||||||
if (applier_idle_id != 0) {
|
if (module_bg->applier_idle_id != 0) {
|
||||||
g_source_remove (applier_idle_id);
|
g_source_remove (module_bg->applier_idle_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
applier_idle_id = g_timeout_add (100, applier_idle, NULL);
|
module_bg->applier_idle_id = g_timeout_add (100, applier_idle, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
gnome_settings_background_init (GConfClient *client)
|
gnome_settings_module_background_class_init (GnomeSettingsModuleBackgroundClass *klass)
|
||||||
{
|
{
|
||||||
|
GnomeSettingsModuleClass *module_class;
|
||||||
|
|
||||||
|
module_class = (GnomeSettingsModuleClass *) klass;
|
||||||
|
module_class->initialize = gnome_settings_module_background_initialize;
|
||||||
|
module_class->start = gnome_settings_module_background_start;
|
||||||
|
module_class->get_runlevel = gnome_settings_module_background_get_runlevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnome_settings_module_background_init (GnomeSettingsModuleBackground *module)
|
||||||
|
{
|
||||||
|
module->applier_idle_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
gnome_settings_module_background_get_type (void)
|
||||||
|
{
|
||||||
|
static GType module_type = 0;
|
||||||
|
|
||||||
|
if (!module_type) {
|
||||||
|
static const GTypeInfo module_info = {
|
||||||
|
sizeof (GnomeSettingsModuleBackgroundClass),
|
||||||
|
NULL, /* base_init */
|
||||||
|
NULL, /* base_finalize */
|
||||||
|
(GClassInitFunc) gnome_settings_module_background_class_init,
|
||||||
|
NULL, /* class_finalize */
|
||||||
|
NULL, /* class_data */
|
||||||
|
sizeof (GnomeSettingsModuleBackground),
|
||||||
|
0, /* n_preallocs */
|
||||||
|
(GInstanceInitFunc) gnome_settings_module_background_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
module_type = g_type_register_static (G_TYPE_OBJECT,
|
||||||
|
"GnomeSettingsModuleBackground",
|
||||||
|
&module_info, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return module_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gnome_settings_module_background_initialize (GnomeSettingsModule *module,
|
||||||
|
GConfClient *client)
|
||||||
|
{
|
||||||
|
GnomeSettingsModuleBackground *module_bg;
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
int n_screens;
|
int n_screens;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
module_bg = (GnomeSettingsModuleBackground *) module;
|
||||||
display = gdk_display_get_default ();
|
display = gdk_display_get_default ();
|
||||||
n_screens = gdk_display_get_n_screens (display);
|
n_screens = gdk_display_get_n_screens (display);
|
||||||
|
|
||||||
bg_appliers = g_new (BGApplier *, n_screens + 1);
|
module_bg->bg_appliers = g_new (BGApplier *, n_screens + 1);
|
||||||
|
|
||||||
for (i = 0; i < n_screens; i++) {
|
for (i = 0; i < n_screens; i++) {
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
|
|
||||||
screen = gdk_display_get_screen (display, i);
|
screen = gdk_display_get_screen (display, i);
|
||||||
|
|
||||||
bg_appliers [i] = BG_APPLIER (bg_applier_new_for_screen (BG_APPLIER_ROOT, screen));
|
module_bg->bg_appliers [i] = BG_APPLIER (bg_applier_new_for_screen (BG_APPLIER_ROOT, screen));
|
||||||
}
|
}
|
||||||
bg_appliers [i] = NULL;
|
module_bg->bg_appliers [i] = NULL;
|
||||||
|
|
||||||
prefs = BG_PREFERENCES (bg_preferences_new ());
|
module_bg->prefs = BG_PREFERENCES (bg_preferences_new ());
|
||||||
bg_preferences_load (prefs);
|
bg_preferences_load (module_bg->prefs);
|
||||||
|
|
||||||
gnome_settings_register_config_callback ("/desktop/gnome/background", background_callback);
|
gconf_client_notify_add (client,
|
||||||
|
"/desktop/gnome/background",
|
||||||
|
background_callback,
|
||||||
|
module,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static gboolean
|
||||||
gnome_settings_background_load (GConfClient *client)
|
gnome_settings_module_background_start (GnomeSettingsModule *module)
|
||||||
{
|
{
|
||||||
|
GnomeSettingsModuleBackground *module_bg;
|
||||||
|
GConfClient *client;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
module_bg = (GnomeSettingsModuleBackground *) module;
|
||||||
|
client = gnome_settings_module_get_config_client (module);
|
||||||
|
|
||||||
/* If this is set, nautilus will draw the background and is
|
/* If this is set, nautilus will draw the background and is
|
||||||
* almost definitely in our session. however, it may not be
|
* almost definitely in our session. however, it may not be
|
||||||
* running yet (so is_nautilus_running() will fail). so, on
|
* running yet (so is_nautilus_running() will fail). so, on
|
||||||
|
@ -106,8 +194,16 @@ gnome_settings_background_load (GConfClient *client)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (gconf_client_get_bool (client, "/apps/nautilus/preferences/show_desktop", NULL))
|
if (gconf_client_get_bool (client, "/apps/nautilus/preferences/show_desktop", NULL))
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
for (i = 0; bg_appliers [i]; i++)
|
for (i = 0; module_bg->bg_appliers [i]; i++)
|
||||||
bg_applier_apply_prefs (bg_appliers [i], prefs);
|
bg_applier_apply_prefs (module_bg->bg_appliers [i], module_bg->prefs);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GnomeSettingsModuleRunlevel
|
||||||
|
gnome_settings_module_background_get_runlevel (GnomeSettingsModule *module)
|
||||||
|
{
|
||||||
|
return GNOME_SETTINGS_MODULE_RUNLEVEL_GNOME_SETTINGS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include "xsettings-manager.h"
|
#include "xsettings-manager.h"
|
||||||
#include "gnome-settings-daemon.h"
|
#include "gnome-settings-daemon.h"
|
||||||
|
#include "gnome-settings-module.h"
|
||||||
#include "gnome-settings-xmodmap.h"
|
#include "gnome-settings-xmodmap.h"
|
||||||
|
|
||||||
/*#include "gnome-settings-disk.h"*/
|
/*#include "gnome-settings-disk.h"*/
|
||||||
|
@ -56,7 +57,7 @@
|
||||||
static GObjectClass *parent_class = NULL;
|
static GObjectClass *parent_class = NULL;
|
||||||
|
|
||||||
struct _GnomeSettingsDaemonPrivate {
|
struct _GnomeSettingsDaemonPrivate {
|
||||||
int dummy;
|
GHashTable *loaded_modules;
|
||||||
};
|
};
|
||||||
|
|
||||||
XSettingsManager **managers = NULL;
|
XSettingsManager **managers = NULL;
|
||||||
|
@ -65,7 +66,7 @@ static ClipboardManager *clipboard_manager;
|
||||||
static void
|
static void
|
||||||
clipboard_manager_terminate_cb (void *data)
|
clipboard_manager_terminate_cb (void *data)
|
||||||
{
|
{
|
||||||
/* Do nothing */
|
/* Do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkFilterReturn
|
static GdkFilterReturn
|
||||||
|
@ -73,11 +74,11 @@ clipboard_manager_event_filter (GdkXEvent *xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
if (clipboard_manager_process_event (clipboard_manager,
|
if (clipboard_manager_process_event (clipboard_manager,
|
||||||
(XEvent *)xevent))
|
(XEvent *)xevent))
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
else
|
else
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -86,40 +87,37 @@ clipboard_manager_watch_cb (Window window,
|
||||||
long mask,
|
long mask,
|
||||||
void *cb_data)
|
void *cb_data)
|
||||||
{
|
{
|
||||||
GdkWindow *gdkwin;
|
GdkWindow *gdkwin;
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
|
|
||||||
display = gdk_display_get_default ();
|
display = gdk_display_get_default ();
|
||||||
gdkwin = gdk_window_lookup_for_display (display, window);
|
gdkwin = gdk_window_lookup_for_display (display, window);
|
||||||
|
|
||||||
if (is_start)
|
if (is_start) {
|
||||||
{
|
if (!gdkwin)
|
||||||
if (!gdkwin)
|
gdkwin = gdk_window_foreign_new_for_display (display, window);
|
||||||
gdkwin = gdk_window_foreign_new_for_display (display, window);
|
else
|
||||||
else
|
g_object_ref (gdkwin);
|
||||||
g_object_ref (gdkwin);
|
|
||||||
|
|
||||||
gdk_window_add_filter (gdkwin, clipboard_manager_event_filter, NULL);
|
gdk_window_add_filter (gdkwin, clipboard_manager_event_filter, NULL);
|
||||||
}
|
} else {
|
||||||
else
|
if (!gdkwin)
|
||||||
{
|
return;
|
||||||
if (!gdkwin)
|
gdk_window_remove_filter (gdkwin, clipboard_manager_event_filter, NULL);
|
||||||
return;
|
g_object_unref (gdkwin);
|
||||||
gdk_window_remove_filter (gdkwin, clipboard_manager_event_filter, NULL);
|
}
|
||||||
g_object_unref (gdkwin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
terminate_cb (void *data)
|
terminate_cb (void *data)
|
||||||
{
|
{
|
||||||
gboolean *terminated = data;
|
gboolean *terminated = data;
|
||||||
|
|
||||||
if (*terminated)
|
if (*terminated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
*terminated = TRUE;
|
*terminated = TRUE;
|
||||||
gtk_main_quit ();
|
gtk_main_quit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkFilterReturn
|
static GdkFilterReturn
|
||||||
|
@ -127,34 +125,89 @@ manager_event_filter (GdkXEvent *xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
int screen_num = GPOINTER_TO_INT (data);
|
int screen_num = GPOINTER_TO_INT (data);
|
||||||
|
|
||||||
g_return_val_if_fail (managers != NULL, GDK_FILTER_CONTINUE);
|
g_return_val_if_fail (managers != NULL, GDK_FILTER_CONTINUE);
|
||||||
|
|
||||||
if (xsettings_manager_process_event (managers [screen_num], (XEvent *)xevent))
|
if (xsettings_manager_process_event (managers [screen_num], (XEvent *)xevent))
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
else
|
else
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_modules_list (gpointer data)
|
||||||
|
{
|
||||||
|
GList *l = (GList *) data;
|
||||||
|
|
||||||
|
while (l) {
|
||||||
|
g_object_unref (G_OBJECT (l->data));
|
||||||
|
l = g_list_remove (l, l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
initialize_modules (GnomeSettingsDaemon *daemon, GnomeSettingsModuleRunlevel runlevel)
|
||||||
|
{
|
||||||
|
GList *l, *module_list;
|
||||||
|
GConfClient *client;
|
||||||
|
|
||||||
|
client = gnome_settings_get_config_client ();
|
||||||
|
|
||||||
|
module_list = g_hash_table_lookup (daemon->priv->loaded_modules, &runlevel);
|
||||||
|
for (l = module_list; l != NULL; l = l->next) {
|
||||||
|
gnome_settings_module_initialize (GNOME_SETTINGS_MODULE (l->data), client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
start_modules (GnomeSettingsDaemon *daemon, GnomeSettingsModuleRunlevel runlevel)
|
||||||
|
{
|
||||||
|
GList *l, *module_list;
|
||||||
|
|
||||||
|
module_list = g_hash_table_lookup (daemon->priv->loaded_modules, &runlevel);
|
||||||
|
for (l = module_list; l != NULL; l = l->next)
|
||||||
|
gnome_settings_module_start (GNOME_SETTINGS_MODULE (l->data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stop_modules (GnomeSettingsDaemon *daemon, GnomeSettingsModuleRunlevel runlevel)
|
||||||
|
{
|
||||||
|
GList *l, *module_list;
|
||||||
|
|
||||||
|
module_list = g_hash_table_lookup (daemon->priv->loaded_modules, &runlevel);
|
||||||
|
for (l = module_list; l != NULL; l = l->next)
|
||||||
|
gnome_settings_module_stop (GNOME_SETTINGS_MODULE (l->data));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
finalize (GObject *object)
|
finalize (GObject *object)
|
||||||
{
|
{
|
||||||
GnomeSettingsDaemon *daemon;
|
GnomeSettingsDaemon *daemon;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
daemon = GNOME_SETTINGS_DAEMON (object);
|
daemon = GNOME_SETTINGS_DAEMON (object);
|
||||||
if (daemon->private == NULL) {
|
if (daemon->priv == NULL)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; managers && managers [i]; i++)
|
for (i = 0; managers && managers [i]; i++)
|
||||||
xsettings_manager_destroy (managers [i]);
|
xsettings_manager_destroy (managers [i]);
|
||||||
|
|
||||||
clipboard_manager_destroy (clipboard_manager);
|
clipboard_manager_destroy (clipboard_manager);
|
||||||
|
|
||||||
g_free (daemon->private);
|
if (daemon->priv->loaded_modules) {
|
||||||
daemon->private = NULL;
|
/* call _stop method on modules, in runlevel-descending order */
|
||||||
|
stop_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_SERVICES);
|
||||||
|
stop_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_CORE_SERVICES);
|
||||||
|
stop_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_GNOME_SETTINGS);
|
||||||
|
stop_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_XSETTINGS);
|
||||||
|
|
||||||
|
g_hash_table_destroy (daemon->priv->loaded_modules);
|
||||||
|
daemon->priv->loaded_modules = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (daemon->priv);
|
||||||
|
daemon->priv = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -162,30 +215,64 @@ finalize (GObject *object)
|
||||||
static void
|
static void
|
||||||
gnome_settings_daemon_class_init (GnomeSettingsDaemonClass *klass)
|
gnome_settings_daemon_class_init (GnomeSettingsDaemonClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class;
|
GObjectClass *object_class;
|
||||||
|
|
||||||
object_class = G_OBJECT_CLASS (klass);
|
object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
object_class->finalize = finalize;
|
object_class->finalize = finalize;
|
||||||
|
|
||||||
parent_class = g_type_class_peek_parent (klass);
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnome_settings_daemon_init (GnomeSettingsDaemon *settings)
|
gnome_settings_daemon_init (GnomeSettingsDaemon *settings)
|
||||||
{
|
{
|
||||||
settings->private = g_new (GnomeSettingsDaemonPrivate, 1);
|
GType *module_types;
|
||||||
|
guint n_children;
|
||||||
|
|
||||||
|
settings->priv = g_new (GnomeSettingsDaemonPrivate, 1);
|
||||||
|
|
||||||
|
/* register all internal modules types */
|
||||||
|
if (!gnome_settings_module_background_get_type ())
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* create hash table for loaded modules */
|
||||||
|
settings->priv->loaded_modules = g_hash_table_new_full (g_int_hash, g_int_equal, NULL, free_modules_list);
|
||||||
|
|
||||||
|
module_types = g_type_children (GNOME_SETTINGS_TYPE_MODULE, &n_children);
|
||||||
|
if (module_types) {
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < n_children; i++) {
|
||||||
|
GObject *module;
|
||||||
|
GnomeSettingsModuleRunlevel runlevel;
|
||||||
|
GList *module_list;
|
||||||
|
|
||||||
|
module = g_object_new (module_types[i], NULL);
|
||||||
|
if (!module)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
runlevel = gnome_settings_module_get_runlevel (GNOME_SETTINGS_MODULE (module));
|
||||||
|
module_list = g_hash_table_lookup (settings->priv->loaded_modules, &runlevel);
|
||||||
|
if (module_list)
|
||||||
|
module_list = g_list_append (module_list, module);
|
||||||
|
else {
|
||||||
|
module_list = g_list_append (NULL, module);
|
||||||
|
g_hash_table_insert (settings->priv->loaded_modules, &runlevel, module_list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (module_types);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
G_DEFINE_TYPE (GnomeSettingsDaemon, gnome_settings_daemon,
|
G_DEFINE_TYPE (GnomeSettingsDaemon, gnome_settings_daemon, G_TYPE_OBJECT)
|
||||||
G_TYPE_OBJECT)
|
|
||||||
|
|
||||||
GObject *
|
GObject *
|
||||||
gnome_settings_daemon_new (void)
|
gnome_settings_daemon_new (void)
|
||||||
{
|
{
|
||||||
gboolean terminated = FALSE;
|
gboolean terminated = FALSE;
|
||||||
GConfClient *client;
|
GConfClient *client;
|
||||||
GSList *list;
|
|
||||||
GnomeSettingsDaemon *daemon;
|
GnomeSettingsDaemon *daemon;
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GObject *dbusServer;
|
GObject *dbusServer;
|
||||||
|
@ -252,12 +339,17 @@ gnome_settings_daemon_new (void)
|
||||||
gnome_settings_accessibility_keyboard_init (client);
|
gnome_settings_accessibility_keyboard_init (client);
|
||||||
gnome_settings_screensaver_init (client);
|
gnome_settings_screensaver_init (client);
|
||||||
gnome_settings_default_editor_init (client);
|
gnome_settings_default_editor_init (client);
|
||||||
gnome_settings_background_init (client);
|
|
||||||
gnome_settings_keybindings_init (client);
|
gnome_settings_keybindings_init (client);
|
||||||
gnome_settings_gtk1_theme_init (client);
|
gnome_settings_gtk1_theme_init (client);
|
||||||
gnome_settings_xrdb_init (client);
|
gnome_settings_xrdb_init (client);
|
||||||
gnome_settings_typing_break_init (client);
|
gnome_settings_typing_break_init (client);
|
||||||
|
|
||||||
|
/* load all modules */
|
||||||
|
initialize_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_XSETTINGS);
|
||||||
|
initialize_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_GNOME_SETTINGS);
|
||||||
|
initialize_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_CORE_SERVICES);
|
||||||
|
initialize_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_SERVICES);
|
||||||
|
|
||||||
for (i = 0; i < n_screens; i++) {
|
for (i = 0; i < n_screens; i++) {
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
|
|
||||||
|
@ -280,12 +372,18 @@ gnome_settings_daemon_new (void)
|
||||||
gnome_settings_accessibility_keyboard_load (client);
|
gnome_settings_accessibility_keyboard_load (client);
|
||||||
gnome_settings_screensaver_load (client);
|
gnome_settings_screensaver_load (client);
|
||||||
gnome_settings_default_editor_load (client);
|
gnome_settings_default_editor_load (client);
|
||||||
gnome_settings_background_load (client);
|
|
||||||
gnome_settings_keybindings_load (client);
|
gnome_settings_keybindings_load (client);
|
||||||
gnome_settings_gtk1_theme_load (client);
|
gnome_settings_gtk1_theme_load (client);
|
||||||
gnome_settings_xrdb_load (client);
|
gnome_settings_xrdb_load (client);
|
||||||
gnome_settings_typing_break_load (client);
|
gnome_settings_typing_break_load (client);
|
||||||
|
|
||||||
|
/* start all modules */
|
||||||
|
start_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_XSETTINGS);
|
||||||
|
start_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_GNOME_SETTINGS);
|
||||||
|
start_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_CORE_SERVICES);
|
||||||
|
start_modules (daemon, GNOME_SETTINGS_MODULE_RUNLEVEL_SERVICES);
|
||||||
|
|
||||||
|
/* create DBus server */
|
||||||
dbusServer = g_object_new (gnome_settings_server_get_type (), NULL);
|
dbusServer = g_object_new (gnome_settings_server_get_type (), NULL);
|
||||||
|
|
||||||
return G_OBJECT (daemon);
|
return G_OBJECT (daemon);
|
||||||
|
|
|
@ -43,7 +43,7 @@ typedef struct _GnomeSettingsDaemonPrivate GnomeSettingsDaemonPrivate;
|
||||||
|
|
||||||
struct _GnomeSettingsDaemon {
|
struct _GnomeSettingsDaemon {
|
||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
GnomeSettingsDaemonPrivate *private;
|
GnomeSettingsDaemonPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GnomeSettingsDaemonClass {
|
struct _GnomeSettingsDaemonClass {
|
||||||
|
|
|
@ -76,8 +76,9 @@ gboolean gnome_settings_module_start (GnomeSettingsModule *module);
|
||||||
gboolean gnome_settings_module_stop (GnomeSettingsModule *module);
|
gboolean gnome_settings_module_stop (GnomeSettingsModule *module);
|
||||||
gboolean gnome_settings_module_reload_settings (GnomeSettingsModule *module);
|
gboolean gnome_settings_module_reload_settings (GnomeSettingsModule *module);
|
||||||
|
|
||||||
GConfClient *gnome_settings_module_get_config_client (GnomeSettingsModule *module);
|
GnomeSettingsModuleRunlevel gnome_settings_module_get_runlevel (GnomeSettingsModule *module);
|
||||||
GnomeSettingsModuleStatus gnome_settings_module_get_status (GnomeSettingsModule *module);
|
GConfClient *gnome_settings_module_get_config_client (GnomeSettingsModule *module);
|
||||||
|
GnomeSettingsModuleStatus gnome_settings_module_get_status (GnomeSettingsModule *module);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue