summaryrefslogtreecommitdiff
blob: 292712a8060e4104ee546d7dc34f160a0726e9e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
https://invent.kde.org/plasma/plasma-desktop/-/commit/234cd860532449f017ecbbca6a8caad5473fcf8b

From 234cd860532449f017ecbbca6a8caad5473fcf8b Mon Sep 17 00:00:00 2001
From: Marco Martin <notmart@gmail.com>
Date: Sun, 25 Sep 2022 16:27:13 -0500
Subject: [PATCH] Use relayout locking

This makes use of the layout locking freature introduced in

The resize of the layout area can happen either by screen resolution
change or available screen area change (a panel appears or is resized)
This is not an atomic operation, as width and height are usually set in
2 different operations, and even worse the layout area is resized to
  match the available one with an animation, so many intermediate resizes
that should never cause a relayout happen.
A compression timer limits the actual relayouts to hopefully one,
 but if the system is really slowed down
(for instance, startup) the timer may expire and cause relayouts in
non useful sizes, losing the needed configuration
The lock blocks all relayout and config writes when the size of the
layout area doesn't correspond to corona availablescreenrect, which are
the only "settled" cases.

BUG:413645
--- a/containments/desktop/package/contents/ui/main.qml
+++ b/containments/desktop/package/contents/ui/main.qml
@@ -85,10 +85,10 @@ FolderViewDropArea {
         topMargin: (isContainment && plasmoid.availableScreenRect) ? plasmoid.availableScreenRect.y : 0
 
         rightMargin: (isContainment && plasmoid.availableScreenRect) && parent
-            ? parent.width - (plasmoid.availableScreenRect.x + plasmoid.availableScreenRect.width) : 0
+            ? Math.max(0, parent.width - (plasmoid.availableScreenRect.x + plasmoid.availableScreenRect.width)) : 0
 
         bottomMargin: (isContainment && plasmoid.availableScreenRect) && parent
-            ? parent.height - (plasmoid.availableScreenRect.y + plasmoid.availableScreenRect.height) : 0
+            ? Math.max(0, parent.height - (plasmoid.availableScreenRect.y + plasmoid.availableScreenRect.height)) : 0
     }
 
     Behavior on anchors.topMargin {
@@ -263,6 +263,7 @@ FolderViewDropArea {
     ContainmentLayoutManager.AppletsLayout {
         id: appletsLayout
         anchors.fill: parent
+        relayoutLock: width != plasmoid.availableScreenRect.width || height != plasmoid.availableScreenRect.height
         // NOTE: use plasmoid.availableScreenRect and not own width and height as they are updated not atomically
         configKey: "ItemGeometries-" + Math.round(plasmoid.screenGeometry.width) + "x" + Math.round(plasmoid.screenGeometry.height)
         fallbackConfigKey: plasmoid.availableScreenRect.width > plasmoid.availableScreenRect.height ? "ItemGeometriesHorizontal" : "ItemGeometriesVertical"
GitLab