summaryrefslogtreecommitdiff
path: root/src/nautilus-information-panel.c
diff options
context:
space:
mode:
authorMichael Meeks <michael@ximian.com>2002-07-10 16:23:34 +0000
committerMichael Meeks <michael@src.gnome.org>2002-07-10 16:23:34 +0000
commit3dc4400b809a02d66aaeebf8211ffa6642a61c5f (patch)
tree80241657822d90dbd05474b8169ac986af6f69bc /src/nautilus-information-panel.c
parente11abc51013606b55ec5a1877a934637a8fb72c9 (diff)
downloadnautilus-3dc4400b809a02d66aaeebf8211ffa6642a61c5f.tar.gz
update the title color only if the background has changed;
2002-07-10 Michael Meeks <michael@ximian.com> * src/nautilus-sidebar.c (nautilus_sidebar_update_appearance): update the title color only if the background has changed; (nautilus_sidebar_finalize): keep the current background colour/image on the sidebar as well as the defaults. (value_different, nautilus_sidebar_update_appearance): update only when the values are different, pass the background in. (nautilus_sidebar_create_context_menu): use stored boolean. (nautilus_sidebar_background_is_default): do this (nautilus_sidebar_update_appearance): inline, once here. * src/nautilus-sidebar-title.c (nautilus_sidebar_title_background_is_default): kill this method cut and paste coded from nautilus-sidebar.c (realize_callback, appearance_changed_callback): remove contorted 'wizard'ry ( and redundant pixbuf colouring logic ) (nautilus_sidebar_title_theme_changed): don't do title changed, nautilus-sidebar.c will do it for us. (update_all): don't update the title colour, every time we move directory a file ( with pixbuf darkness test, etc. etc. ) (nautilus_sidebar_title_select_text_color): bin background == NULL mess, it never happens now. (nautilus_sidebar_title_background): more applied spaghetti hurling gone.
Diffstat (limited to 'src/nautilus-information-panel.c')
-rw-r--r--src/nautilus-information-panel.c90
1 files changed, 51 insertions, 39 deletions
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 57093f29c..dcb32fd38 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -85,11 +85,15 @@ struct NautilusSidebarDetails {
char *uri;
NautilusFile *file;
guint file_changed_connection;
- char *default_background_color;
- char *default_background_image;
int selected_index;
gboolean background_connected;
int old_width;
+
+ char *default_background_color;
+ char *default_background_image;
+ char *current_background_color;
+ char *current_background_image;
+ gboolean is_default_background;
};
/* button assignments */
@@ -257,7 +261,7 @@ nautilus_sidebar_init (GtkObject *object)
sidebar->details->old_width = sidebar_width_auto_value;
/* load the default background from the current theme */
- nautilus_sidebar_read_theme(sidebar);
+ nautilus_sidebar_read_theme (sidebar);
/* enable mouse tracking */
gtk_widget_add_events (GTK_WIDGET (sidebar), GDK_POINTER_MOTION_MASK);
@@ -349,6 +353,8 @@ nautilus_sidebar_finalize (GObject *object)
g_free (sidebar->details->uri);
g_free (sidebar->details->default_background_color);
g_free (sidebar->details->default_background_image);
+ g_free (sidebar->details->current_background_color);
+ g_free (sidebar->details->current_background_image);
g_free (sidebar->details);
eel_preferences_remove_callback (NAUTILUS_PREFERENCES_THEME,
@@ -529,27 +535,6 @@ sidebar_add_panel_context_menu_items (NautilusSidebar *sidebar,
nautilus_sidebar_for_each_panel (sidebar_for_each_sidebar_panel, &data);
}
-/* check to see if the background matches the default */
-static gboolean
-nautilus_sidebar_background_is_default (NautilusSidebar *sidebar)
-{
- char *background_color, *background_image;
- gboolean is_default;
-
- background_color = nautilus_file_get_metadata (sidebar->details->file,
- NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_COLOR,
- NULL);
- background_image = nautilus_file_get_metadata (sidebar->details->file,
- NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_IMAGE,
- NULL);
-
- is_default = background_color == NULL && background_image == NULL;
- g_free (background_color);
- g_free (background_image);
-
- return is_default;
-}
-
/* create the context menu */
GtkWidget *
nautilus_sidebar_create_context_menu (NautilusSidebar *sidebar)
@@ -559,8 +544,8 @@ nautilus_sidebar_create_context_menu (NautilusSidebar *sidebar)
gboolean has_background;
background = eel_get_widget_background (GTK_WIDGET(sidebar));
- has_background = background && !nautilus_sidebar_background_is_default (sidebar);
-
+ has_background = background && !sidebar->details->is_default_background;
+
menu = gtk_menu_new ();
/* add the sidebar panels */
@@ -618,20 +603,20 @@ nautilus_sidebar_read_theme (NautilusSidebar *sidebar)
background_color = nautilus_theme_get_theme_data ("sidebar", NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_COLOR);
background_image = nautilus_theme_get_theme_data ("sidebar", NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_IMAGE);
- g_free(sidebar->details->default_background_color);
+ g_free (sidebar->details->default_background_color);
sidebar->details->default_background_color = NULL;
- g_free(sidebar->details->default_background_image);
+ g_free (sidebar->details->default_background_image);
sidebar->details->default_background_image = NULL;
if (background_color && strlen (background_color)) {
- sidebar->details->default_background_color = g_strdup(background_color);
+ sidebar->details->default_background_color = g_strdup (background_color);
}
/* set up the default background image */
background_image = map_local_data_file (background_image);
if (background_image && strlen (background_image)) {
- sidebar->details->default_background_image = g_strdup(background_image);
+ sidebar->details->default_background_image = g_strdup (background_image);
}
g_free (background_color);
@@ -1535,6 +1520,18 @@ nautilus_sidebar_update_buttons (NautilusSidebar *sidebar)
}
}
+static gboolean
+value_different (const char *a, const char *b)
+{
+ if (!a && !b)
+ return FALSE;
+
+ if (!a || !b)
+ return TRUE;
+
+ return strcmp (a, b);
+}
+
static void
nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
{
@@ -1556,17 +1553,19 @@ nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
}
/* Set up the background color and image from the metadata. */
+ background_color = nautilus_file_get_metadata (sidebar->details->file,
+ NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_COLOR,
+ NULL);
+ background_image = nautilus_file_get_metadata (sidebar->details->file,
+ NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_IMAGE,
+ NULL);
- if (nautilus_sidebar_background_is_default (sidebar)) {
+ if (background_color == NULL && background_image == NULL) {
background_color = g_strdup (sidebar->details->default_background_color);
background_image = g_strdup (sidebar->details->default_background_image);
+ sidebar->details->is_default_background = TRUE;
} else {
- background_color = nautilus_file_get_metadata (sidebar->details->file,
- NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_COLOR,
- NULL);
- background_image = nautilus_file_get_metadata (sidebar->details->file,
- NAUTILUS_METADATA_KEY_SIDEBAR_BACKGROUND_IMAGE,
- NULL);
+ sidebar->details->is_default_background = FALSE;
}
/* Block so we don't write these settings out in response to our set calls below */
@@ -1574,8 +1573,21 @@ nautilus_sidebar_update_appearance (NautilusSidebar *sidebar)
G_CALLBACK (background_settings_changed_callback),
sidebar);
- eel_background_set_image_uri (background, background_image);
- eel_background_set_color (background, background_color);
+ if (value_different (sidebar->details->current_background_color, background_color) ||
+ value_different (sidebar->details->current_background_image, background_image)) {
+
+ g_free (sidebar->details->current_background_color);
+ sidebar->details->current_background_color = g_strdup (background_color);
+ g_free (sidebar->details->current_background_image);
+ sidebar->details->current_background_image = g_strdup (background_image);
+
+ eel_background_set_image_uri (background, background_image);
+ eel_background_set_color (background, background_color);
+
+ nautilus_sidebar_title_select_text_color
+ (sidebar->details->title, background,
+ sidebar->details->is_default_background);
+ }
g_free (background_color);
g_free (background_image);