diff options
author | Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> | 2021-03-03 07:47:43 +0100 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2021-03-16 09:54:13 +0100 |
commit | e29e100174c133d27e953934311d68602c4515b7 (patch) | |
tree | e607f4bde9339dd1fbfb6638d7e3a3f130957edf /svx | |
parent | 4f640db6599e9cb8d92f2cc72ee6e3f2addda5b6 (diff) |
tdf#139804 Focus form controls inside document with Alt-<Mnemonic>
Change-Id: I710a23a53ca0eb256a477a78ce1b7ae01129f717
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111865
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
(cherry picked from commit 67ad205404211a2ae17c430a17ede6e9d04d0b7e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112501
Tested-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/form/fmview.cxx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx index 6c089c44c98c..e090d7c73640 100644 --- a/svx/source/form/fmview.cxx +++ b/svx/source/form/fmview.cxx @@ -58,12 +58,15 @@ #include <com/sun/star/beans/PropertyState.hpp> #include <com/sun/star/form/FormComponentType.hpp> #include <vcl/svapp.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <com/sun/star/awt/XControl.hpp> #include <tools/debug.hxx> #include <tools/diagnose_ex.h> #include <vcl/stdtext.hxx> #include <svx/fmglob.hxx> #include <svx/sdrpagewindow.hxx> #include <svx/sdrpaintwindow.hxx> +#include <vcl/i18nhelp.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -511,6 +514,31 @@ bool FmFormView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) } + // tdf#139804 Allow selecting form controls with Alt-<Mnemonic> + if (rKeyCode.IsMod2() && rKeyCode.GetCode()) + { + FmFormPage* pCurPage = GetCurPage(); + for (size_t a = 0; a < pCurPage->GetObjCount(); ++a) + { + SdrObject* pObj = pCurPage->GetObj(a); + FmFormObj* pFormObject = FmFormObj::GetFormObject(pObj); + if (!pFormObject) + continue; + + Reference<awt::XControl> xControl = pFormObject->GetUnoControl(*this, *pWin); + if (!xControl.is()) + continue; + const vcl::I18nHelper& rI18nHelper = Application::GetSettings().GetUILocaleI18nHelper(); + VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow(xControl->getPeer()); + if (rI18nHelper.MatchMnemonic(pWindow->GetText(), rKEvt.GetCharCode())) + { + pWindow->GrabFocus(); + bDone = true; + break; + } + } + } + if ( !bDone ) bDone = E3dView::KeyInput(rKEvt,pWin); return bDone; |