[gnote] Have only one embedded note window
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Have only one embedded note window
- Date: Sat, 5 Jun 2021 11:57:30 +0000 (UTC)
commit 00aa4ebecd0bccf18814286b4f8258178461c32c
Author: Aurimas Černius <aurisc4 gmail com>
Date: Sat Jun 5 14:53:30 2021 +0300
Have only one embedded note window
src/recentchanges.cpp | 60 +++++++++++++++++++++------------------------------
src/recentchanges.hpp | 2 +-
2 files changed, 26 insertions(+), 36 deletions(-)
---
diff --git a/src/recentchanges.cpp b/src/recentchanges.cpp
index 2af6ddd5..2f65f5ca 100644
--- a/src/recentchanges.cpp
+++ b/src/recentchanges.cpp
@@ -56,6 +56,7 @@ namespace gnote {
, m_search_box(nullptr)
, m_find_next_prev_box(nullptr)
, m_search_entry(nullptr)
+ , m_embedded_widget(nullptr)
, m_mapped(false)
, m_entry_changed_timeout(NULL)
, m_window_menu_embedded(NULL)
@@ -450,10 +451,9 @@ namespace gnote {
background_embedded(*widget);
}
}
- for(auto embedded : m_embedded_widgets) {
- if(embedded != m_search_notes_widget) {
- embedded->unembed();
- }
+ if(m_embedded_widget) {
+ m_embedded_widget->unembed();
+ m_embedded_widget = nullptr;
}
hide();
@@ -515,11 +515,8 @@ namespace gnote {
// Select "All Notes" in the notebooks list
m_search_notes_widget->select_all_notes_notebook();
- EmbeddableWidget *widget = NULL;
- if(m_embed_box.get_children().size() == 0 && m_embedded_widgets.size() > 0) {
- widget = *m_embedded_widgets.rbegin();
- foreground_embedded(*widget);
- }
+ EmbeddableWidget *widget = m_embedded_widget ? m_embedded_widget : m_search_notes_widget;
+ foreground_embedded(*widget);
MainWindow::on_show();
@@ -549,18 +546,15 @@ namespace gnote {
void NoteRecentChanges::embed_widget(EmbeddableWidget & widget)
{
- if(std::find(m_embedded_widgets.begin(), m_embedded_widgets.end(), &widget) == m_embedded_widgets.end())
{
- widget.embed(this);
- m_embedded_widgets.push_back(&widget);
- }
EmbeddableWidget *current = currently_embedded();
if(current == &widget) {
return;
}
- if(current) {
- background_embedded(*current);
+ if(m_embedded_widget) {
+ unembed_widget(*m_embedded_widget);
}
-
+ m_embedded_widget = &widget;
+ widget.embed(this);
if(get_visible()) {
foreground_embedded(widget);
}
@@ -568,32 +562,30 @@ namespace gnote {
void NoteRecentChanges::unembed_widget(EmbeddableWidget & widget)
{
- bool show_other = false;
- auto iter = std::find(m_embedded_widgets.begin(), m_embedded_widgets.end(), &widget);
- if(iter != m_embedded_widgets.end()) {
- if(is_foreground(**iter)) {
+ bool show_search = false;
+ if(&widget == m_embedded_widget) {
+ if(is_foreground(widget)) {
background_embedded(widget);
- show_other = true;
+ show_search = true;
}
- m_embedded_widgets.erase(iter);
+ m_embedded_widget = nullptr;
widget.unembed();
}
- if(show_other) {
- if(m_embedded_widgets.size()) {
- foreground_embedded(**m_embedded_widgets.rbegin());
- }
- else if(get_visible()) {
- close_window();
- }
+ if(show_search) {
+ foreground_embedded(*m_search_notes_widget);
}
}
void NoteRecentChanges::foreground_embedded(EmbeddableWidget & widget)
{
try {
- if(currently_embedded() == &widget) {
+ EmbeddableWidget *current_foreground = currently_embedded();
+ if(current_foreground == &widget) {
return;
}
+ else if(current_foreground) {
+ background_embedded(*current_foreground);
+ }
Gtk::Widget &wid = dynamic_cast<Gtk::Widget&>(widget);
m_embed_box.add(wid);
wid.show();
@@ -666,13 +658,11 @@ namespace gnote {
bool NoteRecentChanges::contains(EmbeddableWidget & widget)
{
- for(EmbeddableWidget *wgt : m_embedded_widgets) {
- if(dynamic_cast<EmbeddableWidget*>(wgt) == &widget) {
- return true;
- }
+ if(&widget == m_search_notes_widget) {
+ return true;
}
- return false;
+ return &widget == m_embedded_widget;
}
bool NoteRecentChanges::is_foreground(EmbeddableWidget & widget)
diff --git a/src/recentchanges.hpp b/src/recentchanges.hpp
index 65085272..ba4eae2c 100644
--- a/src/recentchanges.hpp
+++ b/src/recentchanges.hpp
@@ -117,7 +117,7 @@ private:
Gtk::Button *m_all_notes_button;
Gtk::Button *m_new_note_button;
Gtk::Button *m_window_actions_button;
- std::vector<EmbeddableWidget*> m_embedded_widgets;
+ EmbeddableWidget* m_embedded_widget;
bool m_mapped;
sigc::connection m_current_embedded_name_slot;
sigc::connection m_signal_popover_widgets_changed_cid;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]