Rewrote the recent file manager stuff
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 2 Mar 2009 10:47:07 +0000 (19:47 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 2 Mar 2009 10:47:07 +0000 (19:47 +0900)
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-output-window.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-window.c
src/ui/gui/psppire-window.h
src/ui/gui/psppire.c
src/ui/gui/psppire.h

index e2424cf0e96064a3114332b1a0f37b32ab58f32d..b17b1913356c949ddf3d6e6151b4548ebd245635 100644 (file)
@@ -314,13 +314,34 @@ on_weight_change (GObject *o, gint weight_index, gpointer data)
     }
 }
 
-/* Puts FILE_NAME into the recent list.
-   If it's already in the list, it moves it to the top
-*/
+#if 0
 static void
-add_most_recent (const char *file_name)
+dump_rm (GtkRecentManager *rm)
 {
+  GList *items = gtk_recent_manager_get_items (rm);
+
+  GList *i;
+
+  g_print ("Recent Items:\n");
+  for (i = items; i; i = i->next)
+    {
+      GtkRecentInfo *ri = i->data;
+
+      g_print ("Item: %s (Mime: %s) (Desc: %s) (URI: %s)\n",
+              gtk_recent_info_get_short_name (ri),
+              gtk_recent_info_get_mime_type (ri),
+              gtk_recent_info_get_description (ri),
+              gtk_recent_info_get_uri (ri)
+              );
+
+
+      gtk_recent_info_unref (ri);
+    }
+
+  g_list_free (items);
 }
+#endif
+
 
 void
 psppire_data_window_load_file (PsppireDataWindow *de,
@@ -339,7 +360,7 @@ psppire_data_window_load_file (PsppireDataWindow *de,
   if (execute_syntax (sss) )
     {
       psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
-      add_most_recent (file_name);
+      add_most_recent (file_name, the_recent_mgr);
     }
 
   psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
@@ -872,7 +893,8 @@ create_var_sheet_variable_popup_menu (PsppireDataWindow *de)
 
 
 static void
-on_recent_data_select (GtkMenuShell *menushell,   gpointer user_data)
+on_recent_data_select (GtkMenuShell *menushell,
+                      gpointer user_data)
 {
   gchar *file;
   PsppireDataWindow  *de = PSPPIRE_DATA_WINDOW (user_data);
@@ -1563,53 +1585,56 @@ psppire_data_window_init (PsppireDataWindow *de)
                      G_CALLBACK (regression_dialog), de);
   }
 
-
-#if 0
   {
-    GtkRecentManager *rm = gtk_recent_manager_get_default ();
-    GtkAction *recent_data = get_action_assert (de->builder, "file_recent-data");
-    GtkAction *recent_files = get_action_assert (de->builder, "file_recent-files");
-#if 0
-    GtkWidget *recent_separator = get_widget_assert (de->builder, "file_separator1");
-#endif
+    GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER));
 
-    GtkWidget *menu = gtk_recent_chooser_menu_new_for_manager (rm);
+    GtkWidget *recent_data =
+      gtk_ui_manager_get_widget (uim,"/ui/menubar/file/file_recent-data");
 
-    GtkRecentFilter *filter = gtk_recent_filter_new ();
+    GtkWidget *recent_files =
+      gtk_ui_manager_get_widget (uim,"/ui/menubar/file/file_recent-files");
 
-#if 0
-    gtk_widget_show (recent_data);
-    gtk_widget_show (recent_files);
-    gtk_widget_show (recent_separator);
-#endif
 
-    gtk_recent_filter_add_pattern (filter, "*.sav");
-    gtk_recent_filter_add_pattern (filter, "*.SAV");
+    GtkWidget *menu_data =
+      gtk_recent_chooser_menu_new_for_manager (the_recent_mgr);
+
+    GtkWidget *menu_files =
+      gtk_recent_chooser_menu_new_for_manager (the_recent_mgr);
+
+    {
+      GtkRecentFilter *filter = gtk_recent_filter_new ();
+
+      gtk_recent_filter_add_pattern (filter, "*.sav");
+      gtk_recent_filter_add_pattern (filter, "*.SAV");
+      gtk_recent_filter_add_pattern (filter, "*.por");
+      gtk_recent_filter_add_pattern (filter, "*.POR");
 
-    gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu), filter);
+      gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_data), filter);
+    }
 
-    gtk_action_set_sensitive (recent_data, TRUE);
-    g_signal_connect (menu, "selection-done",
-                     G_CALLBACK (on_recent_data_select), de);
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (recent_data), menu_data);
 
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (recent_data), menu);
 
+    g_signal_connect (menu_data, "selection-done",
+                     G_CALLBACK (on_recent_data_select),
+                     de);
 
-    filter = gtk_recent_filter_new ();
-    menu = gtk_recent_chooser_menu_new_for_manager (rm);
+    {
+      GtkRecentFilter *filter = gtk_recent_filter_new ();
 
-    gtk_recent_filter_add_pattern (filter, "*.sps");
-    gtk_recent_filter_add_pattern (filter, "*.SPS");
+      gtk_recent_filter_add_pattern (filter, "*.sps");
+      gtk_recent_filter_add_pattern (filter, "*.SPS");
 
-    gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu), filter);
+      gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_files), filter);
+    }
 
-    gtk_widget_set_sensitive (recent_files, TRUE);
-    g_signal_connect (menu, "selection-done",
-                     G_CALLBACK (on_recent_files_select), de);
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (recent_files), menu_files);
+
+    g_signal_connect (menu_files, "selection-done",
+                     G_CALLBACK (on_recent_files_select),
+                     de);
 
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (recent_files), menu);
   }
-#endif
 
   g_signal_connect (get_action_assert (de->builder,"file_new_syntax"),
                    "activate",
index 3e6b2e44099da9239498db26f0e5d915d86a698e..7f7d2765a78fbe46a65887105fbaa6777ae9ad61 100644 (file)
@@ -248,7 +248,7 @@ psppire_output_window_init (PsppireOutputWindow *window)
                    NULL);
 
   {
-    GtkUIManager *uim = GTK_UI_MANAGER (get_action_assert (xml, "uimanager1"));
+    GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER));
 
     PSPPIRE_WINDOW (window)->menu =
       GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar1/windows_menuitem/windows_minimise-all")->parent);
index ae9c1a4259ee382f708477472e8cad74f252eb9c..b735f35cb241088b58a5ebb5fe1b120d3d0cd524 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "psppire-data-window.h"
 #include "psppire-window-register.h"
+#include "psppire.h"
 #include "about.h"
 #include "psppire-syntax-window.h"
 #include "syntax-editor-source.h"
@@ -395,7 +396,9 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent)
       GtkWidget *se = psppire_syntax_window_new ();
 
       if ( psppire_syntax_window_load_from_file (PSPPIRE_SYNTAX_WINDOW (se), file_name, NULL) )
-       ;
+       {
+         add_most_recent (file_name, the_recent_mgr);
+       }
 
       gtk_widget_show (se);
     }
@@ -527,7 +530,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
 
 
   {
-  GtkUIManager *uim = GTK_UI_MANAGER (get_action_assert (xml, "uimanager1"));
+  GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER));
 
   PSPPIRE_WINDOW (window)->menu =
     GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar2/windows/windows_minimise_all")->parent);
index b7529ed06f1fdaf7bb32c5e3d2cc8a7297d6ad12..407ba9737296142db83d3cb86849cca6d5d87cad 100644 (file)
@@ -21,6 +21,7 @@
 #include <gtk/gtksignal.h>
 #include <gtk/gtkwindow.h>
 #include <gtk/gtkcheckmenuitem.h>
+#include <gtk/gtkmain.h>
 
 #include <stdlib.h>
 
@@ -545,3 +546,19 @@ psppire_window_save (PsppireWindow *w)
 
   i->save (w);
 }
+
+
+/* Puts FILE_NAME into the recent list.
+   If it's already in the list, it moves it to the top
+*/
+void
+add_most_recent (const char *file_name, GtkRecentManager *rm)
+{
+  gchar *uri = g_filename_to_uri  (file_name, NULL, NULL);
+
+  if ( uri )
+    gtk_recent_manager_add_item (rm, uri);
+
+  g_free (uri);
+}
+
index 8857429304f78b351f0eb6ccd7a673dec4f0a22c..e3da271e237208dd3bced081c0d1c7da8773099b 100644 (file)
@@ -24,6 +24,7 @@
 #include <gtk/gtkwindow.h>
 #include <gtk/gtkaction.h>
 #include <gtk/gtkmenushell.h>
+#include <gtk/gtkrecentmanager.h>
 
 G_BEGIN_DECLS
 
@@ -106,6 +107,9 @@ gint psppire_window_query_save (PsppireWindow *);
 
 void psppire_window_save (PsppireWindow *w);
 
+void add_most_recent (const char *file_name, GtkRecentManager *rm);
+
+
 G_END_DECLS
 
 #endif /* __PSPPIRE_WINDOW_H__ */
index 8a23346ce788667f611a5dede2ac4dd1cfff0b34..dbba57b69d6d0063866ba3b295eceba1f0fb0a62 100644 (file)
@@ -60,6 +60,7 @@
 
 #include <ui/source-init-opts.h>
 
+GtkRecentManager *the_recent_mgr = 0;
 PsppireDataStore *the_data_store = 0;
 PsppireVarStore *the_var_store = 0;
 
@@ -147,6 +148,9 @@ initialize (struct command_line_processor *clp, int argc, char **argv)
   journal_enable ();
   textdomain (PACKAGE);
 
+
+  the_recent_mgr = gtk_recent_manager_get_default ();
+
   the_data_window = psppire_data_window_new ();
 
   command_line_processor_replace_aux (clp, &post_init_argp, the_source_stream);
index a2cba9bbe495c8f7d7cc8788bc54a18747007cb4..0d990119469f8d89bb2f437ecb75196fb6cae5ff 100644 (file)
@@ -22,6 +22,7 @@
 struct command_line_processor ;
 extern const struct argp non_option_argp ;
 
+extern GtkRecentManager *the_recent_mgr;
 
 void initialize (struct command_line_processor *, int argc, char **argv);
 void de_initialize (void);