? accels
? gtk/gtkrecentaction.c
? gtk/gtkrecentaction.h
? gtk/size_request
? tests/accels
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtk+/ChangeLog,v
retrieving revision 1.7745
diff -p -a -u -r1.7745 ChangeLog
--- ChangeLog	17 Apr 2006 15:08:03 -0000	1.7745
+++ ChangeLog	18 Apr 2006 01:44:50 -0000
@@ -1,3 +1,25 @@
+2006-04-18  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* gtk/Makefile.am:
+	* gtk/gtk.symbols:
+	* gtk/gtk.h:
+	* gtk/gtkrecentaction.h:
+	* gtk/gtkrecentaction.c: Add GtkRecentAction, an action for showing
+	lists of recently used files inside menus and toolbars built with
+	GtkUIManageri.
+
+	* gtk/gtkactiongroup.h:
+	* gtk/gtkactiongroup.c: Add GtkRecentActionEntry and commodity
+	functions for adding a GtkRecentAction action to an action group.
+
+	* tests/testactions.c: Add tests for GtkRecentAction.
+
+	* demos/gtk-demo/appwindow.c: Add GtkRecentAction support in the
+	AppWindow demo.
+
+	* demos/gtk-demo/ui_manager.c: Add GtkRecentAction support in the
+	UIManager demo.
+
 2006-04-17  Matthias Clasen  <mclasen@redhat.com>
 
 	* demos/gtk-demo/colorsel.c (expose_event_callback): Small formatting
Index: demos/gtk-demo/appwindow.c
===================================================================
RCS file: /cvs/gnome/gtk+/demos/gtk-demo/appwindow.c,v
retrieving revision 1.34
diff -p -a -u -r1.34 appwindow.c
--- demos/gtk-demo/appwindow.c	12 Oct 2005 13:23:10 -0000	1.34
+++ demos/gtk-demo/appwindow.c	18 Apr 2006 01:44:50 -0000
@@ -63,6 +63,31 @@ activate_radio_action (GtkAction *action
     }
 }
 
+static void
+activate_recent_action (GtkAction *action, GtkRecentInfo *current)
+{
+  const gchar *name = gtk_action_get_name (action);
+  const gchar *typename = G_OBJECT_TYPE_NAME (action);
+  GtkWidget *dialog;
+  
+  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+				   GTK_DIALOG_DESTROY_WITH_PARENT,
+				   GTK_MESSAGE_INFO,
+				   GTK_BUTTONS_CLOSE,
+				   "You activated recent action: \"%s\" of type \"%s\".\n"
+				   "Current item: %s",
+				   name, typename,
+				   gtk_recent_info_get_display_name (current));
+
+  /* Close dialog on user response */
+  g_signal_connect (dialog,
+		    "response",
+		    G_CALLBACK (gtk_widget_destroy),
+		    NULL);
+      
+  gtk_widget_show (dialog);
+}
+
 static void 
 activate_email (GtkAboutDialog *about,
 		const gchar    *link,
@@ -255,12 +280,20 @@ static GtkRadioActionEntry shape_entries
 };
 static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
 
+static GtkRecentActionEntry recent_entries[] = {
+  { "OpenRecent", NULL,                        /* name, stock id */
+    "Open _Recent", NULL,                      /* label, accelerator */
+    "Open a recently used file", -1 },         /* tooltip, limit */
+};
+static guint n_recent_entries = G_N_ELEMENTS (recent_entries);
+
 static const gchar *ui_info = 
 "<ui>"
 "  <menubar name='MenuBar'>"
 "    <menu action='FileMenu'>"
 "      <menuitem action='New'/>"
 "      <menuitem action='Open'/>"
+"      <menuitem action='OpenRecent'/>"
 "      <menuitem action='Save'/>"
 "      <menuitem action='SaveAs'/>"
 "      <separator/>"
@@ -483,6 +516,10 @@ do_appwindow (GtkWidget *do_widget)
 					  SHAPE_SQUARE,
 					  G_CALLBACK (activate_radio_action), 
 					  NULL);
+      gtk_action_group_add_recent_actions (action_group,
+		      			   recent_entries, n_recent_entries,
+					   G_CALLBACK (activate_recent_action),
+					   NULL);
 
       merge = gtk_ui_manager_new ();
       g_object_set_data_full (G_OBJECT (window), "ui-manager", merge, 
Index: demos/gtk-demo/ui_manager.c
===================================================================
RCS file: /cvs/gnome/gtk+/demos/gtk-demo/ui_manager.c,v
retrieving revision 1.6
diff -p -a -u -r1.6 ui_manager.c
--- demos/gtk-demo/ui_manager.c	16 Nov 2004 15:49:17 -0000	1.6
+++ demos/gtk-demo/ui_manager.c	18 Apr 2006 01:44:50 -0000
@@ -19,6 +19,13 @@ activate_radio_action (GtkAction *action
 	     gtk_action_get_name (GTK_ACTION (current)));
 }
 
+static void
+activate_recent_action (GtkAction *action, GtkRecentInfo *info)
+{
+  g_message ("Recent item \"%s\" selected",
+	     gtk_recent_info_get_display_name (info));
+}
+
 static GtkActionEntry entries[] = {
   { "FileMenu", NULL, "_File" },               /* name, stock id, label */
   { "PreferencesMenu", NULL, "_Preferences" }, /* name, stock id, label */
@@ -104,12 +111,20 @@ static GtkRadioActionEntry shape_entries
 };
 static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
 
+static GtkRecentActionEntry recent_entries[] = {
+  { "OpenRecent", NULL,                        /* name, stock id */
+    "Open _Recent", NULL,                      /* label, accelerator */
+    "Open a recently used file", -1 },         /* tooltip, limit */
+};
+static guint n_recent_entries = G_N_ELEMENTS (recent_entries);
+
 static const gchar *ui_info = 
 "<ui>"
 "  <menubar name='MenuBar'>"
 "    <menu action='FileMenu'>"
 "      <menuitem action='New'/>"
 "      <menuitem action='Open'/>"
+"      <menuitem action='OpenRecent'/>"
 "      <menuitem action='Save'/>"
 "      <menuitem action='SaveAs'/>"
 "      <separator/>"
@@ -180,6 +195,10 @@ do_ui_manager (GtkWidget *do_widget)
 					  SHAPE_OVAL,
 					  G_CALLBACK (activate_radio_action), 
 					  NULL);
+      gtk_action_group_add_recent_actions (actions,
+		      			   recent_entries, n_recent_entries,
+					   G_CALLBACK (activate_recent_action),
+					   NULL);
 
       ui = gtk_ui_manager_new ();
       gtk_ui_manager_insert_action_group (ui, actions, 0);
Index: docs/reference/gtk/gtk-docs.sgml
===================================================================
RCS file: /cvs/gnome/gtk+/docs/reference/gtk/gtk-docs.sgml,v
retrieving revision 1.92
diff -p -a -u -r1.92 gtk-docs.sgml
--- docs/reference/gtk/gtk-docs.sgml	30 Mar 2006 15:47:41 -0000	1.92
+++ docs/reference/gtk/gtk-docs.sgml	18 Apr 2006 01:44:50 -0000
@@ -91,6 +91,7 @@
 <!ENTITY GtkRadioMenuItem SYSTEM "xml/gtkradiomenuitem.xml">
 <!ENTITY GtkRadioToolButton SYSTEM "xml/gtkradiotoolbutton.xml">
 <!ENTITY GtkRange SYSTEM "xml/gtkrange.xml">
+<!ENTITY GtkRecentAction SYSTEM "xml/gtkrecentaction.xml">
 <!ENTITY GtkRecentChooser SYSTEM "xml/gtkrecentchooser.xml">
 <!ENTITY GtkRecentChooserDialog SYSTEM "xml/gtkrecentchooserdialog.xml">
 <!ENTITY GtkRecentChooserMenu SYSTEM "xml/gtkrecentchoosermenu.xml">
@@ -570,6 +571,7 @@ that is, GUI components such as <link li
       &GtkRecentChooserMenu;
       &GtkRecentChooserWidget;
       &GtkRecentFilter;
+      &GtkRecentAction;
     </chapter>
 
     <chapter id="DeprecatedObjects">
Index: docs/reference/gtk/gtk-sections.txt
===================================================================
RCS file: /cvs/gnome/gtk+/docs/reference/gtk/gtk-sections.txt,v
retrieving revision 1.235
diff -p -a -u -r1.235 gtk-sections.txt
--- docs/reference/gtk/gtk-sections.txt	31 Mar 2006 06:31:50 -0000	1.235
+++ docs/reference/gtk/gtk-sections.txt	18 Apr 2006 01:44:50 -0000
@@ -226,6 +226,9 @@ gtk_action_group_add_toggle_actions_full
 GtkRadioActionEntry
 gtk_action_group_add_radio_actions
 gtk_action_group_add_radio_actions_full
+GtkRecentActionEntry
+gtk_action_group_add_recent_actions
+gtk_action_group_add_recent_actions_full
 gtk_action_group_set_translate_func
 gtk_action_group_set_translation_domain
 gtk_action_group_translate_string
@@ -2751,6 +2754,20 @@ GTK_RANGE_GET_CLASS
 gtk_range_get_type
 GtkRangeLayout
 GtkRangeStepTimer
+</SECTION>
+
+<SECTION>
+<FILE>gtkrecentaction</FILE>
+<TITLE>GtkRecentAction</TITLE>
+GtkRecentAction
+GtkRecentActionClass
+gtk_recent_action_new
+gtk_recent_action_get_current
+gtk_recent_action_get_limit
+gtk_recent_action_set_limit
+<SUBSECTION Private>
+gtk_recent_action_get_type
+GtkRecentActionPrivate
 </SECTION>
 
 <SECTION>
Index: docs/reference/gtk/migrating-GtkRecentChooser.sgml
===================================================================
RCS file: /cvs/gnome/gtk+/docs/reference/gtk/migrating-GtkRecentChooser.sgml,v
retrieving revision 1.2
diff -p -a -u -r1.2 migrating-GtkRecentChooser.sgml
--- docs/reference/gtk/migrating-GtkRecentChooser.sgml	16 Apr 2006 04:08:54 -0000	1.2
+++ docs/reference/gtk/migrating-GtkRecentChooser.sgml	18 Apr 2006 01:44:50 -0000
@@ -58,6 +58,13 @@
     </para>
 
     <para>
+      While you had to create a <structname>EggRecentModel</structname> with
+      a bound sorting order, the #GtkRecentManager constructor does not need
+      that anymore, as the sorting is handled by the viewers of the list and
+      not by the manager itself.
+    </para>
+
+    <para>
       To add a document to the list, you can use gtk_recent_manager_add_item(),
       like:
       <informalexample><programlisting>
@@ -220,8 +227,8 @@
       widgets in EggRecent is that the #GtkRecentChooser widgets will use
       their own copy of the list and will apply the sorting and filtering
       functions only on the copy; this allows the creation of many viewers
-      with a single controller, like using many #GtkTreeView with a single
-      #GtkTreeModel instance.
+      with a single controller, like using many #GtkTreeView widgets with a
+      single #GtkTreeModel instance.
     </para>
 
     <para>
Index: gtk/Makefile.am
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/Makefile.am,v
retrieving revision 1.299
diff -p -a -u -r1.299 Makefile.am
--- gtk/Makefile.am	29 Mar 2006 20:05:08 -0000	1.299
+++ gtk/Makefile.am	18 Apr 2006 01:44:51 -0000
@@ -228,6 +228,7 @@ gtk_public_h_sources =          \
 	gtkradiotoolbutton.h	\
 	gtkrange.h		\
 	gtkrc.h			\
+	gtkrecentaction.h	\
 	gtkrecentchooser.h 	\
 	gtkrecentchooserdialog.h \
 	gtkrecentchoosermenu.h 	\
@@ -468,6 +469,7 @@ gtk_c_sources =                 \
 	gtkrange.c		\
 	gtkrbtree.c 		\
 	gtkrc.c			\
+	gtkrecentaction.c	\
 	gtkrecentchooserdefault.c \
 	gtkrecentchooserdialog.c \
 	gtkrecentchoosermenu.c 	\
Index: gtk/gtk.h
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtk.h,v
retrieving revision 1.83
diff -p -a -u -r1.83 gtk.h
--- gtk/gtk.h	29 Mar 2006 20:05:08 -0000	1.83
+++ gtk/gtk.h	18 Apr 2006 01:44:51 -0000
@@ -140,6 +140,7 @@
 #include <gtk/gtkradiotoolbutton.h>
 #include <gtk/gtkrange.h>
 #include <gtk/gtkrc.h>
+#include <gtk/gtkrecentaction.h>
 #include <gtk/gtkrecentchooser.h>
 #include <gtk/gtkrecentchooserdialog.h>
 #include <gtk/gtkrecentchoosermenu.h>
Index: gtk/gtk.symbols
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtk.symbols,v
retrieving revision 1.95
diff -p -a -u -r1.95 gtk.symbols
--- gtk/gtk.symbols	29 Mar 2006 20:48:55 -0000	1.95
+++ gtk/gtk.symbols	18 Apr 2006 01:44:51 -0000
@@ -169,6 +169,8 @@ gtk_action_group_add_actions_full
 gtk_action_group_add_action_with_accel
 gtk_action_group_add_radio_actions
 gtk_action_group_add_radio_actions_full
+gtk_action_group_add_recent_actions
+gtk_action_group_add_recent_actions_full
 gtk_action_group_add_toggle_actions
 gtk_action_group_add_toggle_actions_full
 gtk_action_group_get_action
@@ -2618,6 +2620,16 @@ gtk_rc_style_get_type G_GNUC_CONST
 gtk_rc_style_new
 gtk_rc_style_ref
 gtk_rc_style_unref
+#endif
+#endif
+
+#if IN_HEADER(__GTK_RECENT_ACTION_H__)
+#if IN_FILE(__GTK_RECENT_ACTION_C__)
+gtk_recent_action_new
+gtk_recent_action_set_limit
+gtk_recent_action_get_limit
+gtk_recent_action_get_current
+gtk_recent_action_get_type G_GNUC_CONST
 #endif
 #endif
 
Index: gtk/gtkactiongroup.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkactiongroup.c,v
retrieving revision 1.57
diff -p -a -u -r1.57 gtkactiongroup.c
--- gtk/gtkactiongroup.c	16 Mar 2006 15:53:36 -0000	1.57
+++ gtk/gtkactiongroup.c	18 Apr 2006 01:44:51 -0000
@@ -35,6 +35,7 @@
 #include "gtkstock.h"
 #include "gtktoggleaction.h"
 #include "gtkradioaction.h"
+#include "gtkrecentaction.h"
 #include "gtkaccelmap.h"
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
@@ -1023,6 +1024,107 @@ gtk_action_group_add_radio_actions_full 
   if (on_change && first_action)
     g_signal_connect_data (first_action, "changed",
 			   on_change, user_data, 
+			   (GClosureNotify)destroy, 0);
+}
+
+/**
+ * gtk_action_group_add_recent_actions:
+ * @action_group: the action group
+ * @entries: an array of recent action descriptions
+ * @n_entries: the number of entries
+ * @on_item_activated: the callback to connect to the item activated signal
+ * @user_data: data to pass to the action callbacks
+ *
+ * This is a convenience function to create a number of recent actions and
+ * add them to the action group.
+ *
+ * The "activate" signals of the actions are connected to the callbacks and 
+ * their accel paths are set to 
+ * <literal>&lt;Actions&gt;/<replaceable>group-name</replaceable>/<replaceable>action-name</replaceable></literal>.  
+ * 
+ * Since: 2.10
+ */
+void
+gtk_action_group_add_recent_actions (GtkActionGroup             *action_group,
+				     const GtkRecentActionEntry *entries,
+				     guint                       n_entries,
+				     GCallback                   on_item_activated,
+				     gpointer                    user_data)
+{
+  gtk_action_group_add_recent_actions_full (action_group, 
+					    entries, n_entries,
+					    on_item_activated,
+					    user_data, NULL);
+}
+
+
+/**
+ * gtk_action_group_add_recent_actions_full:
+ * @action_group: the action group
+ * @entries: an array of recent action descriptions
+ * @n_entries: the number of entries
+ * @on_item_activated: the callback to connect to the item activated signal
+ * @user_data: data to pass to the action callbacks
+ * @destroy: destroy notification callback for @user_data
+ *
+ * This variant of gtk_action_group_add_recent_actions() adds a 
+ * #GDestroyNotify callback for @user_data. 
+ * 
+ * Since: 2.10
+ */
+void
+gtk_action_group_add_recent_actions_full (GtkActionGroup             *action_group,
+					  const GtkRecentActionEntry *entries,
+					  guint                       n_entries,
+					  GCallback                   on_item_activated,
+					  gpointer                    user_data,
+					  GDestroyNotify              destroy)
+{
+  /* Keep this in sync with the other 
+   * gtk_action_group_add_..._actions_full() functions.
+   */
+  guint i;
+  GtkRecentAction *first_action = NULL;
+
+  g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
+
+  for (i = 0; i < n_entries; i++)
+    {
+      GtkRecentAction *action;
+      const gchar *label;
+      const gchar *tooltip;
+
+      label = gtk_action_group_translate_string (action_group, entries[i].label);
+      tooltip = gtk_action_group_translate_string (action_group, entries[i].tooltip);
+
+      action = gtk_recent_action_new (entries[i].name,
+				      label,
+				      tooltip,
+				      NULL,
+				      -1);
+
+      if (entries[i].stock_id) 
+	{
+	  if (gtk_icon_factory_lookup_default (entries[i].stock_id))
+	    g_object_set (action, "stock-id", entries[i].stock_id, NULL);
+	  else
+	    g_object_set (action, "icon-name", entries[i].stock_id, NULL);
+	}
+
+      if (i == 0)
+        first_action = action;
+
+      gtk_recent_action_set_limit (action, entries[i].limit);
+
+      gtk_action_group_add_action_with_accel (action_group, 
+					      GTK_ACTION (action),
+					      entries[i].accelerator);
+      g_object_unref (action);
+    }
+
+  if (on_item_activated && first_action)
+    g_signal_connect_data (first_action, "item-activated",
+			   on_item_activated, user_data, 
 			   (GClosureNotify)destroy, 0);
 }
 
Index: gtk/gtkactiongroup.h
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkactiongroup.h,v
retrieving revision 1.14
diff -p -a -u -r1.14 gtkactiongroup.h
--- gtk/gtkactiongroup.h	23 Nov 2004 20:02:15 -0000	1.14
+++ gtk/gtkactiongroup.h	18 Apr 2006 01:44:51 -0000
@@ -48,6 +48,7 @@ typedef struct _GtkActionGroupClass   Gt
 typedef struct _GtkActionEntry        GtkActionEntry;
 typedef struct _GtkToggleActionEntry  GtkToggleActionEntry;
 typedef struct _GtkRadioActionEntry   GtkRadioActionEntry;
+typedef struct _GtkRecentActionEntry  GtkRecentActionEntry;
 
 struct _GtkActionGroup
 {
@@ -103,6 +104,16 @@ struct _GtkRadioActionEntry 
   gint   value; 
 };
 
+struct _GtkRecentActionEntry
+{
+  const gchar *name;
+  const gchar *stock_id;
+  const gchar *label;
+  const gchar *accelerator;
+  const gchar *tooltip;
+  gint         limit;
+};
+
 GType           gtk_action_group_get_type                (void) G_GNUC_CONST;
 GtkActionGroup *gtk_action_group_new                     (const gchar                *name);
 G_CONST_RETURN gchar *gtk_action_group_get_name          (GtkActionGroup             *action_group);
@@ -136,6 +147,11 @@ void            gtk_action_group_add_rad
 							  gint                        value,
 							  GCallback                   on_change,
 							  gpointer                    user_data);
+void            gtk_action_group_add_recent_actions      (GtkActionGroup             *action_group,
+							  const GtkRecentActionEntry *entries,
+							  guint                       n_entries,
+							  GCallback                   on_item_activated,
+							  gpointer                    user_data);
 void            gtk_action_group_add_actions_full        (GtkActionGroup             *action_group,
 							  const GtkActionEntry       *entries,
 							  guint                       n_entries,
@@ -151,6 +167,12 @@ void            gtk_action_group_add_rad
 							  guint                       n_entries,
 							  gint                        value,
 							  GCallback                   on_change,
+							  gpointer                    user_data,
+							  GDestroyNotify              destroy);
+void            gtk_action_group_add_recent_actions_full (GtkActionGroup             *action_group,
+							  const GtkRecentActionEntry *entries,
+							  guint                       n_entries,
+							  GCallback                   on_item_activated,
 							  gpointer                    user_data,
 							  GDestroyNotify              destroy);
 void            gtk_action_group_set_translate_func      (GtkActionGroup             *action_group,
Index: tests/testactions.c
===================================================================
RCS file: /cvs/gnome/gtk+/tests/testactions.c,v
retrieving revision 1.10
diff -p -a -u -r1.10 testactions.c
--- tests/testactions.c	13 Jul 2005 05:44:22 -0000	1.10
+++ tests/testactions.c	18 Apr 2006 01:44:52 -0000
@@ -56,6 +56,17 @@ radio_action (GtkAction *action)
 }
 
 static void
+recent_action (GtkAction     *action,
+	       GtkRecentInfo *info)
+{
+  const gchar *name = gtk_action_get_name (action);
+  const gchar *typename = G_OBJECT_TYPE_NAME (action);
+  
+  g_message ("Action %s (type=%s) activated (item '%s')", name, typename,
+	     gtk_recent_info_get_display_name (info));
+}
+
+static void
 toggle_cnp_actions (GtkAction *action)
 {
   gboolean sensitive;
@@ -169,11 +180,18 @@ static GtkRadioActionEntry toolbar_entri
 };
 static guint n_toolbar_entries = G_N_ELEMENTS (toolbar_entries);
 
+static GtkRecentActionEntry recent_entries[] = {
+  { "recent-docs", GTK_STOCK_OPEN, "Open _Recent", NULL, NULL, -1 },
+};
+static guint n_recent_entries = G_N_ELEMENTS (recent_entries);
+
 /* XML description of the menus for the test app.  The parser understands
  * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */
 static const gchar *ui_info =
 "  <menubar>\n"
 "    <menu name=\"Menu _1\" action=\"Menu1Action\">\n"
+"      <menuitem name=\"recent\" action=\"recent-docs\" />\n"
+"      <separator name=\"sep0\" />\n"
 "      <menuitem name=\"cut\" action=\"cut\" />\n"
 "      <menuitem name=\"copy\" action=\"copy\" />\n"
 "      <menuitem name=\"paste\" action=\"paste\" />\n"
@@ -210,17 +228,19 @@ static const gchar *ui_info =
   "    <menu name=\"DynamicMenu\" action=\"Menu3Action\" />\n"
 "  </menubar>\n"
 "  <toolbar name=\"toolbar\">\n"
+"    <toolitem name=\"recent\" action=\"recent-docs\" />\n"
+"    <separator name=\"sep9\" />\n"
 "    <toolitem name=\"cut\" action=\"cut\" />\n"
 "    <toolitem name=\"copy\" action=\"copy\" />\n"
 "    <toolitem name=\"paste\" action=\"paste\" />\n"
-"    <separator name=\"sep9\" />\n"
-"    <toolitem name=\"bold\" action=\"bold\" />\n"
 "    <separator name=\"sep10\" />\n"
+"    <toolitem name=\"bold\" action=\"bold\" />\n"
+"    <separator name=\"sep11\" />\n"
 "    <toolitem name=\"justify-left\" action=\"justify-left\" />\n"
 "    <toolitem name=\"justify-center\" action=\"justify-center\" />\n"
 "    <toolitem name=\"justify-right\" action=\"justify-right\" />\n"
 "    <toolitem name=\"justify-fill\" action=\"justify-fill\" />\n"
-"    <separator name=\"sep11\"/>\n"
+"    <separator name=\"sep12\"/>\n"
 "    <toolitem name=\"quit\" action=\"quit\" />\n"
 "  </toolbar>\n"
 "  <popup name=\"popup\">\n"
@@ -403,6 +423,9 @@ main (int argc, char **argv)
 				      toolbar_entries, n_toolbar_entries, 
 				      GTK_TOOLBAR_BOTH,
 				      G_CALLBACK (radio_action), NULL);
+  gtk_action_group_add_recent_actions (action_group,
+		  		       recent_entries, n_recent_entries,
+				       G_CALLBACK (recent_action), NULL);
 
   create_window (action_group);
 
