Kaydet (Commit) d17d9500 authored tarafından Caolán McNamara's avatar Caolán McNamara

tdf#124597 template select dialog launched before parent gets final size

Change-Id: If9f6fa6e072a95381aaf4a539e2081733a0248ec
Reviewed-on: https://gerrit.libreoffice.org/70828
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 6e204253
......@@ -332,6 +332,10 @@ public:
virtual bool get_resizable() const = 0;
virtual Size get_size() const = 0;
virtual Point get_position() const = 0;
// ensure window will be centered on its parent, taking into account that
// there may currently be pending geometry requests for the parent
// not yet processed by the underlying toolkit
virtual void set_centered_on_parent_geometry_request() = 0;
virtual bool has_toplevel_focus() const = 0;
virtual void present() = 0;
virtual void set_window_state(const OString& rStr) = 0;
......
......@@ -1385,6 +1385,11 @@ SfxTemplateSelectionDlg::~SfxTemplateSelectionDlg()
short SfxTemplateSelectionDlg::run()
{
// tdf#124597 at startup this dialog is launched before its parent window
// has taken its final size. The parent size request is processed during
// the dialogs event loop so configure this dialog to center to
// the parents pending geometry request
m_xDialog->set_centered_on_parent_geometry_request();
return weld::GenericDialogController::run();
}
......
......@@ -970,6 +970,18 @@ public:
return m_xWindow->GetPosPixel();
}
virtual void set_centered_on_parent_geometry_request() override
{
if (vcl::Window* pParent = m_xWidget->GetParent())
{
Size aParentGeometry(pParent->GetSizePixel());
Size aGeometry(m_xWidget->get_preferred_size());
auto nX = (aParentGeometry.Width() - aGeometry.Width()) / 2;
auto nY = (aParentGeometry.Height() - aGeometry.Height()) / 2;
m_xWidget->SetPosPixel(Point(nX, nY));
}
}
virtual bool get_resizable() const override
{
return m_xWindow->GetStyle() & WB_SIZEABLE;
......
......@@ -2498,6 +2498,11 @@ public:
return Point(current_x, current_y);
}
virtual void set_centered_on_parent_geometry_request() override
{
gtk_window_set_position(m_pWindow, GTK_WIN_POS_CENTER_ALWAYS);
}
virtual bool get_resizable() const override
{
return gtk_window_get_resizable(m_pWindow);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment