[gnote] Move search entry to main window
- From: Aurimas Äernius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Move search entry to main window
- Date: Sun, 17 Feb 2013 20:58:54 +0000 (UTC)
commit c3939a25d1e39592f24ecd2bdc4690f53bf4f425
Author: Aurimas Äernius <aurisc4 gmail com>
Date: Sun Feb 17 22:55:22 2013 +0200
Move search entry to main window
Make search entry part of toolbar in main window, rather then part of
search widget.
src/recentchanges.cpp | 77 ++++++++++++++++++++++++++++++++---
src/recentchanges.hpp | 7 +++
src/searchnoteswidget.cpp | 98 ++-------------------------------------------
src/searchnoteswidget.hpp | 11 +----
4 files changed, 84 insertions(+), 109 deletions(-)
---
diff --git a/src/recentchanges.cpp b/src/recentchanges.cpp
index a5ab46b..8bbb37f 100644
--- a/src/recentchanges.cpp
+++ b/src/recentchanges.cpp
@@ -25,6 +25,7 @@
#include <boost/bind.hpp>
#include <glibmm/i18n.h>
+#include <gtkmm/alignment.h>
#include <gtkmm/image.h>
#include <gtkmm/stock.h>
@@ -35,6 +36,7 @@
#include "notemanager.hpp"
#include "notewindow.hpp"
#include "recentchanges.hpp"
+#include "sharp/string.hpp"
namespace gnote {
@@ -45,6 +47,7 @@ namespace gnote {
, m_search_notes_widget(m)
, m_content_vbox(false, 0)
, m_mapped(false)
+ , m_entry_changed_timeout(NULL)
{
set_default_size(450,400);
set_resizable(true);
@@ -62,7 +65,7 @@ namespace gnote {
.connect(sigc::mem_fun(*this, &NoteRecentChanges::on_open_note_new_window));
Gtk::Box *toolbar = make_toolbar();
- m_content_vbox.pack_start(*toolbar, false, false, 0);
+ m_content_vbox.pack_start(*toolbar, false, false, 5);
m_content_vbox.pack_start(m_embed_box, true, true, 0);
m_embed_box.show();
m_content_vbox.show ();
@@ -83,6 +86,9 @@ namespace gnote {
while(m_embedded_widgets.size()) {
unembed_widget(**m_embedded_widgets.begin());
}
+ if(m_entry_changed_timeout) {
+ delete m_entry_changed_timeout;
+ }
}
Gtk::Box *NoteRecentChanges::make_toolbar()
@@ -104,6 +110,17 @@ namespace gnote {
button->show_all();
toolbar->pack_start(*button, false, false);
+ m_search_entry.set_activates_default(false);
+ m_search_entry.set_size_request(300);
+ m_search_entry.signal_changed()
+ .connect(sigc::mem_fun(*this, &NoteRecentChanges::on_entry_changed));
+ m_search_entry.signal_activate()
+ .connect(sigc::mem_fun(*this, &NoteRecentChanges::on_entry_activated));
+ Gtk::Alignment *alignment = manage(new Gtk::Alignment(Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER, 0));
+ alignment->add(m_search_entry);
+ alignment->show_all();
+ toolbar->pack_start(*alignment, true, true);
+
toolbar->show();
return toolbar;
}
@@ -215,15 +232,14 @@ namespace gnote {
}
std::vector<Gtk::Widget*> embedded = m_embed_box.get_children();
if(embedded.size() == 1 && embedded.front() == &m_search_notes_widget) {
- m_search_notes_widget.focus_search_entry();
+ m_search_entry.grab_focus();
}
MainWindow::on_show();
}
void NoteRecentChanges::set_search_text(const std::string & value)
{
- //TODO: handle non-search embedded widgets
- m_search_notes_widget.set_search_text(value);
+ m_search_entry.set_text(value);
}
void NoteRecentChanges::embed_widget(utils::EmbeddableWidget & widget)
@@ -272,8 +288,7 @@ namespace gnote {
m_embed_box.pack_start(wid, true, true, 0);
widget.foreground();
wid.show();
- m_all_notes_button->set_sensitive(
- dynamic_cast<SearchNotesWidget*>(&widget) != &m_search_notes_widget);
+ update_toolbar(widget);
on_embedded_name_changed(widget.get_name());
m_current_embedded_name_slot = widget.signal_name_changed
.connect(sigc::mem_fun(*this, &NoteRecentChanges::on_embedded_name_changed));
@@ -333,5 +348,55 @@ namespace gnote {
set_title(title);
}
+ void NoteRecentChanges::on_entry_changed()
+ {
+ if(m_entry_changed_timeout == NULL) {
+ m_entry_changed_timeout = new utils::InterruptableTimeout();
+ m_entry_changed_timeout->signal_timeout
+ .connect(sigc::mem_fun(*this, &NoteRecentChanges::entry_changed_timeout));
+ }
+
+ std::string search_text = get_search_text();
+ if(search_text.empty()) {
+ m_search_notes_widget.perform_search(search_text);
+ }
+ else {
+ m_entry_changed_timeout->reset(500);
+ }
+ }
+
+ void NoteRecentChanges::on_entry_activated()
+ {
+ if(m_entry_changed_timeout) {
+ m_entry_changed_timeout->cancel();
+ }
+
+ entry_changed_timeout();
+ }
+
+ void NoteRecentChanges::entry_changed_timeout()
+ {
+ std::string search_text = get_search_text();
+ if(search_text.empty()) {
+ return;
+ }
+
+ m_search_notes_widget.perform_search(search_text);
+ }
+
+ std::string NoteRecentChanges::get_search_text()
+ {
+ std::string text = m_search_entry.get_text();
+ text = sharp::string_trim(text);
+ return text;
+ }
+
+ void NoteRecentChanges::update_toolbar(utils::EmbeddableWidget & widget)
+ {
+ bool search = dynamic_cast<SearchNotesWidget*>(&widget) == &m_search_notes_widget;
+ m_all_notes_button->set_sensitive(!search);
+ m_search_entry.set_visible(search);
+ }
+
}
diff --git a/src/recentchanges.hpp b/src/recentchanges.hpp
index 82d62d5..0082ae8 100644
--- a/src/recentchanges.hpp
+++ b/src/recentchanges.hpp
@@ -69,15 +69,22 @@ private:
utils::EmbeddableWidget *currently_embedded();
Gtk::Box *make_toolbar();
void on_embedded_name_changed(const std::string & name);
+ void on_entry_changed();
+ void on_entry_activated();
+ void entry_changed_timeout();
+ std::string get_search_text();
+ void update_toolbar(utils::EmbeddableWidget & widget);
NoteManager &m_note_manager;
SearchNotesWidget m_search_notes_widget;
Gtk::VBox m_content_vbox;
Gtk::VBox m_embed_box;
Gtk::Button *m_all_notes_button;
+ Gtk::SearchEntry m_search_entry;
std::list<utils::EmbeddableWidget*> m_embedded_widgets;
bool m_mapped;
sigc::connection m_current_embedded_name_slot;
+ utils::InterruptableTimeout *m_entry_changed_timeout;
};
diff --git a/src/searchnoteswidget.cpp b/src/searchnoteswidget.cpp
index 9702283..1ddb616 100644
--- a/src/searchnoteswidget.cpp
+++ b/src/searchnoteswidget.cpp
@@ -53,7 +53,6 @@ Glib::RefPtr<Gdk::Pixbuf> SearchNotesWidget::get_note_icon()
SearchNotesWidget::SearchNotesWidget(NoteManager & m)
: Gtk::VBox(false, 0)
, m_accel_group(Gtk::AccelGroup::create())
- , m_entry_changed_timeout(NULL)
, m_no_matches_box(NULL)
, m_manager(m)
, m_clickX(0), m_clickY(0)
@@ -64,18 +63,6 @@ SearchNotesWidget::SearchNotesWidget(NoteManager & m)
{
make_actions();
- m_search_entry.signal_changed()
- .connect(sigc::mem_fun(*this, &SearchNotesWidget::on_entry_changed));
- m_search_entry.set_activates_default(false);
- m_search_entry.signal_activate()
- .connect(sigc::mem_fun(*this, &SearchNotesWidget::on_entry_activated));
-
- m_search_entry.set_size_request(300);
- Gtk::Alignment *search_box = manage(new Gtk::Alignment(Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER, 0));
- search_box->set_border_width(6);
- search_box->add(m_search_entry);
- search_box->show_all();
-
// Notebooks Pane
Gtk::Widget *notebooksPane = Gtk::manage(make_notebooks_pane());
notebooksPane->show();
@@ -100,7 +87,6 @@ SearchNotesWidget::SearchNotesWidget(NoteManager & m)
restore_position();
- pack_start(*search_box, false, false, 0);
pack_start(m_hpaned, true, true, 0);
// Update on changes to notes
@@ -118,36 +104,10 @@ SearchNotesWidget::SearchNotesWidget(NoteManager & m)
.connect(sigc::mem_fun(*this, &SearchNotesWidget::on_note_removed_from_notebook));
notebooks::NotebookManager::obj().signal_note_pin_status_changed
.connect(sigc::mem_fun(*this, &SearchNotesWidget::on_note_pin_status_changed));
-
- // Set the focus chain for the top-most containers
- std::vector<Gtk::Widget*> focus_chain;
- focus_chain.push_back(search_box);
- focus_chain.push_back(&m_hpaned);
- set_focus_chain(focus_chain);
-
- // Set focus chain for sub widgets of first top-most container
- focus_chain.clear();
- focus_chain.push_back(&m_search_entry);
- focus_chain.push_back(&m_matches_window);
- search_box->set_focus_chain(focus_chain);
-
- // set focus chain for sub widgets of second top-most container
- focus_chain.clear();
- focus_chain.push_back(&m_matches_window);
- focus_chain.push_back(notebooksPane);
- m_hpaned.set_focus_chain(focus_chain);
-
- // get back to the beginning of the focus chain
- focus_chain.clear();
- focus_chain.push_back(m_tree);
- m_matches_window.set_focus_chain(focus_chain);
}
SearchNotesWidget::~SearchNotesWidget()
{
- if(m_entry_changed_timeout) {
- delete m_entry_changed_timeout;
- }
if(m_note_list_context_menu) {
delete m_note_list_context_menu;
}
@@ -182,56 +142,13 @@ void SearchNotesWidget::make_actions()
m_delete_notebook_action->signal_activate().connect(sigc::mem_fun(*this,
&SearchNotesWidget::on_delete_notebook));
}
-void SearchNotesWidget::focus_search_entry()
+void SearchNotesWidget::perform_search(const std::string & search_text)
{
- m_search_entry.grab_focus();
-}
-
-void SearchNotesWidget::on_entry_changed()
-{
- if(m_entry_changed_timeout == NULL) {
- m_entry_changed_timeout = new utils::InterruptableTimeout();
- m_entry_changed_timeout->signal_timeout
- .connect(sigc::mem_fun(*this, &SearchNotesWidget::entry_changed_timeout));
- }
-
- if(get_search_text().empty()) {
- m_search_entry.set_sensitive(false);
- perform_search();
- }
- else {
- m_entry_changed_timeout->reset(500);
- m_search_entry.set_sensitive(true);
- }
-
restore_matches_window();
-}
-
-void SearchNotesWidget::on_entry_activated()
-{
- if(m_entry_changed_timeout) {
- m_entry_changed_timeout->cancel();
- }
-
- entry_changed_timeout();
-}
-
-void SearchNotesWidget::entry_changed_timeout()
-{
- if(get_search_text().empty()) {
- return;
- }
-
+ m_search_text = search_text;
perform_search();
}
-std::string SearchNotesWidget::get_search_text()
-{
- std::string text = m_search_entry.get_text();
- text = sharp::string_trim(text);
- return text;
-}
-
void SearchNotesWidget::perform_search()
{
// For some reason, the matches column must be rebuilt
@@ -239,7 +156,7 @@ void SearchNotesWidget::perform_search()
remove_matches_column();
Search search(m_manager);
- std::string text = get_search_text();
+ std::string text = m_search_text;
if(text.empty()) {
m_current_matches.clear();
m_store_filter->refilter();
@@ -866,7 +783,7 @@ Note::Ptr SearchNotesWidget::get_note(const Gtk::TreePath & p)
bool SearchNotesWidget::filter_by_search(const Note::Ptr & note)
{
- if(get_search_text().empty()) {
+ if(m_search_text.empty()) {
return true;
}
@@ -1365,13 +1282,6 @@ Gtk::Window *SearchNotesWidget::get_owning_window()
return dynamic_cast<Gtk::Window*>(widget);
}
-void SearchNotesWidget::set_search_text(const std::string & value)
-{
- if(!value.empty()) {
- m_search_entry.set_text(value);
- }
-}
-
void SearchNotesWidget::on_note_added_to_notebook(const Note &,
const notebooks::Notebook::Ptr &)
{
diff --git a/src/searchnoteswidget.hpp b/src/searchnoteswidget.hpp
index bf96a89..5653952 100644
--- a/src/searchnoteswidget.hpp
+++ b/src/searchnoteswidget.hpp
@@ -29,7 +29,6 @@
#include <gtkmm/liststore.h>
#include <gtkmm/paned.h>
#include <gtkmm/scrolledwindow.h>
-#include <gtkmm/searchentry.h>
#include <sigc++/sigc++.h>
#include "utils.hpp"
@@ -50,20 +49,15 @@ public:
virtual void foreground();
virtual void background();
- void focus_search_entry();
+ void perform_search(const std::string & search_text);
void select_all_notes_notebook();
void new_note();
void delete_selected_notes();
- void set_search_text(const std::string & value);
sigc::signal<void, const Note::Ptr &> signal_open_note;
sigc::signal<void, const Note::Ptr &> signal_open_note_new_window;
private:
void make_actions();
- void on_entry_changed();
- void on_entry_activated();
- void entry_changed_timeout();
- std::string get_search_text();
void perform_search();
void restore_matches_window();
Gtk::Widget *make_notebooks_pane();
@@ -153,9 +147,7 @@ private:
Glib::RefPtr<Gtk::Action> m_delete_note_action;
Glib::RefPtr<Gtk::Action> m_delete_notebook_action;
RecentSearchColumnTypes m_find_combo_columns;
- Gtk::SearchEntry m_search_entry;
Gtk::HPaned m_hpaned;
- utils::InterruptableTimeout *m_entry_changed_timeout;
Gtk::ScrolledWindow m_matches_window;
Gtk::HBox *m_no_matches_box;
notebooks::NotebooksTreeView *m_notebooksTree;
@@ -174,6 +166,7 @@ private:
Gtk::Menu *m_note_list_context_menu;
Gtk::Menu *m_notebook_list_context_menu;
bool m_initial_position_restored;
+ std::string m_search_text;
static Glib::RefPtr<Gdk::Pixbuf> get_note_icon();
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]