Delay the creation of the wallpaper file chooser dialog to save time on
2008-06-01 Thomas Wood <thos@gnome.org> * 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
This commit is contained in:
parent
4da6d2f501
commit
59701e3a60
2 changed files with 80 additions and 54 deletions
|
@ -1,3 +1,11 @@
|
|||
2008-06-01 Thomas Wood <thos@gnome.org>
|
||||
|
||||
* 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 <sandmann@redhat.com>
|
||||
|
||||
* appearance-desktop.c (wp_drag_get_data): Make sure the data we
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
/*
|
||||
* Copyright (C) 2007 The GNOME Foundation
|
||||
* Copyright (C) 2007,2008 The GNOME Foundation
|
||||
* Written by Rodney Dawes <dobey@ximian.com>
|
||||
* Denis Washington <denisw@svn.gnome.org>
|
||||
* Thomas Wood <thos@gnome.org>
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue