From 59701e3a60fc1d757dae6f18ec3c453c400efef8 Mon Sep 17 00:00:00 2001 From: Thomas Wood Date: Sun, 1 Jun 2008 22:27:55 +0000 Subject: [PATCH] Delay the creation of the wallpaper file chooser dialog to save time on 2008-06-01 Thomas Wood * appearance-desktop.c: (wp_props_wp_selected), (wp_load_stuffs), (wp_select_after_realize), (desktop_init), (desktop_shutdown): Delay the creation of the wallpaper file chooser dialog to save time on start up. svn path=/trunk/; revision=8743 --- capplets/appearance/ChangeLog | 8 ++ capplets/appearance/appearance-desktop.c | 126 +++++++++++++---------- 2 files changed, 80 insertions(+), 54 deletions(-) diff --git a/capplets/appearance/ChangeLog b/capplets/appearance/ChangeLog index 2fb96362e..12cf0a626 100644 --- a/capplets/appearance/ChangeLog +++ b/capplets/appearance/ChangeLog @@ -1,3 +1,11 @@ +2008-06-01 Thomas Wood + + * appearance-desktop.c: (wp_props_wp_selected), (wp_load_stuffs), + (wp_select_after_realize), (desktop_init), (desktop_shutdown): + + Delay the creation of the wallpaper file chooser dialog to save time on + start up. + Sat May 31 02:05:32 2008 Søren Sandmann * appearance-desktop.c (wp_drag_get_data): Make sure the data we diff --git a/capplets/appearance/appearance-desktop.c b/capplets/appearance/appearance-desktop.c index 0eee50b42..d0323277b 100644 --- a/capplets/appearance/appearance-desktop.c +++ b/capplets/appearance/appearance-desktop.c @@ -1,7 +1,8 @@ /* - * Copyright (C) 2007 The GNOME Foundation + * Copyright (C) 2007,2008 The GNOME Foundation * Written by Rodney Dawes * Denis Washington + * Thomas Wood * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -46,6 +47,9 @@ static const GtkTargetEntry drag_types[] = { {"text/uri-list", GTK_TARGET_OTHER_WIDGET, TARGET_URI_LIST} }; + +static void wp_update_preview (GtkFileChooser *chooser, AppearanceData *data); + static void select_item (AppearanceData *data, GnomeWPItem * item, @@ -615,12 +619,72 @@ wp_props_wp_selected (GtkTreeSelection *selection, } } +void +wp_create_filechooser (AppearanceData *data) +{ + const char *start_dir, *pictures = NULL; + GtkFileFilter *filter; + + data->wp_filesel = GTK_FILE_CHOOSER ( + gtk_file_chooser_dialog_new_with_backend (_("Add Wallpaper"), + GTK_WINDOW (glade_xml_get_widget (data->xml, "appearance_window")), + GTK_FILE_CHOOSER_ACTION_OPEN, + "gtk+", + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_OK, + NULL)); + + gtk_dialog_set_default_response (GTK_DIALOG (data->wp_filesel), GTK_RESPONSE_OK); + gtk_file_chooser_set_select_multiple (data->wp_filesel, TRUE); + gtk_file_chooser_set_use_preview_label (data->wp_filesel, FALSE); + + start_dir = g_get_home_dir (); + + if (g_file_test ("/usr/share/backgrounds", G_FILE_TEST_IS_DIR)) { + gtk_file_chooser_add_shortcut_folder (data->wp_filesel, + "/usr/share/backgrounds", NULL); + start_dir = "/usr/share/backgrounds"; + } + + pictures = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); + if (pictures != NULL && g_file_test (pictures, G_FILE_TEST_IS_DIR)) { + gtk_file_chooser_add_shortcut_folder (data->wp_filesel, pictures, NULL); + start_dir = pictures; + } + + gtk_file_chooser_set_current_folder (data->wp_filesel, start_dir); + + filter = gtk_file_filter_new (); + gtk_file_filter_add_pixbuf_formats (filter); + gtk_file_filter_set_name (filter, _("Images")); + gtk_file_chooser_add_filter (data->wp_filesel, filter); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("All files")); + gtk_file_filter_add_pattern (filter, "*"); + gtk_file_chooser_add_filter (data->wp_filesel, filter); + + data->wp_image = gtk_image_new (); + gtk_file_chooser_set_preview_widget (data->wp_filesel, data->wp_image); + gtk_widget_set_size_request (data->wp_image, 128, -1); + + gtk_widget_show (data->wp_image); + + g_signal_connect (data->wp_filesel, "update-preview", + (GCallback) wp_update_preview, data); +} + static void wp_file_open_dialog (GtkWidget *widget, AppearanceData *data) { GSList *files; + if (!data->wp_filesel) + wp_create_filechooser (data); + switch (gtk_dialog_run (GTK_DIALOG (data->wp_filesel))) { case GTK_RESPONSE_OK: @@ -924,9 +988,6 @@ desktop_init (AppearanceData *data, { GtkWidget *add_button; GtkCellRenderer *cr; - GtkFileFilter *filter; - const gchar *pictures; - const gchar *start_dir; g_object_set (gtk_settings_get_default (), "gtk-tooltip-timeout", 500, NULL); @@ -1044,55 +1105,9 @@ desktop_init (AppearanceData *data, wp_set_sensitivities (data); - data->wp_filesel = GTK_FILE_CHOOSER ( - gtk_file_chooser_dialog_new_with_backend (_("Add Wallpaper"), - GTK_WINDOW (glade_xml_get_widget (data->xml, "appearance_window")), - GTK_FILE_CHOOSER_ACTION_OPEN, - "gtk+", - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, - GTK_RESPONSE_OK, - NULL)); + /* create the file selector later to save time on startup */ + data->wp_filesel = NULL; - gtk_dialog_set_default_response (GTK_DIALOG (data->wp_filesel), GTK_RESPONSE_OK); - gtk_file_chooser_set_select_multiple (data->wp_filesel, TRUE); - gtk_file_chooser_set_use_preview_label (data->wp_filesel, FALSE); - - start_dir = g_get_home_dir (); - - if (g_file_test ("/usr/share/backgrounds", G_FILE_TEST_IS_DIR)) { - gtk_file_chooser_add_shortcut_folder (data->wp_filesel, - "/usr/share/backgrounds", NULL); - start_dir = "/usr/share/backgrounds"; - } - - pictures = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); - if (pictures != NULL && g_file_test (pictures, G_FILE_TEST_IS_DIR)) { - gtk_file_chooser_add_shortcut_folder (data->wp_filesel, pictures, NULL); - start_dir = pictures; - } - - gtk_file_chooser_set_current_folder (data->wp_filesel, start_dir); - - filter = gtk_file_filter_new (); - gtk_file_filter_add_pixbuf_formats (filter); - gtk_file_filter_set_name (filter, _("Images")); - gtk_file_chooser_add_filter (data->wp_filesel, filter); - - filter = gtk_file_filter_new (); - gtk_file_filter_set_name (filter, _("All files")); - gtk_file_filter_add_pattern (filter, "*"); - gtk_file_chooser_add_filter (data->wp_filesel, filter); - - data->wp_image = gtk_image_new (); - gtk_file_chooser_set_preview_widget (data->wp_filesel, data->wp_image); - gtk_widget_set_size_request (data->wp_image, 128, -1); - - gtk_widget_show (data->wp_image); - - g_signal_connect (data->wp_filesel, "update-preview", - (GCallback) wp_update_preview, data); } void @@ -1101,6 +1116,9 @@ desktop_shutdown (AppearanceData *data) gnome_wp_xml_save_list (data); g_slist_foreach (data->wp_uris, (GFunc) g_free, NULL); g_slist_free (data->wp_uris); - g_object_ref_sink (data->wp_filesel); - g_object_unref (data->wp_filesel); + if (data->wp_filesel) + { + g_object_ref_sink (data->wp_filesel); + g_object_unref (data->wp_filesel); + } }