[kde-workspace/frameworks-scratch] plasma/desktop/containments/desktop/package/contents/ui: crashes--: Rework applet handle anchoring
Sebastian Kügler
sebas at kde.org
Sat Sep 21 02:55:58 UTC 2013
Git commit 3f050cea05e2a6a6f746998f26c76222a99d055f by Sebastian Kügler.
Committed on 21/09/2013 at 02:40.
Pushed by sebas into branch 'frameworks-scratch'.
crashes--: Rework applet handle anchoring
Use a property to track the parent item. This makes it easier to do the
re-anchoring of the applet handle on size changes. One effect is that
property bindings are apparently triggered in a more deterministic way.
A nice side effect is that this simplifies the code a bit.
Lesson: be *very* careful when swapping out individual properties in
javascript code, rather rely more on property bindings to do the work
for you.
IOW: This fixes a nasty crasher in the applet handle.
CCMAIL:plasma-devel at kde.org
M +2 -1 plasma/desktop/containments/desktop/package/contents/ui/AppletAppearance.qml
M +15 -22 plasma/desktop/containments/desktop/package/contents/ui/AppletHandle.qml
http://commits.kde.org/kde-workspace/3f050cea05e2a6a6f746998f26c76222a99d055f
diff --git a/plasma/desktop/containments/desktop/package/contents/ui/AppletAppearance.qml b/plasma/desktop/containments/desktop/package/contents/ui/AppletAppearance.qml
index 7d10595..257adff 100644
--- a/plasma/desktop/containments/desktop/package/contents/ui/AppletAppearance.qml
+++ b/plasma/desktop/containments/desktop/package/contents/ui/AppletAppearance.qml
@@ -63,7 +63,8 @@ Item {
visible: false
onHeightChanged: {
- if (appletHandle.source != "") {
+ if (appletHandle.source != "" && appletHandle.visible) {
+ print("updateHeight");
appletHandle.item.updateHeight();
}
//print("handleMerged : " + appletItem.handleMerged + " min, height " + mini + ", " + appletHandle.height);
diff --git a/plasma/desktop/containments/desktop/package/contents/ui/AppletHandle.qml b/plasma/desktop/containments/desktop/package/contents/ui/AppletHandle.qml
index 3817083..7274079 100644
--- a/plasma/desktop/containments/desktop/package/contents/ui/AppletHandle.qml
+++ b/plasma/desktop/containments/desktop/package/contents/ui/AppletHandle.qml
@@ -26,63 +26,56 @@ import "plasmapackage:/code/LayoutManager.js" as LayoutManager
Item {
id: appletHandle
- //z: dragMouseArea.z + 1
opacity: appletItem.controlsOpacity
width: appletItem.handleWidth
height: appletItem.handleHeight
+ //z: dragMouseArea.z + 1
property int buttonMargin: 6
property int minimumHeight: 6 * (root.iconSize + buttonMargin)
+ property Item buttonsParent: appletHandle
signal removeApplet
function updateHeight() {
- // Does the handle's height fit into the frame?
var mini = appletHandle.minimumHeight + margins.top + margins.bottom;
- //print(" = == = = == updateHeight mini:" + mini)
if (height > mini) {
appletItem.handleMerged = true;
-// print("merged handle");
height = appletItem.handleMerged ? appletItem.height : minimumHeight
- //print(" height: " + height);
- buttonColumn.anchors.right = appletHandle.right;
- } else {
+ buttonsParent = appletHandle;
+ } else if (appletItem.handleMerged) {
appletItem.handleMerged = false;
-// print("separate handle");
- //appletHandle.anchors.right = appletHandle.parent.right;
- buttonColumn.anchors.verticalCenter = appletItem.verticalCenter;
- buttonColumn.anchors.top = noBackgroundHandle.top
- buttonColumn.anchors.bottom = noBackgroundHandle.bottom
- buttonColumn.anchors.right = noBackgroundHandle.right
+ buttonsParent = noBackgroundHandle;
}
}
PlasmaCore.FrameSvgItem {
id: noBackgroundHandle
width: handleWidth + margins.left + margins.right - 4
- height: handleMerged ? appletItem.handleHeight + noBackgroundHandle.margins.top + noBackgroundHandle.margins.bottom : appletItem.handleHeight
- visible: opacity > 0
+ height: (backgroundHints != "NoBackground") ? appletItem.handleHeight : appletItem.handleHeight + noBackgroundHandle.margins.top + noBackgroundHandle.margins.bottom
+ visible: controlsOpacity > 0
z: plasmoidBackground.z - 10
anchors {
- verticalCenter: parent.verticalCenter
- left: parent.right
+ verticalCenter: buttonsParent.verticalCenter
+ left: buttonsParent.right
leftMargin: handleMerged ? ((1-controlsOpacity) * appletItem.handleWidth) * -1 - appletItem.handleWidth * 2 + 2 : ((1-controlsOpacity) * appletItem.handleWidth) * -1 - appletItem.handleWidth
}
- opacity: (backgroundHints == "NoBackground" || !handleMerged) ? controlsOpacity : 0
smooth: true
imagePath: (backgroundHints == "NoBackground" || !handleMerged) ? "widgets/background" : ""
- Rectangle { color: Qt.rgba(0,0,0,0); border.width: 3; border.color: "orange"; opacity: 1; visible: debug; anchors.fill: parent; }
+ //Rectangle { color: Qt.rgba(0,0,0,0); border.width: 3; border.color: "orange"; opacity: 1; visible: debug; anchors.fill: parent; }
}
Column {
id: buttonColumn
width: handleWidth
+ parent: buttonsParent
anchors {
top: parent.top
- topMargin: (!appletItem.hasBackground) ? noBackgroundHandle.margins.top : appletItem.margins.top
- bottomMargin: appletItem.margins.bottom
- right: appletItem.handleMerged ? parent.right : noBackgroundHandle.right
+ topMargin: (!appletItem.hasBackground || !handleMerged) ? noBackgroundHandle.margins.top : appletItem.margins.top
+ bottom: parent.bottom
+ bottomMargin: (!appletItem.hasBackground && !handleMerged) ? noBackgroundHandle.margins.bottom : appletItem.margins.bottom
+ right: parent.right
rightMargin: appletItem.handleMerged ? -buttonMargin : noBackgroundHandle.margins.right - buttonMargin
}
spacing: buttonMargin*2
More information about the Plasma-devel
mailing list