summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-06-26 12:37:39 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-06-26 15:44:28 +0200
commitd1e8831e06ef1fda6f0319f07601dd98abdc3fd1 (patch)
tree95ab905a76b858793fbfc19e26e0c376c3043c27 /framework
parent07875e36f7f8aab16e5a1e5e78c189e572d57bf8 (diff)
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@redhat.com>
Diffstat (limited to 'framework')
-rw-r--r--framework/source/uielement/comboboxtoolbarcontroller.cxx13
-rw-r--r--framework/source/uielement/dropdownboxtoolbarcontroller.cxx13
-rw-r--r--framework/source/uielement/edittoolbarcontroller.cxx13
-rw-r--r--framework/source/uielement/spinfieldtoolbarcontroller.cxx13
4 files changed, 52 insertions, 0 deletions
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();