Improve behaviour of recent file lists.
authorJohn Darrington <john@darrington.wattle.id.au>
Wed, 4 Mar 2009 13:19:47 +0000 (22:19 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Wed, 4 Mar 2009 13:19:47 +0000 (22:19 +0900)
The code now deletes an item from the recent list, after
an unsuccessfull attempt to open it.
They are now sorted in most recently used order.

src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-window.c
src/ui/gui/psppire-window.h

index b17b1913356c949ddf3d6e6151b4548ebd245635..5849df4af26db6112a6e09f56934d64d4b8c83d7 100644 (file)
@@ -362,6 +362,10 @@ psppire_data_window_load_file (PsppireDataWindow *de,
       psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
       add_most_recent (file_name, the_recent_mgr);
     }
+  else
+    {
+      delete_recent (file_name, the_recent_mgr);
+    }
 
   psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
@@ -1585,7 +1589,7 @@ psppire_data_window_init (PsppireDataWindow *de)
                      G_CALLBACK (regression_dialog), de);
   }
 
-  {
+  { 
     GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
 
     GtkWidget *recent_data =
@@ -1609,6 +1613,8 @@ psppire_data_window_init (PsppireDataWindow *de)
       gtk_recent_filter_add_pattern (filter, "*.por");
       gtk_recent_filter_add_pattern (filter, "*.POR");
 
+      gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_data), GTK_RECENT_SORT_MRU);
+
       gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_data), filter);
     }
 
@@ -1625,6 +1631,8 @@ psppire_data_window_init (PsppireDataWindow *de)
       gtk_recent_filter_add_pattern (filter, "*.sps");
       gtk_recent_filter_add_pattern (filter, "*.SPS");
 
+      gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_files), GTK_RECENT_SORT_MRU);
+
       gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_files), filter);
     }
 
index d47b59b3d8b31bd0385167f0924d979123650cd6..e5998cc6ad2b24e250304a9a7d384e36733e56c3 100644 (file)
@@ -399,6 +399,10 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent)
        {
          add_most_recent (file_name, the_recent_mgr);
        }
+      else
+       {
+         delete_recent (file_name, the_recent_mgr);
+       }
 
       gtk_widget_show (se);
     }
index 628ed45cb2ec56426820edda1525600d6b1e9df9..6bd6603b60cedf9df509c5cffb2f1368fb2f677d 100644 (file)
@@ -592,3 +592,20 @@ add_most_recent (const char *file_name, GtkRecentManager *rm)
   g_free (uri);
 }
 
+
+
+/* 
+   If FILE_NAME exists in the recent list, then  delete it.
+ */
+void
+delete_recent (const char *file_name, GtkRecentManager *rm)
+{
+  gchar *uri = g_filename_to_uri  (file_name, NULL, NULL);
+
+  if ( uri )
+    gtk_recent_manager_remove_item (rm, uri, NULL);
+
+  g_free (uri);
+  
+}
+
index e3da271e237208dd3bced081c0d1c7da8773099b..67440ccd1232bcbd3e0ac9e4ad42b5e29a48e553 100644 (file)
@@ -108,6 +108,7 @@ gint psppire_window_query_save (PsppireWindow *);
 void psppire_window_save (PsppireWindow *w);
 
 void add_most_recent (const char *file_name, GtkRecentManager *rm);
+void delete_recent (const char *file_name, GtkRecentManager *rm);
 
 
 G_END_DECLS