1
mirror of https://invent.kde.org/network/falkon.git synced 2024-11-14 02:52:12 +01:00

BrowserWindow: Fix crash when restoring geometry of fullscreen window

This commit is contained in:
David Rosca 2018-01-05 20:11:27 +01:00
parent 4a4d5b72ad
commit 2d698edd21

View File

@ -336,40 +336,9 @@ void BrowserWindow::postLaunch()
void BrowserWindow::setupUi() void BrowserWindow::setupUi()
{ {
QHash<QString, QVariant> uiState;
QDesktopWidget* desktop = mApp->desktop();
int windowWidth = desktop->availableGeometry().width() / 1.3;
int windowHeight = desktop->availableGeometry().height() / 1.3;
Settings settings; Settings settings;
settings.beginGroup("Browser-View-Settings"); settings.beginGroup("Browser-View-Settings");
const QByteArray windowGeometry = settings.value(QSL("WindowGeometry")).toByteArray();
// Let the WM decides where to put new browser window
if (m_windowType != Qz::BW_FirstAppWindow && m_windowType != Qz::BW_MacFirstWindow && mApp->getWindow()) {
#ifdef Q_WS_WIN
// Windows WM places every new window in the middle of screen .. for some reason
QPoint p = mApp->getWindow()->geometry().topLeft();
p.setX(p.x() + 30);
p.setY(p.y() + 30);
if (!desktop->availableGeometry(mApp->getWindow()).contains(p)) {
p.setX(desktop->availableGeometry(mApp->getWindow()).x() + 30);
p.setY(desktop->availableGeometry(mApp->getWindow()).y() + 30);
}
setGeometry(QRect(p, mApp->getWindow()->size()));
#else
resize(mApp->getWindow()->size());
#endif
} else if (!restoreGeometry(settings.value("WindowGeometry").toByteArray())) {
#ifdef Q_WS_WIN
setGeometry(QRect(desktop->availableGeometry(mApp->getWindow()).x() + 30,
desktop->availableGeometry(mApp->getWindow()).y() + 30, windowWidth, windowHeight));
#else
resize(windowWidth, windowHeight);
#endif
}
const QStringList keys = { const QStringList keys = {
QSL("LocationBarWidth"), QSL("LocationBarWidth"),
@ -378,12 +347,12 @@ void BrowserWindow::setupUi()
QSL("WebViewWidth"), QSL("WebViewWidth"),
QSL("SideBar") QSL("SideBar")
}; };
QHash<QString, QVariant> uiState;
for (const QString &key : keys) { for (const QString &key : keys) {
if (settings.contains(key)) { if (settings.contains(key)) {
uiState[key] = settings.value(key); uiState[key] = settings.value(key);
} }
} }
settings.endGroup(); settings.endGroup();
QWidget* widget = new QWidget(this); QWidget* widget = new QWidget(this);
@ -423,6 +392,36 @@ void BrowserWindow::setupUi()
m_navigationToolbar->addToolButton(new AdBlockIcon(this)); m_navigationToolbar->addToolButton(new AdBlockIcon(this));
QDesktopWidget* desktop = mApp->desktop();
int windowWidth = desktop->availableGeometry().width() / 1.3;
int windowHeight = desktop->availableGeometry().height() / 1.3;
// Let the WM decides where to put new browser window
if (m_windowType != Qz::BW_FirstAppWindow && m_windowType != Qz::BW_MacFirstWindow && mApp->getWindow()) {
#ifdef Q_WS_WIN
// Windows WM places every new window in the middle of screen .. for some reason
QPoint p = mApp->getWindow()->geometry().topLeft();
p.setX(p.x() + 30);
p.setY(p.y() + 30);
if (!desktop->availableGeometry(mApp->getWindow()).contains(p)) {
p.setX(desktop->availableGeometry(mApp->getWindow()).x() + 30);
p.setY(desktop->availableGeometry(mApp->getWindow()).y() + 30);
}
setGeometry(QRect(p, mApp->getWindow()->size()));
#else
resize(mApp->getWindow()->size());
#endif
} else if (!restoreGeometry(windowGeometry)) {
#ifdef Q_WS_WIN
setGeometry(QRect(desktop->availableGeometry(mApp->getWindow()).x() + 30,
desktop->availableGeometry(mApp->getWindow()).y() + 30, windowWidth, windowHeight));
#else
resize(windowWidth, windowHeight);
#endif
}
// Workaround for Oxygen tooltips not having transparent background // Workaround for Oxygen tooltips not having transparent background
QPalette pal = QToolTip::palette(); QPalette pal = QToolTip::palette();
QColor col = pal.window().color(); QColor col = pal.window().color();