mirror of
https://github.com/KDE/latte-dock.git
synced 2025-01-11 13:18:13 +03:00
refactor:plenty of fixes for masks/input events
--use only input events in order to identify the area from which a window accepts input and also remove almost every mask-qml code handling --by reducing mask usage to minimum we fix also the BLACKLINE bug under X11
This commit is contained in:
parent
ba94315ecb
commit
bc5ba50147
@ -60,10 +60,21 @@ void Effects::init()
|
||||
connect(this, &Effects::enabledBordersChanged, this, &Effects::updateEffects);
|
||||
connect(this, &Effects::rectChanged, this, &Effects::updateEffects);
|
||||
|
||||
|
||||
connect(this, &Effects::backgroundCornersMaskChanged, this, &Effects::updateMask);
|
||||
connect(this, &Effects::backgroundRadiusEnabledChanged, this, &Effects::updateMask);
|
||||
connect(this, &Effects::subtractedMaskRegionsChanged, this, &Effects::updateMask);
|
||||
connect(this, &Effects::unitedMaskRegionsChanged, this, &Effects::updateMask);
|
||||
connect(m_view, &Latte::View::typeChanged, this, &Effects::updateMask);
|
||||
connect(m_view, &QQuickWindow::widthChanged, this, &Effects::updateMask);
|
||||
connect(m_view, &QQuickWindow::heightChanged, this, &Effects::updateMask);
|
||||
connect(KWindowSystem::self(), &KWindowSystem::compositingChanged, this, &Effects::updateMask);
|
||||
|
||||
connect(this, &Effects::rectChanged, this, [&]() {
|
||||
if (!KWindowSystem::compositingActive() && !m_view->behaveAsPlasmaPanel()) {
|
||||
setMask(m_rect);
|
||||
}
|
||||
});
|
||||
|
||||
connect(this, &Effects::backgroundRadiusChanged, this, &Effects::updateBackgroundCorners);
|
||||
|
||||
@ -305,7 +316,13 @@ void Effects::setInputMask(QRect area)
|
||||
}
|
||||
|
||||
m_inputMask = area;
|
||||
m_corona->wm()->setInputMask(m_view, area);
|
||||
|
||||
if (KWindowSystem::isPlatformX11()) {
|
||||
m_corona->wm()->setInputMask(m_view, area);
|
||||
} else {
|
||||
//under wayland mask() is providing the Input Area
|
||||
m_view->setMask(area);
|
||||
}
|
||||
|
||||
emit inputMaskChanged();
|
||||
}
|
||||
@ -427,10 +444,12 @@ void Effects::updateMask()
|
||||
{
|
||||
if (KWindowSystem::compositingActive()) {
|
||||
if (KWindowSystem::isPlatformX11()) {
|
||||
if (m_view->mask() != VisibilityManager::ISHIDDENMASK ) {
|
||||
m_view->setMask(QRect(0, 0, m_view->width(), m_view->height()));
|
||||
}
|
||||
m_view->setMask(QRect(0, 0, m_view->width(), m_view->height()));
|
||||
} else {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
/* else {
|
||||
//! this needs investigation under Wayland how to work correctly
|
||||
if (m_view->behaveAsPlasmaPanel()) {
|
||||
if (!m_view->visibility()->isHidden()) {
|
||||
@ -441,13 +460,15 @@ void Effects::updateMask()
|
||||
} else {
|
||||
m_view->setMask(maskCombinedRegion());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
} else {
|
||||
QRegion fixedMask;
|
||||
|
||||
QRect maskRect = m_view->behaveAsPlasmaPanel() ? QRect(0,0, m_view->width(), m_view->height()) : m_mask;
|
||||
|
||||
if (m_backgroundRadiusEnabled) {
|
||||
//! CustomBackground way
|
||||
fixedMask = customMask(QRect(0,0,m_mask.width(), m_mask.height()));
|
||||
fixedMask = customMask(QRect(0,0,maskRect.width(), maskRect.height()));
|
||||
} else {
|
||||
//! Plasma::Theme way
|
||||
//! this is used when compositing is disabled and provides
|
||||
@ -468,15 +489,15 @@ void Effects::updateMask()
|
||||
}
|
||||
|
||||
m_background->setEnabledBorders(m_enabledBorders);
|
||||
m_background->resizeFrame(m_mask.size());
|
||||
m_background->resizeFrame(maskRect.size());
|
||||
fixedMask = m_background->mask();
|
||||
}
|
||||
|
||||
fixedMask.translate(m_mask.x(), m_mask.y());
|
||||
fixedMask.translate(maskRect.x(), maskRect.y());
|
||||
|
||||
//! fix for KF5.32 that return empty QRegion's for the mask
|
||||
if (fixedMask.isEmpty()) {
|
||||
fixedMask = QRegion(m_mask);
|
||||
fixedMask = QRegion(maskRect);
|
||||
}
|
||||
|
||||
m_view->setMask(fixedMask);
|
||||
|
@ -643,22 +643,15 @@ void VisibilityManager::updateGhostWindowState()
|
||||
|
||||
void VisibilityManager::hide()
|
||||
{
|
||||
if (!m_latteView->effects()) {
|
||||
return;
|
||||
if (KWindowSystem::isPlatformX11()) {
|
||||
m_latteView->setVisible(false);
|
||||
}
|
||||
|
||||
// m_lastMask = m_latteView->effects()->mask();
|
||||
m_latteView->effects()->setMask(ISHIDDENMASK);
|
||||
}
|
||||
|
||||
void VisibilityManager::show()
|
||||
{
|
||||
if (!m_latteView->effects()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_latteView->mask() == ISHIDDENMASK) {
|
||||
m_latteView->effects()->setMask(QRect(0, 0, m_latteView->width(), m_latteView->height()));
|
||||
if (KWindowSystem::isPlatformX11()) {
|
||||
m_latteView->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -784,7 +777,15 @@ void VisibilityManager::applyActivitiesToHiddenWindows(const QStringList &activi
|
||||
void VisibilityManager::startTimerHide(const int &msec)
|
||||
{
|
||||
if (msec == 0) {
|
||||
m_timerHide.start(m_timerHideInterval);
|
||||
int secs = m_timerHideInterval;
|
||||
|
||||
if (!KWindowSystem::compositingActive()) {
|
||||
//! this is needed in order to give view time to show and
|
||||
//! for floating case to give time to user to reach the view with its mouse
|
||||
secs = qMax(m_timerHideInterval, m_latteView->screenEdgeMargin() > 0 ? 700 : 200);
|
||||
}
|
||||
|
||||
m_timerHide.start(secs);
|
||||
} else {
|
||||
m_timerHide.start(msec);
|
||||
}
|
||||
|
@ -564,17 +564,10 @@ Item{
|
||||
}
|
||||
}
|
||||
|
||||
if (!LatteCore.WindowSystem.compositingActive) {
|
||||
if (!latteView.visibility.isHidden) {
|
||||
latteView.effects.mask = latteView.effects.rect;
|
||||
}
|
||||
} else {
|
||||
latteView.effects.mask = Qt.rect(0, 0, root.width, root.height);
|
||||
}
|
||||
|
||||
//console.log("reached updating geometry ::: "+dock.maskArea);
|
||||
|
||||
if(inPublishingState && !latteView.visibility.isHidden && normalState) {
|
||||
|
||||
if (inPublishingState && !latteView.visibility.isHidden && normalState) {
|
||||
//! Important: Local Geometry must not be updated when view ISHIDDEN
|
||||
//! because it breaks Dodge(s) modes in such case
|
||||
|
||||
|
@ -71,16 +71,7 @@ Item {
|
||||
&& (latteView.extendedInterface.plasmaTasksModel.count === 0)
|
||||
|
||||
property bool backgroundOnlyOnMaximized: plasmoid.configuration.backgroundOnlyOnMaximized
|
||||
property bool behaveAsPlasmaPanel: {
|
||||
if (!LatteCore.WindowSystem.compositingActive) {
|
||||
//! In NOCOMPOSITING mode VIEWS are ALWAYS using mask techniques because
|
||||
//! this is what works much better. In the future that might change.
|
||||
return false;
|
||||
}
|
||||
|
||||
return viewType === LatteCore.Types.PanelView;
|
||||
}
|
||||
|
||||
readonly property bool behaveAsPlasmaPanel: viewType === LatteCore.Types.PanelView
|
||||
readonly property bool behaveAsDockWithMask: !behaveAsPlasmaPanel
|
||||
|
||||
readonly property bool viewIsAvailable: latteView && latteView.visibility && latteView.effects
|
||||
|
Loading…
Reference in New Issue
Block a user