wayland improvements for WindowsAlwaysCover

pull/11/head
Michail Vourlakos 5 years ago
parent 7dd6696dfa
commit dfd8bcdeca

@ -330,7 +330,9 @@ void View::setupWaylandIntegration()
m_shellSurface = interface->createSurface(s, this);
qDebug() << "WAYLAND dock window surface was created...";
m_corona->wm()->setViewExtraFlags(m_shellSurface);
if (m_visibility) {
m_visibility->initViewFlags();
}
}
}

@ -120,10 +120,18 @@ Types::Visibility VisibilityManager::mode() const
void VisibilityManager::initViewFlags()
{
if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) {
m_wm->setViewExtraFlags(m_latteView, false, m_mode);
if (KWindowSystem::isPlatformX11()) {
if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) {
m_wm->setViewExtraFlags(m_latteView, false, m_mode);
} else {
m_wm->setViewExtraFlags(m_latteView, true);
}
} else {
m_wm->setViewExtraFlags(m_latteView, true);
if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) {
m_wm->setViewExtraFlags(m_latteView, false, m_mode);
} else {
m_wm->setViewExtraFlags(m_latteView, true);
}
}
}

@ -21,6 +21,7 @@
#include "waylandinterface.h"
// local
#include "view/positioner.h"
#include "view/screenedgeghostwindow.h"
#include "view/view.h"
#include "../lattecorona.h"
@ -246,6 +247,11 @@ void WaylandInterface::unregisterIgnoredWindow(WindowId wid)
void WaylandInterface::setViewExtraFlags(QObject *view, bool isPanelWindow, Latte::Types::Visibility mode)
{
KWayland::Client::PlasmaShellSurface *surface = qobject_cast<KWayland::Client::PlasmaShellSurface *>(view);
Latte::View *latteView = qobject_cast<Latte::View *>(view);
if (latteView) {
surface = latteView->surface();
}
if (!surface) {
return;
@ -256,9 +262,43 @@ void WaylandInterface::setViewExtraFlags(QObject *view, bool isPanelWindow, Latt
surface->setSkipSwitcher(true);
#endif
bool atBottom{!isPanelWindow && (mode == Latte::Types::WindowsCanCover || mode == Latte::Types::WindowsAlwaysCover)};
if (isPanelWindow) {
surface->setRole(PlasmaShellSurface::Role::Panel);
surface->setPanelBehavior(PlasmaShellSurface::PanelBehavior::WindowsGoBelow);
} else {
surface->setRole(PlasmaShellSurface::Role::Normal);
}
if (latteView) {
WindowId winId = latteView->positioner()->trackedWindowId();
auto w = windowFor(winId);
if (w && !w->isOnAllDesktops()) {
requestToggleIsOnAllDesktops(winId);
}
//! Layer to be applied
if (mode == Latte::Types::WindowsCanCover || mode == Latte::Types::WindowsAlwaysCover) {
setKeepBelow(winId, true);
} else if (mode == Latte::Types::NormalWindow) {
setKeepBelow(winId, false);
setKeepAbove(winId, false);
} else {
setKeepAbove(winId, true);
}
}
if (atBottom){
//! trying to workaround WM behavior in order
//! 1. View at the end MUST NOT HAVE FOCUSABILITY (issue example: clicking a single active task is not minimized)
//! 2. View at the end MUST BE AT THE BOTTOM of windows stack
QTimer::singleShot(50, [this, surface]() {
surface->setRole(PlasmaShellSurface::Role::ToolTip);
});
}
}

@ -1013,11 +1013,11 @@ MouseArea{
root.presentWindows(root.plasma515 ? model.WinIdList: model.LegacyWinIdList );
}
} else {
if (IsMinimized === true) {
if (isMinimized) {
var i = modelIndex();
tasksModel.requestToggleMinimized(i);
tasksModel.requestActivate(i);
} else if (IsActive === true) {
} else if (isActive) {
tasksModel.requestToggleMinimized(modelIndex());
} else {
tasksModel.requestActivate(modelIndex());

Loading…
Cancel
Save