[vte] lib: Use bitset to store pending change flags



commit 2dbe5d478ccadfe182e29856ebedd0370053173b
Author: Christian Persch <chpe src gnome org>
Date:   Thu Nov 12 21:37:16 2020 +0100

    lib: Use bitset to store pending change flags

 src/vte.cc         | 11 +++++------
 src/vteinternal.hh | 10 +++++++---
 src/vteseq.cc      | 10 +++++-----
 3 files changed, 17 insertions(+), 14 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index 87fb808c..46fe5ef4 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -10124,7 +10124,7 @@ Terminal::emit_pending_signals()
 
        emit_adjustment_changed();
 
-       if (m_window_title_changed) {
+       if (m_pending_changes & vte::to_integral(PendingChanges::TITLE)) {
                 if (m_window_title != m_window_title_pending) {
                         m_window_title.swap(m_window_title_pending);
 
@@ -10135,10 +10135,9 @@ Terminal::emit_pending_signals()
                 }
 
                 m_window_title_pending.clear();
-                m_window_title_changed = false;
        }
 
-       if (m_current_directory_uri_changed) {
+       if (m_pending_changes & vte::to_integral(PendingChanges::CWD)) {
                 if (m_current_directory_uri != m_current_directory_uri_pending) {
                         m_current_directory_uri.swap(m_current_directory_uri_pending);
 
@@ -10149,10 +10148,9 @@ Terminal::emit_pending_signals()
                 }
 
                 m_current_directory_uri_pending.clear();
-                m_current_directory_uri_changed = false;
         }
 
-        if (m_current_file_uri_changed) {
+        if (m_pending_changes & vte::to_integral(PendingChanges::CWF)) {
                 if (m_current_file_uri != m_current_file_uri_pending) {
                         m_current_file_uri.swap(m_current_file_uri_pending);
 
@@ -10163,9 +10161,10 @@ Terminal::emit_pending_signals()
                 }
 
                 m_current_file_uri_pending.clear();
-                m_current_file_uri_changed = false;
         }
 
+        m_pending_changes = 0;
+
        /* Flush any pending "inserted" signals. */
 
         if (m_cursor_moved_pending) {
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index f9db1f2a..ac7c8654 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -650,12 +650,16 @@ public:
         std::string m_window_title_pending{};
         std::string m_current_directory_uri_pending{};
         std::string m_current_file_uri_pending{};
-        bool m_window_title_changed{false};
-        bool m_current_directory_uri_changed{false};
-        bool m_current_file_uri_changed{false};
 
         std::vector<std::string> m_window_title_stack{};
 
+        enum class PendingChanges {
+                TITLE = 1u << 0,
+                CWD   = 1u << 1,
+                CWF   = 1u << 2,
+        };
+        unsigned m_pending_changes{0};
+
        /* Background */
         double m_background_alpha{1.};
 
diff --git a/src/vteseq.cc b/src/vteseq.cc
index ac9c4993..3590aae0 100644
--- a/src/vteseq.cc
+++ b/src/vteseq.cc
@@ -1570,7 +1570,7 @@ Terminal::set_current_directory_uri(vte::parser::Sequence const& seq,
         }
 
         m_current_directory_uri_pending.swap(uri);
-        m_current_directory_uri_changed = true;
+        m_pending_changes |= vte::to_integral(PendingChanges::CWD);
 }
 
 void
@@ -1593,7 +1593,7 @@ Terminal::set_current_file_uri(vte::parser::Sequence const& seq,
         }
 
         m_current_file_uri_pending.swap(uri);
-        m_current_file_uri_changed = true;
+        m_pending_changes |= vte::to_integral(PendingChanges::CWF);
 }
 
 void
@@ -6570,7 +6570,7 @@ Terminal::OSC(vte::parser::Sequence const& seq)
                     it.size_remaining() < VTE_WINDOW_TITLE_MAX_LENGTH)
                         title = it.string_remaining();
                 m_window_title_pending.swap(title);
-                m_window_title_changed = true;
+                m_pending_changes |= vte::to_integral(PendingChanges::TITLE);
                 break;
         }
 
@@ -9064,7 +9064,7 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq)
                                 m_window_title_stack.erase(m_window_title_stack.cbegin());
                         }
 
-                        if (m_window_title_changed)
+                        if (m_pending_changes & vte::to_integral(PendingChanges::TITLE))
                                 m_window_title_stack.emplace(m_window_title_stack.cend(),
                                                              m_window_title_pending);
                         else
@@ -9088,7 +9088,7 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq)
                         if (m_window_title_stack.empty())
                                 break;
 
-                        m_window_title_changed = true;
+                        m_pending_changes |= vte::to_integral(PendingChanges::TITLE);
                         m_window_title_pending.swap(m_window_title_stack.back());
                         m_window_title_stack.pop_back();
                         break;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]