summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--capplets/appearance/ChangeLog9
-rw-r--r--capplets/appearance/appearance-main.c9
-rw-r--r--capplets/appearance/appearance-themes.c6
-rw-r--r--capplets/appearance/theme-installer.c52
-rw-r--r--capplets/appearance/theme-installer.h2
5 files changed, 36 insertions, 42 deletions
diff --git a/capplets/appearance/ChangeLog b/capplets/appearance/ChangeLog
index cd9d283ad..91f258340 100644
--- a/capplets/appearance/ChangeLog
+++ b/capplets/appearance/ChangeLog
@@ -1,5 +1,14 @@
2008-07-29 Jens Granseuer <jensgr@gmx.net>
+ * appearance-main.c: (main):
+ * appearance-themes.c: (theme_drag_data_received_cb):
+ * theme-installer.c: (gnome_theme_install),
+ (gnome_theme_installer_run):
+ * theme-installer.h: make theme installation from GIO-supported
+ sources work (including drag and drop) (bug #545335)
+
+2008-07-29 Jens Granseuer <jensgr@gmx.net>
+
* theme-installer.c: (gnome_theme_install_from_uri): file transfer
dialog now uses GFiles internally, so update the caller
diff --git a/capplets/appearance/appearance-main.c b/capplets/appearance/appearance-main.c
index 2b3d2dbdd..21b28b00e 100644
--- a/capplets/appearance/appearance-main.c
+++ b/capplets/appearance/appearance-main.c
@@ -142,9 +142,12 @@ main (int argc, char **argv)
GNOME_PARAM_GOPTION_CONTEXT, option_context,
NULL);
- if (install_filename != NULL)
- gnome_theme_install_from_uri (install_filename, NULL);
- g_free (install_filename);
+ if (install_filename != NULL) {
+ GFile *inst = g_file_new_for_commandline_arg (install_filename);
+ g_free (install_filename);
+ gnome_theme_install (inst, NULL);
+ g_object_unref (inst);
+ }
/* init tabs */
themes_init (data);
diff --git a/capplets/appearance/appearance-themes.c b/capplets/appearance/appearance-themes.c
index 172740604..98079955b 100644
--- a/capplets/appearance/appearance-themes.c
+++ b/capplets/appearance/appearance-themes.c
@@ -989,12 +989,10 @@ theme_drag_data_received_cb (GtkWidget *widget,
if (uris != NULL && uris[0] != NULL) {
GFile *f = g_file_new_for_uri (uris[0]);
- gchar *filename = g_file_get_path (f);
- g_object_unref (f);
- gnome_theme_install_from_uri (filename,
+ gnome_theme_install (f,
GTK_WINDOW (glade_xml_get_widget (data->xml, "appearance_window")));
- g_free (filename);
+ g_object_unref (f);
}
g_strfreev (uris);
diff --git a/capplets/appearance/theme-installer.c b/capplets/appearance/theme-installer.c
index 286180153..a04cb6aed 100644
--- a/capplets/appearance/theme-installer.c
+++ b/capplets/appearance/theme-installer.c
@@ -579,16 +579,14 @@ transfer_done_cb (GtkWidget *dlg, gchar *path)
}
void
-gnome_theme_install_from_uri (const gchar *filename, GtkWindow *parent)
+gnome_theme_install (GFile *file, GtkWindow *parent)
{
GtkWidget *dialog;
gchar *path, *base;
GList *src, *target;
- gchar *temppath;
const gchar *template;
- int cmp;
- if (filename == NULL || strcmp (filename, "") == 0) {
+ if (file == NULL) {
dialog = gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
@@ -599,9 +597,10 @@ gnome_theme_install_from_uri (const gchar *filename, GtkWindow *parent)
return;
}
- /* see if someone dropped a directory */
- if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
- transfer_done_cb (NULL, g_strdup (filename));
+ /* see if someone dropped a local directory */
+ if (g_file_is_native (file) &&
+ g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL) == G_FILE_TYPE_DIRECTORY) {
+ transfer_done_cb (NULL, g_file_get_path (file));
return;
}
@@ -620,28 +619,7 @@ gnome_theme_install_from_uri (const gchar *filename, GtkWindow *parent)
return;
}
- /* To avoid the copy of /root/.themes to /root/.themes/.themes
- * which causes an infinite loop. The user asks to transfer the all
- * contents of a folder, to a folder under itself. So ignore the
- * situation.
- */
- temppath = g_build_filename (filename, ".themes", NULL);
- cmp = strcmp (temppath, path);
- g_free (path);
- g_free (temppath);
-
- if (cmp == 0) {
- dialog = gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("%s is the path where the theme files will be installed. This can not be selected as the source location"), filename);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- return;
- }
-
- base = g_path_get_basename (filename);
+ base = g_file_get_basename (file);
if (g_str_has_suffix (base, ".tar.gz") || g_str_has_suffix (base, ".tgz") || g_str_has_suffix (base, ".gtp"))
template = "gnome-theme-%d.gtp";
@@ -654,7 +632,7 @@ gnome_theme_install_from_uri (const gchar *filename, GtkWindow *parent)
}
g_free (base);
- src = g_list_append (NULL, g_file_new_for_path (filename));
+ src = g_list_append (NULL, g_object_ref (file));
path = NULL;
do {
@@ -694,7 +672,6 @@ gnome_theme_installer_run (GtkWindow *parent, const gchar *filename)
static gboolean running_theme_install = FALSE;
static gchar old_folder[512] = "";
GtkWidget *dialog;
- gchar *filename_selected, *folder;
GtkFileFilter *filter;
if (running_theme_install)
@@ -725,7 +702,9 @@ gnome_theme_installer_run (GtkWindow *parent, const gchar *filename)
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
- filename_selected = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ gchar *uri_selected, *folder;
+
+ uri_selected = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
g_strlcpy (old_folder, folder, 255);
@@ -733,8 +712,13 @@ gnome_theme_installer_run (GtkWindow *parent, const gchar *filename)
gtk_widget_destroy (dialog);
- gnome_theme_install_from_uri (filename_selected, parent);
- g_free (filename_selected);
+ if (uri_selected != NULL) {
+ GFile *file = g_file_new_for_uri (uri_selected);
+ g_free (uri_selected);
+
+ gnome_theme_install (file, parent);
+ g_object_unref (file);
+ }
}
else
gtk_widget_destroy (dialog);
diff --git a/capplets/appearance/theme-installer.h b/capplets/appearance/theme-installer.h
index dbbbd9ec1..399300fd4 100644
--- a/capplets/appearance/theme-installer.h
+++ b/capplets/appearance/theme-installer.h
@@ -22,7 +22,7 @@
#ifndef THEME_INSTALLER_H
#define THEME_INSTALLER_H
-void gnome_theme_install_from_uri (const gchar *filename, GtkWindow *parent);
+void gnome_theme_install (GFile *file, GtkWindow *parent);
void gnome_theme_installer_run (GtkWindow *parent, const gchar *filename);
#endif /* THEME_INSTALLER_H */