[Libreoffice-commits] core.git: framework/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Jun 26 13:45:09 UTC 2020


 framework/source/uielement/comboboxtoolbarcontroller.cxx    |   13 ++++++++++++
 framework/source/uielement/dropdownboxtoolbarcontroller.cxx |   13 ++++++++++++
 framework/source/uielement/edittoolbarcontroller.cxx        |   13 ++++++++++++
 framework/source/uielement/spinfieldtoolbarcontroller.cxx   |   13 ++++++++++++
 4 files changed, 52 insertions(+)

New commits:
commit d1e8831e06ef1fda6f0319f07601dd98abdc3fd1
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Jun 26 12:37:39 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Jun 26 15:44:28 2020 +0200

    improve tab traversal in addons with native widgets
    
    Change-Id: I55d0390522122cc4409ea14274e756881315df0a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97219
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/framework/source/uielement/comboboxtoolbarcontroller.cxx b/framework/source/uielement/comboboxtoolbarcontroller.cxx
index 1d73f3fc526d..9f200b2cd838 100644
--- a/framework/source/uielement/comboboxtoolbarcontroller.cxx
+++ b/framework/source/uielement/comboboxtoolbarcontroller.cxx
@@ -47,6 +47,12 @@ public:
     ComboBoxControl(vcl::Window* pParent, ComboboxToolbarController* pComboboxToolbarController);
     virtual ~ComboBoxControl() override;
     virtual void dispose() override;
+    virtual void GetFocus() override
+    {
+        if (m_xWidget)
+            m_xWidget->grab_focus();
+        InterimItemWindow::GetFocus();
+    }
 
     void set_active_or_entry_text(const OUString& rText);
     OUString get_active_text() const { return m_xWidget->get_active_text(); }
@@ -62,6 +68,7 @@ public:
     DECL_LINK(FocusOutHdl, weld::Widget&, void);
     DECL_LINK(ModifyHdl, weld::ComboBox&, void);
     DECL_LINK(ActivateHdl, weld::ComboBox&, bool);
+    DECL_LINK(KeyInputHdl, const ::KeyEvent&, bool);
 
 private:
     std::unique_ptr<weld::ComboBox> m_xWidget;
@@ -77,11 +84,17 @@ ComboBoxControl::ComboBoxControl(vcl::Window* pParent, ComboboxToolbarController
     m_xWidget->connect_focus_out(LINK(this, ComboBoxControl, FocusOutHdl));
     m_xWidget->connect_changed(LINK(this, ComboBoxControl, ModifyHdl));
     m_xWidget->connect_entry_activate(LINK(this, ComboBoxControl, ActivateHdl));
+    m_xWidget->connect_key_press(LINK(this, ComboBoxControl, KeyInputHdl));
 
     m_xWidget->set_entry_width_chars(1); // so a smaller than default width can be used by ComboboxToolbarController
     SetSizePixel(get_preferred_size());
 }
 
+IMPL_LINK(ComboBoxControl, KeyInputHdl, const ::KeyEvent&, rKEvt, bool)
+{
+    return ChildKeyInput(rKEvt);
+}
+
 void ComboBoxControl::set_active_or_entry_text(const OUString& rText)
 {
     const int nFound = m_xWidget->find_text(rText);
diff --git a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
index 1603ab6b3185..8c50d7229232 100644
--- a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
+++ b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
@@ -47,6 +47,12 @@ public:
     ListBoxControl(vcl::Window* pParent, DropdownToolbarController* pListBoxListener);
     virtual ~ListBoxControl() override;
     virtual void dispose() override;
+    virtual void GetFocus() override
+    {
+        if (m_xWidget)
+            m_xWidget->grab_focus();
+        InterimItemWindow::GetFocus();
+    }
 
     void set_active(int nPos) { m_xWidget->set_active(nPos); }
     void append_text(const OUString& rStr) { m_xWidget->append_text(rStr); }
@@ -60,6 +66,7 @@ public:
     DECL_LINK(FocusInHdl, weld::Widget&, void);
     DECL_LINK(FocusOutHdl, weld::Widget&, void);
     DECL_LINK(ModifyHdl, weld::ComboBox&, void);
+    DECL_LINK(KeyInputHdl, const ::KeyEvent&, bool);
 
 private:
     std::unique_ptr<weld::ComboBox> m_xWidget;
@@ -74,11 +81,17 @@ ListBoxControl::ListBoxControl(vcl::Window* pParent, DropdownToolbarController*
     m_xWidget->connect_focus_in(LINK(this, ListBoxControl, FocusInHdl));
     m_xWidget->connect_focus_out(LINK(this, ListBoxControl, FocusOutHdl));
     m_xWidget->connect_changed(LINK(this, ListBoxControl, ModifyHdl));
+    m_xWidget->connect_key_press(LINK(this, ListBoxControl, KeyInputHdl));
 
     m_xWidget->set_size_request(42, -1); // so a later narrow size request can stick
     SetSizePixel(get_preferred_size());
 }
 
+IMPL_LINK(ListBoxControl, KeyInputHdl, const ::KeyEvent&, rKEvt, bool)
+{
+    return ChildKeyInput(rKEvt);
+}
+
 ListBoxControl::~ListBoxControl()
 {
     disposeOnce();
diff --git a/framework/source/uielement/edittoolbarcontroller.cxx b/framework/source/uielement/edittoolbarcontroller.cxx
index 76988f88f7a9..89ff08598fce 100644
--- a/framework/source/uielement/edittoolbarcontroller.cxx
+++ b/framework/source/uielement/edittoolbarcontroller.cxx
@@ -46,6 +46,12 @@ public:
     EditControl(vcl::Window* pParent, EditToolbarController* pEditToolbarController);
     virtual ~EditControl() override;
     virtual void dispose() override;
+    virtual void GetFocus() override
+    {
+        if (m_xWidget)
+            m_xWidget->grab_focus();
+        InterimItemWindow::GetFocus();
+    }
 
     OUString get_text() const { return m_xWidget->get_text(); }
     void set_text(const OUString& rText) { m_xWidget->set_text(rText); }
@@ -58,6 +64,7 @@ private:
     DECL_LINK(FocusOutHdl, weld::Widget&, void);
     DECL_LINK(ModifyHdl, weld::Entry&, void);
     DECL_LINK(ActivateHdl, weld::Entry&, bool);
+    DECL_LINK(KeyInputHdl, const ::KeyEvent&, bool);
 };
 
 EditControl::EditControl(vcl::Window* pParent, EditToolbarController* pEditToolbarController)
@@ -69,10 +76,16 @@ EditControl::EditControl(vcl::Window* pParent, EditToolbarController* pEditToolb
     m_xWidget->connect_focus_out(LINK(this, EditControl, FocusOutHdl));
     m_xWidget->connect_changed(LINK(this, EditControl, ModifyHdl));
     m_xWidget->connect_activate(LINK(this, EditControl, ActivateHdl));
+    m_xWidget->connect_key_press(LINK(this, EditControl, KeyInputHdl));
 
     SetSizePixel(get_preferred_size());
 }
 
+IMPL_LINK(EditControl, KeyInputHdl, const ::KeyEvent&, rKEvt, bool)
+{
+    return ChildKeyInput(rKEvt);
+}
+
 EditControl::~EditControl()
 {
     disposeOnce();
diff --git a/framework/source/uielement/spinfieldtoolbarcontroller.cxx b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
index 1dad7b918683..6747b21ece89 100644
--- a/framework/source/uielement/spinfieldtoolbarcontroller.cxx
+++ b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
@@ -52,6 +52,12 @@ public:
     SpinfieldControl(vcl::Window* pParent, SpinfieldToolbarController* pSpinfieldToolbarController);
     virtual ~SpinfieldControl() override;
     virtual void dispose() override;
+    virtual void GetFocus() override
+    {
+        if (m_xWidget)
+            m_xWidget->grab_focus();
+        InterimItemWindow::GetFocus();
+    }
 
     void set_value(double fValue);
 
@@ -84,6 +90,7 @@ public:
     DECL_LINK(ActivateHdl, weld::Entry&, bool);
     DECL_LINK(FocusInHdl, weld::Widget&, void);
     DECL_LINK(FocusOutHdl, weld::Widget&, void);
+    DECL_LINK(KeyInputHdl, const ::KeyEvent&, bool);
 
 private:
     std::unique_ptr<weld::FormattedSpinButton> m_xWidget;
@@ -102,6 +109,7 @@ SpinfieldControl::SpinfieldControl(vcl::Window* pParent, SpinfieldToolbarControl
     m_xWidget->connect_input(LINK(this, SpinfieldControl, ParseInputHdl));
     m_xWidget->connect_changed(LINK(this, SpinfieldControl, ModifyHdl));
     m_xWidget->connect_activate(LINK(this, SpinfieldControl, ActivateHdl));
+    m_xWidget->connect_key_press(LINK(this, SpinfieldControl, KeyInputHdl));
 
     // so a later narrow size request can stick
     m_xWidget->set_width_chars(3);
@@ -118,6 +126,11 @@ void SpinfieldControl::set_value(double fValue)
     m_pSpinfieldToolbarController->Modify();
 }
 
+IMPL_LINK(SpinfieldControl, KeyInputHdl, const ::KeyEvent&, rKEvt, bool)
+{
+    return ChildKeyInput(rKEvt);
+}
+
 IMPL_LINK(SpinfieldControl, ParseInputHdl, double*, result, bool)
 {
     *result = m_xWidget->get_text().toDouble();


More information about the Libreoffice-commits mailing list