Hi, while creating a template for a 'sidebar' panel type, I've noticed that using desktop scripting to set the geometry of a vertical panel doesn't work quite right.
Take this following example: var panel = new Panel; panel.location = 'right'; panel.length = 900; panel.height = 200; Given that, 'length' is supposed to be the length of the panel along the screen edge, and 'height' is the axis per- pendicular to the screen edge (i.e. actually the width, in case of a vertical panel). However, these aren't understood right because the call sequence is as follows: 1. Assigning to panel.location results in a call to Plasma::Containment::setLocation(), which calls updateConstraints(). 2. updateConstraints() schedules a constraints update for the following event loop iteration. 3. When the timer times out, the new location is delivered to Panel (a Containment implementation) in constraintsEvent(), which adjusts the form factor accordingly depending on the screen edge. I.e. the problem is that the length/height writes happen inbetween #2 and #3, when the Panel still believes to be horizontal. Just swapping the axis doesn't work because height has sanity checks like "no more than a third of the screen height" which make the 900 in the example not work. Swapping the order obviously doesn't work either. So far the workarounds I can think of: 1. Spinning the event loop in scripting's location setter so the constraints update is guaranteed to happen before control is returned to the script. Dirty ... 2. Calling Containment::setFormFactor in the scripting's location setter, thus doing what Panel will end up doing anyway, just later. Also super-dirty. Thoughts on a clean(er) fix? Cheers, Eike _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel