[Xfce4-commits] <ristretto:master> Implemented 'open folder'.
Stephan Arts
stephan at xfce.org
Wed Aug 12 12:18:43 CEST 2009
Updating branch refs/heads/master
to 1d06647dac89feb4e0eb82ac437b7710b7753b8c (commit)
from 73a8d7229f688d4b796117843b97b0101c1f5fdc (commit)
commit 1d06647dac89feb4e0eb82ac437b7710b7753b8c
Author: Stephan Arts <stephan at xfce.org>
Date: Sat Feb 21 10:56:52 2009 +0100
Implemented 'open folder'.
src/main_window.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 61 insertions(+), 9 deletions(-)
diff --git a/src/main_window.c b/src/main_window.c
index 96d64f3..b7acbdb 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -850,6 +850,7 @@ cb_rstto_main_window_open_image (GtkWidget *widget, RsttoMainWindow *window)
GFile *file;
GSList *files = NULL, *_files_iter;
GValue current_uri_val = {0, };
+ gchar *uri = NULL;
g_value_init (¤t_uri_val, G_TYPE_STRING);
g_object_get_property (G_OBJECT(window->priv->settings_manager), "current-uri", ¤t_uri_val);
@@ -891,6 +892,13 @@ cb_rstto_main_window_open_image (GtkWidget *widget, RsttoMainWindow *window)
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
+ else
+ {
+ uri = g_file_get_uri (_files_iter->data);
+ gtk_recent_manager_add_item (window->priv->recent_manager, uri);
+ g_free (uri);
+ uri = NULL;
+ }
_files_iter = g_slist_next (_files_iter);
}
g_value_set_string (¤t_uri_val, gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)));
@@ -918,7 +926,11 @@ static void
cb_rstto_main_window_open_folder (GtkWidget *widget, RsttoMainWindow *window)
{
gint response;
- GFile *file = NULL;
+ GFile *file = NULL, *child_file = NULL;
+ GFileEnumerator *file_enumarator = NULL;
+ GFileInfo *file_info = NULL;
+ const gchar *filename = NULL;
+ gchar *uri = NULL;
GValue current_uri_val = {0, };
g_value_init (¤t_uri_val, G_TYPE_STRING);
@@ -937,6 +949,23 @@ cb_rstto_main_window_open_folder (GtkWidget *widget, RsttoMainWindow *window)
gtk_widget_hide(dialog);
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_enumarator = g_file_enumerate_children (file, "standard::name", 0, NULL, NULL);
+ while (file_info = g_file_enumerator_next_file (file_enumarator, NULL, NULL))
+ {
+ filename = g_file_info_get_name (file_info);
+ child_file = g_file_get_child (file, filename);
+
+ rstto_navigator_add_file (window->priv->props.navigator, child_file, NULL);
+
+ g_object_unref (child_file);
+ g_object_unref (file_info);
+ }
+
+ uri = g_file_get_uri (file);
+ gtk_recent_manager_add_item (window->priv->recent_manager, uri);
+ g_free (uri);
+ uri = NULL;
+
g_value_set_string (¤t_uri_val, gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)));
g_object_set_property (G_OBJECT(window->priv->settings_manager), "current-uri", ¤t_uri_val);
}
@@ -958,17 +987,40 @@ cb_rstto_main_window_open_recent(GtkRecentChooser *chooser, RsttoMainWindow *win
{
GtkWidget *dialog, *err_dialog;
gchar *uri = gtk_recent_chooser_get_current_uri (chooser);
+ const gchar *filename;
GFile *file = g_file_new_for_uri (uri);
+ GFile *child_file;
+ GFileEnumerator *file_enumarator = NULL;
+ GFileInfo *child_file_info = NULL;
+ GFileInfo *file_info = g_file_query_info (file, "standard::type", 0, NULL, NULL);
- if (rstto_navigator_add_file (window->priv->props.navigator, file, NULL) == FALSE)
+ if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
{
- err_dialog = gtk_message_dialog_new(GTK_WINDOW(window),
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Could not open file"));
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
+ file_enumarator = g_file_enumerate_children (file, "standard::name", 0, NULL, NULL);
+ while (child_file_info = g_file_enumerator_next_file (file_enumarator, NULL, NULL))
+ {
+ filename = g_file_info_get_name (child_file_info);
+ child_file = g_file_get_child (file, filename);
+
+ rstto_navigator_add_file (window->priv->props.navigator, child_file, NULL);
+
+ g_object_unref (child_file);
+ g_object_unref (child_file_info);
+ }
+
+ }
+ else
+ {
+ if (rstto_navigator_add_file (window->priv->props.navigator, file, NULL) == FALSE)
+ {
+ err_dialog = gtk_message_dialog_new(GTK_WINDOW(window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Could not open file"));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ }
}
g_object_unref (file);
More information about the Xfce4-commits
mailing list