From 0281ccc92759a261ce49c947928b9be44f13ecbd Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Sun, 4 Oct 2020 16:23:21 -0400 Subject: [PATCH] Add list of recent raster images to quickly import --- share/ui/menus.xml | 1 + src/ui/desktop/menubar.cpp | 32 ++++++++++++++++++++++++++++++-- src/ui/interface.cpp | 7 ++----- src/ui/interface.h | 2 ++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/share/ui/menus.xml b/share/ui/menus.xml index 82a76e60d2..78e5cc9f35 100644 --- a/share/ui/menus.xml +++ b/share/ui/menus.xml @@ -15,6 +15,7 @@ + diff --git a/src/ui/desktop/menubar.cpp b/src/ui/desktop/menubar.cpp index 1563f8cf36..a80ca14561 100644 --- a/src/ui/desktop/menubar.cpp +++ b/src/ui/desktop/menubar.cpp @@ -41,6 +41,7 @@ #include "ui/shortcuts.h" #include "ui/view/view.h" #include "ui/uxmanager.h" // To Do: Convert to actions +#include "ui/interface.h" // Import Recent #ifdef GDK_WINDOWING_QUARTZ #include @@ -389,6 +390,13 @@ sp_recent_open(Gtk::RecentChooser* recentchooser) app->create_window(file); } +static void +sp_recent_import(Gtk::RecentChooser* recentchooser) +{ + Glib::ustring uri = recentchooser->get_current_uri(); + Glib::RefPtr file = Gio::File::create_for_uri(uri.raw()); + sp_ui_import_one_file(file->get_path().c_str()); +} // =================== Main Menu ================ // Recursively build menu and submenus. @@ -583,6 +591,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V continue; } + int max_recent = Inkscape::Preferences::get()->getInt("/options/maxrecentdocuments/value"); if (name == "recent-file-list") { // Filter recent files to those already opened in Inkscape. @@ -595,8 +604,7 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V #endif Gtk::RecentChooserMenu* recentchoosermenu = Gtk::manage(new Gtk::RecentChooserMenu()); - int max = Inkscape::Preferences::get()->getInt("/options/maxrecentdocuments/value"); - recentchoosermenu->set_limit(max); + recentchoosermenu->set_limit(max_recent); recentchoosermenu->set_sort_type(Gtk::RECENT_SORT_MRU); // Sort most recent first. recentchoosermenu->set_show_tips(true); recentchoosermenu->set_show_not_found(false); @@ -609,6 +617,26 @@ build_menu(Gtk::MenuShell* menu, Inkscape::XML::Node* xml, Inkscape::UI::View::V menu->append(*menuitem); continue; } + if (name == "recent-import-list") { + Glib::RefPtr recentfilter = Gtk::RecentFilter::create(); + recentfilter->add_mime_type("image/png"); + recentfilter->add_mime_type("image/jpeg"); + recentfilter->add_mime_type("image/gif"); + + Gtk::RecentChooserMenu* recentchoosermenu = Gtk::manage(new Gtk::RecentChooserMenu()); + recentchoosermenu->set_limit(max_recent); + recentchoosermenu->set_sort_type(Gtk::RECENT_SORT_MRU); // Sort most recent first. + recentchoosermenu->set_show_tips(true); + recentchoosermenu->set_show_not_found(false); + recentchoosermenu->add_filter(recentfilter); + recentchoosermenu->signal_item_activated().connect( + sigc::bind(sigc::ptr_fun(&sp_recent_import), recentchoosermenu)); + Gtk::MenuItem* menuitem = Gtk::manage(new Gtk::MenuItem(_("Import Recent"), true)); + menuitem->set_submenu(*recentchoosermenu); + menu->append(*menuitem); + continue; + } + if (name == "separator") { Gtk::MenuItem* menuitem = Gtk::manage(new Gtk::SeparatorMenuItem()); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index d9b50ef4a0..23c26d102c 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -48,9 +48,6 @@ #include "widgets/desktop-widget.h" -static void sp_ui_import_one_file(char const *filename); -static void sp_ui_import_one_file_with_check(gpointer filename, gpointer unused); - void sp_ui_new_view() { @@ -148,7 +145,7 @@ sp_ui_import_files(gchar *buffer) g_strfreev(l); } -static void +void sp_ui_import_one_file_with_check(gpointer filename, gpointer /*unused*/) { if (filename) { @@ -157,7 +154,7 @@ sp_ui_import_one_file_with_check(gpointer filename, gpointer /*unused*/) } } -static void +void sp_ui_import_one_file(char const *filename) { SPDocument *doc = SP_ACTIVE_DOCUMENT; diff --git a/src/ui/interface.h b/src/ui/interface.h index 4fa80dab13..8212e6982c 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -39,6 +39,8 @@ void sp_ui_close_view (GtkWidget *widget); void sp_ui_new_view (); +void sp_ui_import_one_file(char const *filename); +void sp_ui_import_one_file_with_check(gpointer filename, gpointer unused); void sp_ui_import_files(gchar *buffer); /** -- GitLab