Author: kelnos
Date: 2008-05-12 00:23:51 +0000 (Mon, 12 May 2008)
New Revision: 26948
Modified:
xfconf/trunk/TODO
xfconf/trunk/xfsettingsd/main.c
Log:
make xfsettingsd manage all screens
Modified: xfconf/trunk/TODO
===================================================================
--- xfconf/trunk/TODO 2008-05-12 00:17:09 UTC (rev 26947)
+++ xfconf/trunk/TODO 2008-05-12 00:23:51 UTC (rev 26948)
@@ -20,7 +20,6 @@
+ what happens if a channel isn't loaded into memory and its backing file
changes? load it and send PropertyChanged for all properties? that
could be very bad.
-* multi-screen support for xfsettingsd
* libxfce4mcs-client dummy implementation that forwards to libxfconf (?)
* maybe validate channel/prop names in libxfconf too to generate an error
without a roundtrip to the server (?)
Modified: xfconf/trunk/xfsettingsd/main.c
===================================================================
--- xfconf/trunk/xfsettingsd/main.c 2008-05-12 00:17:09 UTC (rev 26947)
+++ xfconf/trunk/xfsettingsd/main.c 2008-05-12 00:23:51 UTC (rev 26948)
@@ -39,11 +39,13 @@
#define XF_DEBUG(str) \
if (debug) g_print (str)
-gboolean version = FALSE;
-gboolean force_replace = FALSE;
-gboolean running = FALSE;
-gboolean debug = FALSE;
+static gboolean version = FALSE;
+static gboolean force_replace = FALSE;
+static gboolean running = FALSE;
+static gboolean debug = FALSE;
+static GList *registries = NULL;
+
static GOptionEntry entries[] =
{
{ "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version,
@@ -75,7 +77,10 @@
if (xsettings_registry_process_event(registry, xevent))
{
- gtk_main_quit();
+ g_object_unref(G_OBJECT(registry));
+ registries = g_list_remove(registries, registry);
+ if(!registries)
+ gtk_main_quit();
return GDK_FILTER_REMOVE;
}
else
@@ -112,8 +117,10 @@
main(int argc, char **argv)
{
GError *cli_error = NULL;
- gint screen;
- Window window = None;
+ GdkDisplay *gdpy;
+ gint n_screens, screen;
+ gboolean keep_running = FALSE;
+ XfconfChannel *channel;
xfce_textdomain(GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
@@ -133,51 +140,67 @@
return 0;
}
- xfconf_init(NULL);
+ if(!xfconf_init(&cli_error))
+ {
+ g_printerr("Failed to connect to Xfconf daemon: %s\n",
+ cli_error->message);
+ return 1;
+ }
- screen = DefaultScreen(gdk_display);
-
- running = settings_daemon_check_running(GDK_DISPLAY(),
DefaultScreen(GDK_DISPLAY()));
+ channel = xfconf_channel_new("xsettings");
- if (running)
+ gdpy = gdk_display_get_default();
+ n_screens = gdk_display_get_n_screens(gdpy);
+
+ for(screen = 0; screen < n_screens; ++screen)
{
- XF_DEBUG("XSETTINGS Daemon running\n");
- if (force_replace)
+ XSettingsRegistry *registry;
+
+ running = settings_daemon_check_running(GDK_DISPLAY_XDISPLAY(gdpy),
+ screen);
+
+ if (running)
{
- XF_DEBUG("Replacing XSETTINGS daemon\n");
+ XF_DEBUG("XSETTINGS Daemon running\n");
+ if (force_replace)
+ {
+ XF_DEBUG("Replacing XSETTINGS daemon\n");
+ keep_running = TRUE;
+ }
+ else
+ {
+ continue;
+ }
}
- else
- {
- XF_DEBUG("Aborting...\n");
- return 1;
- }
- }
- if ((running && force_replace) || (!running))
- {
- XfconfChannel *channel;
- XSettingsRegistry *registry;
-
XF_DEBUG("Initializing...\n");
- channel = xfconf_channel_new("xsettings");
-
- registry = xsettings_registry_new(channel, gdk_display, screen);
+ registry = xsettings_registry_new(channel,
+ GDK_DISPLAY_XDISPLAY(gdpy),
+ screen);
+ registries = g_list_append(registries, registry);
xsettings_registry_load(registry, debug);
xsettings_registry_notify(registry);
gdk_window_add_filter(NULL, manager_event_filter, registry);
+
+ keep_running = TRUE;
}
+ if(!keep_running)
+ {
+ XF_DEBUG("Not replacing existing XSETTINGS manager\n");
+ return 1;
+ }
+
if(!debug) /* If not in debug mode, fork to background */
{
if(!fork())
{
gtk_main();
- XDestroyWindow (gdk_display, window);
xfconf_shutdown();
}
}
@@ -185,7 +208,6 @@
{
gtk_main();
- XDestroyWindow (gdk_display, window);
xfconf_shutdown();
}
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits