[Xfce4-commits] <ristretto:master> Implemented 'open folder'.

Stephan Arts stephan at xfce.org
Wed Aug 12 12:16:09 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 (&current_uri_val, G_TYPE_STRING);
     g_object_get_property (G_OBJECT(window->priv->settings_manager), "current-uri", &current_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 (&current_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 (&current_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 (&current_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", &current_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