Ref T447, utility function to set on top flag

Also a signal when "always on top" was triggered
This commit is contained in:
Klaus Basan
2018-12-11 09:00:15 +01:00
parent c591728e88
commit 08495a7854
6 changed files with 45 additions and 8 deletions

View File

@@ -272,12 +272,21 @@ namespace BlackGui
this->setFrameless(!frameless);
}
void CDockWidget::toggleAlwaysOnTop()
void CDockWidget::windowAlwaysOnTop()
{
m_alwaysOnTop = !m_alwaysOnTop;
if (this->isFloating())
{
this->setAlwaysOnTopFlag(m_alwaysOnTop);
this->setAlwaysOnTopFlag(true);
m_alwaysOnTop = true;
}
}
void CDockWidget::windowNotAlwaysOnTop()
{
if (this->isFloating())
{
this->setAlwaysOnTopFlag(false);
m_alwaysOnTop = false;
}
}
@@ -353,11 +362,11 @@ namespace BlackGui
if (this->isFloating())
{
const bool frameless = this->isFrameless();
const bool onTop = this->windowFlags() | Qt::WindowStaysOnTopHint;
contextMenu->addAction(CIcons::dockTop16(), "Dock", this, &CDockWidget::toggleFloating);
contextMenu->addAction(CIcons::tableSheet16(), frameless ? "Normal window" : "Frameless", this, &CDockWidget::toggleFrameless);
contextMenu->addAction(CIcons::dockTop16(), onTop ? "Not on top" : "Always on top", this, &CDockWidget::toggleAlwaysOnTop);
contextMenu->addAction(CIcons::dockTop16(), "Always on top", this, &CDockWidget::windowAlwaysOnTop);
contextMenu->addAction(CIcons::dockTop16(), "Not on top", this, &CDockWidget::windowNotAlwaysOnTop);
contextMenu->addAction(CIcons::refresh16(), "Redraw", this, QOverload<>::of(&CDockWidget::update));
}
else

View File

@@ -108,8 +108,11 @@ namespace BlackGui
//! Toggle frameless mode (EXPERIMENTAL)
void toggleFrameless();
//! Toggle always on top
void toggleAlwaysOnTop();
//! Window always on top
void windowAlwaysOnTop();
//! Window not on top
void windowNotAlwaysOnTop();
//! Set always on top
void setAlwaysOnTop(bool onTop) { m_alwaysOnTop = onTop; }

View File

@@ -996,6 +996,7 @@ namespace BlackGui
if (!w) { return false; }
const bool onTop = CGuiUtility::toggleStayOnTop(w);
CLogMessage(w).info(onTop ? QStringLiteral("Window on top") : QStringLiteral("Window not always on top"));
emit this->alwaysOnTop(onTop);
return onTop;
}

View File

@@ -271,6 +271,9 @@ namespace BlackGui
//! Font has been changed
void fontChanged();
//! always on top
void alwaysOnTop(bool onTop);
protected:
//! \name print messages generated during parsing / cmd handling
//! @{

View File

@@ -394,6 +394,24 @@ namespace BlackGui
return Qt::WindowStaysOnTopHint & flags;
}
bool CGuiUtility::stayOnTop(bool onTop, QWidget *widget)
{
if (!widget) { return false; }
Qt::WindowFlags flags = widget->windowFlags();
if (onTop)
{
flags &= ~Qt::WindowStaysOnBottomHint;
flags |= Qt::WindowStaysOnTopHint;
}
else
{
flags &= ~Qt::WindowStaysOnTopHint;
// flags |= Qt::WindowStaysOnBottomHint;
}
widget->setWindowFlags(flags);
return onTop;
}
QString CGuiUtility::marginsToString(const QMargins &margins)
{
const QString s("%1:%2:%3:%4");

View File

@@ -157,9 +157,12 @@ namespace BlackGui
}
}
//! Toogle window flags / stay on top
//! Toggle window flags / stay on top
static bool toggleStayOnTop(QWidget *widget);
//! Window flags / stay on top
static bool stayOnTop(bool onTop, QWidget *widget);
//! Window on top?
static bool staysOnTop(QWidget *widget);