static void activate_recent_cb (GtkRecentChooser *action, VinagreWindow *window) { VinagreConnection *conn; conn = vinagre_connection_new_from_string (gtk_recent_chooser_get_current_uri (action)); vinagre_cmd_open_favorite (window, conn); vinagre_connection_free (conn); } static void update_recent_connections (VinagreWindow *window) { VinagreWindowPrivate *p = window->priv; GtkAction *action; GtkRecentFilter *filter; g_return_if_fail (p->recent_action_group != NULL); if (p->recents_menu_ui_id != 0) gtk_ui_manager_remove_ui (p->manager, p->recents_menu_ui_id); p->recents_menu_ui_id = gtk_ui_manager_new_merge_id (p->manager); action = gtk_recent_action_new ("recent_connections", _("_Recent connections"), NULL, NULL); g_signal_connect (action, "item-activated", G_CALLBACK (activate_recent_cb), window); filter = gtk_recent_filter_new (); gtk_recent_filter_add_group (filter, "vinagre"); gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (action), filter); gtk_recent_action_set_show_numbers (GTK_RECENT_ACTION (action), TRUE); gtk_action_group_add_action (p->recent_action_group, action); gtk_ui_manager_add_ui (p->manager, p->recents_menu_ui_id, "/MenuBar/MachineMenu/FileRecentsPlaceholder", "recent_connections", "recent_connections", GTK_UI_MANAGER_MENUITEM, FALSE); } static void recent_manager_changed (GtkRecentManager *manager, VinagreWindow *window) { update_recent_connections (window); } static void create_menu_bar_and_toolbar (VinagreWindow *window, GtkWidget *main_box) { GtkActionGroup *action_group; GtkUIManager *manager; GError *error = NULL; GtkRecentManager *recent_manager; manager = gtk_ui_manager_new (); window->priv->manager = manager; ... /* Recent connections */ action_group = gtk_action_group_new ("VinagreRecentConnectionsActions"); gtk_action_group_set_translation_domain (action_group, NULL); gtk_ui_manager_insert_action_group (manager, action_group, 0); g_object_unref (action_group); window->priv->recent_action_group = action_group; update_recent_connections (window); recent_manager = gtk_recent_manager_get_default (); g_signal_connect (recent_manager, "changed", G_CALLBACK (recent_manager_changed), window); }