Make sure setting to frameless/normal window keeps position and window size

This commit is contained in:
Klaus Basan
2019-07-09 20:29:33 +02:00
committed by Mat Sutcliffe
parent 3c200034dc
commit 26ddf3a353
2 changed files with 30 additions and 0 deletions

View File

@@ -60,9 +60,37 @@ namespace BlackGui
void CEnableForFramelessWindow::setFrameless(bool frameless)
{
const bool isFrameless = this->isFrameless();
if (isFrameless == frameless) { return; }
QWidget *w = this->getWidget();
if (!w) { return; }
const QRect oldFrameGeometry = w->frameGeometry();
const QRect oldGeometry = w->geometry();
WindowMode nonFrameLessMode = m_originalWindowMode; // Tool/Normal Window
if (nonFrameLessMode == WindowFrameless) { nonFrameLessMode = WindowNormal; }
this->setMode(frameless ? WindowFrameless : nonFrameLessMode);
if (frameless)
{
// from framed to frameless
w->setGeometry(oldFrameGeometry);
m_windowFrameSizeW = oldFrameGeometry.width() - oldGeometry.width();
m_windowFrameSizeH = oldFrameGeometry.height() - oldGeometry.height();
}
else
{
if (m_windowFrameSizeW >= 0 && m_windowFrameSizeH >= 0)
{
QRect newGeometry = oldGeometry;
// newGeometry.setWidth(oldGeometry.width() - m_windowFrameSizeW);
// newGeometry.setHeight(oldGeometry.height() - m_windowFrameSizeH);
newGeometry.setX(oldGeometry.x() + m_windowFrameSizeW);
newGeometry.setY(oldGeometry.y() + m_windowFrameSizeH);
w->setGeometry(newGeometry);
}
}
}
void CEnableForFramelessWindow::alwaysOnTop(bool onTop)

View File

@@ -95,6 +95,8 @@ namespace BlackGui
QWidget *m_widget = nullptr; //!< corresponding window or dock widget
QSizeGrip *m_framelessSizeGrip = nullptr; //!< size grip object
QByteArray m_framelessPropertyName; //!< property name for frameless widgets
int m_windowFrameSizeW = -1; //!< window frame width
int m_windowFrameSizeH = -1; //!< window frame height
//! Can be used as notification if window mode changes
virtual void windowFlagsChanged();