]> git.donarmstrong.com Git - xournal.git/commitdiff
Public release 0.2.1.
authorauroux <auroux>
Sat, 3 Jun 2006 13:38:32 +0000 (13:38 +0000)
committerauroux <auroux>
Sat, 3 Jun 2006 13:38:32 +0000 (13:38 +0000)
20 files changed:
ChangeLog
NEWS
README
configure.in
html-doc/manual.html
src/TODO
src/main.c
src/xo-callbacks.c
src/xo-callbacks.h
src/xo-file.c
src/xo-file.h
src/xo-interface.c
src/xo-misc.c
src/xo-misc.h
src/xo-paint.c
src/xo-paint.h
src/xo-print.c
src/xournal [deleted file]
src/xournal.h
xournal.glade

index 7627fdd3f76d15535b39ce891270e8f14f7df7a8..644872b91e960c6ccc7977b6b9118815449618c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,13 @@
-Version ?:
+Version 0.2.1 (Jun 3, 2006):
+  - recently used files listed in file menu
+  - can change color or thickness of pen strokes in selection
+  - function to apply paper style to all pages
   - can specify on command line a PDF file to annotate
+  - suggest a derived file name for PDF annotation
+  - speed up switching between pages
   - fixed a bug in XInput initialization (thanks to Luca de Cicco)
+  - fixed a bug in print ranges (thanks to Mathieu Bouchard)
+  - fixed a refresh bug in rescaling bitmap backgrounds
 
 Version 0.2 (Jan 29, 2006):
   - PDF file annotation using xpdf's pdftoppm
diff --git a/NEWS b/NEWS
index d94177b66bd32bac0e8dba1f0e2a687c1679f1a0..c1e9555fda150cab7bd800a61033849795dcb41e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
-Version 0.2 (Jan 29, 2006)
+Version 0.2.1 (June 3, 2006)
 
 Installation:  see INSTALL
 User's manual: see html-doc/manual.html
 Updates:       see http://math.mit.edu/~auroux/software/xournal/
+
+See also: http://sourceforge.net/projects/xournal
diff --git a/README b/README
index d94177b66bd32bac0e8dba1f0e2a687c1679f1a0..c1e9555fda150cab7bd800a61033849795dcb41e 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,7 @@
-Version 0.2 (Jan 29, 2006)
+Version 0.2.1 (June 3, 2006)
 
 Installation:  see INSTALL
 User's manual: see html-doc/manual.html
 Updates:       see http://math.mit.edu/~auroux/software/xournal/
+
+See also: http://sourceforge.net/projects/xournal
index 85c4e00b20187fd1fefad6530c6b506c87c00855..d7e52a97e54b4dcab1331e9b87f6e59e435000c0 100644 (file)
@@ -10,20 +10,11 @@ AC_PROG_CC
 AM_PROG_CC_STDC
 AC_HEADER_STDC
 
-dnl set this var to NONE (PC) or other thing (Maemo)
-usehildon='NONE'
-if test "x$usehildon" != xNONE
-then
-  pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0 hildon-libs libosso"
-else
-  pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0"
-fi
+pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0"
 PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
 AC_SUBST(PACKAGE_CFLAGS)
 AC_SUBST(PACKAGE_LIBS)
 
-AM_CONDITIONAL(USE_HILDON, test "x$usehildon" != xNONE)
-
 AC_OUTPUT([
 Makefile
 src/Makefile
index a7bfcc44a0bc3d1ccc2957641cf92955fb9811f2..e1036cb86e2378594d171e24543fd3ac894a981b 100644 (file)
@@ -24,7 +24,7 @@
   Xournal User's Manual
 </h2>
 <p style="font-size: 0.95em; text-align: center; color: rgb(0,0,0)">
- Version 0.2
+ Version 0.2.1
 </p>
 <hr />
 <p>
@@ -449,6 +449,20 @@ A core file may also be helpful.
 <a name="changelog"></a>
 <h2 class="subtitle">Version history</h2>
 <p>
+Version 0.2.1 (Jun 3, 2006):
+<ul>
+ <li>recently used files listed in file menu</li>
+ <li>can change color or thickness of pen strokes in selection</li>
+ <li>function to apply paper style to all pages</li>
+ <li>can specify on command line a PDF file to annotate</li>
+ <li>suggest a derived file name for PDF annotation</li>
+ <li>speed up switching between pages</li>
+ <li>fixed a bug in XInput initialization (thanks to Luca de Cicco)</li>
+ <li>fixed a bug in print ranges (thanks to Mathieu Bouchard)</li>
+ <li>fixed a refresh bug in rescaling bitmap backgrounds</li>
+</ul>
+</p>
+<p>
 Version 0.2 (January 29, 2006):
 <ul>
  <li>PDF file annotation using xpdf's pdftoppm
index fcb3fcbc28c801ed54b98863c64cba4294b3a09c..8323a095b19711d834026c7a4c126099b88c7fb0 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -1,32 +1,27 @@
-- print range bugfix (SEE PATCH?)
-- non-attached annotation => suggest a derived filename for save-as
-  when opening a PDF file from command-line, store full path in name
-- gtk_message_dialog_format_secondary_text in xo-print.c crashes 2.4 ?
-- lasso selection tool
-- prefs file, save prefs
-- recent files list
+List of features to be implemented (not in any particular order)
+----------------------------------------------------------------
+
 - map tools to stylus buttons (maybe: btn click on toolbar item affects
   the corresponding tool; tool switching cleaner than for eraser)
-- flatten (incl undo/redo...) - enabled only if nlayers>1
-- bg: apply to all pages (SEE PATCH?)
-- recolor selection / change pen stroke thickness
-- resize selection
 - move selection to another page by drag-drop
    (should apply to vertspacer when origin moves to another page,
      but in the up direction only do so when all the stuff fits on prev page)
    (SEE ALSO FEATURE REQUEST 1472482 and reply to it - optional behavior too?)
+- lasso selection tool
+- prefs file, save prefs
+- flatten (incl undo/redo...) - enabled only if nlayers>1
+- resize selection
 - text tool, font chooser, default font
 - color chooser (papercolor, pen color); maybe more default colors
 - printing: print-to-PDF? (with & without pdf background to merge)
             opacity issue for highlighter strokes (maybe print them below ?)
             save gnome printer settings (throughout a session, and on disk)
                  (maybe a separate config file .xournal/gnome-print-settings)
-....
 - file print-options, own print-to-ps/pdf 
 - help index
 - pressure sensitivity
 - insert images (screen capture or from file or from clipboard), 
   not as full-page backgrounds (new ITEM type)
 - more pen/highlighter shapes (chisel)
-- convert to/from Jarnal format
+- convert to/from Jarnal format; to/from MS Journal format???
 - recalibration upon screen resize / compensation for miscalibration
index 52b889c78710a50e9dc45316cf6edc2a1257e7ef..7a5e641410865dcee879546b57a8e7aaed2f7d65 100644 (file)
@@ -31,7 +31,6 @@ void hide_unimplemented(void)
   gtk_widget_hide(GET_COMPONENT("filePrintOptions"));
   gtk_widget_hide(GET_COMPONENT("journalFlatten"));
   gtk_widget_hide(GET_COMPONENT("papercolorOther"));
-  gtk_widget_hide(GET_COMPONENT("journalApplyAllPages"));
   gtk_widget_hide(GET_COMPONENT("toolsText"));
   gtk_widget_hide(GET_COMPONENT("buttonText"));
   gtk_widget_hide(GET_COMPONENT("toolsSelectRegion"));
@@ -51,11 +50,18 @@ void init_stuff (int argc, char *argv[])
   GdkScreen *screen;
   int i;
   struct Brush *b;
-  gboolean can_xinput;
+  gboolean can_xinput, success;
+  gchar *tmppath, *tmpfn;
 
   // we need an empty canvas prior to creating the journal structures
   canvas = GNOME_CANVAS (gnome_canvas_new_aa ());
 
+  // initialize config file names
+  tmppath = g_build_filename(g_get_home_dir(), CONFIG_DIR, NULL);
+  g_mkdir(tmppath, 0700); // safer (MRU data may be confidential)
+  ui.mrufile = g_build_filename(tmppath, MRU_FILE, NULL);
+  g_free(tmppath);
+
   // initialize data
   // TODO: load this from a preferences file
 
@@ -84,15 +90,8 @@ void init_stuff (int argc, char *argv[])
   undo = NULL; redo = NULL;
   journal.pages = NULL;
   bgpdf.status = STATUS_NOT_INIT;
-  if (argc == 1) new_journal();
-  else if (!open_journal(argv[1])) {
-    new_journal();
-    w = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
-       GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", argv[1]);
-    gtk_dialog_run(GTK_DIALOG(w));
-    gtk_widget_destroy(w);
-  }
+
+  new_journal();  
   
   ui.cur_item_type = ITEM_NONE;
   ui.cur_item = NULL;
@@ -207,6 +206,37 @@ void init_stuff (int argc, char *argv[])
     
   update_undo_redo_enabled();
   update_copy_paste_enabled();
+
+  // show everything...
+  
+  gtk_widget_show (winMain);
+  update_cursor();
+
+  // load the MRU
+  
+  init_mru();
+  
+  // and finally, open a file specified on the command line
+  // (moved here because display parameters weren't initialized yet...)
+  
+  if (argc == 1) return;
+  set_cursor_busy(TRUE);
+  if (g_path_is_absolute(argv[1]))
+    tmpfn = g_strdup(argv[1]);
+  else {
+    tmppath = g_get_current_dir();
+    tmpfn = g_build_filename(tmppath, argv[1], NULL);
+    g_free(tmppath);
+  }
+  success = open_journal(tmpfn);
+  g_free(tmpfn);
+  set_cursor_busy(FALSE);
+  if (!success) {
+    w = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
+       GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", argv[1]);
+    gtk_dialog_run(GTK_DIALOG(w));
+    gtk_widget_destroy(w);
+  }
 }
 
 
@@ -238,13 +268,12 @@ main (int argc, char *argv[])
   
   init_stuff (argc, argv);
   
-  gtk_widget_show (winMain);
-  update_cursor();
-
   gtk_main ();
   
   if (bgpdf.status != STATUS_NOT_INIT) shutdown_bgpdf();
   if (bgpdf.status != STATUS_NOT_INIT) end_bgpdf_shutdown();
+
+  save_mru_list();
   
   return 0;
 }
index 88b61acca5f007b3c678e746addc6c7b995da10c..032a5c8b648ac777fc3f39361cd84098d122127d 100644 (file)
@@ -188,11 +188,18 @@ on_fileSaveAs_activate                 (GtkMenuItem     *menuitem,
      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
      
   if (ui.filename!=NULL) {
-    if (ui.filename[0] == '/')
-      gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), ui.filename);
-    else
-      gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), ui.filename);
-  } else {
+    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), ui.filename);
+    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(ui.filename));
+  } 
+  else
+  if (bgpdf.status!=STATUS_NOT_INIT && bgpdf.file_domain == DOMAIN_ABSOLUTE 
+      && bgpdf.filename != NULL) {
+    filename = g_strdup_printf("%s.xoj", bgpdf.filename->s);
+    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), filename);
+    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(filename));
+    g_free(filename); 
+  }
+  else {
     curtime = time(NULL);
     strftime(stime, 30, "%F-Note-%H-%M.xoj", localtime(&curtime));
     gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), stime);
@@ -329,6 +336,8 @@ on_filePrint_activate                  (GtkMenuItem     *menuitem,
     switch(gnome_print_dialog_get_range(GNOME_PRINT_DIALOG(printDialog))) {
       case GNOME_PRINT_RANGE_RANGE: 
         gnome_print_dialog_get_range_page(GNOME_PRINT_DIALOG(printDialog), &fromPage, &toPage);
+        fromPage--;
+        toPage--;
         break;
       default: 
         fromPage = 0; 
@@ -366,9 +375,8 @@ on_filePrintPDF_activate               (GtkMenuItem     *menuitem,
     } 
     else
       in_fn = g_strdup_printf("%s.pdf", ui.filename);
-    if (in_fn[0] == '/')
-      gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), in_fn);
-    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), in_fn);
+    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), in_fn);
+    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(in_fn));
   } else {
     curtime = time(NULL);
     strftime(stime, 30, "%F-Note-%H-%M.pdf", localtime(&curtime));
@@ -425,6 +433,7 @@ on_editUndo_activate                   (GtkMenuItem     *menuitem,
   GList *list, *itemlist;
   struct UndoErasureData *erasure;
   struct Item *it;
+  struct Brush tmp_brush;
   struct Background *tmp_bg;
   double tmp_x, tmp_y;
   
@@ -485,7 +494,7 @@ on_editUndo_activate                   (GtkMenuItem     *menuitem,
       make_page_clipbox(undo->page);
     }
     update_canvas_bg(undo->page);
-    do_switch_page(g_list_index(journal.pages, undo->page), TRUE);
+    do_switch_page(g_list_index(journal.pages, undo->page), TRUE, TRUE);
   }
   else if (undo->type == ITEM_NEW_DEFAULT_BG) {
     tmp_bg = ui.default_page.bg;
@@ -510,13 +519,13 @@ on_editUndo_activate                   (GtkMenuItem     *menuitem,
         // so do_switch_page() won't try to remap the layers of the defunct page
     if (ui.pageno >= undo->val) ui.pageno--;
     if (ui.pageno < 0) ui.pageno = 0;
-    do_switch_page(ui.pageno, TRUE);
+    do_switch_page(ui.pageno, TRUE, TRUE);
   }
   else if (undo->type == ITEM_DELETE_PAGE) {
     journal.pages = g_list_insert(journal.pages, undo->page, undo->val);
     journal.npages++;
     make_canvas_items(); // re-create the canvas items
-    do_switch_page(undo->val, TRUE);
+    do_switch_page(undo->val, TRUE, TRUE);
   }
   else if (undo->type == ITEM_MOVESEL) {
     for (itemlist = undo->itemlist; itemlist != NULL; itemlist = itemlist->next) {
@@ -541,7 +550,7 @@ on_editUndo_activate                   (GtkMenuItem     *menuitem,
     undo->layer->group = NULL;
     undo->page->layers = g_list_remove(undo->page->layers, undo->layer);
     undo->page->nlayers--;
-    do_switch_page(ui.pageno, FALSE); // don't stay with bad cur_layer info
+    do_switch_page(ui.pageno, FALSE, FALSE); // don't stay with bad cur_layer info
   }
   else if (undo->type == ITEM_DELETE_LAYER) {
     // special case of -1: deleted the last layer, created a new one
@@ -572,7 +581,20 @@ on_editUndo_activate                   (GtkMenuItem     *menuitem,
             "width-units", it->brush.thickness, NULL);
       }
     }
-    do_switch_page(ui.pageno, FALSE); // show the restored layer & others...
+    do_switch_page(ui.pageno, FALSE, FALSE); // show the restored layer & others...
+  }
+  else if (undo->type == ITEM_REPAINTSEL) {
+    for (itemlist = undo->itemlist, list = undo->auxlist; itemlist!=NULL;
+           itemlist = itemlist->next, list = list->next) {
+      it = (struct Item *)itemlist->data;
+      g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush));
+      g_memmove(&(it->brush), list->data, sizeof(struct Brush));
+      g_memmove(list->data, &tmp_brush, sizeof(struct Brush));
+      if (it->type == ITEM_STROKE && it->canvas_item != NULL)
+        gnome_canvas_item_set(it->canvas_item, 
+          "fill-color-rgba", it->brush.color_rgba,
+          "width-units", it->brush.thickness, NULL);
+    }
   }
   
   // move item from undo to redo stack
@@ -594,6 +616,7 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
   GList *list, *itemlist, *target;
   struct UndoErasureData *erasure;
   struct Item *it;
+  struct Brush tmp_brush;
   struct Background *tmp_bg;
   struct Layer *l;
   double tmp_x, tmp_y;
@@ -654,7 +677,7 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
       make_page_clipbox(redo->page);
     }
     update_canvas_bg(redo->page);
-    do_switch_page(g_list_index(journal.pages, redo->page), TRUE);
+    do_switch_page(g_list_index(journal.pages, redo->page), TRUE, TRUE);
   }
   else if (redo->type == ITEM_NEW_DEFAULT_BG) {
     tmp_bg = ui.default_page.bg;
@@ -680,7 +703,7 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
     
     journal.pages = g_list_insert(journal.pages, redo->page, redo->val);
     journal.npages++;
-    do_switch_page(redo->val, TRUE);
+    do_switch_page(redo->val, TRUE, TRUE);
   }
   else if (redo->type == ITEM_DELETE_PAGE) {
     // unmap all the canvas items
@@ -698,7 +721,7 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
     if (ui.pageno > undo->val || ui.pageno == journal.npages) ui.pageno--;
     ui.cur_page = NULL;
       // so do_switch_page() won't try to remap the layers of the defunct page
-    do_switch_page(ui.pageno, TRUE);
+    do_switch_page(ui.pageno, TRUE, TRUE);
   }
   else if (redo->type == ITEM_MOVESEL) {
     for (itemlist = redo->itemlist; itemlist != NULL; itemlist = itemlist->next) {
@@ -729,7 +752,7 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
             redo->page->bg->canvas_item);
     redo->page->layers = g_list_insert(redo->page->layers, redo->layer, redo->val);
     redo->page->nlayers++;
-    do_switch_page(ui.pageno, FALSE);
+    do_switch_page(ui.pageno, FALSE, FALSE);
   }
   else if (redo->type == ITEM_DELETE_LAYER) {
     gtk_object_destroy(GTK_OBJECT(redo->layer->group));
@@ -744,7 +767,20 @@ on_editRedo_activate                   (GtkMenuItem     *menuitem,
       redo->page->layers = g_list_append(redo->page->layers, redo->layer2);
       redo->page->nlayers++;
     }
-    do_switch_page(ui.pageno, FALSE);
+    do_switch_page(ui.pageno, FALSE, FALSE);
+  }
+  else if (redo->type == ITEM_REPAINTSEL) {
+    for (itemlist = redo->itemlist, list = redo->auxlist; itemlist!=NULL;
+           itemlist = itemlist->next, list = list->next) {
+      it = (struct Item *)itemlist->data;
+      g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush));
+      g_memmove(&(it->brush), list->data, sizeof(struct Brush));
+      g_memmove(list->data, &tmp_brush, sizeof(struct Brush));
+      if (it->type == ITEM_STROKE && it->canvas_item != NULL)
+        gnome_canvas_item_set(it->canvas_item, 
+          "fill-color-rgba", it->brush.color_rgba,
+          "width-units", it->brush.thickness, NULL);
+    }
   }
   
   // move item from redo to undo stack
@@ -797,14 +833,16 @@ on_viewContinuous_activate             (GtkMenuItem     *menuitem,
 {
   GtkAdjustment *v_adj;
   double yscroll;
+  struct Page *pg;
 
   if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return;
   if (ui.view_continuous) return;
   ui.view_continuous = TRUE;
   v_adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas));
-  yscroll = gtk_adjustment_get_value(v_adj) - ui.cur_page->voffset*ui.zoom;
+  pg = ui.cur_page;
+  yscroll = gtk_adjustment_get_value(v_adj) - pg->voffset*ui.zoom;
   update_page_stuff();
-  gtk_adjustment_set_value(v_adj, yscroll + ui.cur_page->voffset*ui.zoom);
+  gtk_adjustment_set_value(v_adj, yscroll + pg->voffset*ui.zoom);
   // force a refresh
   gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
 }
@@ -875,7 +913,7 @@ void
 on_viewFirstPage_activate              (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-  do_switch_page(0, TRUE);
+  do_switch_page(0, TRUE, FALSE);
 }
 
 
@@ -884,7 +922,7 @@ on_viewPreviousPage_activate           (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
   if (ui.pageno == 0) return;
-  do_switch_page(ui.pageno-1, TRUE);
+  do_switch_page(ui.pageno-1, TRUE, FALSE);
 }
 
 
@@ -897,7 +935,7 @@ on_viewNextPage_activate               (GtkMenuItem     *menuitem,
     on_journalNewPageEnd_activate(menuitem, user_data);
     return;
   }
-  do_switch_page(ui.pageno+1, TRUE);
+  do_switch_page(ui.pageno+1, TRUE, FALSE);
 }
 
 
@@ -905,7 +943,7 @@ void
 on_viewLastPage_activate               (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-  do_switch_page(journal.npages-1, TRUE);
+  do_switch_page(journal.npages-1, TRUE, FALSE);
 }
 
 
@@ -947,7 +985,7 @@ on_journalNewPageBefore_activate       (GtkMenuItem     *menuitem,
   pg = new_page(ui.cur_page);
   journal.pages = g_list_insert(journal.pages, pg, ui.pageno);
   journal.npages++;
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
   
   prepare_new_undo();
   undo->type = ITEM_NEW_PAGE;
@@ -967,7 +1005,7 @@ on_journalNewPageAfter_activate        (GtkMenuItem     *menuitem,
   pg = new_page(ui.cur_page);
   journal.pages = g_list_insert(journal.pages, pg, ui.pageno+1);
   journal.npages++;
-  do_switch_page(ui.pageno+1, TRUE);
+  do_switch_page(ui.pageno+1, TRUE, TRUE);
 
   prepare_new_undo();
   undo->type = ITEM_NEW_PAGE;
@@ -987,7 +1025,7 @@ on_journalNewPageEnd_activate          (GtkMenuItem     *menuitem,
   pg = new_page((struct Page *)g_list_last(journal.pages)->data);
   journal.pages = g_list_append(journal.pages, pg);
   journal.npages++;
-  do_switch_page(journal.npages-1, TRUE);
+  do_switch_page(journal.npages-1, TRUE, TRUE);
 
   prepare_new_undo();
   undo->type = ITEM_NEW_PAGE;
@@ -1027,7 +1065,7 @@ on_journalDeletePage_activate          (GtkMenuItem     *menuitem,
   if (ui.pageno == journal.npages) ui.pageno--;
   ui.cur_page = NULL;
      // so do_switch_page() won't try to remap the layers of the defunct page
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 
@@ -1172,7 +1210,7 @@ on_journalPaperSize_activate           (GtkMenuItem     *menuitem,
 
   make_page_clipbox(ui.cur_page);
   update_canvas_bg(ui.cur_page);
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 
@@ -1376,7 +1414,7 @@ on_journalLoadBackground_activate      (GtkMenuItem     *menuitem,
     gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
     rescale_bg_pixmaps();
   }
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 void
@@ -1420,7 +1458,7 @@ on_journalScreenshot_activate          (GtkMenuItem     *menuitem,
     gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
     rescale_bg_pixmaps();
   }
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 
@@ -1428,7 +1466,31 @@ void
 on_journalApplyAllPages_activate       (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-
+  struct Page *page;
+  GList *pglist;
+  
+  if (ui.cur_page->bg->type != BG_SOLID) return;
+  reset_selection();
+  for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) {
+    page = (struct Page *)pglist->data;
+    prepare_new_undo();
+    undo->type = ITEM_NEW_BG_RESIZE;
+    undo->page = page;
+    undo->bg = page->bg;
+    undo->val_x = page->width;
+    undo->val_y = page->height; 
+    if (pglist->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO;
+    if (pglist->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO;
+    page->bg = (struct Background *)g_memdup(ui.cur_page->bg, sizeof(struct Background));
+    page->width = ui.cur_page->width;
+    page->height = ui.cur_page->height;
+    page->bg->canvas_item = undo->bg->canvas_item;
+    undo->bg->canvas_item = NULL;
+  
+    make_page_clipbox(page);
+    update_canvas_bg(page);
+  }
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 
@@ -2008,7 +2070,7 @@ on_canvas_button_press_event           (GtkWidget       *widget,
     ui.pageno++;
     tmppage = g_list_nth_data(journal.pages, ui.pageno);
   }
-  if (page_change) do_switch_page(ui.pageno, FALSE);
+  if (page_change) do_switch_page(ui.pageno, FALSE, FALSE);
   
   // can't paint on the background...
 
@@ -2114,7 +2176,7 @@ on_canvas_expose_event                 (GtkWidget       *widget,
                                         GdkEventExpose  *event,
                                         gpointer         user_data)
 {
-
+  if (ui.view_continuous && ui.progressive_bg) rescale_bg_pixmaps();
   return FALSE;
 }
 
@@ -2184,7 +2246,6 @@ on_canvas_motion_notify_event          (GtkWidget       *widget,
   return FALSE;
 }
 
-
 void
 on_comboLayer_changed                  (GtkComboBox     *combobox,
                                         gpointer         user_data)
@@ -2261,7 +2322,7 @@ on_vscroll_changed                     (GtkAdjustment   *adjustment,
     ui.pageno--;
     tmppage = g_list_nth_data(journal.pages, ui.pageno);
   }
-  if (need_update) do_switch_page(ui.pageno, FALSE);
+  if (need_update) do_switch_page(ui.pageno, FALSE, FALSE);
   return;
 }
 
@@ -2286,7 +2347,7 @@ on_spinPageNo_value_changed            (GtkSpinButton   *spinbutton,
   if (val == ui.pageno) return;
   if (val < 0) val = 0;
   if (val > journal.npages-1) val = journal.npages-1;
-  do_switch_page(val, TRUE);
+  do_switch_page(val, TRUE, FALSE);
 }
 
 
@@ -2310,7 +2371,7 @@ on_journalDefaultBackground_activate   (GtkMenuItem     *menuitem,
   
   make_page_clipbox(ui.cur_page);
   update_canvas_bg(ui.cur_page);
-  do_switch_page(ui.pageno, TRUE);
+  do_switch_page(ui.pageno, TRUE, TRUE);
 }
 
 
@@ -2502,3 +2563,32 @@ on_optionsProgressiveBG_activate       (GtkMenuItem     *menuitem,
   if (!ui.progressive_bg) rescale_bg_pixmaps();
 }
 
+
+void
+on_mru_activate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+  int which;
+  gboolean success;
+  GtkWidget *dialog;
+  
+  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...
+
+  set_cursor_busy(TRUE);
+  success = open_journal(ui.mru[which]);
+  set_cursor_busy(FALSE);
+  if (success) 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_dialog_run(GTK_DIALOG(dialog));
+  gtk_widget_destroy(dialog);
+  delete_mru_entry(which);
+}
+
index a4799a87778bb5122fc4b9d048f70e7c48cbba04..622a25e25039c73f23ef0717095da27ee3b18be0 100644 (file)
@@ -479,3 +479,7 @@ void
 on_optionsProgressiveBG_activate       (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
+
+void
+on_mru_activate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
index a052475c94b7c217f6d5b14b67f348ea284d9563..c180d610befec9b12ef71deedbd87b84f27c8adf 100644 (file)
@@ -1107,3 +1107,93 @@ void bgpdf_update_bg(int pageno, struct BgPdfPage *bgpg)
   }
 }
 
+// initialize the recent files list
+void init_mru(void)
+{
+  int i;
+  gsize lfptr;
+  char s[5];
+  GIOChannel *f;
+  gchar *str;
+  GIOStatus status;
+  
+  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) {
+    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++;
+    }
+  }
+  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;
+  
+  for (i=0; i<MRU_SIZE; i++) {
+    if (ui.mru[i]!=NULL) {
+      gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(ui.mrumenu[i]))),
+          g_basename(ui.mru[i]));
+      gtk_widget_show(ui.mrumenu[i]);
+      anyone = TRUE;
+    }
+    else gtk_widget_hide(ui.mrumenu[i]);
+  }
+  gtk_widget_set_sensitive(GET_COMPONENT("fileRecentFiles"), anyone);
+}
+
+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);
+}
index cc92e5f861a8e0fd953b8645258a6d534de6098a..8b34adc8e288db80b21ab713f1eed51f3d1f6f25 100644 (file)
@@ -29,3 +29,9 @@ gboolean init_bgpdf(char *pdfname, gboolean create_pages, int file_domain);
 
 void bgpdf_create_page_with_bg(int pageno, struct BgPdfPage *bgpg);
 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);
index fed9fcecf5bf0b710dba094d7a7e169399b66304..1efc4952446ba990c1d517f2f9711e84215f08ea 100644 (file)
@@ -36,13 +36,24 @@ create_winMain (void)
   GtkWidget *menuFile_menu;
   GtkWidget *fileNew;
   GtkWidget *fileNewBackground;
-  GtkWidget *image500;
+  GtkWidget *image533;
   GtkWidget *fileOpen;
   GtkWidget *fileSave;
   GtkWidget *fileSaveAs;
   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 *image501;
+  GtkWidget *image534;
   GtkWidget *filePrint;
   GtkWidget *filePrintPDF;
   GtkWidget *separator2;
@@ -68,21 +79,21 @@ create_winMain (void)
   GtkWidget *viewZoomOut;
   GtkWidget *viewNormalSize;
   GtkWidget *viewPageWidth;
-  GtkWidget *image502;
+  GtkWidget *image535;
   GtkWidget *separator5;
   GtkWidget *viewFirstPage;
-  GtkWidget *image503;
+  GtkWidget *image536;
   GtkWidget *viewPreviousPage;
-  GtkWidget *image504;
+  GtkWidget *image537;
   GtkWidget *viewNextPage;
-  GtkWidget *image505;
+  GtkWidget *image538;
   GtkWidget *viewLastPage;
-  GtkWidget *image506;
+  GtkWidget *image539;
   GtkWidget *separator6;
   GtkWidget *viewShowLayer;
-  GtkWidget *image507;
+  GtkWidget *image540;
   GtkWidget *viewHideLayer;
-  GtkWidget *image508;
+  GtkWidget *image541;
   GtkWidget *menuJournal;
   GtkWidget *menuJournal_menu;
   GtkWidget *journalNewPageBefore;
@@ -115,7 +126,7 @@ create_winMain (void)
   GtkWidget *paperstyleGraph;
   GtkWidget *paperstyleNA;
   GtkWidget *journalLoadBackground;
-  GtkWidget *image509;
+  GtkWidget *image542;
   GtkWidget *journalScreenshot;
   GtkWidget *journalApplyAllPages;
   GtkWidget *separator19;
@@ -134,7 +145,7 @@ create_winMain (void)
   GtkWidget *toolsVerticalSpace;
   GtkWidget *separator16;
   GtkWidget *toolsColor;
-  GtkWidget *image510;
+  GtkWidget *image543;
   GtkWidget *toolsColor_menu;
   GSList *colorBlack_group = NULL;
   GtkWidget *colorBlack;
@@ -177,7 +188,7 @@ create_winMain (void)
   GtkWidget *highlighterMedium;
   GtkWidget *highlighterThick;
   GtkWidget *toolsTextFont;
-  GtkWidget *image511;
+  GtkWidget *image544;
   GtkWidget *separator10;
   GtkWidget *toolsDefaultPen;
   GtkWidget *toolsDefaultEraser;
@@ -306,9 +317,9 @@ create_winMain (void)
   gtk_widget_show (fileNewBackground);
   gtk_container_add (GTK_CONTAINER (menuFile_menu), fileNewBackground);
 
-  image500 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image500);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (fileNewBackground), image500);
+  image533 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image533);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (fileNewBackground), image533);
 
   fileOpen = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group);
   gtk_widget_show (fileOpen);
@@ -327,13 +338,57 @@ create_winMain (void)
   gtk_container_add (GTK_CONTAINER (menuFile_menu), separator1);
   gtk_widget_set_sensitive (separator1, FALSE);
 
+  fileRecentFiles = gtk_menu_item_new_with_mnemonic ("Recent Files");
+  gtk_widget_show (fileRecentFiles);
+  gtk_container_add (GTK_CONTAINER (menuFile_menu), fileRecentFiles);
+
+  fileRecentFiles_menu = gtk_menu_new ();
+  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);
+  gtk_widget_set_sensitive (separator22, FALSE);
+
   filePrintOptions = gtk_image_menu_item_new_with_mnemonic ("Print Options");
   gtk_widget_show (filePrintOptions);
   gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrintOptions);
 
-  image501 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image501);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (filePrintOptions), image501);
+  image534 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image534);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (filePrintOptions), image534);
 
   filePrint = gtk_image_menu_item_new_from_stock ("gtk-print", accel_group);
   gtk_widget_show (filePrint);
@@ -437,9 +492,9 @@ create_winMain (void)
   gtk_widget_show (viewPageWidth);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewPageWidth);
 
-  image502 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image502);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPageWidth), image502);
+  image535 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image535);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPageWidth), image535);
 
   separator5 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator5);
@@ -450,33 +505,33 @@ create_winMain (void)
   gtk_widget_show (viewFirstPage);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewFirstPage);
 
-  image503 = gtk_image_new_from_stock ("gtk-goto-first", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image503);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewFirstPage), image503);
+  image536 = gtk_image_new_from_stock ("gtk-goto-first", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image536);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewFirstPage), image536);
 
   viewPreviousPage = gtk_image_menu_item_new_with_mnemonic ("Previous Page");
   gtk_widget_show (viewPreviousPage);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewPreviousPage);
 
-  image504 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image504);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPreviousPage), image504);
+  image537 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image537);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPreviousPage), image537);
 
   viewNextPage = gtk_image_menu_item_new_with_mnemonic ("Next Page");
   gtk_widget_show (viewNextPage);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewNextPage);
 
-  image505 = gtk_image_new_from_stock ("gtk-media-forward", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image505);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewNextPage), image505);
+  image538 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image538);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewNextPage), image538);
 
   viewLastPage = gtk_image_menu_item_new_with_mnemonic ("Last Page");
   gtk_widget_show (viewLastPage);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewLastPage);
 
-  image506 = gtk_image_new_from_stock ("gtk-goto-last", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image506);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewLastPage), image506);
+  image539 = gtk_image_new_from_stock ("gtk-goto-last", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image539);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewLastPage), image539);
 
   separator6 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator6);
@@ -487,17 +542,17 @@ create_winMain (void)
   gtk_widget_show (viewShowLayer);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewShowLayer);
 
-  image507 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image507);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewShowLayer), image507);
+  image540 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image540);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewShowLayer), image540);
 
   viewHideLayer = gtk_image_menu_item_new_with_mnemonic ("Hide Layer");
   gtk_widget_show (viewHideLayer);
   gtk_container_add (GTK_CONTAINER (menuView_menu), viewHideLayer);
 
-  image508 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image508);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewHideLayer), image508);
+  image541 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image541);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewHideLayer), image541);
 
   menuJournal = gtk_menu_item_new_with_mnemonic ("_Journal");
   gtk_widget_show (menuJournal);
@@ -642,9 +697,9 @@ create_winMain (void)
   gtk_widget_show (journalLoadBackground);
   gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalLoadBackground);
 
-  image509 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image509);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (journalLoadBackground), image509);
+  image542 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image542);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (journalLoadBackground), image542);
 
   journalScreenshot = gtk_menu_item_new_with_mnemonic ("Background Screenshot");
   gtk_widget_show (journalScreenshot);
@@ -730,9 +785,9 @@ create_winMain (void)
   gtk_widget_show (toolsColor);
   gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsColor);
 
-  image510 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image510);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsColor), image510);
+  image543 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image543);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsColor), image543);
 
   toolsColor_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsColor), toolsColor_menu);
@@ -933,9 +988,9 @@ create_winMain (void)
   gtk_widget_show (toolsTextFont);
   gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsTextFont);
 
-  image511 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image511);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsTextFont), image511);
+  image544 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image544);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsTextFont), image544);
 
   separator10 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator10);
@@ -1522,6 +1577,30 @@ create_winMain (void)
   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_CALLBACK (on_mru_activate),
+                    NULL);
   g_signal_connect ((gpointer) filePrintOptions, "activate",
                     G_CALLBACK (on_filePrintOptions_activate),
                     NULL);
@@ -1936,13 +2015,24 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, menuFile_menu, "menuFile_menu");
   GLADE_HOOKUP_OBJECT (winMain, fileNew, "fileNew");
   GLADE_HOOKUP_OBJECT (winMain, fileNewBackground, "fileNewBackground");
-  GLADE_HOOKUP_OBJECT (winMain, image500, "image500");
+  GLADE_HOOKUP_OBJECT (winMain, image533, "image533");
   GLADE_HOOKUP_OBJECT (winMain, fileOpen, "fileOpen");
   GLADE_HOOKUP_OBJECT (winMain, fileSave, "fileSave");
   GLADE_HOOKUP_OBJECT (winMain, fileSaveAs, "fileSaveAs");
   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, image501, "image501");
+  GLADE_HOOKUP_OBJECT (winMain, image534, "image534");
   GLADE_HOOKUP_OBJECT (winMain, filePrint, "filePrint");
   GLADE_HOOKUP_OBJECT (winMain, filePrintPDF, "filePrintPDF");
   GLADE_HOOKUP_OBJECT (winMain, separator2, "separator2");
@@ -1967,21 +2057,21 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, viewZoomOut, "viewZoomOut");
   GLADE_HOOKUP_OBJECT (winMain, viewNormalSize, "viewNormalSize");
   GLADE_HOOKUP_OBJECT (winMain, viewPageWidth, "viewPageWidth");
-  GLADE_HOOKUP_OBJECT (winMain, image502, "image502");
+  GLADE_HOOKUP_OBJECT (winMain, image535, "image535");
   GLADE_HOOKUP_OBJECT (winMain, separator5, "separator5");
   GLADE_HOOKUP_OBJECT (winMain, viewFirstPage, "viewFirstPage");
-  GLADE_HOOKUP_OBJECT (winMain, image503, "image503");
+  GLADE_HOOKUP_OBJECT (winMain, image536, "image536");
   GLADE_HOOKUP_OBJECT (winMain, viewPreviousPage, "viewPreviousPage");
-  GLADE_HOOKUP_OBJECT (winMain, image504, "image504");
+  GLADE_HOOKUP_OBJECT (winMain, image537, "image537");
   GLADE_HOOKUP_OBJECT (winMain, viewNextPage, "viewNextPage");
-  GLADE_HOOKUP_OBJECT (winMain, image505, "image505");
+  GLADE_HOOKUP_OBJECT (winMain, image538, "image538");
   GLADE_HOOKUP_OBJECT (winMain, viewLastPage, "viewLastPage");
-  GLADE_HOOKUP_OBJECT (winMain, image506, "image506");
+  GLADE_HOOKUP_OBJECT (winMain, image539, "image539");
   GLADE_HOOKUP_OBJECT (winMain, separator6, "separator6");
   GLADE_HOOKUP_OBJECT (winMain, viewShowLayer, "viewShowLayer");
-  GLADE_HOOKUP_OBJECT (winMain, image507, "image507");
+  GLADE_HOOKUP_OBJECT (winMain, image540, "image540");
   GLADE_HOOKUP_OBJECT (winMain, viewHideLayer, "viewHideLayer");
-  GLADE_HOOKUP_OBJECT (winMain, image508, "image508");
+  GLADE_HOOKUP_OBJECT (winMain, image541, "image541");
   GLADE_HOOKUP_OBJECT (winMain, menuJournal, "menuJournal");
   GLADE_HOOKUP_OBJECT (winMain, menuJournal_menu, "menuJournal_menu");
   GLADE_HOOKUP_OBJECT (winMain, journalNewPageBefore, "journalNewPageBefore");
@@ -2012,7 +2102,7 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, paperstyleGraph, "paperstyleGraph");
   GLADE_HOOKUP_OBJECT (winMain, paperstyleNA, "paperstyleNA");
   GLADE_HOOKUP_OBJECT (winMain, journalLoadBackground, "journalLoadBackground");
-  GLADE_HOOKUP_OBJECT (winMain, image509, "image509");
+  GLADE_HOOKUP_OBJECT (winMain, image542, "image542");
   GLADE_HOOKUP_OBJECT (winMain, journalScreenshot, "journalScreenshot");
   GLADE_HOOKUP_OBJECT (winMain, journalApplyAllPages, "journalApplyAllPages");
   GLADE_HOOKUP_OBJECT (winMain, separator19, "separator19");
@@ -2030,7 +2120,7 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, toolsVerticalSpace, "toolsVerticalSpace");
   GLADE_HOOKUP_OBJECT (winMain, separator16, "separator16");
   GLADE_HOOKUP_OBJECT (winMain, toolsColor, "toolsColor");
-  GLADE_HOOKUP_OBJECT (winMain, image510, "image510");
+  GLADE_HOOKUP_OBJECT (winMain, image543, "image543");
   GLADE_HOOKUP_OBJECT (winMain, toolsColor_menu, "toolsColor_menu");
   GLADE_HOOKUP_OBJECT (winMain, colorBlack, "colorBlack");
   GLADE_HOOKUP_OBJECT (winMain, colorBlue, "colorBlue");
@@ -2068,7 +2158,7 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, highlighterMedium, "highlighterMedium");
   GLADE_HOOKUP_OBJECT (winMain, highlighterThick, "highlighterThick");
   GLADE_HOOKUP_OBJECT (winMain, toolsTextFont, "toolsTextFont");
-  GLADE_HOOKUP_OBJECT (winMain, image511, "image511");
+  GLADE_HOOKUP_OBJECT (winMain, image544, "image544");
   GLADE_HOOKUP_OBJECT (winMain, separator10, "separator10");
   GLADE_HOOKUP_OBJECT (winMain, toolsDefaultPen, "toolsDefaultPen");
   GLADE_HOOKUP_OBJECT (winMain, toolsDefaultEraser, "toolsDefaultEraser");
index eb30aac92da2e4dfe4fbc37c487be07223feb265..ed6be0392b5ca5f331b5aa8204ff1d61359b8cd0 100644 (file)
@@ -11,6 +11,8 @@
 #include "xo-support.h"
 #include "xo-callbacks.h"
 #include "xo-misc.h"
+#include "xo-file.h"
+#include "xo-paint.h"
 
 // some global constants
 
@@ -877,7 +879,7 @@ void update_highlighter_props_menu(void)
   }
 }
 
-void do_switch_page(int pg, gboolean rescroll)
+void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all)
 {
   int i;
   struct Layer *layer;
@@ -902,7 +904,10 @@ void do_switch_page(int pg, gboolean rescroll)
   if (rescroll) { // scroll and force a refresh
     gtk_adjustment_set_value(gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)),
       ui.cur_page->voffset*ui.zoom);
-    gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
+    if (refresh_all) 
+      gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
+    else if (!ui.view_continuous)
+      gnome_canvas_item_move(GNOME_CANVAS_ITEM(ui.cur_page->group), 0., 0.);
   }
 }
 
@@ -1047,6 +1052,8 @@ void update_page_stuff(void)
      ui.cur_page->bg->type == BG_SOLID);
   gtk_widget_set_sensitive(GET_COMPONENT("journalSetAsDefault"),
      ui.cur_page->bg->type == BG_SOLID);
+  gtk_widget_set_sensitive(GET_COMPONENT("journalApplyAllPages"),
+     ui.cur_page->bg->type == BG_SOLID);
   
   gtk_widget_set_sensitive(GET_COMPONENT("viewFirstPage"), ui.pageno!=0);
   gtk_widget_set_sensitive(GET_COMPONENT("viewPreviousPage"), ui.pageno!=0);
@@ -1093,6 +1100,7 @@ void update_file_name(char *filename)
   else p = g_utf8_next_char(p);
   g_snprintf(tmp, 100, "Xournal - %s", p);
   gtk_window_set_title(GTK_WINDOW (winMain), tmp);
+  new_mru_entry(filename);
 }
 
 void update_undo_redo_enabled(void)
@@ -1142,7 +1150,9 @@ void process_color_activate(GtkMenuItem *menuitem, int color)
   if (ui.toolno == TOOL_PEN || ui.toolno == TOOL_HIGHLIGHTER)
     set_cur_color(color);
 
-  // later add selection tools
+  if ((ui.toolno == TOOL_SELECTREGION || ui.toolno == TOOL_SELECTRECT) &&
+       ui.selection != NULL)
+    recolor_selection(color);
 
   update_color_buttons();
   update_color_menu();
@@ -1160,6 +1170,8 @@ void process_thickness_activate(GtkMenuItem *menuitem, int tool, int val)
   }
 
   if (tool >= NUM_STROKE_TOOLS) {
+    if ((tool == TOOL_SELECTREGION || tool == TOOL_SELECTRECT) && ui.selection != NULL)
+      rethicken_selection(val);
     update_thickness_buttons(); // undo illegal button selection
     return;
   }
index 8662cd3a5bb147b5ca39d0c1c327f77e0e10c6ae..7fd40cbe6e1a0f4a667a2aa80a11bb2b4f527027 100644 (file)
@@ -47,7 +47,7 @@ void update_file_name(char *filename);
 void update_undo_redo_enabled(void);
 void update_copy_paste_enabled(void);
 
-void do_switch_page(int pg, gboolean rescroll);
+void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all);
 void set_cur_color(int color);
 void process_color_activate(GtkMenuItem *menuitem, int color);
 void process_thickness_activate(GtkMenuItem *menuitem, int tool, int val);
index 348334daa5b45e66cdccbf8ab56fe59356ebd29e..2aed31798ce01055354443bf16e91c58bd22136b 100644 (file)
@@ -774,3 +774,61 @@ void clipboard_paste(void)
   gtk_selection_data_free(sel_data);
   update_copy_paste_enabled();
 }
+
+// modify the color or thickness of pen strokes in a selection
+
+void recolor_selection(int color)
+{
+  GList *itemlist;
+  struct Item *item;
+  struct Brush *brush;
+  
+  if (ui.selection == NULL) return;
+  prepare_new_undo();
+  undo->type = ITEM_REPAINTSEL;
+  undo->itemlist = NULL;
+  undo->auxlist = NULL;
+  for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) {
+    item = (struct Item *)itemlist->data;
+    if (item->type != ITEM_STROKE || item->brush.tool_type!=TOOL_PEN) continue;
+    // store info for undo
+    undo->itemlist = g_list_append(undo->itemlist, item);
+    brush = (struct Brush *)g_malloc(sizeof(struct Brush));
+    g_memmove(brush, &(item->brush), sizeof(struct Brush));
+    undo->auxlist = g_list_append(undo->auxlist, brush);
+    // repaint the stroke
+    item->brush.color_no = color;
+    item->brush.color_rgba = predef_colors_rgba[color];
+    if (item->canvas_item!=NULL)
+      gnome_canvas_item_set(item->canvas_item, 
+         "fill-color-rgba", item->brush.color_rgba, NULL);
+  }
+}
+
+void rethicken_selection(int val)
+{
+  GList *itemlist;
+  struct Item *item;
+  struct Brush *brush;
+  
+  if (ui.selection == NULL) return;
+  prepare_new_undo();
+  undo->type = ITEM_REPAINTSEL;
+  undo->itemlist = NULL;
+  undo->auxlist = NULL;
+  for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) {
+    item = (struct Item *)itemlist->data;
+    if (item->type != ITEM_STROKE || item->brush.tool_type!=TOOL_PEN) continue;
+    // store info for undo
+    undo->itemlist = g_list_append(undo->itemlist, item);
+    brush = (struct Brush *)g_malloc(sizeof(struct Brush));
+    g_memmove(brush, &(item->brush), sizeof(struct Brush));
+    undo->auxlist = g_list_append(undo->auxlist, brush);
+    // repaint the stroke
+    item->brush.thickness_no = val;
+    item->brush.thickness = predef_thickness[TOOL_PEN][val];
+    if (item->canvas_item!=NULL)
+      gnome_canvas_item_set(item->canvas_item, 
+         "width-units", item->brush.thickness, NULL);
+  }
+}
index 4df6f1bc7484e3db18ec64ed3d6e7a52abd28c87..4d3a43cc2e2f3973ce1b8faa120a9385077e5c0f 100644 (file)
@@ -17,3 +17,6 @@ void finalize_movesel(void);
 void selection_delete(void);
 void selection_to_clip(void);
 void clipboard_paste(void);
+
+void recolor_selection(int color);
+void rethicken_selection(int val);
index 933868e33fbe21ba40fbfbc124ba717e5a9085f8..147fd2e807d964d79f1274435e9a2ad38681a147 100644 (file)
@@ -168,15 +168,21 @@ void print_job_render(GnomePrintJob *gpj, int fromPage, int toPage)
   g_signal_connect(wait_dialog, "response", G_CALLBACK (cb_print_abort), &abort);
   
   for (i = fromPage; i <= toPage; i++) {
-    gtk_message_dialog_format_secondary_text(
-              GTK_MESSAGE_DIALOG(wait_dialog), "Page %d", i+1); 
+#if GTK_CHECK_VERSION(2,6,0)
+    if (!gtk_check_version(2, 6, 0))
+      gtk_message_dialog_format_secondary_text(
+             GTK_MESSAGE_DIALOG(wait_dialog), "Page %d", i+1); 
+#endif
     while (gtk_events_pending()) gtk_main_iteration();
     print_page(gpc, (struct Page *)g_list_nth_data(journal.pages, i), i+1,
                                              pgwidth, pgheight, &abort);
     if (abort) break;
   }
-  gtk_message_dialog_format_secondary_text(
+#if GTK_CHECK_VERSION(2,6,0)
+  if (!gtk_check_version(2, 6, 0))
+    gtk_message_dialog_format_secondary_text(
               GTK_MESSAGE_DIALOG(wait_dialog), "Finalizing...");
+#endif
   while (gtk_events_pending()) gtk_main_iteration();
 
   gnome_print_context_close(gpc);  
diff --git a/src/xournal b/src/xournal
deleted file mode 100755 (executable)
index f9ca5c4..0000000
Binary files a/src/xournal and /dev/null differ
index 0b94190f73ca5f3adc38ff1c5961938703d3518f..7c20c73c182df5ae6a8e71204e3835ed38a1a67a 100644 (file)
@@ -1,6 +1,12 @@
 #include <gtk/gtk.h>
 #include <libgnomecanvas/libgnomecanvas.h>
 
+// PREF FILES INFO
+
+#define CONFIG_DIR ".xournal"
+#define MRU_FILE "recent-files"
+#define MRU_SIZE 8 
+
 // DATA STRUCTURES AND CONSTANTS
 
 #define PIXEL_MOTION_THRESHOLD 0.3
@@ -133,6 +139,7 @@ typedef struct Item {
 #define ITEM_NEW_DEFAULT_BG 11
 #define ITEM_NEW_PAGE 13
 #define ITEM_DELETE_PAGE 14
+#define ITEM_REPAINTSEL 15
 
 typedef struct Layer {
   GList *items; // the items on the layer, from bottom to top
@@ -195,6 +202,9 @@ typedef struct UIData {
   gboolean emulate_eraser;
   gboolean antialias_bg; // bilinear interpolation on bg pixmaps
   gboolean progressive_bg; // rescale bg's one at a time
+  char *mrufile; // file for the MRU
+  char *mru[MRU_SIZE]; // MRU data
+  GtkWidget *mrumenu[MRU_SIZE];
 } UIData;
 
 typedef struct UndoErasureData {
@@ -211,7 +221,8 @@ typedef struct UndoItem {
   struct Layer *layer2; // for ITEM_DELETE_LAYER with val=-1
   struct Page *page;  // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE
   GList *erasurelist; // for ITEM_ERASURE
-  GList *itemlist;  // for ITEM_MOVESEL, ITEM_PASTE
+  GList *itemlist;  // for ITEM_MOVESEL, ITEM_PASTE, ITEM_REPAINTSEL
+  GList *auxlist;   // for ITEM_REPAINTSEL
   struct Background *bg;  // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_DEFAULT_BG
   int val; // for ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE
   double val_x, val_y; // for ITEM_MOVESEL, ITEM_NEW_BG_RESIZE, ITEM_PAPER_RESIZE, ITEM_NEW_DEFAULT_BG
index c7ea714953d20bfc269b8c5f1e520ebf1ebcfb2c..d0afe62dea5036c0a1417779e66dee2035519bba 100644 (file)
@@ -55,7 +55,7 @@
                      <signal name="activate" handler="on_fileNewBackground_activate" last_modification_time="Wed, 30 Nov 2005 18:39:59 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image500">
+                       <widget class="GtkImage" id="image533">
                          <property name="visible">True</property>
                          <property name="stock">gtk-open</property>
                          <property name="icon_size">1</property>
                    </widget>
                  </child>
 
+                 <child>
+                   <widget class="GtkMenuItem" id="fileRecentFiles">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Recent Files</property>
+                     <property name="use_underline">True</property>
+
+                     <child>
+                       <widget class="GtkMenu" id="fileRecentFiles_menu">
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru0">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">0</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru1">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">1</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru2">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">2</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru3">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">3</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru4">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">4</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru5">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">5</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru6">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">6</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+                           </widget>
+                         </child>
+
+                         <child>
+                           <widget class="GtkMenuItem" id="mru7">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">7</property>
+                             <property name="use_underline">True</property>
+                             <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+                           </widget>
+                         </child>
+                       </widget>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSeparatorMenuItem" id="separator22">
+                     <property name="visible">True</property>
+                   </widget>
+                 </child>
+
                  <child>
                    <widget class="GtkImageMenuItem" id="filePrintOptions">
                      <property name="visible">True</property>
                      <signal name="activate" handler="on_filePrintOptions_activate" last_modification_time="Wed, 30 Nov 2005 18:44:18 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image501">
+                       <widget class="GtkImage" id="image534">
                          <property name="visible">True</property>
                          <property name="stock">gtk-preferences</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewPageWidth_activate" last_modification_time="Wed, 30 Nov 2005 19:31:48 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image502">
+                       <widget class="GtkImage" id="image535">
                          <property name="visible">True</property>
                          <property name="stock">gtk-zoom-fit</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewFirstPage_activate" last_modification_time="Wed, 30 Nov 2005 19:33:03 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image503">
+                       <widget class="GtkImage" id="image536">
                          <property name="visible">True</property>
                          <property name="stock">gtk-goto-first</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewPreviousPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image504">
+                       <widget class="GtkImage" id="image537">
                          <property name="visible">True</property>
                          <property name="stock">gtk-go-back</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewNextPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image505">
+                       <widget class="GtkImage" id="image538">
                          <property name="visible">True</property>
-                         <property name="stock">gtk-media-forward</property>
+                         <property name="stock">gtk-go-forward</property>
                          <property name="icon_size">1</property>
                          <property name="xalign">0.5</property>
                          <property name="yalign">0.5</property>
                      <signal name="activate" handler="on_viewLastPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image506">
+                       <widget class="GtkImage" id="image539">
                          <property name="visible">True</property>
                          <property name="stock">gtk-goto-last</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewShowLayer_activate" last_modification_time="Wed, 30 Nov 2005 19:40:23 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image507">
+                       <widget class="GtkImage" id="image540">
                          <property name="visible">True</property>
                          <property name="stock">gtk-add</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_viewHideLayer_activate" last_modification_time="Wed, 30 Nov 2005 19:40:23 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image508">
+                       <widget class="GtkImage" id="image541">
                          <property name="visible">True</property>
                          <property name="stock">gtk-remove</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_journalLoadBackground_activate" last_modification_time="Wed, 30 Nov 2005 20:06:31 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image509">
+                       <widget class="GtkImage" id="image542">
                          <property name="visible">True</property>
                          <property name="stock">gtk-open</property>
                          <property name="icon_size">1</property>
                      <property name="use_underline">True</property>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image510">
+                       <widget class="GtkImage" id="image543">
                          <property name="visible">True</property>
                          <property name="stock">gtk-select-color</property>
                          <property name="icon_size">1</property>
                      <signal name="activate" handler="on_toolsTextFont_activate" last_modification_time="Thu, 01 Dec 2005 20:54:08 GMT"/>
 
                      <child internal-child="image">
-                       <widget class="GtkImage" id="image511">
+                       <widget class="GtkImage" id="image544">
                          <property name="visible">True</property>
                          <property name="stock">gtk-select-font</property>
                          <property name="icon_size">1</property>