Bug 425384 - Yakuake jumps between displays since 20.08.0
Summary: Yakuake jumps between displays since 20.08.0
Status: REPORTED
Alias: None
Product: yakuake
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Eike Hein
URL:
Keywords: regression
Depends on:
Blocks:
 
Reported: 2020-08-15 14:11 UTC by Frederick Zhang
Modified: 2021-06-11 17:02 UTC (History)
8 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
yakuake aligned left on the monitor at right (268.58 KB, image/png)
2021-01-07 10:33 UTC, Petros
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Frederick Zhang 2020-08-15 14:11:47 UTC
SUMMARY
Since 20.08.0, Yakuake jumps between my left and middle (primary) displays every time it shows up or is resized. Rolled Yakuake back to 20.04.3 while keeping everything else still on 20.08.0 as a temporary solution.

STEPS TO REPRODUCE
1. Open Yakuake
2. Resize or hide & summon Yakuake

OBSERVED RESULT
Yakuake jumps between my left and middle displays. If I move my cursor to the display on the right, Yakuake then stays in my middle display.

EXPECTED RESULT
Yakuake stays in the same display unless mouse cursor moves to another.

SOFTWARE/OS VERSIONS
Operating System: Arch Linux
KDE Plasma Version: 5.19.4
KDE Frameworks Version: 5.73.0
Qt Version: 5.15.0
Kernel Version: 5.8.1-zen1-1-zen
OS Type: 64-bit
Processors: 8 × Intel® Core™ i7-6820HK CPU @ 2.70GHz
Memory: 31.3 GiB of RAM
Graphics Processor: GeForce GTX 980M/PCIe/SSE2

ADDITIONAL INFORMATION
Using nvidia proprietary driver 450.57, multi-head, X11, two 1080p displays scaled by 2.0 using xrandr, KDE global scale 2.0.
Comment 1 Maximilian Schiller 2020-08-15 14:32:24 UTC
Can you provide your window settings and also try to reset them.

This might be related to the display scaling which I cant test right now. If possible could you test it without the scaling?
Comment 2 Frederick Zhang 2020-08-15 15:18:27 UTC
It seems that KDE global scale caused the issue.

First of all, my tests were run after patching Yakuake with the file from Nicolas at https://bugs.kde.org/show_bug.cgi?id=275433 (without this patch the window size is never correct on multi-head w/ different resolutions in the first place). KScreen D-Bus service is also disabled.

1. KDE global scale disabled, XRandR scale disabled or 2.0

Works normally.

2. KDE global scale 2.0, XRandR scale disabled

Yakuake stays on my left display after start, occupying the full horizontal space of it. If I resize Yakuake horizontally, it immediately jumps to the middle of my left and middle display (so it's half on my left display and half on my middle one).
Comment 3 Claudius Ellsel 2020-09-01 20:37:11 UTC
Just to be sure, does that also happen without the patch applied? To rule out the possibility that this affects it.
Comment 4 Claudius Ellsel 2020-09-01 20:54:24 UTC
Might be related to bug 383555.
Comment 5 Frederick Zhang 2020-09-02 09:09:43 UTC
Yes I can confirm this also happens without the patch.
Comment 6 Claudius Ellsel 2020-09-02 23:00:46 UTC
Alright, thanks for confirming!
Comment 7 Frederick Zhang 2020-10-14 11:51:05 UTC
I can still reproduce this issue using Yakuake 20.08.2, Framework 5.75.0 and Desktop 5.20.0.
Comment 8 Frederick Zhang 2020-12-14 06:42:15 UTC
Still happens using 20.12.0.
Comment 9 Petros 2021-01-07 10:33:28 UTC
Created attachment 134633 [details]
yakuake aligned left on the monitor at right
Comment 10 Petros 2021-01-07 10:45:15 UTC
I want to add some info about my setup, which I think experiences the same bug.

Laptop eDP connected primary 1920x1080+0+0 @60.01 same as preferred
External HDMI-A-0 connected 1920x1080+1920+0 @60.00 preferred is 1680x1050 @59.95

On Primary Yakuake behaves as configured with single monitor, centered.
On external it snaps/aligns at left monitor edge.
While external is focused and yakuake open, I open settings and change screen alignment to left or right. After saving, yakuake uses the saved setting but assumes there is one monitor the size of X Screen (2 monitors side by side).

Yakuake: yakuake 20.12.0(-1)
Operating System: Arch Linux
KDE Plasma Version: 5.20.5
KDE Frameworks Version: 5.77.0
Qt Version: 5.15.2
Kernel Version: 5.10.4-arch2-1
OS Type: 64-bit
Processors: 8 × AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx
Memory: 6.8 GiB of RAM
Graphics Processor: AMD Radeon™ Vega 8 Graphics
Comment 11 Claudius Ellsel 2021-01-07 12:49:33 UTC
Maybe devs with more knowledge in KWin and multi monitors might be able to get the reason for this, so adding them to CC.
Comment 12 Frederick Zhang 2021-06-10 09:49:30 UTC
I spent some time to bisect this today:

# bad: [e1e49a6e2498c78ed57d0bf14b9efc5d5c11ac20] GIT_SILENT Upgrade release service version to 20.08.0.
# good: [d9a4f52107b0f558ba6a08fe66e8f7063fcffc9f] Merge branch 'release/20.04'
git bisect start 'v20.08.0' 'd9a4f52'
# bad: [481f39fb8f2092a919b1a9f2ba9a408e12ba27e5] Fix missing main menu after disabling systray icon
git bisect bad 481f39fb8f2092a919b1a9f2ba9a408e12ba27e5
# bad: [491f5a2098fae018d35f9095e7675d294eafa9c6] Fix computing screen geometry on multiple HiDPI monitors
git bisect bad 491f5a2098fae018d35f9095e7675d294eafa9c6
# good: [aecc1961d7f291ff59165589176c088eb0ecc78b] GIT_SILENT made messages (after extraction)
git bisect good aecc1961d7f291ff59165589176c088eb0ecc78b
# first bad commit: [491f5a2098fae018d35f9095e7675d294eafa9c6] Fix computing screen geometry on multiple HiDPI monitors

Then after spending some time on this, it seems that this line is causing issue in my case:

screenGeometry.moveTo(screenGeometry.topLeft() / screen->devicePixelRatio());

I removed '/ screen->devicePixelRatio()' and the issue is gone.


So along with the patch from Bug 275433, changes I've made on top of v21.04.1 to make it work:

diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp
index a9e953f..79612d0 100644
--- a/app/mainwindow.cpp
+++ b/app/mainwindow.cpp
@@ -1510,9 +1510,9 @@ int MainWindow::getScreen()
 QRect MainWindow::getScreenGeometry()
 {
     QScreen *screen = QGuiApplication::screens().at(getScreen());
     QRect screenGeometry = screen->geometry();
-    screenGeometry.moveTo(screenGeometry.topLeft() / screen->devicePixelRatio());
+    screenGeometry.moveTo(screenGeometry.topLeft());
     return screenGeometry;
 }
 
 QRect MainWindow::getDesktopGeometry()
@@ -1523,9 +1523,9 @@ QRect MainWindow::getDesktopGeometry()
 
     if (action->isChecked())
         return screenGeometry;
 
-    if (m_isWayland) {
+    if (m_isWayland || true) {
         // on Wayland it's not possible to get the work area from KWindowSystem
         // but plasmashell provides this through dbus
         return m_availableScreenRect.isValid() ? m_availableScreenRect : screenGeometry;
     }


Hope this helps.
Comment 13 Nate Graham 2021-06-10 15:33:22 UTC
Please feel free to submit a merge request at https://invent.kde.org/utilities/yakuake/-/merge_requests/! Even if it's imperfect, the folks there can hopefully give you come pointers on improving it.
Comment 14 Frederick Zhang 2021-06-11 17:02:32 UTC
Submitted: https://invent.kde.org/utilities/yakuake/-/merge_requests/45

I proposed a different solution which doesn't need the Bug 275433 patch. Let's see how it goes :P