Przeglądaj źródła

LibGUI: GTextBox should only run a caret blink timer when focused.

Andreas Kling 6 lat temu
rodzic
commit
bc6ff35428
3 zmienionych plików z 14 dodań i 2 usunięć
  1. 10 1
      LibGUI/GTextBox.cpp
  2. 2 0
      LibGUI/GTextBox.h
  3. 2 1
      LibGUI/GWidget.cpp

+ 10 - 1
LibGUI/GTextBox.cpp

@@ -8,7 +8,6 @@
 GTextBox::GTextBox(GWidget* parent)
     : GWidget(parent)
 {
-    start_timer(500);
 }
 
 GTextBox::~GTextBox()
@@ -138,3 +137,13 @@ void GTextBox::timer_event(GTimerEvent&)
     m_cursor_blink_state = !m_cursor_blink_state;
     update();
 }
+
+void GTextBox::focusin_event(GEvent&)
+{
+    start_timer(500);
+}
+
+void GTextBox::focusout_event(GEvent&)
+{
+    stop_timer();
+}

+ 2 - 0
LibGUI/GTextBox.h

@@ -20,6 +20,8 @@ private:
     virtual void mousedown_event(GMouseEvent&) override;
     virtual void keydown_event(GKeyEvent&) override;
     virtual void timer_event(GTimerEvent&) override;
+    virtual void focusin_event(GEvent&) override;
+    virtual void focusout_event(GEvent&) override;
     virtual bool accepts_focus() const override { return true; }
 
     void handle_backspace();

+ 2 - 1
LibGUI/GWidget.cpp

@@ -39,8 +39,9 @@ void GWidget::event(GEvent& event)
         m_has_pending_paint_event = false;
         return paint_event(static_cast<GPaintEvent&>(event));
     case GEvent::FocusIn:
-    case GEvent::FocusOut:
         return focusin_event(event);
+    case GEvent::FocusOut:
+        return focusout_event(event);
     case GEvent::Show:
         return show_event(static_cast<GShowEvent&>(event));
     case GEvent::Hide: