Create a XSettingsManager for every available screen and apply settings

2002-11-08  Mark McLoughlin  <mark@skynet.ie>

        Create a XSettingsManager for every available
        screen and apply settings changes to each.

        * gnome-settings-daemon.c:
        (manager_event_filter): make this a per-window filter
        and ask the appropriate xsettings manager to filter
        the event.
        (finalize): dispose of every manager.
        (gnome_settings_daemon_new): create a settings manager
        for each screen.

        * gnome-settings-xsettings.c:
        (translate_bool_int), (translate_int_int),
        (translate_string_string), (process_value),
        (xsettings_callback), (xft_callback),
        (gnome_xft_settings_set_xsettings),
        (gnome_settings_xsettings_load): apply settings to
        every available settings manager.
This commit is contained in:
Mark McLoughlin 2002-11-08 03:26:33 +00:00 committed by Mark McLoughlin
parent eea6c7e6c1
commit a43af53a3f
3 changed files with 114 additions and 32 deletions

View file

@ -1,3 +1,24 @@
2002-11-08 Mark McLoughlin <mark@skynet.ie>
Create a XSettingsManager for every available
screen and apply settings changes to each.
* gnome-settings-daemon.c:
(manager_event_filter): make this a per-window filter
and ask the appropriate xsettings manager to filter
the event.
(finalize): dispose of every manager.
(gnome_settings_daemon_new): create a settings manager
for each screen.
* gnome-settings-xsettings.c:
(translate_bool_int), (translate_int_int),
(translate_string_string), (process_value),
(xsettings_callback), (xft_callback),
(gnome_xft_settings_set_xsettings),
(gnome_settings_xsettings_load): apply settings to
every available settings manager.
2002-11-02 Jody Goldberg <jody@gnome.org>
* Release 2.1.2

View file

@ -56,7 +56,7 @@ struct _GnomeSettingsDaemonPrivate {
};
static GSList *directories = NULL;
XSettingsManager *manager;
XSettingsManager **managers = NULL;
typedef struct DirElement
{
@ -129,6 +129,9 @@ terminate_cb (void *data)
{
gboolean *terminated = data;
if (*terminated)
return;
*terminated = TRUE;
gtk_main_quit ();
}
@ -138,7 +141,11 @@ manager_event_filter (GdkXEvent *xevent,
GdkEvent *event,
gpointer data)
{
if (xsettings_manager_process_event (manager, (XEvent *)xevent))
int screen_num = GPOINTER_TO_INT (data);
g_return_val_if_fail (managers != NULL, GDK_FILTER_CONTINUE);
if (xsettings_manager_process_event (managers [screen_num], (XEvent *)xevent))
return GDK_FILTER_REMOVE;
else
return GDK_FILTER_CONTINUE;
@ -160,13 +167,15 @@ static void
finalize (GObject *object)
{
GnomeSettingsDaemon *daemon;
int i;
daemon = GNOME_SETTINGS_DAEMON (object);
if (daemon->private == NULL) {
return;
}
xsettings_manager_destroy (manager);
for (i = 0; managers && managers [i]; i++)
xsettings_manager_destroy (managers [i]);
g_free (daemon->private);
daemon->private = NULL;
@ -204,10 +213,18 @@ gnome_settings_daemon_new (void)
GConfClient *client;
GSList *list;
GnomeSettingsDaemon *daemon;
GdkDisplay *display;
int i;
int n_screens;
display = gdk_display_get_default ();
n_screens = gdk_display_get_n_screens (display);
daemon = g_object_new (gnome_settings_daemon_get_type (), NULL);
if (xsettings_manager_check_running (gdk_display, DefaultScreen (gdk_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);
@ -215,13 +232,27 @@ gnome_settings_daemon_new (void)
if (!terminated)
{
manager = xsettings_manager_new (gdk_display, DefaultScreen (gdk_display),
terminate_cb, &terminated);
if (!manager)
{
fprintf (stderr, "Could not create xsettings manager!\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);
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);
}
}
g_assert (i == n_screens);
managers [i] = NULL;
}
/* We use GConfClient not GConfClient because a cache isn't useful
@ -267,7 +298,15 @@ gnome_settings_daemon_new (void)
}
}
gdk_window_add_filter (NULL, manager_event_filter, NULL);
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));
}
/* gnome_settings_disk_load (client);*/
gnome_settings_font_load (client);

View file

@ -13,7 +13,7 @@
#include "gnome-settings-xsettings.h"
#include "xsettings-manager.h"
extern XSettingsManager *manager;
extern XSettingsManager **managers;
#ifdef HAVE_XFT2
#define FONT_RENDER_DIR "/desktop/gnome/font_rendering"
@ -44,31 +44,40 @@ static void
translate_bool_int (TranslationEntry *trans,
GConfValue *value)
{
int i;
g_assert (value->type == trans->gconf_type);
xsettings_manager_set_int (manager, trans->xsetting_name,
gconf_value_get_bool (value));
for (i = 0; managers [i]; i++)
xsettings_manager_set_int (managers [i], trans->xsetting_name,
gconf_value_get_bool (value));
}
static void
translate_int_int (TranslationEntry *trans,
GConfValue *value)
{
int i;
g_assert (value->type == trans->gconf_type);
xsettings_manager_set_int (manager, trans->xsetting_name,
gconf_value_get_int (value));
for (i = 0; managers [i]; i++)
xsettings_manager_set_int (managers [i], trans->xsetting_name,
gconf_value_get_int (value));
}
static void
translate_string_string (TranslationEntry *trans,
GConfValue *value)
{
int i;
g_assert (value->type == trans->gconf_type);
xsettings_manager_set_string (manager,
trans->xsetting_name,
gconf_value_get_string (value));
for (i = 0; managers [i]; i++)
xsettings_manager_set_string (managers [i],
trans->xsetting_name,
gconf_value_get_string (value));
}
static TranslationEntry translations [] = {
@ -159,7 +168,10 @@ process_value (TranslationEntry *trans,
{
if (val == NULL)
{
xsettings_manager_delete_setting (manager, trans->xsetting_name);
int i;
for (i = 0; managers [i]; i++)
xsettings_manager_delete_setting (managers [i], trans->xsetting_name);
}
else
{
@ -181,14 +193,16 @@ static void
xsettings_callback (GConfEntry *entry)
{
TranslationEntry *trans;
trans = find_translation_entry (entry->key);
int i;
trans = find_translation_entry (entry->key);
if (trans == NULL)
return;
process_value (trans, entry->value);
xsettings_manager_notify (manager);
for (i = 0; managers [i]; i++)
xsettings_manager_notify (managers [i]);
}
void
@ -208,11 +222,14 @@ static void
xft_callback (GConfEntry *entry)
{
GConfClient *client;
int i;
client = gconf_client_get_default ();
gnome_settings_update_xft (client);
xsettings_manager_notify (manager);
for (i = 0; managers [i]; i++)
xsettings_manager_notify (managers [i]);
}
typedef struct
@ -320,11 +337,15 @@ gnome_xft_settings_get (GConfClient *client,
static void
gnome_xft_settings_set_xsettings (GnomeXftSettings *settings)
{
xsettings_manager_set_int (manager, "Xft/Antialias", settings->antialias);
xsettings_manager_set_int (manager, "Xft/Hinting", settings->hinting);
xsettings_manager_set_string (manager, "Xft/HintStyle", settings->hintstyle);
xsettings_manager_set_int (manager, "Xft/DPI", settings->dpi);
xsettings_manager_set_string (manager, "Xft/RGBA", settings->rgba);
int i;
for (i = 0; managers [i]; i++)
{
xsettings_manager_set_int (managers [i], "Xft/Antialias", settings->antialias);
xsettings_manager_set_int (managers [i], "Xft/Hinting", settings->hinting);
xsettings_manager_set_string (managers [i], "Xft/HintStyle", settings->hintstyle);
xsettings_manager_set_int (managers [i], "Xft/DPI", settings->dpi);
xsettings_manager_set_string (managers [i], "Xft/RGBA", settings->rgba);
}
}
/*
@ -509,5 +530,6 @@ gnome_settings_xsettings_load (GConfClient *client)
gnome_settings_update_xft (client);
#endif /* HAVE_XFT */
xsettings_manager_notify (manager);
for (i = 0; managers [i]; i++)
xsettings_manager_notify (managers [i]);
}