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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Jul 28 14:26:03 UTC 2020


 sw/source/uibase/inc/navipi.hxx   |    1 +
 sw/source/uibase/utlui/navipi.cxx |   21 ++++++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

New commits:
commit 50b36951dbf080509c49bf326131afb8c2390d2d
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Jul 28 12:33:15 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Jul 28 16:25:12 2020 +0200

    tdf#134959 move focus on activate, but leave focus on value-changed
    
    if the user presses enter to activate the Entry try to go to the page, and on
    success we move focus to the document.
    
    if the SpinButton changed value a Timer was launched, when it times-out, move
    to the desired page, but leave focus where it currently is, i.e. typically
    remaining in the spinbutton, or whatever other widget the user moved to in the
    meantime
    
    This replaces always grabbing focus to the document on a page-change and
    re-grabbing focus back to the spinbutton.
    
    Change-Id: I597597aedb1753aee755671a2a55779ca6196c09
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99611
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/uibase/inc/navipi.hxx b/sw/source/uibase/inc/navipi.hxx
index 14e066c73380..fee94525d577 100644
--- a/sw/source/uibase/inc/navipi.hxx
+++ b/sw/source/uibase/inc/navipi.hxx
@@ -107,6 +107,7 @@ class SwNavigationPI : public PanelLayout
     DECL_LINK( GlobalMenuSelectHdl, const OString&, void );
     DECL_LINK( ChangePageHdl, Timer*, void );
     DECL_LINK( PageEditModifyHdl, weld::SpinButton&, void );
+    DECL_LINK( EditActionHdl, weld::Entry&, bool );
     bool EditAction();
     void UsePage();
 
diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx
index 0e3af56e48ec..577aba8fc645 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -412,13 +412,7 @@ bool SwNavigationPI::EditAction()
     SwWrtShell &rSh = m_pCreateView->GetWrtShell();
     sal_uInt16 nNewPage = m_xEdit->get_value();
 
-    sal_uInt16 nPhyPage, nVirPage;
-    rSh.GetPageNum(nPhyPage, nVirPage);
-    if (nPhyPage == nNewPage)
-        return false;
-
     rSh.GotoPage(nNewPage, true);
-    m_pCreateView->GetEditWin().GrabFocus();
     m_pCreateView->GetViewFrame()->GetBindings().Invalidate(FN_STAT_PAGE);
 
     return true;
@@ -554,6 +548,7 @@ SwNavigationPI::SwNavigationPI(vcl::Window* pParent,
     // Insert the numeric field in the toolbox.
     m_xEdit->set_accessible_name(m_xEdit->get_tooltip_text());
     m_xEdit->set_width_chars(3);
+    m_xEdit->connect_activate(LINK(this, SwNavigationPI, EditActionHdl));
     m_xEdit->connect_value_changed(LINK(this, SwNavigationPI, PageEditModifyHdl));
     m_xEdit->set_help_id("modules/swriter/ui/navigatorpanel/numericfield");
 
@@ -1054,8 +1049,20 @@ IMPL_LINK_NOARG(SwNavigationPI, ChangePageHdl, Timer *, void)
 {
     if (IsDisposed())
         return;
+    // tdf#134959 if the SpinButton changed value this Timer was launched, now
+    // change to the desired page, but we leave focus where it currently is,
+    // i.e. typically remaining in the spinbutton, or whatever other widget the
+    // user moved to in the meantime
+    EditAction();
+}
+
+IMPL_LINK_NOARG(SwNavigationPI, EditActionHdl, weld::Entry&, bool)
+{
+    // tdf#134959 if the user presses enter to activate the Entry
+    // go to the page, and on success we move focus to the document
     if (EditAction())
-        m_xEdit->grab_focus();
+        m_pCreateView->GetEditWin().GrabFocus();
+    return true;
 }
 
 IMPL_LINK_NOARG(SwNavigationPI, PageEditModifyHdl, weld::SpinButton&, void)


More information about the Libreoffice-commits mailing list