[vte] terminal: Use an enum class for cursor blink mode



commit d6e1b8994e9c2ef96d8b27172b8ceb9f5cc22d7a
Author: Christian Persch <chpe src gnome org>
Date:   Mon Nov 18 22:42:22 2019 +0100

    terminal: Use an enum class for cursor blink mode

 src/vte.cc         | 19 ++++++++-----------
 src/vtegtk.cc      |  4 ++--
 src/vteinternal.hh | 20 ++++++++++++++++----
 src/widget.hh      |  3 +++
 4 files changed, 29 insertions(+), 17 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index bd9607ef..1e07eb5c 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -7892,9 +7892,6 @@ Terminal::Terminal(vte::platform::Widget* w,
        /* Cursor shape. */
        m_cursor_shape = VTE_CURSOR_SHAPE_BLOCK;
 
-       /* Cursor blinking. */
-        m_cursor_blink_mode = VTE_CURSOR_BLINK_SYSTEM;
-
         /* Initialize the saved cursor. */
         save_cursor(&m_normal_screen);
         save_cursor(&m_alternate_screen);
@@ -9766,17 +9763,17 @@ Terminal::update_cursor_blinks()
         bool blink = false;
 
         switch (decscusr_cursor_blink()) {
-        case VTE_CURSOR_BLINK_SYSTEM:
+        case CursorBlinkMode::eSYSTEM:
                 gboolean v;
                 g_object_get(gtk_widget_get_settings(m_widget),
                                                      "gtk-cursor-blink",
                                                      &v, nullptr);
                 blink = v != FALSE;
                 break;
-        case VTE_CURSOR_BLINK_ON:
+        case CursorBlinkMode::eON:
                 blink = true;
                 break;
-        case VTE_CURSOR_BLINK_OFF:
+        case CursorBlinkMode::eOFF:
                 blink = false;
                 break;
         }
@@ -9789,7 +9786,7 @@ Terminal::update_cursor_blinks()
 }
 
 bool
-Terminal::set_cursor_blink_mode(VteCursorBlinkMode mode)
+Terminal::set_cursor_blink_mode(CursorBlinkMode mode)
 {
         if (mode == m_cursor_blink_mode)
                 return false;
@@ -9836,8 +9833,8 @@ Terminal::set_cursor_style(CursorStyle style)
  *
  * Return value: cursor blink mode
  */
-VteCursorBlinkMode
-Terminal::decscusr_cursor_blink()
+Terminal::CursorBlinkMode
+Terminal::decscusr_cursor_blink() const noexcept
 {
         switch (m_cursor_style) {
         default:
@@ -9846,11 +9843,11 @@ Terminal::decscusr_cursor_blink()
         case CursorStyle::eBLINK_BLOCK:
         case CursorStyle::eBLINK_UNDERLINE:
         case CursorStyle::eBLINK_IBEAM:
-                return VTE_CURSOR_BLINK_ON;
+                return CursorBlinkMode::eON;
         case CursorStyle::eSTEADY_BLOCK:
         case CursorStyle::eSTEADY_UNDERLINE:
         case CursorStyle::eSTEADY_IBEAM:
-                return VTE_CURSOR_BLINK_OFF;
+                return CursorBlinkMode::eOFF;
         }
 }
 
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index 0333218d..62236640 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -3759,7 +3759,7 @@ vte_terminal_get_cursor_blink_mode(VteTerminal *terminal)
 {
         g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_CURSOR_BLINK_SYSTEM);
 
-        return IMPL(terminal)->m_cursor_blink_mode;
+        return WIDGET(terminal)->cursor_blink_mode();
 }
 
 /**
@@ -3777,7 +3777,7 @@ vte_terminal_set_cursor_blink_mode(VteTerminal *terminal,
        g_return_if_fail(VTE_IS_TERMINAL(terminal));
         g_return_if_fail(mode >= VTE_CURSOR_BLINK_SYSTEM && mode <= VTE_CURSOR_BLINK_OFF);
 
-        if (IMPL(terminal)->set_cursor_blink_mode(mode))
+        if (WIDGET(terminal)->set_cursor_blink_mode(mode))
                 g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CURSOR_BLINK_MODE]);
 }
 
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index 290ee188..8f62573a 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -304,6 +304,8 @@ class Widget;
 namespace terminal {
 
 class Terminal {
+        friend class vte::platform::Widget;
+
 private:
         /* These correspond to the parameters for DECSCUSR (Set cursor style). */
         enum class CursorStyle {
@@ -329,6 +331,15 @@ private:
                 eSTEADY_IBEAM     = 6,
         };
 
+protected:
+
+        /* NOTE: This needs to be kept in sync with the public VteCursorBlinkMode enum */
+        enum class CursorBlinkMode {
+                eSYSTEM,
+                eON,
+                eOFF
+        };
+
 public:
         Terminal(vte::platform::Widget* w,
                  VteTerminal *t);
@@ -491,8 +502,8 @@ public:
         VteCursorShape m_cursor_shape;
         double m_cursor_aspect_ratio{0.04};
 
-       /* Cursor blinking, as set in dconf. */
-        VteCursorBlinkMode m_cursor_blink_mode;
+       /* Cursor blinking */
+        CursorBlinkMode m_cursor_blink_mode{CursorBlinkMode::eSYSTEM};
         gboolean m_cursor_blink_state;
         guint m_cursor_blink_tag{0};           /* cursor blinking timeout ID */
         gint m_cursor_blink_cycle;          /* gtk-cursor-blink-time / 2 */
@@ -833,7 +844,7 @@ public:
         void add_cursor_timeout();
         void remove_cursor_timeout();
         void update_cursor_blinks();
-        VteCursorBlinkMode decscusr_cursor_blink();
+        CursorBlinkMode decscusr_cursor_blink() const noexcept;
         VteCursorShape decscusr_cursor_shape();
 
         void remove_text_blink_timeout();
@@ -1280,7 +1291,8 @@ public:
                         vte::color::rgb const *palette,
                         gsize palette_size);
         void set_colors_default();
-        bool set_cursor_blink_mode(VteCursorBlinkMode mode);
+        bool set_cursor_blink_mode(CursorBlinkMode mode);
+        auto cursor_blink_mode() const noexcept { return m_cursor_blink_mode; }
         bool set_cursor_shape(VteCursorShape shape);
         bool set_cursor_style(CursorStyle style);
         bool set_delete_binding(VteEraseBinding binding);
diff --git a/src/widget.hh b/src/widget.hh
index b8c60cd8..53e3d7be 100644
--- a/src/widget.hh
+++ b/src/widget.hh
@@ -105,6 +105,9 @@ public:
         auto hscroll_policy() const noexcept { return m_hscroll_policy; }
         auto vscroll_policy() const noexcept { return m_vscroll_policy; }
 
+        bool set_cursor_blink_mode(VteCursorBlinkMode mode) { return 
terminal()->set_cursor_blink_mode(vte::terminal::Terminal::CursorBlinkMode(mode)); }
+        auto cursor_blink_mode() const noexcept { return 
VteCursorBlinkMode(terminal()->cursor_blink_mode()); }
+
         char const* encoding() const noexcept { return m_terminal->encoding(); }
 
         void emit_child_exited(int status) noexcept;


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