[PATCH] x11-fm/mate-file-manager and x11-fm/caja

Tomasz Sowa t.sowa at ttmath.org
Fri Aug 22 03:20:33 UTC 2014


Hi

There is a problem in caja with default manual sort order option,
I have mentioned it here:
http://forums.mate-desktop.org/viewtopic.php?f=2&t=3093

Applying:
# cd /usr/ports/x11-fm/caja/files
# fetch http://tmp.ttmath.org/patch-src_file-manager_fm-icon-view.c
# cd ..
# make all reinstall clean

The same patch can be applied to caja 1.6 (x11-fm/mate-file-manager)

-- 
Tomasz Sowa

--- src/file-manager/fm-icon-view.c.orig	2014-08-22 04:45:24.000000000 +0200
+++ src/file-manager/fm-icon-view.c	2014-08-22 04:43:44.000000000 +0200
@@ -865,6 +865,22 @@
 {
     const SortCriterion *default_sort_criterion;
     default_sort_criterion = get_sort_criterion_by_sort_type (get_default_sort_order (file, NULL));
+
+	if( default_sort_criterion == NULL )
+	{
+        /*
+         * default_sort_criterion will be NULL if default sort order is set to:
+         * 'directory' or 'atime'
+         * get_sort_criterion_by_sort_type() enumerates through 'sort_criteria' table
+         * but this table doesn't have 'directory' and 'atime' items
+         *
+         * may 'sort_criteria' table should have those two items too?
+         *
+         * temporarily changing it to 'sort by display name'
+         */
+        default_sort_criterion = &sort_criteria[0];
+	}
+
     g_return_val_if_fail (default_sort_criterion != NULL, NULL);
 
     return caja_file_get_metadata
@@ -994,6 +1010,35 @@
      keep_aligned);
 }
 
+
+/* maintainence of auto layout boolean
+ * it will be changed in default_sort_order_changed_callback()
+ */
+static gboolean default_directory_manual_layout = FALSE;
+
+static gboolean
+get_default_directory_manual_layout (void)
+{
+    static gboolean auto_storaged_added = FALSE;
+
+    if (auto_storaged_added == FALSE)
+    {
+        auto_storaged_added = TRUE;
+        int default_sort_order_enum = 0;
+
+        /* only read the value here, it will be changed in
+         * default_sort_order_changed_callback() callback in the future
+         */
+        default_sort_order_enum = g_settings_get_enum(caja_preferences,
+                                                      CAJA_PREFERENCES_DEFAULT_SORT_ORDER);
+
+        default_directory_manual_layout = (default_sort_order_enum == 0);
+    }
+
+    return default_directory_manual_layout;
+}
+
+
 static gboolean
 fm_icon_view_get_directory_auto_layout (FMIconView *icon_view,
                                         CajaFile *file)
@@ -1017,10 +1062,8 @@
 fm_icon_view_real_get_directory_auto_layout (FMIconView *icon_view,
         CajaFile *file)
 {
-
-
     return caja_file_get_boolean_metadata
-           (file, CAJA_METADATA_KEY_ICON_VIEW_AUTO_LAYOUT, TRUE);
+           (file, CAJA_METADATA_KEY_ICON_VIEW_AUTO_LAYOUT, !get_default_directory_manual_layout ());
 }
 
 static void
@@ -1050,7 +1093,7 @@
 
     caja_file_set_boolean_metadata
     (file, CAJA_METADATA_KEY_ICON_VIEW_AUTO_LAYOUT,
-     TRUE,
+     !get_default_directory_manual_layout (),
      auto_layout);
 }
 /* maintainence of tighter layout boolean */
@@ -1950,6 +1993,15 @@
 
     caja_icon_container_sort (icon_container);
 
+    /* Switch to manual layout of the default calls for it.
+     * This needs to happen last for the sort order menus
+     * to be in sync.
+     */
+    if (get_default_directory_manual_layout ())
+    {
+        switch_to_manual_layout (icon_view);
+    }
+
     update_layout_menus (icon_view);
 
     fm_icon_view_restore_default_zoom_level (view);
@@ -2722,19 +2774,42 @@
     CajaFile *file;
     char *sort_name;
     CajaIconContainer *icon_container;
+    int default_sort_order_local;
 
     g_return_if_fail (FM_IS_ICON_VIEW (callback_data));
 
     icon_view = FM_ICON_VIEW (callback_data);
-
     file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (icon_view));
-    sort_name = fm_icon_view_get_directory_sort_by (icon_view, file);
-    set_sort_criterion (icon_view, get_sort_criterion_by_metadata_text (sort_name));
-    g_free (sort_name);
-
     icon_container = get_icon_container (icon_view);
     g_return_if_fail (CAJA_IS_ICON_CONTAINER (icon_container));
 
+    default_sort_order_local = g_settings_get_enum (caja_preferences,
+    		                                        CAJA_PREFERENCES_DEFAULT_SORT_ORDER);
+
+    default_sort_order = (CajaFileSortType)default_sort_order_local;
+
+    if( default_sort_order == 0 )
+	{
+        /* default sort order is set as 'manually' */
+        default_directory_manual_layout = TRUE;
+
+        caja_icon_container_set_auto_layout (
+            icon_container,
+            fm_icon_view_get_directory_auto_layout(icon_view, file) );
+    }
+    else
+    {
+        default_directory_manual_layout = FALSE;
+
+        caja_icon_container_set_auto_layout (
+            icon_container,
+            fm_icon_view_get_directory_auto_layout(icon_view, file) );
+
+        sort_name = fm_icon_view_get_directory_sort_by (icon_view, file);
+        set_sort_criterion (icon_view, get_sort_criterion_by_metadata_text (sort_name));
+        g_free (sort_name);
+    }
+
     caja_icon_container_request_update_all (icon_container);
 }
 



More information about the freebsd-ports mailing list