tdf#141728 Revamp sw navigator go to page spin control

- makes the go to page spin control visible only when Navigate By is
set to Page and hides Previous/Next navigation buttons during this time

- makes the go to page control track the page number in the document
view

- reduces the preferred width of the Navigate By control to help reduce
the width of sidebar Navigator

Change-Id: I8d876a919ac18e69cf62381310389c00671d8596
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163723
Tested-by: Jenkins
Tested-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
diff --git a/sw/source/uibase/inc/navipi.hxx b/sw/source/uibase/inc/navipi.hxx
index b47b17e..ff07316 100644
--- a/sw/source/uibase/inc/navipi.hxx
+++ b/sw/source/uibase/inc/navipi.hxx
@@ -49,6 +49,7 @@ class SwNavigationPI final : public PanelLayout

    ::sfx2::sidebar::ControllerItem m_aDocFullName;
    ::sfx2::sidebar::ControllerItem m_aPageStats;
    ::sfx2::sidebar::ControllerItem m_aNavElement;

    std::unique_ptr<weld::Toolbar> m_xContent1ToolBox;
    std::unique_ptr<weld::Toolbar> m_xContent2ToolBox;
@@ -62,13 +63,12 @@ class SwNavigationPI final : public PanelLayout
    std::unique_ptr<weld::Menu> m_xUpdateMenu;
    std::unique_ptr<weld::Menu> m_xInsertMenu;
    std::unique_ptr<weld::Toolbar> m_xGlobalToolBox;
    std::unique_ptr<weld::SpinButton> m_xEdit;
    std::unique_ptr<weld::SpinButton> m_xGotoPageSpinButton;
    std::unique_ptr<weld::Widget> m_xContentBox;
    std::unique_ptr<SwContentTree> m_xContentTree;
    std::unique_ptr<weld::Widget> m_xGlobalBox;
    std::unique_ptr<SwGlobalTree> m_xGlobalTree;
    std::unique_ptr<weld::ComboBox> m_xDocListBox;
    Idle                m_aPageChgIdle;
    OUString            m_sContentFileName;

    VclPtr<SfxNavigator> m_xNavigatorDlg;
@@ -102,15 +102,9 @@ class SwNavigationPI final : public PanelLayout
    DECL_LINK( DoneLink, SfxPoolItem const *, void );
    DECL_LINK( HeadingsMenuSelectHdl, const OUString&, void );
    DECL_LINK( GlobalMenuSelectHdl, const OUString&, void );
    DECL_LINK( ChangePageHdl, Timer*, void );
    DECL_LINK( PageEditModifyHdl, weld::SpinButton&, void );
    DECL_LINK( EditActionHdl, weld::Entry&, bool );
    DECL_LINK( SetFocusChildHdl, weld::Container&, void );
    DECL_LINK( NavigateByComboBoxSelectHdl, weld::ComboBox&, void );
    DECL_LINK( PageModifiedHdl, weld::Entry&, void );

    bool EditAction();
    void UsePage();
    DECL_LINK(GotoPageSpinButtonValueChangedHdl, weld::SpinButton&, void);

    void UpdateInitShow();

@@ -122,6 +116,8 @@ class SwNavigationPI final : public PanelLayout

    void UpdateNavigateBy();

    void SetContent3And4ToolBoxVisibility();

public:

    static std::unique_ptr<PanelLayout> Create(weld::Widget* pParent,
diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx
index 9a9b288..cdfcf0d 100644
--- a/sw/source/uibase/ribbar/workctrl.cxx
+++ b/sw/source/uibase/ribbar/workctrl.cxx
@@ -598,7 +598,7 @@ NavElementBox_Base::NavElementBox_Base(std::unique_ptr<weld::ComboBox> xComboBox
    : m_xComboBox(std::move(xComboBox))
    ,m_xFrame(std::move(xFrame))
{
    m_xComboBox->set_size_request(150, -1);
    m_xComboBox->set_size_request(100, -1);

    m_xComboBox->make_sorted();
    m_xComboBox->freeze();
diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx
index dd38990..946f7b6 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -148,6 +148,15 @@ IMPL_LINK(SwNavigationPI, NavigateByComboBoxSelectHdl, weld::ComboBox&, rComboBo
    UpdateNavigateBy();
}

void SwNavigationPI::SetContent3And4ToolBoxVisibility()
{
    if (IsGlobalMode())
        return;
    bool bIsMoveTypePage = SwView::GetMoveType() == NID_PGE;
    m_xContent3ToolBox->set_visible(!bIsMoveTypePage);
    m_xContent4ToolBox->set_visible(bIsMoveTypePage);
}

// Filling of the list box for outline view or documents
// The PI will be set to full size
void SwNavigationPI::FillBox()
@@ -177,23 +186,6 @@ void SwNavigationPI::FillBox()
    }
}

void SwNavigationPI::UsePage()
{
    SwView *pView = GetCreateView();
    SwWrtShell *pSh = pView ? &pView->GetWrtShell() : nullptr;
    m_xEdit->set_value(1);
    if (pSh)
    {
        const sal_uInt16 nPageCnt = pSh->GetPageCnt();
        sal_uInt16 nPhyPage, nVirPage;
        pSh->GetPageNum(nPhyPage, nVirPage);

        m_xEdit->set_max(nPageCnt);
        m_xEdit->set_width_chars(3);
        m_xEdit->set_value(nPhyPage);
    }
}

// Select handler of the toolboxes
IMPL_LINK(SwNavigationPI, ToolBoxSelectHdl, const OUString&, rCommand, void)
{
@@ -205,14 +197,7 @@ IMPL_LINK(SwNavigationPI, ToolBoxSelectHdl, const OUString&, rCommand, void)

    int nFuncId = 0;
    bool bFocusToDoc = false;
    if (rCommand == ".uno:ScrollToPrevious" || rCommand == ".uno:ScrollToNext")
    {
        bool *pbNext = new bool(true);
        if (rCommand == ".uno:ScrollToPrevious")
            *pbNext = false;
        pView->MoveNavigationHdl(pbNext);
    }
    else if (rCommand == "root")
    if (rCommand == "root")
    {
        m_xContentTree->ToggleToRoot();
    }
@@ -318,8 +303,6 @@ IMPL_LINK(SwNavigationPI, ToolBoxSelectHdl, const OUString&, rCommand, void)
        rSh.SetGlblDocSaveLinks( !bSave );
        m_xGlobalToolBox->set_item_active(rCommand, !bSave);
    }
    else if (rCommand == "dragmode")
        m_xContent6ToolBox->set_menu_item_active("dragmode", !m_xContent6ToolBox->get_menu_item_active("dragmode"));
    else if (rCommand == "headings")
        m_xContent5ToolBox->set_menu_item_active("headings", !m_xContent5ToolBox->get_menu_item_active("headings"));
    else if (rCommand == "update")
@@ -359,39 +342,6 @@ IMPL_LINK(SwNavigationPI, ToolBox5DropdownClickHdl, const OUString&, rCommand, v
        m_xHeadingsMenu->set_active(OUString::number(m_xContentTree->GetOutlineLevel()), true);
}

// Action-Handler Edit:
// Switches to the page if the structure view is not turned on.
bool SwNavigationPI::EditAction()
{
    SwView *pView = GetCreateView();
    if (!pView)
        return false;

    if (m_aPageChgIdle.IsActive())
        m_aPageChgIdle.Stop();

    // if the user has clicked into the document, forget about changing the page
    if (pView->GetEditWin().HasFocus())
        return false;

    if (m_xEdit->get_text().isEmpty())
        return false;
    sal_Int64 nNewPage = m_xEdit->get_text().toInt32();
    SwWrtShell& rSh = m_pCreateView->GetWrtShell();
    sal_Int64 max = rSh.GetPageCnt();
    if (nNewPage <= 0)
        nNewPage = 1;
    else if (nNewPage > max)
        nNewPage = max;
    m_xEdit->set_value(nNewPage);
    m_xEdit->set_position(-1);

    rSh.GotoPage(nNewPage, true);
    m_pCreateView->GetViewFrame().GetBindings().Invalidate(FN_STAT_PAGE);

    return true;
}

void SwNavigationPI::ZoomOut()
{
    if (!IsZoomedIn())
@@ -468,31 +418,13 @@ std::unique_ptr<PanelLayout> SwNavigationPI::Create(weld::Widget* pParent,
    return std::make_unique<SwNavigationPI>(pParent, rxFrame, pBindings, nullptr);
}

IMPL_LINK_NOARG(SwNavigationPI, PageModifiedHdl, weld::Entry&, void)
{
    SwView* pView = GetCreateView();
    if (!pView)
        return;
    if (m_xEdit->get_text().isEmpty())
        return;
    sal_Int64 page_value = m_xEdit->get_text().toInt32();
    SwWrtShell& rSh = m_pCreateView->GetWrtShell();
    sal_Int64 max = rSh.GetPageCnt();
    if (page_value <= 0)
        m_xEdit->set_value(1);
    else if (page_value > max)
        m_xEdit->set_value(max);
    else
        m_xEdit->set_value(page_value);
    m_xEdit->set_position(-1);
}

SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    const css::uno::Reference<css::frame::XFrame>& rxFrame,
    SfxBindings* _pBindings, SfxNavigator* pNavigatorDlg)
    : PanelLayout(pParent, "NavigatorPanel", "modules/swriter/ui/navigatorpanel.ui")
    , m_aDocFullName(SID_DOCFULLNAME, *_pBindings, *this)
    , m_aPageStats(FN_STAT_PAGE, *_pBindings, *this)
    , m_aNavElement(FN_NAV_ELEMENT, *_pBindings, *this)
    , m_xContent1ToolBox(m_xBuilder->weld_toolbar("content1"))
    , m_xContent2ToolBox(m_xBuilder->weld_toolbar("content2"))
    , m_xContent3ToolBox(m_xBuilder->weld_toolbar("content3"))
@@ -505,13 +437,12 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    , m_xUpdateMenu(m_xBuilder->weld_menu("updatemenu"))
    , m_xInsertMenu(m_xBuilder->weld_menu("insertmenu"))
    , m_xGlobalToolBox(m_xBuilder->weld_toolbar("global"))
    , m_xEdit(m_xBuilder->weld_spin_button("spinbutton"))
    , m_xGotoPageSpinButton(m_xBuilder->weld_spin_button("gotopage"))
    , m_xContentBox(m_xBuilder->weld_widget("contentbox"))
    , m_xContentTree(new SwContentTree(m_xBuilder->weld_tree_view("contenttree"), this))
    , m_xGlobalBox(m_xBuilder->weld_widget("globalbox"))
    , m_xGlobalTree(new SwGlobalTree(m_xBuilder->weld_tree_view("globaltree"), this))
    , m_xDocListBox(m_xBuilder->weld_combo_box("documents"))
    , m_aPageChgIdle("SwNavigationPI m_aPageChgIdle")
    , m_xNavigatorDlg(pNavigatorDlg)
    , m_pContentView(nullptr)
    , m_pContentWrtShell(nullptr)
@@ -538,6 +469,7 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    {
        assert(pToolBoxControl);
        m_pNavigateByComboBox = pToolBoxControl->GetComboBox();
        SetContent3And4ToolBoxVisibility();
    }

    // Restore content tree settings before calling UpdateInitShow. UpdateInitShow calls Fillbox,
@@ -579,14 +511,6 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    m_xDocListBox->set_help_id(HID_NAVIGATOR_LISTBOX);
    m_xDocListBox->set_size_request(42, -1); // set a nominal width so it takes width of surroundings

    // 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->connect_changed(LINK(this, SwNavigationPI, PageModifiedHdl));
    m_xEdit->set_help_id("modules/swriter/ui/navigatorpanel/numericfield");

    if (!IsGlobalDoc())
    {
        m_xContent1ToolBox->set_item_visible("contenttoggle", false);
@@ -604,7 +528,6 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
//  Handler
    Link<const OUString&, void> aLk = LINK(this, SwNavigationPI, ToolBoxSelectHdl);
    m_xContent1ToolBox->connect_clicked(aLk);
    m_xContent3ToolBox->connect_clicked(aLk);
    m_xContent5ToolBox->connect_clicked(aLk);
    m_xContent6ToolBox->connect_clicked(aLk);
    m_xGlobalToolBox->connect_clicked(aLk);
@@ -621,12 +544,8 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    if (m_pNavigateByComboBox)
        m_pNavigateByComboBox->connect_changed(
            LINK(this, SwNavigationPI, NavigateByComboBoxSelectHdl));

//  set toolbar of both modes to widest of each
    m_xGlobalToolBox->set_size_request(m_xContent1ToolBox->get_preferred_size().Width() +
                                       m_xContent2ToolBox->get_preferred_size().Width() +
                                       m_xContent3ToolBox->get_preferred_size().Width() +
                                       m_xContent4ToolBox->get_preferred_size().Width(), -1);
    m_xGotoPageSpinButton->connect_value_changed(
        LINK(this, SwNavigationPI, GotoPageSpinButtonValueChangedHdl));

    StartListening(*SfxGetpApp());

@@ -643,9 +562,6 @@ SwNavigationPI::SwNavigationPI(weld::Widget* pParent,
    }
    else if (bFloatingNavigator)
        m_xContentTree->grab_focus();
    UsePage();
    m_aPageChgIdle.SetInvokeHandler(LINK(this, SwNavigationPI, ChangePageHdl));
    m_aPageChgIdle.SetPriority(TaskPriority::LOWEST);

    m_xContentTree->set_accessible_name(SwResId(STR_ACCESS_TL_CONTENT));
    m_xGlobalTree->set_accessible_name(SwResId(STR_ACCESS_TL_GLOBAL));
@@ -678,6 +594,25 @@ weld::Window* SwNavigationPI::GetFrameWeld() const
    return PanelLayout::GetFrameWeld();
}

IMPL_LINK_NOARG(SwNavigationPI, GotoPageSpinButtonValueChangedHdl, weld::SpinButton&, void)
{
    auto nPage = m_xGotoPageSpinButton->get_value();
    SwView *pView = GetCreateView();
    SwWrtShell &rSh = pView->GetWrtShell();
    auto nPageCount = rSh.GetPageCount();
    if (nPage > nPageCount)
    {
        nPage = nPageCount;
        m_xGotoPageSpinButton->set_text(OUString::number(nPage));
    }
    rSh.LockView(true);
    rSh.GotoPage(nPage, false);
    // adjust the visible area so that the top of the page is at the top of the view
    const Point aPt(pView->GetVisArea().Left(), rSh.GetPagePos(nPage).Y());
    pView->SetVisArea(aPt);
    rSh.LockView(false);
}

SwNavigationPI::~SwNavigationPI()
{
    if (IsGlobalDoc() && !IsGlobalMode())
@@ -703,7 +638,7 @@ SwNavigationPI::~SwNavigationPI()
    m_xContentTree.reset();
    m_xContentBox.reset();
    m_xGlobalToolBox.reset();
    m_xEdit.reset();
    m_xGotoPageSpinButton.reset();
    m_xHeadingsMenu.reset();
    m_xUpdateMenu.reset();
    m_xInsertMenu.reset();
@@ -716,49 +651,56 @@ SwNavigationPI::~SwNavigationPI()
    m_xContent5ToolBox.reset();
    m_xContent6ToolBox.reset();

    m_aPageChgIdle.Stop();

    m_aDocFullName.dispose();
    m_aPageStats.dispose();
    m_aNavElement.dispose();
}

void SwNavigationPI::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState /*eState*/,
                                      const SfxPoolItem* /*pState*/)
{
    if (nSID == SID_DOCFULLNAME)
    switch (nSID)
    {
        SwView *pActView = GetCreateView();
        if(pActView)
        {
            SwWrtShell* pWrtShell = pActView->GetWrtShellPtr();
            m_xContentTree->SetActiveShell(pWrtShell);
            bool bGlobal = IsGlobalDoc();
            m_xContent1ToolBox->set_item_visible("contenttoggle", bGlobal);
            if ((!bGlobal && IsGlobalMode()) || (!IsGlobalMode() && m_pConfig->IsGlobalActive()))
            {
                ToggleTree();
            }
            if (bGlobal)
            {
                m_xGlobalToolBox->set_item_active("save", pWrtShell->IsGlblDocSaveLinks());
            }
        }
        else
        {
            m_xContentTree->SetActiveShell(nullptr);
        }
        UpdateListBox();
    }
    else if (nSID == FN_STAT_PAGE)
    {
        if(!comphelper::LibreOfficeKit::isActive())
        case SID_DOCFULLNAME:
        {
            SwView *pActView = GetCreateView();
            if(pActView)
            {
                SwWrtShell &rSh = pActView->GetWrtShell();
                m_xEdit->set_max(rSh.GetPageCnt());
                m_xEdit->set_width_chars(3);
                SwWrtShell* pWrtShell = pActView->GetWrtShellPtr();
                m_xContentTree->SetActiveShell(pWrtShell);
                bool bGlobal = IsGlobalDoc();
                m_xContent1ToolBox->set_item_visible("contenttoggle", bGlobal);
                if ((!bGlobal && IsGlobalMode()) || (!IsGlobalMode() && m_pConfig->IsGlobalActive()))
                {
                    ToggleTree();
                }
                if (bGlobal)
                {
                    m_xGlobalToolBox->set_item_active("save", pWrtShell->IsGlblDocSaveLinks());
                }
            }
            else
            {
                m_xContentTree->SetActiveShell(nullptr);
            }
            UpdateListBox();
        }
        break;
        case FN_NAV_ELEMENT:
            SetContent3And4ToolBoxVisibility();
            [[fallthrough]];
        case FN_STAT_PAGE:
        {
            if (SwView::GetMoveType() == NID_PGE)
            {
                SwView *pView = GetCreateView();
                SwWrtShell &rSh = pView->GetWrtShell();
                // GetPageNum - return current page number:
                // true: in which cursor is located.
                // false: which is visible at the upper margin.
                sal_uInt16 nPhyNum, nVirtNum;
                rSh.GetPageNum(nPhyNum, nVirtNum, false);
                m_xGotoPageSpinButton->set_text(OUString::number(nPhyNum));
            }
        }
    }
@@ -1008,6 +950,7 @@ sal_Int8 SwNavigationPI::ExecuteDrop( const ExecuteDropEvent& rEvt )
    return nRet;
}

// toggle between showing the global tree or the content tree
void SwNavigationPI::ToggleTree()
{
    if (comphelper::LibreOfficeKit::isActive())
@@ -1019,6 +962,7 @@ void SwNavigationPI::ToggleTree()
    bool bGlobalDoc = IsGlobalDoc();
    if (!IsGlobalMode() && bGlobalDoc)
    {
        // toggle to global mode
        if (IsZoomedIn())
            ZoomOut();
        m_xGlobalBox->show();
@@ -1040,19 +984,18 @@ void SwNavigationPI::ToggleTree()
        m_xGlobalBox->hide();
        m_xGlobalTree->HideTree();
        m_xGlobalToolBox->hide();
        SetGlobalMode(false);
        if (!IsZoomedIn())
        {
            m_xContentBox->show();
            m_xContentTree->ShowTree();
            m_xContent1ToolBox->show();
            m_xContent2ToolBox->show();
            m_xContent3ToolBox->show();
            m_xContent4ToolBox->show();
            SetContent3And4ToolBoxVisibility();
            m_xContent5ToolBox->show();
            m_xContent6ToolBox->show();
            m_xDocListBox->show();
        }
        SetGlobalMode(false);
    }
}

@@ -1068,17 +1011,6 @@ bool SwNavigationPI::IsGlobalDoc() const
    return bRet;
}

IMPL_LINK_NOARG(SwNavigationPI, ChangePageHdl, Timer *, void)
{
    if (!m_xDocListBox) // disposed
        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();
}

void SwNavigationPI::SelectNavigateByContentType(const OUString& rContentTypeName)
{
    if (!m_pNavigateByComboBox)
@@ -1090,22 +1022,6 @@ void SwNavigationPI::SelectNavigateByContentType(const OUString& rContentTypeNam
    }
}

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_pCreateView->GetEditWin().GrabFocus();
    return true;
}

IMPL_LINK_NOARG(SwNavigationPI, PageEditModifyHdl, weld::SpinButton&, void)
{
    if (m_aPageChgIdle.IsActive())
        m_aPageChgIdle.Stop();
    m_aPageChgIdle.Start();
}

SwView*  SwNavigationPI::GetCreateView() const
{
    if (!m_pCreateView)
diff --git a/sw/uiconfig/swriter/ui/navigatorpanel.ui b/sw/uiconfig/swriter/ui/navigatorpanel.ui
index 8431546..c90b2e7 100644
--- a/sw/uiconfig/swriter/ui/navigatorpanel.ui
+++ b/sw/uiconfig/swriter/ui/navigatorpanel.ui
@@ -5,6 +5,7 @@
  <object class="GtkAdjustment" id="adjustment1">
    <property name="lower">1</property>
    <property name="upper">100000</property>
    <property name="value">1</property>
    <property name="step-increment">1</property>
    <property name="page-increment">10</property>
  </object>
@@ -264,10 +265,11 @@
                            <child>
                              <object class="GtkComboBox" id="NavElementWidget">
                                <property name="visible">True</property>
                                <property name="can-focus">True</property>
                                <property name="can-focus">False</property>
                                <property name="hexpand">True</property>
                                <property name="model">liststore4</property>
                                <property name="entry-text-column">0</property>
                                <property name="popup-fixed-width">False</property>
                                <property name="id-column">1</property>
                                <child>
                                  <object class="GtkCellRendererText" id="cellrenderertext7"/>
@@ -297,10 +299,8 @@
                    </child>
                    <child>
                      <object class="GtkToolbar" id="content3">
                        <property name="visible">True</property>
                        <property name="can-focus">True</property>
                        <property name="toolbar-style">icons</property>
                        <property name="show-arrow">False</property>
                        <child>
                          <object class="GtkToolButton" id=".uno:ScrollToPrevious">
                            <property name="visible">True</property>
@@ -330,27 +330,27 @@
                    <child>
                      <object class="GtkToolbar" id="content4">
                        <property name="visible">True</property>
                        <property name="can-focus">True</property>
                        <property name="can-focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="toolbar-style">icons</property>
                        <property name="show-arrow">False</property>
                        <child>
                          <object class="GtkToolItem" id="contentedit">
                          <object class="GtkToolItem">
                            <property name="visible">True</property>
                            <property name="can-focus">False</property>
                            <property name="hexpand">True</property>
                            <child>
                              <object class="GtkSpinButton" id="spinbutton">
                              <object class="GtkSpinButton" id="gotopage">
                                <property name="visible">True</property>
                                <property name="can-focus">True</property>
                                <property name="tooltip-text" translatable="yes" context="navigatorpanel|spinbutton|tooltip_text">Go to Page</property>
                                <property name="hexpand">True</property>
                                <property name="truncate-multiline">True</property>
                                <property name="tooltip-text" translatable="yes" context="navigatorpanel|gotopage|tooltip_text">Go to page</property>
                                <property name="width-chars">3</property>
                                <property name="max-width-chars">3</property>
                                <property name="input-purpose">number</property>
                                <property name="adjustment">adjustment1</property>
                                <property name="value">1</property>
                                <property name="numeric">True</property>
                                <child internal-child="accessible">
                                  <object class="AtkObject" id="spinbutton-atkobject">
                                    <property name="AtkObject::accessible-description" translatable="yes" context="navigatorpanel|extended_tip|spinbutton">Enter page number and press Enter. Use arrows to move to next page forward or backward.</property>
                                  <object class="AtkObject" id="gotopage-atkobject">
                                    <property name="AtkObject::accessible-description" translatable="yes" context="navigatorpanel|extended_tip|gotopage">Enter a page that you want to go to and press enter or use the buttons to move to the previous or next page.</property>
                                  </object>
                                </child>
                              </object>
@@ -505,7 +505,7 @@
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                    <property name="position">2</property>
                  </packing>
                </child>
                <child>
@@ -612,7 +612,7 @@
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">2</property>
                    <property name="position">3</property>
                  </packing>
                </child>
              </object>