office-gobmx/vcl/qt5/QtInstanceWindow.cxx
Michael Weghorn 4aa9b7a0bb tdf#130857 qt weld: Implement QtInstanceWindow::{g,s}et_window_state
Map to/from what looks like the corresponding QWidget
equivalents.
No explicit testing done.

Change-Id: I47152c8789223372c49ea60f774d0a04a64db2b7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177828
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2024-12-05 09:27:14 +01:00

228 lines
6.4 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <QtInstanceWindow.hxx>
#include <QtInstanceWindow.moc>
#include <vcl/qt/QtUtils.hxx>
#include <QtGui/QWindow>
QtInstanceWindow::QtInstanceWindow(QWidget* pWidget)
: QtInstanceContainer(pWidget)
{
// install event filter to handle window activation/deactivation events
pWidget->installEventFilter(this);
}
void QtInstanceWindow::set_title(const OUString& rTitle)
{
SolarMutexGuard g;
QtInstance& rQtInstance = GetQtInstance();
if (!rQtInstance.IsMainThread())
{
rQtInstance.RunInMainThread([&] { set_title(rTitle); });
return;
}
getQWidget()->setWindowTitle(toQString(rTitle));
}
OUString QtInstanceWindow::get_title() const
{
SolarMutexGuard g;
QtInstance& rQtInstance = GetQtInstance();
if (!rQtInstance.IsMainThread())
{
OUString sTitle;
rQtInstance.RunInMainThread([&] { sTitle = get_title(); });
return sTitle;
}
return toOUString(getQWidget()->windowTitle());
}
void QtInstanceWindow::window_move(int, int) { assert(false && "Not implemented yet"); }
bool QtInstanceWindow::get_resizable() const
{
SolarMutexGuard g;
bool bResizable = true;
GetQtInstance().RunInMainThread([&] {
const QSizePolicy aSizePolicy = getQWidget()->sizePolicy();
bResizable = (aSizePolicy.horizontalPolicy() != QSizePolicy::Policy::Fixed)
|| (aSizePolicy.verticalPolicy() != QSizePolicy::Policy::Fixed);
});
return bResizable;
}
Size QtInstanceWindow::get_size() const
{
SolarMutexGuard g;
Size aSize;
GetQtInstance().RunInMainThread([&] { aSize = toSize(getQWidget()->size()); });
return aSize;
}
Point QtInstanceWindow::get_position() const
{
SolarMutexGuard g;
Point aPosition;
GetQtInstance().RunInMainThread(
[&] { aPosition = toPoint(getQWidget()->geometry().topLeft()); });
return aPosition;
}
AbsoluteScreenPixelRectangle QtInstanceWindow::get_monitor_workarea() const
{
assert(false && "Not implemented yet");
return AbsoluteScreenPixelRectangle();
}
bool QtInstanceWindow::has_toplevel_focus() const
{
SolarMutexGuard g;
bool bFocus;
GetQtInstance().RunInMainThread([&] { bFocus = QApplication::activeWindow() == getQWidget(); });
return bFocus;
}
void QtInstanceWindow::present()
{
SolarMutexGuard g;
GetQtInstance().RunInMainThread([&] {
if (QWindow* pWindow = getQWidget()->windowHandle())
pWindow->requestActivate();
});
}
void QtInstanceWindow::change_default_widget(weld::Widget*, weld::Widget*)
{
assert(false && "Not implemented yet");
}
bool QtInstanceWindow::is_default_widget(const weld::Widget*) const
{
assert(false && "Not implemented yet");
return true;
}
void QtInstanceWindow::set_window_state(const OUString& rStr)
{
SolarMutexGuard g;
const vcl::WindowData aData(rStr);
const vcl::WindowDataMask eMask = aData.mask();
GetQtInstance().RunInMainThread([&] {
QRect aGeometry = getQWidget()->geometry();
if (eMask & vcl::WindowDataMask::X)
aGeometry.setX(aData.x());
if (eMask & vcl::WindowDataMask::Y)
aGeometry.setY(aData.y());
if (eMask & vcl::WindowDataMask::Width)
aGeometry.setWidth(aData.width());
if (eMask & vcl::WindowDataMask::Height)
aGeometry.setHeight(aData.height());
getQWidget()->setGeometry(aGeometry);
if (eMask & vcl::WindowDataMask::State)
{
const vcl::WindowState eState = aData.state();
if (eState & vcl::WindowState::Normal)
getQWidget()->showNormal();
else if (eState & vcl::WindowState::Maximized)
getQWidget()->showMaximized();
else if (eState & vcl::WindowState::Minimized)
getQWidget()->showMinimized();
}
});
}
OUString QtInstanceWindow::get_window_state(vcl::WindowDataMask eMask) const
{
SolarMutexGuard g;
vcl::WindowData aData;
GetQtInstance().RunInMainThread([&] {
QRect aGeometry = getQWidget()->geometry();
if (eMask & vcl::WindowDataMask::X)
aData.setX(aGeometry.x());
if (eMask & vcl::WindowDataMask::Y)
aData.setY(aGeometry.y());
if (eMask & vcl::WindowDataMask::Width)
aData.setWidth(aGeometry.width());
if (eMask & vcl::WindowDataMask::Height)
aData.setHeight(aGeometry.height());
if (eMask & vcl::WindowDataMask::State)
{
vcl::WindowState nState = vcl::WindowState::NONE;
if (getQWidget()->isMaximized())
nState |= vcl::WindowState::Maximized;
else if (getQWidget()->isMinimized())
nState |= vcl::WindowState::Minimized;
else
nState |= vcl::WindowState::Normal;
aData.setState(nState);
}
});
return aData.toStr();
}
css::uno::Reference<css::awt::XWindow> QtInstanceWindow::GetXWindow()
{
assert(false && "Not implemented yet");
return css::uno::Reference<css::awt::XWindow>();
}
SystemEnvData QtInstanceWindow::get_system_data() const
{
assert(false && "Not implemented yet");
const SystemEnvData* pEnvData = nullptr;
return *pEnvData;
}
void QtInstanceWindow::resize_to_request() { assert(false && "Not implemented yet"); }
weld::ScreenShotCollection QtInstanceWindow::collect_screenshot_data()
{
assert(false && "Not implemented yet");
return weld::ScreenShotCollection();
}
VclPtr<VirtualDevice> QtInstanceWindow::screenshot()
{
assert(false && "Not implemented yet");
return nullptr;
}
const vcl::ILibreOfficeKitNotifier* QtInstanceWindow::GetLOKNotifier() { return nullptr; }
bool QtInstanceWindow::eventFilter(QObject* pObject, QEvent* pEvent)
{
if (pObject != getQWidget())
return false;
switch (pEvent->type())
{
case QEvent::WindowActivate:
case QEvent::WindowDeactivate:
signal_container_focus_changed();
return false;
default:
return false;
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */