[gnote] Add search action support in popover
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Add search action support in popover
- Date: Sun, 27 Dec 2015 13:03:47 +0000 (UTC)
commit f799bad7a2aef400fd5eef3744cab9c99c80e5c7
Author: Aurimas Černius <aurisc4 gmail com>
Date: Sun Dec 27 14:55:58 2015 +0200
Add search action support in popover
src/searchnoteswidget.cpp | 52 +++++++++++++++++++++++++++++++++++++++++---
src/searchnoteswidget.hpp | 5 ++++
2 files changed, 53 insertions(+), 4 deletions(-)
---
diff --git a/src/searchnoteswidget.cpp b/src/searchnoteswidget.cpp
index d5c4800..2b68a6b 100644
--- a/src/searchnoteswidget.cpp
+++ b/src/searchnoteswidget.cpp
@@ -31,6 +31,7 @@
#include "debug.hpp"
#include "iactionmanager.hpp"
#include "iconmanager.hpp"
+#include "mainwindow.hpp"
#include "notemanager.hpp"
#include "notewindow.hpp"
#include "recenttreeview.hpp"
@@ -1390,17 +1391,25 @@ void SearchNotesWidget::on_delete_notebook()
void SearchNotesWidget::foreground()
{
EmbeddableWidget::foreground();
- Gtk::Window *win = dynamic_cast<Gtk::Window*>(host());
- if(win) {
- win->add_accel_group(m_accel_group);
- win->set_focus(*m_tree);
+ MainWindow *win = dynamic_cast<MainWindow*>(host());
+ if(!win) {
+ return;
}
+
+ win->add_accel_group(m_accel_group);
+ win->set_focus(*m_tree);
+ auto & manager(IActionManager::obj());
+ register_callbacks();
+ m_callback_changed_cid = manager.signal_main_window_search_actions_changed
+ .connect(sigc::mem_fun(*this, &SearchNotesWidget::callbacks_changed));
}
void SearchNotesWidget::background()
{
EmbeddableWidget::background();
save_position();
+ unregister_callbacks();
+ m_callback_changed_cid.disconnect();
Gtk::Window *win = dynamic_cast<Gtk::Window*>(host());
if(win) {
win->remove_accel_group(m_accel_group);
@@ -1427,7 +1436,12 @@ void SearchNotesWidget::size_internals()
std::vector<Gtk::Widget*> SearchNotesWidget::get_popover_widgets()
{
+ std::map<int, Gtk::Widget*> popover_widgets;
+ IActionManager::obj().signal_build_main_window_search_popover(popover_widgets);
std::vector<Gtk::Widget*> widgets;
+ for(auto widget : popover_widgets) {
+ widgets.push_back(widget.second);
+ }
return widgets;
}
@@ -1532,4 +1546,34 @@ void SearchNotesWidget::on_rename_notebook()
m_notebooksTree->set_cursor(selected_row[0], *m_notebooksTree->get_column(0), true);
}
+void SearchNotesWidget::callbacks_changed()
+{
+ unregister_callbacks();
+ register_callbacks();
+}
+
+void SearchNotesWidget::register_callbacks()
+{
+ MainWindow *win = dynamic_cast<MainWindow*>(host());
+ if(!win) {
+ return;
+ }
+ auto & manager(IActionManager::obj());
+ auto cbacks = manager.get_main_window_search_callbacks();
+ for(auto & cback : cbacks) {
+ auto action = win->find_action(cback.first);
+ if(action) {
+ m_action_cids.push_back(action->signal_activate().connect(cback.second));
+ }
+ }
+}
+
+void SearchNotesWidget::unregister_callbacks()
+{
+ for(auto & cid : m_action_cids) {
+ cid.disconnect();
+ }
+ m_action_cids.clear();
+}
+
}
diff --git a/src/searchnoteswidget.hpp b/src/searchnoteswidget.hpp
index 011809f..a24a610 100644
--- a/src/searchnoteswidget.hpp
+++ b/src/searchnoteswidget.hpp
@@ -129,6 +129,9 @@ private:
void on_sorting_changed();
void parse_sorting_setting(const Glib::ustring & sorting);
void on_rename_notebook();
+ void callbacks_changed();
+ void register_callbacks();
+ void unregister_callbacks();
class RecentSearchColumnTypes
: public Gtk::TreeModelColumnRecord
@@ -183,6 +186,8 @@ private:
std::string m_search_text;
int m_sort_column_id;
Gtk::SortType m_sort_column_order;
+ std::vector<sigc::connection> m_action_cids;
+ sigc::connection m_callback_changed_cid;
static Glib::RefPtr<Gdk::Pixbuf> get_note_icon();
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]