From 53b2a407af9d1d60cfbb1a42af8546ab0a156d38 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 6 Oct 2016 15:50:05 +0200 Subject: [PATCH 1/2] save the containment only aftyer switch Summary: during a type switch if the new containment gets saved before getting a view, it will get lastScreen=-1 so the next boot it will create a new containment Test Plan: switched repeatedly between desktop and folderview the config file always got with the correct lastScreen=0 entry Reviewers: #plasma Subscribers: plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D2966 --- shell/shellcorona.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp index 1d08cd1e6..74f6ded71 100644 --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -1562,8 +1562,6 @@ Plasma::Containment *ShellCorona::setContainmentTypeForScreen(int screen, const newCg.writeEntry("activityId", oldContainment->activity()); newContainment->restore(newCg); newContainment->updateConstraints(Plasma::Types::StartupCompletedConstraint); - newContainment->save(newCg); - requestConfigSync(); newContainment->flushPendingConstraintsEvents(); emit containmentAdded(newContainment); @@ -1588,6 +1586,9 @@ Plasma::Containment *ShellCorona::setContainmentTypeForScreen(int screen, const view->rootObject()->setFocus(true, Qt::MouseFocusReason); QTimer::singleShot(2500, oldContainment, &Plasma::Applet::destroy); + //Save now as we now have a screen, so lastScreen will not be -1 + newContainment->save(newCg); + requestConfigSync(); emit availableScreenRectChanged(); return newContainment; From 9c94cd136006959d881a614754a0811ae69f03cc Mon Sep 17 00:00:00 2001 From: Bhushan Shah Date: Thu, 6 Oct 2016 16:29:07 +0530 Subject: [PATCH 2/2] [shell] Fix non-interactive panelview on non-primary screen Summary: If we don't pass the current screen to QCursor::pos, it will return position relative to primary screen, which obviously won't be in panel geometry. Instead pass it currentScreen, this way we don't filter out the mouse events for panel. BUG: 368790 FIXED-IN: 5.8.1 Test Plan: added debug statements and verified that I get correct screen position and as well, panel is now interactive on secondary screen. Reviewers: mart, graesslin, #plasma, sebas Reviewed By: graesslin, #plasma, sebas Subscribers: sebas, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D2960 --- shell/panelview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/panelview.cpp b/shell/panelview.cpp index 45914f468..8ec7a8a64 100644 --- a/shell/panelview.cpp +++ b/shell/panelview.cpp @@ -567,7 +567,7 @@ void PanelView::restoreAutoHide() (containment()->status() < Plasma::Types::RequiresAttentionStatus || containment()->status() == Plasma::Types::HiddenStatus) ) - && !geometry().contains(QCursor::pos()) + && !geometry().contains(QCursor::pos(screenToFollow())) ); } @@ -734,7 +734,7 @@ bool PanelView::event(QEvent *e) //first, don't mess with position if the cursor is actually outside the view: //somebody is doing a click and drag that must not break when the cursor i outside - if (geometry().contains(QCursor::pos())) { + if (geometry().contains(QCursor::pos(screenToFollow()))) { if (!containmentContainsPosition(me->windowPos())) { auto me2 = new QMouseEvent(me->type(), positionAdjustedForContainment(me->windowPos()),