[Xfce4-commits] <ristretto:ristretto-0.0> Add option to load all images in a folder

Stephan Arts noreply at xfce.org
Sun Oct 23 19:20:34 CEST 2011


Updating branch refs/heads/ristretto-0.0
         to 24b4274ed286948ee6e1e7b9ead825529bb0a51b (commit)
       from 062b0f1f7443308430ec246387e3408a79a1e8d7 (commit)

commit 24b4274ed286948ee6e1e7b9ead825529bb0a51b
Author: Stephan Arts <stephan at xfce.org>
Date:   Sat Sep 26 17:56:58 2009 +0200

    Add option to load all images in a folder

 ChangeLog      |    5 +++++
 src/main.c     |   51 ++++++++++++++++++++++++++++++++++++++++++++++-----
 src/settings.c |   18 ++++++++++++++++++
 3 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8aea31a..e90a328 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-09-26  Stephan Arts <stephan at xfce.org>
 
+	* src/main.c,
+	  src/settings.c: Add option to load all images in a folder
+
+2009-09-26  Stephan Arts <stephan at xfce.org>
+
 	* src/main_window.c,
 	  src/image_list.c,
 	  src/thumbnailbar.c: Images can only be opened once
diff --git a/src/main.c b/src/main.c
index df9fbec..81f1d38 100644
--- a/src/main.c
+++ b/src/main.c
@@ -47,6 +47,7 @@ typedef struct {
     gchar **argv;
     gint iter;
     RsttoMainWindow *window;
+    gboolean open_entire_folder;
 } RsttoOpenFiles;
 
 static gboolean
@@ -116,6 +117,7 @@ main(int argc, char **argv)
         rof.argv = argv;
     	rof.iter = 1;
         rof.window = RSTTO_MAIN_WINDOW (window);
+        rof.open_entire_folder = rstto_settings_get_boolean_property (settings, "open-entire-folder");
 
         g_idle_add ((GSourceFunc )cb_rstto_open_files, &rof);
 
@@ -136,10 +138,35 @@ main(int argc, char **argv)
 static gboolean
 cb_rstto_open_files (RsttoOpenFiles *rof)
 {
-    GFile *file;
+    GFile *file, *p_file, *child_file;
     GFileInfo *file_info;
-    const gchar *content_type;
-    if (rof->iter < rof->argc)
+    const gchar *content_type, *filename;
+
+    GFileEnumerator *file_enumarator = NULL;
+
+    if ((rof->argc > 2) || (rof->open_entire_folder == FALSE))
+    {
+        if (rof->iter < rof->argc)
+        {
+            file = g_file_new_for_commandline_arg (rof->argv[rof->iter]);
+            if (file)
+            {
+                file_info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL);
+                if (file_info)
+                {
+                    content_type = g_file_info_get_attribute_string (file_info, "standard::content-type");
+
+                    if (strncmp (content_type, "image/", 6) == 0)
+                    {
+                        rstto_image_list_add_file (rof->image_list, file, NULL);
+                    }
+                }
+            }
+            rof->iter++;
+            return TRUE;
+        }
+    }
+    else
     {
         file = g_file_new_for_commandline_arg (rof->argv[rof->iter]);
         if (file)
@@ -155,8 +182,22 @@ cb_rstto_open_files (RsttoOpenFiles *rof)
                 }
             }
         }
-        rof->iter++;
-        return TRUE;
+        p_file = g_file_get_parent (file);
+        file_enumarator = g_file_enumerate_children (p_file, "standard::*", 0, NULL, NULL);
+        for(file_info = g_file_enumerator_next_file (file_enumarator, NULL, NULL); file_info != NULL; file_info = g_file_enumerator_next_file (file_enumarator, NULL, NULL))
+        {
+            filename = g_file_info_get_name (file_info);
+            content_type  = g_file_info_get_content_type (file_info);
+            child_file = g_file_get_child (p_file, filename);
+
+            if (strncmp (content_type, "image/", 6) == 0)
+            {
+                rstto_image_list_add_file (rof->image_list, child_file, NULL);
+            }
+
+            g_object_unref (child_file);
+            g_object_unref (file_info);
+        }
     }
     return FALSE;
 }
diff --git a/src/settings.c b/src/settings.c
index 5629fc5..cc9c7ab 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -73,6 +73,7 @@ enum
     PROP_SLIDESHOW_TIMEOUT,
     PROP_SCROLLWHEEL_PRIMARY_ACTION,
     PROP_SCROLLWHEEL_SECONDARY_ACTION,
+    PROP_OPEN_ENTIRE_FOLDER,
 };
 
 GType
@@ -110,6 +111,7 @@ struct _RsttoSettingsPriv
     gboolean  show_thumbnailbar;
     gboolean  show_preview;
     gboolean  hide_thumbnailbar_fullscreen;
+    gboolean  open_entire_folder;
     gchar    *navigationbar_position;
     guint     preload_images;
     gboolean  enable_cache;
@@ -154,6 +156,7 @@ rstto_settings_init (GObject *object)
     xfconf_g_property_bind (settings->priv->channel, "/window/height", G_TYPE_UINT, settings, "window-height");
 
     xfconf_g_property_bind (settings->priv->channel, "/file/current-uri", G_TYPE_STRING, settings, "current-uri");
+    xfconf_g_property_bind (settings->priv->channel, "/file/open-entire-folder", G_TYPE_BOOLEAN, settings, "open-entire-folder");
 
     xfconf_g_property_bind (settings->priv->channel, "/window/show-file-toolbar", G_TYPE_BOOLEAN, settings, "show-file-toolbar");
     xfconf_g_property_bind (settings->priv->channel, "/window/show-navigation-toolbar", G_TYPE_BOOLEAN, settings, "show-nav-toolbar");
@@ -250,6 +253,15 @@ rstto_settings_class_init (GObjectClass *object_class)
                                      PROP_HIDE_THUMBNAILBAR_FULLSCREEN,
                                      pspec);
 
+    pspec = g_param_spec_boolean ("open-entire-folder",
+                                  "",
+                                  "",
+                                  TRUE,
+                                  G_PARAM_READWRITE);
+    g_object_class_install_property (object_class,
+                                     PROP_OPEN_ENTIRE_FOLDER,
+                                     pspec);
+
     pspec = g_param_spec_string  ("navigationbar-position",
                                   "",
                                   "",
@@ -462,6 +474,9 @@ rstto_settings_set_property    (GObject      *object,
         case PROP_HIDE_THUMBNAILBAR_FULLSCREEN:
             settings->priv->hide_thumbnailbar_fullscreen = g_value_get_boolean (value);
             break;
+        case PROP_OPEN_ENTIRE_FOLDER:
+            settings->priv->open_entire_folder= g_value_get_boolean (value);
+            break;
         case PROP_NAVBAR_POSITION:
             str_val = g_value_get_string (value);
 
@@ -557,6 +572,9 @@ rstto_settings_get_property    (GObject    *object,
         case PROP_HIDE_THUMBNAILBAR_FULLSCREEN:
             g_value_set_boolean (value, settings->priv->hide_thumbnailbar_fullscreen);
             break;
+        case PROP_OPEN_ENTIRE_FOLDER:
+            g_value_set_boolean (value, settings->priv->open_entire_folder);
+            break;
         case PROP_NAVBAR_POSITION:
             g_value_set_string (value, settings->priv->navigationbar_position);
             break;


More information about the Xfce4-commits mailing list