[Libreoffice-commits] core.git: sc/source sd/source svx/source
Samuel Mehrbrodt (via logerrit)
logerrit at kemper.freedesktop.org
Mon Mar 15 11:48:14 UTC 2021
sc/source/ui/inc/gridwin.hxx | 2 +-
sc/source/ui/view/gridwin.cxx | 2 +-
sc/source/ui/view/gridwin3.cxx | 7 ++++++-
sd/source/ui/view/drviews4.cxx | 4 ++--
svx/source/form/fmview.cxx | 28 ++++++++++++++++++++++++++++
5 files changed, 38 insertions(+), 5 deletions(-)
New commits:
commit 67ad205404211a2ae17c430a17ede6e9d04d0b7e
Author: Samuel Mehrbrodt <samuel.mehrbrodt at allotropia.de>
AuthorDate: Wed Mar 3 07:47:43 2021 +0100
Commit: Samuel Mehrbrodt <samuel.mehrbrodt at allotropia.de>
CommitDate: Mon Mar 15 12:47:34 2021 +0100
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 at allotropia.de>
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index b4f08368d530..9ce8a8365bf0 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -260,7 +260,7 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::Window, public DropTargetHel
bool DrawMouseButtonDown(const MouseEvent& rMEvt);
bool DrawMouseButtonUp(const MouseEvent& rMEvt);
bool DrawMouseMove(const MouseEvent& rMEvt);
- bool DrawKeyInput(const KeyEvent& rKEvt);
+ bool DrawKeyInput(const KeyEvent& rKEvt, vcl::Window* pWin);
bool DrawCommand(const CommandEvent& rCEvt);
bool DrawHasMarkedObj();
void DrawEndAction();
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 1497988b7f16..585d46ff6cf0 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -3250,7 +3250,7 @@ void ScGridWindow::KeyInput(const KeyEvent& rKEvt)
if (mrViewData.GetDocShell()->GetProgress())
return;
- if (DrawKeyInput(rKEvt))
+ if (DrawKeyInput(rKEvt, this))
{
const vcl::KeyCode& rLclKeyCode = rKEvt.GetKeyCode();
if (rLclKeyCode.GetCode() == KEY_DOWN
diff --git a/sc/source/ui/view/gridwin3.cxx b/sc/source/ui/view/gridwin3.cxx
index e78a97cd5e3f..948f388ca866 100644
--- a/sc/source/ui/view/gridwin3.cxx
+++ b/sc/source/ui/view/gridwin3.cxx
@@ -167,10 +167,15 @@ bool ScGridWindow::DrawCommand(const CommandEvent& rCEvt)
return false;
}
-bool ScGridWindow::DrawKeyInput(const KeyEvent& rKEvt)
+bool ScGridWindow::DrawKeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
{
ScDrawView* pDrView = mrViewData.GetScDrawView();
FuPoor* pDraw = mrViewData.GetView()->GetDrawFuncPtr();
+
+
+ if (pDrView && pDrView->KeyInput(rKEvt, pWin))
+ return true;
+
if (pDrView && pDraw && !mrViewData.IsRefMode())
{
pDraw->SetWindow( this );
diff --git a/sd/source/ui/view/drviews4.cxx b/sd/source/ui/view/drviews4.cxx
index 62e23e5b8e7e..39f428bb8658 100644
--- a/sd/source/ui/view/drviews4.cxx
+++ b/sd/source/ui/view/drviews4.cxx
@@ -148,9 +148,9 @@ void DrawViewShell::DeleteActualLayer()
bool DrawViewShell::KeyInput (const KeyEvent& rKEvt, ::sd::Window* pWin)
{
- bool bRet = false;
+ bool bRet = GetView()->KeyInput(rKEvt, pWin);
- if ( !IsInputLocked() || ( rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE ) )
+ if (!bRet && (!IsInputLocked() || (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)))
{
if(KEY_RETURN == rKEvt.GetKeyCode().GetCode()
&& rKEvt.GetKeyCode().IsMod1()
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index 756fa8d2b21e..feb1e43f2f8e 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -41,11 +41,14 @@
#include <fmundo.hxx>
#include <svx/dataaccessdescriptor.hxx>
#include <comphelper/namedvaluecollection.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/awt/XControl.hpp>
#include <tools/debug.hxx>
#include <svx/sdrpagewindow.hxx>
#include <svx/sdrpaintwindow.hxx>
#include <svx/svxids.hrc>
+#include <vcl/i18nhelp.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -493,6 +496,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;
More information about the Libreoffice-commits
mailing list