From 9bf1996a30dfa3d4528490e57e6887ead0958044 Mon Sep 17 00:00:00 2001 From: Bradford Hovinen Date: Wed, 25 Apr 2001 01:00:46 +0000 Subject: [PATCH] Support --location 2001-04-24 Bradford Hovinen * capplets/*/main.c: * capplets/*/preferences.c: Support --location * capplets/Makefile.am: Compile in screensaver properties --- capplets/Makefile.am | 2 +- capplets/background/main.c | 57 +++++++++++---- capplets/background/preferences.c | 22 +++--- capplets/background/preferences.h | 2 +- capplets/keyboard/main.c | 52 +++++++++---- capplets/keyboard/preferences.c | 4 +- capplets/keyboard/preferences.h | 2 +- capplets/mouse/main.c | 52 +++++++++---- capplets/mouse/preferences.c | 4 +- capplets/mouse/preferences.h | 2 +- capplets/screensaver/main.c | 105 ++++++++++++++++++--------- capplets/screensaver/preferences.h | 2 +- capplets/sound/main.c | 52 +++++++++---- capplets/sound/preferences.c | 4 +- capplets/sound/preferences.h | 2 +- capplets/ui-properties/main.c | 46 ++++++++---- capplets/ui-properties/preferences.c | 4 +- capplets/ui-properties/preferences.h | 2 +- 18 files changed, 283 insertions(+), 133 deletions(-) diff --git a/capplets/Makefile.am b/capplets/Makefile.am index f918998ab..b8f03e21f 100644 --- a/capplets/Makefile.am +++ b/capplets/Makefile.am @@ -1,5 +1,5 @@ always_built_SUBDIRS = desktop-links \ - new-background-properties \ + new-background-properties new-screensaver-properties \ theme-switcher new-sound-properties new-bell-properties \ new-ui-properties url-properties gnome-edit-properties \ session-properties wm-properties new-keyboard-properties \ diff --git a/capplets/background/main.c b/capplets/background/main.c index 7dcdcec4e..cac016511 100644 --- a/capplets/background/main.c +++ b/capplets/background/main.c @@ -48,15 +48,21 @@ static PrefsWidget *prefs_widget; static guint ok_handler_id; static guint cancel_handler_id; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "background-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -67,8 +73,11 @@ store_archive_data (void) static void ok_cb (GtkWidget *widget) { - preferences_save (prefs); - preferences_apply_now (prefs); + if (!outside_location) { + preferences_save (prefs); + preferences_apply_now (prefs); + } + gtk_signal_disconnect (GTK_OBJECT (prefs_widget), ok_handler_id); gtk_signal_disconnect (GTK_OBJECT (prefs_widget), cancel_handler_id); gtk_object_destroy (GTK_OBJECT (prefs_widget)); @@ -78,8 +87,11 @@ ok_cb (GtkWidget *widget) static void cancel_cb (GtkWidget *widget) { - preferences_save (old_prefs); - preferences_apply_now (old_prefs); + if (!outside_location) { + preferences_save (old_prefs); + preferences_apply_now (old_prefs); + } + gtk_signal_disconnect (GTK_OBJECT (prefs_widget), ok_handler_id); gtk_signal_disconnect (GTK_OBJECT (prefs_widget), cancel_handler_id); gtk_object_destroy (GTK_OBJECT (prefs_widget)); @@ -118,17 +130,18 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { - Preferences *prefs; xmlDocPtr doc; char *buffer = NULL; int len = 0; + int bytes_read; while (!feof (stdin)) { if (!len) buffer = g_new (char, 16384); else buffer = g_renew (char, buffer, len + 16384); - fread (buffer + len, 1, 16384, stdin); + bytes_read = fread (buffer + len, 1, 16384, stdin); + buffer[len + bytes_read] = '\0'; len += 16384; } @@ -138,7 +151,9 @@ do_set_xml (void) if (prefs) { preferences_save (prefs); - preferences_apply_now (prefs); + + if (apply_settings) + preferences_apply_now (prefs); } else { g_warning ("Error while reading the screensaver config file"); } @@ -176,7 +191,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } else if (res == 5) { @@ -212,10 +227,22 @@ main (int argc, char **argv) gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-ccbackground.png"); - prefs = PREFERENCES (preferences_new ()); - preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token || res == 1) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + preferences_freeze (prefs); + } else { + outside_location = FALSE; + prefs = PREFERENCES (preferences_new ()); + preferences_load (prefs); + } + + if (!outside_location && (token || res == 1)) { preferences_apply_now (prefs); } diff --git a/capplets/background/preferences.c b/capplets/background/preferences.c index b756f3c7d..0704aeb3b 100644 --- a/capplets/background/preferences.c +++ b/capplets/background/preferences.c @@ -29,6 +29,7 @@ #include #include +#include #include "preferences.h" #include "applier.h" @@ -307,15 +308,18 @@ preferences_save (Preferences *prefs) void preferences_changed (Preferences *prefs) { - if (prefs->frozen) return; + /* FIXME: This is a really horrible kludge... */ + if (prefs->frozen > 1) return; - if (prefs->timeout_id) - gtk_timeout_remove (prefs->timeout_id); + if (prefs->frozen == 0) { + if (prefs->timeout_id) + gtk_timeout_remove (prefs->timeout_id); - if (prefs->auto_apply) - prefs->timeout_id = - gtk_timeout_add (2000, (GtkFunction) apply_timeout_cb, - prefs); + if (prefs->auto_apply) + prefs->timeout_id = + gtk_timeout_add + (2000, (GtkFunction) apply_timeout_cb, prefs); + } applier_apply_prefs (applier, prefs, FALSE, TRUE); } @@ -346,13 +350,13 @@ preferences_apply_preview (Preferences *prefs) void preferences_freeze (Preferences *prefs) { - prefs->frozen = TRUE; + prefs->frozen++; } void preferences_thaw (Preferences *prefs) { - prefs->frozen = FALSE; + if (prefs->frozen > 0) prefs->frozen--; } Preferences * diff --git a/capplets/background/preferences.h b/capplets/background/preferences.h index ea6ef4867..2fe8f92f1 100644 --- a/capplets/background/preferences.h +++ b/capplets/background/preferences.h @@ -48,7 +48,7 @@ struct _Preferences { GtkObject object; - gboolean frozen; + gint frozen; gboolean auto_apply; guint timeout_id; diff --git a/capplets/keyboard/main.c b/capplets/keyboard/main.c index 200a21c6d..71c0a76a3 100644 --- a/capplets/keyboard/main.c +++ b/capplets/keyboard/main.c @@ -45,15 +45,21 @@ static Preferences *prefs; static Preferences *old_prefs; static PrefsWidget *prefs_widget; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "keyboard-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -64,16 +70,21 @@ store_archive_data (void) static void ok_cb (GtkWidget *widget) { - preferences_save (prefs); - preferences_apply_now (prefs); + if (!outside_location) { + preferences_save (prefs); + preferences_apply_now (prefs); + } + store_archive_data (); } static void cancel_cb (GtkWidget *widget) { - preferences_save (old_prefs); - preferences_apply_now (old_prefs); + if (!outside_location) { + preferences_save (old_prefs); + preferences_apply_now (old_prefs); + } } static void @@ -107,9 +118,8 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { - Preferences *prefs; xmlDocPtr doc; char *buffer; int len = 0; @@ -125,9 +135,9 @@ do_set_xml (void) prefs = preferences_read_xml (doc); - if (prefs) + if (prefs && apply_settings) preferences_save (prefs); - else + else if (prefs == NULL) g_warning ("Error while reading the screensaver config file"); } @@ -155,7 +165,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } @@ -187,10 +197,22 @@ main (int argc, char **argv) gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-cckeyboard.png"); - prefs = PREFERENCES (preferences_new ()); - preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + preferences_freeze (prefs); + } else { + outside_location = FALSE; + prefs = PREFERENCES (preferences_new ()); + preferences_load (prefs); + } + + if (!outside_location && token) { preferences_apply_now (prefs); } diff --git a/capplets/keyboard/preferences.c b/capplets/keyboard/preferences.c index ab9d3e2d9..e55942922 100644 --- a/capplets/keyboard/preferences.c +++ b/capplets/keyboard/preferences.c @@ -262,12 +262,12 @@ preferences_apply_now (Preferences *prefs) void preferences_freeze (Preferences *prefs) { - prefs->frozen = TRUE; + prefs->frozen++; } void preferences_thaw (Preferences *prefs) { - prefs->frozen = FALSE; + if (prefs->frozen > 0) prefs->frozen--; } Preferences * diff --git a/capplets/keyboard/preferences.h b/capplets/keyboard/preferences.h index f7df8ee91..f0da61c75 100644 --- a/capplets/keyboard/preferences.h +++ b/capplets/keyboard/preferences.h @@ -39,7 +39,7 @@ struct _Preferences { GtkObject object; - gboolean frozen; + gint frozen; guint timeout_id; gint rate; diff --git a/capplets/mouse/main.c b/capplets/mouse/main.c index 2c5d3ec28..1e98130b0 100644 --- a/capplets/mouse/main.c +++ b/capplets/mouse/main.c @@ -45,15 +45,21 @@ static Preferences *prefs; static Preferences *old_prefs; static PrefsWidget *prefs_widget; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "mouse-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -64,16 +70,21 @@ store_archive_data (void) static void ok_cb (GtkWidget *widget) { - preferences_save (prefs); - preferences_apply_now (prefs); + if (!outside_location) { + preferences_save (prefs); + preferences_apply_now (prefs); + } + store_archive_data (); } static void cancel_cb (GtkWidget *widget) { - preferences_save (old_prefs); - preferences_apply_now (old_prefs); + if (!outside_location) { + preferences_save (old_prefs); + preferences_apply_now (old_prefs); + } } static void @@ -107,9 +118,8 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { - Preferences *prefs; xmlDocPtr doc; char *buffer; int len = 0; @@ -125,9 +135,9 @@ do_set_xml (void) prefs = preferences_read_xml (doc); - if (prefs) + if (prefs && apply_settings) preferences_save (prefs); - else + else if (prefs == NULL) g_warning ("Error while reading the screensaver config file"); } @@ -155,7 +165,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } @@ -187,10 +197,22 @@ main (int argc, char **argv) gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-mouse.png"); - prefs = PREFERENCES (preferences_new ()); - preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + preferences_freeze (prefs); + } else { + outside_location = FALSE; + prefs = PREFERENCES (preferences_new ()); + preferences_load (prefs); + } + + if (!outside_location && token) { preferences_apply_now (prefs); } diff --git a/capplets/mouse/preferences.c b/capplets/mouse/preferences.c index c10f0557e..49f4a1533 100644 --- a/capplets/mouse/preferences.c +++ b/capplets/mouse/preferences.c @@ -277,12 +277,12 @@ preferences_apply_now (Preferences *prefs) void preferences_freeze (Preferences *prefs) { - prefs->frozen = TRUE; + prefs->frozen++; } void preferences_thaw (Preferences *prefs) { - prefs->frozen = FALSE; + if (prefs->frozen > 0) prefs->frozen--; } Preferences * diff --git a/capplets/mouse/preferences.h b/capplets/mouse/preferences.h index 1f95dfe96..508b04e53 100644 --- a/capplets/mouse/preferences.h +++ b/capplets/mouse/preferences.h @@ -39,7 +39,7 @@ struct _Preferences { GtkObject object; - gboolean frozen; + gint frozen; guint timeout_id; gboolean rtol; diff --git a/capplets/screensaver/main.c b/capplets/screensaver/main.c index e63abc179..86c896e77 100644 --- a/capplets/screensaver/main.c +++ b/capplets/screensaver/main.c @@ -31,6 +31,7 @@ #include #include #include +#include #include @@ -51,15 +52,21 @@ static PrefsWidget *prefs_widget; static CappletWidget *capplet; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "screensaver-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -81,9 +88,11 @@ try_cb (GtkWidget *widget) old_sm = prefs->selection_mode; - prefs_widget_store_prefs (prefs_widget, prefs); - preferences_save (prefs); - setup_dpms (prefs); + if (!outside_location) { + prefs_widget_store_prefs (prefs_widget, prefs); + preferences_save (prefs); + setup_dpms (prefs); + } if (old_sm == SM_DISABLE_SCREENSAVER && prefs->selection_mode != SM_DISABLE_SCREENSAVER) @@ -100,14 +109,17 @@ revert_cb (GtkWidget *widget) old_sm = old_prefs->selection_mode; - preferences_save (old_prefs); - preferences_destroy (prefs); + if (!outside_location) { + preferences_save (old_prefs); + preferences_destroy (prefs); + } + prefs = preferences_new (); preferences_load (prefs); - prefs->frozen = TRUE; + prefs->frozen++; prefs_widget_get_prefs (prefs_widget, prefs); - prefs->frozen = FALSE; + prefs->frozen--; setup_dpms (old_prefs); @@ -128,16 +140,17 @@ ok_cb (GtkWidget *widget) close_preview (); - prefs_widget_store_prefs (prefs_widget, prefs); - preferences_save (prefs); - setup_dpms (prefs); - - if (old_sm == SM_DISABLE_SCREENSAVER && - prefs->selection_mode != SM_DISABLE_SCREENSAVER) - start_xscreensaver (); - else if (old_sm != SM_DISABLE_SCREENSAVER && - prefs->selection_mode == SM_DISABLE_SCREENSAVER) - stop_xscreensaver (); + if (!outside_location) { + prefs_widget_store_prefs (prefs_widget, prefs); + preferences_save (prefs); + setup_dpms (prefs); + if (old_sm == SM_DISABLE_SCREENSAVER && + prefs->selection_mode != SM_DISABLE_SCREENSAVER) + start_xscreensaver (); + else if (old_sm != SM_DISABLE_SCREENSAVER && + prefs->selection_mode == SM_DISABLE_SCREENSAVER) + stop_xscreensaver (); + } store_archive_data (); } @@ -151,15 +164,17 @@ cancel_cb (GtkWidget *widget) close_preview (); - preferences_save (old_prefs); - setup_dpms (old_prefs); + if (!outside_location) { + preferences_save (old_prefs); + setup_dpms (old_prefs); - if (old_sm == SM_DISABLE_SCREENSAVER && - prefs->selection_mode != SM_DISABLE_SCREENSAVER) - start_xscreensaver (); - else if (old_sm != SM_DISABLE_SCREENSAVER && - prefs->selection_mode == SM_DISABLE_SCREENSAVER) - stop_xscreensaver (); + if (old_sm == SM_DISABLE_SCREENSAVER && + prefs->selection_mode != SM_DISABLE_SCREENSAVER) + start_xscreensaver (); + else if (old_sm != SM_DISABLE_SCREENSAVER && + prefs->selection_mode == SM_DISABLE_SCREENSAVER) + stop_xscreensaver (); + } } static void @@ -183,7 +198,7 @@ setup_capplet_widget (void) gtk_signal_connect (GTK_OBJECT (capplet), "cancel", GTK_SIGNAL_FUNC (cancel_cb), NULL); - prefs->frozen = TRUE; + prefs->frozen++; prefs_widget = PREFS_WIDGET (prefs_widget_new ()); @@ -200,7 +215,7 @@ setup_capplet_widget (void) gtk_widget_show_all (GTK_WIDGET (capplet)); - prefs->frozen = FALSE; + prefs->frozen--; } static void @@ -217,7 +232,7 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { xmlDocPtr doc; Preferences *old_prefs, *new_prefs; @@ -240,7 +255,11 @@ do_set_xml (void) if (new_prefs) { new_prefs->config_db = old_prefs->config_db; - preferences_save (new_prefs); + + if (apply_settings) + preferences_save (new_prefs); + else + prefs = new_prefs; } else { g_warning ("Error while reading the screensaver config file"); } @@ -269,7 +288,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } @@ -302,16 +321,30 @@ main (int argc, char **argv) (GNOME_ICONDIR"/gnome-ccscreensaver.png"); init_resource_database (argc, argv); - prefs = preferences_new (); preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + prefs->frozen++; + } else { + outside_location = FALSE; + prefs = preferences_new (); + preferences_load (prefs); + } + + if (!outside_location && token) { if (prefs->selection_mode != SM_DISABLE_SCREENSAVER) start_xscreensaver (); setup_dpms (prefs); } if (!res) { - old_prefs = preferences_new (); preferences_load (old_prefs); + old_prefs = preferences_new (); + preferences_load (old_prefs); setup_capplet_widget (); capplet_gtk_main (); diff --git a/capplets/screensaver/preferences.h b/capplets/screensaver/preferences.h index 0a01b7a52..590db7ef7 100644 --- a/capplets/screensaver/preferences.h +++ b/capplets/screensaver/preferences.h @@ -80,7 +80,7 @@ struct _Preferences GList *screensavers; - gboolean frozen; /* TRUE if we shouldn't reflect + gint frozen; /* TRUE if we shouldn't reflect * preference changes in capplet */ GTree *config_db; /* key-value database of config options */ diff --git a/capplets/sound/main.c b/capplets/sound/main.c index 6d5af9481..19684f6f4 100644 --- a/capplets/sound/main.c +++ b/capplets/sound/main.c @@ -45,15 +45,21 @@ static Preferences *prefs; static Preferences *old_prefs; static PrefsWidget *prefs_widget; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "sound-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -64,16 +70,21 @@ store_archive_data (void) static void ok_cb (GtkWidget *widget) { - preferences_save (prefs); - preferences_apply_now (prefs); + if (!outside_location) { + preferences_save (prefs); + preferences_apply_now (prefs); + } + store_archive_data (); } static void cancel_cb (GtkWidget *widget) { - preferences_save (old_prefs); - preferences_apply_now (old_prefs); + if (!outside_location) { + preferences_save (old_prefs); + preferences_apply_now (old_prefs); + } } static void @@ -107,9 +118,8 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { - Preferences *prefs; xmlDocPtr doc; char *buffer; int len = 0; @@ -125,9 +135,9 @@ do_set_xml (void) prefs = preferences_read_xml (doc); - if (prefs) + if (prefs && apply_settings) preferences_save (prefs); - else + else if (prefs == NULL) g_warning ("Error while reading the screensaver config file"); } @@ -158,7 +168,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } @@ -190,10 +200,22 @@ main (int argc, char **argv) gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/~icon~"); - prefs = PREFERENCES (preferences_new ()); - preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + preferences_freeze (prefs); + } else { + outside_location = FALSE; + prefs = PREFERENCES (preferences_new ()); + preferences_load (prefs); + } + + if (!outside_location && token) { preferences_apply_now (prefs); } diff --git a/capplets/sound/preferences.c b/capplets/sound/preferences.c index d64e3192f..d10395d1b 100644 --- a/capplets/sound/preferences.c +++ b/capplets/sound/preferences.c @@ -298,7 +298,7 @@ preferences_freeze (Preferences *prefs) g_return_if_fail (prefs != NULL); g_return_if_fail (IS_PREFERENCES (prefs)); - prefs->frozen = TRUE; + prefs->frozen++; } void @@ -307,7 +307,7 @@ preferences_thaw (Preferences *prefs) g_return_if_fail (prefs != NULL); g_return_if_fail (IS_PREFERENCES (prefs)); - prefs->frozen = FALSE; + if (prefs->frozen > 0) prefs->frozen--; } Preferences * diff --git a/capplets/sound/preferences.h b/capplets/sound/preferences.h index 4fce1aea4..0dcfd28bc 100644 --- a/capplets/sound/preferences.h +++ b/capplets/sound/preferences.h @@ -65,7 +65,7 @@ struct _Preferences { GtkObject object; - gboolean frozen; + gint frozen; guint timeout_id; gboolean enable_esd; diff --git a/capplets/ui-properties/main.c b/capplets/ui-properties/main.c index 043525d9e..37db9d8d6 100644 --- a/capplets/ui-properties/main.c +++ b/capplets/ui-properties/main.c @@ -48,15 +48,21 @@ static Preferences *prefs; static Preferences *old_prefs; static PrefsWidget *prefs_widget; +static Archive *archive; +static gboolean outside_location; + static void store_archive_data (void) { - Archive *archive; Location *location; xmlDocPtr xml_doc; - archive = ARCHIVE (archive_load (FALSE)); - location = archive_get_current_location (archive); + if (capplet_get_location () == NULL) + location = archive_get_current_location (archive); + else + location = archive_get_location (archive, + capplet_get_location ()); + xml_doc = preferences_write_xml (prefs); location_store_xml (location, "ui-properties-capplet", xml_doc, STORE_MASK_PREVIOUS); @@ -67,14 +73,17 @@ store_archive_data (void) static void ok_cb (GtkWidget *widget) { - preferences_save (prefs); + if (!outside_location) + preferences_save (prefs); + store_archive_data (); } static void cancel_cb (GtkWidget *widget) { - preferences_save (old_prefs); + if (!outside_location) + preferences_save (old_prefs); } static void @@ -108,9 +117,8 @@ do_get_xml (void) } static void -do_set_xml (void) +do_set_xml (gboolean apply_settings) { - Preferences *prefs; xmlDocPtr doc; char *buffer = NULL; int len = 0; @@ -126,9 +134,9 @@ do_set_xml (void) prefs = preferences_read_xml (doc); - if (prefs) + if (prefs && apply_settings) preferences_save (prefs); - else + else if (prefs == NULL) g_warning ("Error while reading the screensaver config file"); } @@ -156,7 +164,7 @@ main (int argc, char **argv) return 0; } else if (res == 4) { - do_set_xml (); + do_set_xml (TRUE); return 0; } @@ -187,10 +195,22 @@ main (int argc, char **argv) gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-applications.png"); - prefs = PREFERENCES (preferences_new ()); - preferences_load (prefs); + archive = ARCHIVE (archive_load (FALSE)); - if (token) { + if (capplet_get_location () != NULL && + strcmp (capplet_get_location (), + archive_get_current_location_id (archive))) + { + outside_location = TRUE; + do_set_xml (FALSE); + preferences_freeze (prefs); + } else { + outside_location = FALSE; + prefs = PREFERENCES (preferences_new ()); + preferences_load (prefs); + } + + if (!outside_location && token) { preferences_apply_now (prefs); } diff --git a/capplets/ui-properties/preferences.c b/capplets/ui-properties/preferences.c index 34f617989..f25784ee3 100644 --- a/capplets/ui-properties/preferences.c +++ b/capplets/ui-properties/preferences.c @@ -188,7 +188,7 @@ preferences_freeze (Preferences *prefs) g_return_if_fail (prefs != NULL); g_return_if_fail (IS_PREFERENCES (prefs)); - prefs->frozen = TRUE; + prefs->frozen++; } void @@ -197,7 +197,7 @@ preferences_thaw (Preferences *prefs) g_return_if_fail (prefs != NULL); g_return_if_fail (IS_PREFERENCES (prefs)); - prefs->frozen = FALSE; + if (prefs->frozen > 0) prefs->frozen--; } Preferences * diff --git a/capplets/ui-properties/preferences.h b/capplets/ui-properties/preferences.h index 2b1d989a0..721665dcb 100644 --- a/capplets/ui-properties/preferences.h +++ b/capplets/ui-properties/preferences.h @@ -40,7 +40,7 @@ struct _Preferences { GtkObject object; - gboolean frozen; + gint frozen; guint timeout_id; GnomePreferences *gnome_prefs;