Finished implementing maximize for linux.
Added FloatingContainerForc*TitleBar to switch between native and custom titlebar. Co-authored-by: SleepProgger <SleepProgger@users.noreply.github.com>
This commit is contained in:
@@ -368,8 +368,6 @@ void DockManagerPrivate::restoreDockAreasIndices()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================================
|
||||
void DockManagerPrivate::emitTopLevelEvents()
|
||||
{
|
||||
@@ -476,6 +474,10 @@ CDockManager::CDockManager(QWidget *parent) :
|
||||
{
|
||||
d->FocusController = new CDockFocusController(this);
|
||||
}
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
window()->installEventFilter(this);
|
||||
#endif
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
@@ -489,6 +491,53 @@ CDockManager::~CDockManager()
|
||||
delete d;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
#ifdef Q_OS_LINUX
|
||||
bool CDockManager::eventFilter(QObject *obj, QEvent *e){
|
||||
// Emulate Qt:Tool behaviour.
|
||||
// Required because on some WMs Tool windows can't be maximized.
|
||||
|
||||
// Window always on top of the MainWindow.
|
||||
if(e->type() == QEvent::WindowActivate){
|
||||
for(auto _window : floatingWidgets()){
|
||||
if(!_window->isVisible() || window()->isMinimized()){
|
||||
continue;
|
||||
}
|
||||
// setWindowFlags(Qt::WindowStaysOnTopHint) will hide the window and thus requires a show call.
|
||||
// This then leads to flickering and a nasty endless loop (also buggy behaviour on Ubuntu).
|
||||
// So we just do it ourself.
|
||||
internal::xcb_update_prop(true, _window->window()->winId(), "_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
|
||||
}
|
||||
}
|
||||
else if(e->type() == QEvent::WindowDeactivate){
|
||||
for(auto _window : floatingWidgets()){
|
||||
if(!_window->isVisible() || window()->isMinimized()){
|
||||
continue;
|
||||
}
|
||||
internal::xcb_update_prop(false, _window->window()->winId(), "_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
|
||||
_window->raise();
|
||||
}
|
||||
}
|
||||
|
||||
// Sync minimize with MainWindow
|
||||
if(e->type() == QEvent::WindowStateChange){
|
||||
for(auto _window : floatingWidgets()){
|
||||
if(! _window->isVisible()){
|
||||
continue;
|
||||
}
|
||||
if(window()->isMinimized()){
|
||||
_window->showMinimized();
|
||||
} else {
|
||||
_window->setWindowState(_window->windowState() & (~Qt::WindowMinimized));
|
||||
}
|
||||
}
|
||||
if(!window()->isMinimized()){
|
||||
QApplication::setActiveWindow(window());
|
||||
}
|
||||
}
|
||||
return Super::eventFilter(obj, e);
|
||||
}
|
||||
#endif
|
||||
|
||||
//============================================================================
|
||||
void CDockManager::registerFloatingWidget(CFloatingDockContainer* FloatingWidget)
|
||||
|
||||
Reference in New Issue
Block a user