diff options
author | Michael Meeks <michael@ximian.com> | 2002-07-10 16:23:34 +0000 |
---|---|---|
committer | Michael Meeks <michael@src.gnome.org> | 2002-07-10 16:23:34 +0000 |
commit | 3dc4400b809a02d66aaeebf8211ffa6642a61c5f (patch) | |
tree | 80241657822d90dbd05474b8169ac986af6f69bc /src/nautilus-information-panel.c | |
parent | e11abc51013606b55ec5a1877a934637a8fb72c9 (diff) | |
download | nautilus-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.c | 90 |
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); |