[Goodies-commits] r6533 - ristretto/branches/ristretto-gio/src

Stephan Arts stephan at xfce.org
Fri Jan 23 20:50:31 CET 2009


Author: stephan
Date: 2009-01-23 19:50:31 +0000 (Fri, 23 Jan 2009)
New Revision: 6533

Modified:
   ristretto/branches/ristretto-gio/src/main.c
   ristretto/branches/ristretto-gio/src/main_window.c
   ristretto/branches/ristretto-gio/src/navigator.c
   ristretto/branches/ristretto-gio/src/settings.c
Log:
- Add file filter to file-open dialog
- Add mimetype selection for cli files
- Fix 'Close All'
- Remember 'current-uri' for file-open dialog


Modified: ristretto/branches/ristretto-gio/src/main.c
===================================================================
--- ristretto/branches/ristretto-gio/src/main.c	2009-01-23 18:52:12 UTC (rev 6532)
+++ ristretto/branches/ristretto-gio/src/main.c	2009-01-23 19:50:31 UTC (rev 6533)
@@ -17,6 +17,8 @@
  */
 
 #include <config.h>
+#include <string.h>
+
 #include <glib.h>
 #include <gio/gio.h>
 
@@ -130,11 +132,20 @@
 static gboolean
 cb_rstto_open_files (RsttoOpenFiles *rof)
 {
+    GFile *file;
+    GFileInfo *file_info;
+    const gchar *content_type;
     if (rof->iter < rof->argc)
     {
-        GFile *file = g_file_new_for_commandline_arg (rof->argv[rof->iter]);
-        rstto_navigator_add_file (rof->navigator, file, NULL);
-	rof->iter++;
+        file = g_file_new_for_commandline_arg (rof->argv[rof->iter]);
+        file_info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL);
+        content_type = g_file_info_get_attribute_string (file_info, "standard::content-type");
+
+        if (strncmp (content_type, "image/", 6) == 0)
+        {
+            rstto_navigator_add_file (rof->navigator, file, NULL);
+        }
+        rof->iter++;
         return TRUE;
     }
     return FALSE;

Modified: ristretto/branches/ristretto-gio/src/main_window.c
===================================================================
--- ristretto/branches/ristretto-gio/src/main_window.c	2009-01-23 18:52:12 UTC (rev 6532)
+++ ristretto/branches/ristretto-gio/src/main_window.c	2009-01-23 19:50:31 UTC (rev 6533)
@@ -734,7 +734,14 @@
     GtkWidget *dialog, *err_dialog;
     gint response;
     GFile *file;
+    GSList *files, *_files_iter;
+    GValue current_uri_val = {0, };
 
+    g_value_init (&current_uri_val, G_TYPE_STRING);
+    g_object_get_property (G_OBJECT(window->priv->settings_manager), "current-uri", &current_uri_val);
+
+    GtkFileFilter *filter = gtk_file_filter_new();
+
     dialog = gtk_file_chooser_dialog_new(_("Open image"),
                                          GTK_WINDOW(window),
                                          GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -742,21 +749,40 @@
                                          GTK_STOCK_OPEN, GTK_RESPONSE_OK,
                                          NULL);
 
+    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE);
+    if (g_value_get_string (&current_uri_val))
+        gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog), g_value_get_string (&current_uri_val));
+
+    gtk_file_filter_add_pixbuf_formats (filter);
+    gtk_file_filter_set_name (filter, _("Images"));
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+
+
     response = gtk_dialog_run(GTK_DIALOG(dialog));
     gtk_widget_hide (dialog);
     if(response == GTK_RESPONSE_OK)
     {
-        file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
-        if (rstto_navigator_add_file (window->priv->props.navigator, file, NULL) == FALSE)
+        files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
+        _files_iter = files;
+        while (_files_iter)
         {
-            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 = _files_iter->data;
+            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);
+            }
+            _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)));
+        g_object_set_property (G_OBJECT(window->priv->settings_manager), "current-uri", &current_uri_val);
+
     }
 
     gtk_widget_destroy(dialog);
@@ -913,7 +939,7 @@
 static void
 cb_rstto_main_window_close_all (GtkWidget *widget, RsttoMainWindow *window)
 {
-    g_debug ("%s", __FUNCTION__);
+    rstto_navigator_remove_all (window->priv->props.navigator);
 }
 
 /**

Modified: ristretto/branches/ristretto-gio/src/navigator.c
===================================================================
--- ristretto/branches/ristretto-gio/src/navigator.c	2009-01-23 18:52:12 UTC (rev 6532)
+++ ristretto/branches/ristretto-gio/src/navigator.c	2009-01-23 19:50:31 UTC (rev 6533)
@@ -35,6 +35,9 @@
 static void
 rstto_navigator_dispose(GObject *object);
 
+static gint
+cb_rstto_navigator_image_name_compare_func (RsttoImage *a, RsttoImage *b);
+
 static GObjectClass *parent_class = NULL;
 
 enum
@@ -145,7 +148,7 @@
     RsttoImage *image = rstto_image_new (file);
     if (image)
     {
-        navigator->priv->images = g_list_prepend (navigator->priv->images, image);
+        navigator->priv->images = g_list_insert_sorted (navigator->priv->images, image, (GCompareFunc)cb_rstto_navigator_image_name_compare_func);
         navigator->priv->n_images++;
 
         g_signal_emit (G_OBJECT (navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_INVALIDATE_ITERS], 0, NULL);
@@ -170,7 +173,8 @@
 
     iter->iter = iter->list;
 
-    g_list_foreach (iter->list, (GFunc)g_object_ref, NULL);
+    if (iter->list)
+        g_list_foreach (iter->list, (GFunc)g_object_ref, NULL);
 
     return iter;
 }
@@ -261,6 +265,7 @@
 {
     g_list_foreach (navigator->priv->images, (GFunc)g_object_unref, NULL);
     g_list_free (navigator->priv->images);
+    navigator->priv->images = NULL;
     g_signal_emit (G_OBJECT (navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_INVALIDATE_ITERS], 0, NULL);
 }
 
@@ -274,3 +279,18 @@
     
     return FALSE;
 }
+
+static gint
+cb_rstto_navigator_image_name_compare_func (RsttoImage *a, RsttoImage *b)
+{
+    gchar *a_base = g_file_get_basename (rstto_image_get_file (a));  
+    gchar *b_base = g_file_get_basename (rstto_image_get_file (b));  
+    gint result = 0;
+
+    result = g_strcasecmp (a_base, b_base);
+
+
+    g_free (a_base);
+    g_free (b_base);
+    return result;
+}

Modified: ristretto/branches/ristretto-gio/src/settings.c
===================================================================
--- ristretto/branches/ristretto-gio/src/settings.c	2009-01-23 18:52:12 UTC (rev 6532)
+++ ristretto/branches/ristretto-gio/src/settings.c	2009-01-23 19:50:31 UTC (rev 6533)
@@ -56,6 +56,7 @@
     PROP_SHOW_TOOLBAR,
     PROP_WINDOW_WIDTH,
     PROP_WINDOW_HEIGHT,
+    PROP_CURRENT_URI,
 };
 
 GType
@@ -91,6 +92,7 @@
     gboolean show_toolbar;
     guint    window_width;
     guint    window_height;
+    gchar   *last_file_path;
 };
 
 
@@ -115,6 +117,7 @@
     xfconf_g_property_bind (settings->priv->channel, "/window/width", G_TYPE_UINT, settings, "window-width");
     xfconf_g_property_bind (settings->priv->channel, "/window/height", G_TYPE_UINT, settings, "window-height");
     xfconf_g_property_bind (settings->priv->channel, "/window/show-toolbar", G_TYPE_BOOLEAN, settings, "show-toolbar");
+    xfconf_g_property_bind (settings->priv->channel, "/file/current-uri", G_TYPE_STRING, settings, "current-uri");
 }
 
 
@@ -138,7 +141,6 @@
                                   "",
                                   TRUE,
                                   G_PARAM_READWRITE);
-
     g_object_class_install_property (object_class,
                                      PROP_SHOW_TOOLBAR,
                                      pspec);
@@ -150,7 +152,6 @@
                                   G_MAXUINT,
                                   600,
                                   G_PARAM_READWRITE);
-
     g_object_class_install_property (object_class,
                                      PROP_WINDOW_WIDTH,
                                      pspec);
@@ -162,10 +163,18 @@
                                   G_MAXUINT,
                                   400,
                                   G_PARAM_READWRITE);
-
     g_object_class_install_property (object_class,
                                      PROP_WINDOW_HEIGHT,
                                      pspec);
+
+    pspec = g_param_spec_string  ("current-uri",
+                                  "",
+                                  "",
+                                  "file://~/",
+                                  G_PARAM_READWRITE);
+    g_object_class_install_property (object_class,
+                                     PROP_CURRENT_URI,
+                                     pspec);
 }
 
 /**
@@ -249,6 +258,11 @@
         case PROP_WINDOW_HEIGHT:
             settings->priv->window_height = g_value_get_uint (value);
             break;
+        case PROP_CURRENT_URI:
+            if (settings->priv->last_file_path)
+                g_free (settings->priv->last_file_path);
+            settings->priv->last_file_path = g_value_dup_string (value);
+            break;
         default:
             break;
     }
@@ -274,6 +288,9 @@
         case PROP_WINDOW_HEIGHT:
             g_value_set_uint (value, settings->priv->window_height);
             break;
+        case PROP_CURRENT_URI:
+            g_value_set_string (value, settings->priv->last_file_path);
+            break;
         default:
             break;
 




More information about the Goodies-commits mailing list