You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
348 lines
11 KiB
348 lines
11 KiB
https://sourceforge.net/tracker/?func=detail&aid=3249971&group_id=163434&atid=827735
|
|
When using GtkRecent for the management of recently used files, Xournal's recently used
|
|
files also appear in the shell. That's very convenient for the new document-centric shells
|
|
such as Gnome Shell and Unity.
|
|
Timo Kluck ( tkluck ) - 2011-03-27 10:40:08 PDT
|
|
|
|
=== modified file 'src/main.c'
|
|
--- src/main.c 2011-03-10 18:14:21 +0000
|
|
+++ src/main.c 2011-03-27 16:32:52 +0000
|
|
@@ -334,7 +334,6 @@
|
|
|
|
if (bgpdf.status != STATUS_NOT_INIT) shutdown_bgpdf();
|
|
|
|
- save_mru_list();
|
|
if (ui.auto_save_prefs) save_config_to_file();
|
|
|
|
return 0;
|
|
|
|
=== modified file 'src/xo-callbacks.c'
|
|
--- src/xo-callbacks.c 2011-03-10 18:14:21 +0000
|
|
+++ src/xo-callbacks.c 2011-03-27 16:32:52 +0000
|
|
@@ -3101,32 +3101,36 @@
|
|
|
|
|
|
void
|
|
-on_mru_activate (GtkMenuItem *menuitem,
|
|
+on_mru_activate (GtkRecentChooser *recentChooser,
|
|
gpointer user_data)
|
|
{
|
|
- int which;
|
|
gboolean success;
|
|
+ gchar *uri, *name;
|
|
GtkWidget *dialog;
|
|
|
|
end_text();
|
|
if (!ok_to_close()) return; // user aborted on save confirmation
|
|
|
|
- for (which = 0 ; which < MRU_SIZE; which++) {
|
|
- if (ui.mrumenu[which] == GTK_WIDGET(menuitem)) break;
|
|
- }
|
|
- if (which == MRU_SIZE || ui.mru[which] == NULL) return; // not found...
|
|
-
|
|
+ uri = gtk_recent_chooser_get_current_uri (recentChooser);
|
|
+ name = g_filename_from_uri (uri, NULL, NULL);
|
|
set_cursor_busy(TRUE);
|
|
- success = open_journal(ui.mru[which]);
|
|
+ success = open_journal(name);
|
|
set_cursor_busy(FALSE);
|
|
- if (success) return;
|
|
+ if (success) {
|
|
+ g_free(uri);
|
|
+ g_free(name);
|
|
+ return;
|
|
+ }
|
|
|
|
/* open failed */
|
|
dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), ui.mru[which]);
|
|
+ GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), name);
|
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
|
gtk_widget_destroy(dialog);
|
|
- delete_mru_entry(which);
|
|
+
|
|
+ delete_mru_entry(name);
|
|
+ g_free(uri);
|
|
+ g_free(name);
|
|
}
|
|
|
|
|
|
|
|
=== modified file 'src/xo-callbacks.h'
|
|
--- src/xo-callbacks.h 2011-03-10 18:14:21 +0000
|
|
+++ src/xo-callbacks.h 2011-03-27 16:32:52 +0000
|
|
@@ -481,7 +481,7 @@
|
|
gpointer user_data);
|
|
|
|
void
|
|
-on_mru_activate (GtkMenuItem *menuitem,
|
|
+on_mru_activate (GtkRecentChooser *recentChooser,
|
|
gpointer user_data);
|
|
|
|
void
|
|
|
|
=== modified file 'src/xo-file.c'
|
|
--- src/xo-file.c 2011-03-10 18:14:21 +0000
|
|
+++ src/xo-file.c 2011-03-27 17:09:20 +0000
|
|
@@ -1211,99 +1211,53 @@
|
|
}
|
|
}
|
|
|
|
-// initialize the recent files list
|
|
+// initialize GtkRecentManager. Also backwards compatibility: import recent files into GtkRecentManager
|
|
void init_mru(void)
|
|
{
|
|
- int i;
|
|
+ GtkRecentFilter *recentFilter = gtk_recent_filter_new ();
|
|
+ gtk_recent_filter_add_application ( recentFilter, "xournal");
|
|
+ gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (GET_COMPONENT("fileRecentFiles_menu")), recentFilter);
|
|
+
|
|
gsize lfptr;
|
|
- char s[5];
|
|
GIOChannel *f;
|
|
- gchar *str;
|
|
+ gchar *str, *uri;
|
|
GIOStatus status;
|
|
+ GtkRecentManager *recentManager = gtk_recent_manager_get_default ();
|
|
|
|
- g_strlcpy(s, "mru0", 5);
|
|
- for (s[3]='0', i=0; i<MRU_SIZE; s[3]++, i++) {
|
|
- ui.mrumenu[i] = GET_COMPONENT(s);
|
|
- ui.mru[i] = NULL;
|
|
- }
|
|
f = g_io_channel_new_file(ui.mrufile, "r", NULL);
|
|
if (f) status = G_IO_STATUS_NORMAL;
|
|
else status = G_IO_STATUS_ERROR;
|
|
- i = 0;
|
|
- while (status == G_IO_STATUS_NORMAL && i<MRU_SIZE) {
|
|
+ while (status == G_IO_STATUS_NORMAL) {
|
|
lfptr = 0;
|
|
status = g_io_channel_read_line(f, &str, NULL, &lfptr, NULL);
|
|
if (status == G_IO_STATUS_NORMAL && lfptr>0) {
|
|
str[lfptr] = 0;
|
|
- ui.mru[i] = str;
|
|
- i++;
|
|
+ uri = g_filename_to_uri (str, NULL, NULL);
|
|
+ gtk_recent_manager_add_item (recentManager, uri);
|
|
+ g_free(uri);
|
|
+ g_free(str);
|
|
}
|
|
}
|
|
if (f) {
|
|
g_io_channel_shutdown(f, FALSE, NULL);
|
|
g_io_channel_unref(f);
|
|
}
|
|
- update_mru_menu();
|
|
-}
|
|
-
|
|
-void update_mru_menu(void)
|
|
-{
|
|
- int i;
|
|
- gboolean anyone = FALSE;
|
|
- gchar *tmp;
|
|
|
|
- for (i=0; i<MRU_SIZE; i++) {
|
|
- if (ui.mru[i]!=NULL) {
|
|
- tmp = g_strdup_printf("_%d %s", i+1,
|
|
- g_strjoinv("__", g_strsplit_set(g_basename(ui.mru[i]),"_",-1)));
|
|
- gtk_label_set_text_with_mnemonic(GTK_LABEL(gtk_bin_get_child(GTK_BIN(ui.mrumenu[i]))),
|
|
- tmp);
|
|
- g_free(tmp);
|
|
- gtk_widget_show(ui.mrumenu[i]);
|
|
- anyone = TRUE;
|
|
- }
|
|
- else gtk_widget_hide(ui.mrumenu[i]);
|
|
- }
|
|
- gtk_widget_set_sensitive(GET_COMPONENT("fileRecentFiles"), anyone);
|
|
+ g_unlink (ui.mrufile);
|
|
}
|
|
|
|
void new_mru_entry(char *name)
|
|
{
|
|
- int i, j;
|
|
-
|
|
- for (i=0;i<MRU_SIZE;i++)
|
|
- if (ui.mru[i]!=NULL && !strcmp(ui.mru[i], name)) {
|
|
- g_free(ui.mru[i]);
|
|
- for (j=i+1; j<MRU_SIZE; j++) ui.mru[j-1] = ui.mru[j];
|
|
- ui.mru[MRU_SIZE-1]=NULL;
|
|
- }
|
|
- if (ui.mru[MRU_SIZE-1]!=NULL) g_free(ui.mru[MRU_SIZE-1]);
|
|
- for (j=MRU_SIZE-1; j>=1; j--) ui.mru[j] = ui.mru[j-1];
|
|
- ui.mru[0] = g_strdup(name);
|
|
- update_mru_menu();
|
|
-}
|
|
-
|
|
-void delete_mru_entry(int which)
|
|
-{
|
|
- int i;
|
|
-
|
|
- if (ui.mru[which]!=NULL) g_free(ui.mru[which]);
|
|
- for (i=which+1;i<MRU_SIZE;i++)
|
|
- ui.mru[i-1] = ui.mru[i];
|
|
- ui.mru[MRU_SIZE-1] = NULL;
|
|
- update_mru_menu();
|
|
-}
|
|
-
|
|
-void save_mru_list(void)
|
|
-{
|
|
- FILE *f;
|
|
- int i;
|
|
-
|
|
- f = fopen(ui.mrufile, "w");
|
|
- if (f==NULL) return;
|
|
- for (i=0; i<MRU_SIZE; i++)
|
|
- if (ui.mru[i]!=NULL) fprintf(f, "%s\n", ui.mru[i]);
|
|
- fclose(f);
|
|
+ gchar *uri = g_filename_to_uri (name, NULL, NULL);
|
|
+ gtk_recent_manager_add_item (gtk_recent_manager_get_default(), uri);
|
|
+ g_free(uri);
|
|
+}
|
|
+
|
|
+void delete_mru_entry(char *name)
|
|
+{
|
|
+ gchar *uri = g_filename_to_uri(name, NULL, NULL);
|
|
+ gtk_recent_manager_remove_item(gtk_recent_manager_get_default(), uri, NULL);
|
|
+ g_free(uri);
|
|
}
|
|
|
|
void init_config_default(void)
|
|
|
|
=== modified file 'src/xo-file.h'
|
|
--- src/xo-file.h 2011-03-10 18:14:21 +0000
|
|
+++ src/xo-file.h 2011-03-27 16:32:52 +0000
|
|
@@ -28,10 +28,8 @@
|
|
void bgpdf_update_bg(int pageno, struct BgPdfPage *bgpg);
|
|
|
|
void init_mru(void);
|
|
-void update_mru_menu(void);
|
|
void new_mru_entry(char *name);
|
|
-void delete_mru_entry(int which);
|
|
-void save_mru_list(void);
|
|
+void delete_mru_entry(char *name);
|
|
|
|
void init_config_default(void);
|
|
void load_config_from_file(void);
|
|
|
|
=== modified file 'src/xo-interface.c'
|
|
--- src/xo-interface.c 2011-03-10 18:14:21 +0000
|
|
+++ src/xo-interface.c 2011-03-27 17:09:20 +0000
|
|
@@ -43,14 +43,6 @@
|
|
GtkWidget *separator1;
|
|
GtkWidget *fileRecentFiles;
|
|
GtkWidget *fileRecentFiles_menu;
|
|
- GtkWidget *mru0;
|
|
- GtkWidget *mru1;
|
|
- GtkWidget *mru2;
|
|
- GtkWidget *mru3;
|
|
- GtkWidget *mru4;
|
|
- GtkWidget *mru5;
|
|
- GtkWidget *mru6;
|
|
- GtkWidget *mru7;
|
|
GtkWidget *separator22;
|
|
GtkWidget *filePrintOptions;
|
|
GtkWidget *image624;
|
|
@@ -397,41 +389,9 @@
|
|
gtk_widget_show (fileRecentFiles);
|
|
gtk_container_add (GTK_CONTAINER (menuFile_menu), fileRecentFiles);
|
|
|
|
- fileRecentFiles_menu = gtk_menu_new ();
|
|
+ fileRecentFiles_menu = gtk_recent_chooser_menu_new_for_manager (gtk_recent_manager_get_default ());
|
|
gtk_menu_item_set_submenu (GTK_MENU_ITEM (fileRecentFiles), fileRecentFiles_menu);
|
|
-
|
|
- mru0 = gtk_menu_item_new_with_mnemonic (_("0"));
|
|
- gtk_widget_show (mru0);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru0);
|
|
-
|
|
- mru1 = gtk_menu_item_new_with_mnemonic (_("1"));
|
|
- gtk_widget_show (mru1);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru1);
|
|
-
|
|
- mru2 = gtk_menu_item_new_with_mnemonic (_("2"));
|
|
- gtk_widget_show (mru2);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru2);
|
|
-
|
|
- mru3 = gtk_menu_item_new_with_mnemonic (_("3"));
|
|
- gtk_widget_show (mru3);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru3);
|
|
-
|
|
- mru4 = gtk_menu_item_new_with_mnemonic (_("4"));
|
|
- gtk_widget_show (mru4);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru4);
|
|
-
|
|
- mru5 = gtk_menu_item_new_with_mnemonic (_("5"));
|
|
- gtk_widget_show (mru5);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru5);
|
|
-
|
|
- mru6 = gtk_menu_item_new_with_mnemonic (_("6"));
|
|
- gtk_widget_show (mru6);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru6);
|
|
-
|
|
- mru7 = gtk_menu_item_new_with_mnemonic (_("7"));
|
|
- gtk_widget_show (mru7);
|
|
- gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru7);
|
|
-
|
|
+
|
|
separator22 = gtk_separator_menu_item_new ();
|
|
gtk_widget_show (separator22);
|
|
gtk_container_add (GTK_CONTAINER (menuFile_menu), separator22);
|
|
@@ -1967,28 +1927,7 @@
|
|
g_signal_connect ((gpointer) fileSaveAs, "activate",
|
|
G_CALLBACK (on_fileSaveAs_activate),
|
|
NULL);
|
|
- g_signal_connect ((gpointer) mru0, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru1, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru2, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru3, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru4, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru5, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru6, "activate",
|
|
- G_CALLBACK (on_mru_activate),
|
|
- NULL);
|
|
- g_signal_connect ((gpointer) mru7, "activate",
|
|
+ g_signal_connect ((gpointer) fileRecentFiles_menu, "item-activated",
|
|
G_CALLBACK (on_mru_activate),
|
|
NULL);
|
|
g_signal_connect ((gpointer) filePrintOptions, "activate",
|
|
@@ -2520,14 +2459,6 @@
|
|
GLADE_HOOKUP_OBJECT (winMain, separator1, "separator1");
|
|
GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles, "fileRecentFiles");
|
|
GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles_menu, "fileRecentFiles_menu");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru0, "mru0");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru1, "mru1");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru2, "mru2");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru3, "mru3");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru4, "mru4");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru5, "mru5");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru6, "mru6");
|
|
- GLADE_HOOKUP_OBJECT (winMain, mru7, "mru7");
|
|
GLADE_HOOKUP_OBJECT (winMain, separator22, "separator22");
|
|
GLADE_HOOKUP_OBJECT (winMain, filePrintOptions, "filePrintOptions");
|
|
GLADE_HOOKUP_OBJECT (winMain, image624, "image624");
|
|
|
|
=== modified file 'src/xournal.h'
|
|
--- src/xournal.h 2011-03-10 18:14:21 +0000
|
|
+++ src/xournal.h 2011-03-27 16:32:52 +0000
|
|
@@ -257,8 +257,6 @@
|
|
GdkCursor *cursor;
|
|
gboolean progressive_bg; // update PDF bg's one at a time
|
|
char *mrufile, *configfile; // file names for MRU & config
|
|
- char *mru[MRU_SIZE]; // MRU data
|
|
- GtkWidget *mrumenu[MRU_SIZE];
|
|
gboolean bg_apply_all_pages;
|
|
int window_default_width, window_default_height, scrollbar_step_increment;
|
|
gboolean print_ruling; // print the paper ruling ?
|
|
|