Manual Hiding of Plasma Panel (desktop shell)

Andrzej JR Hunt andrzej at ahunt.org
Sat Mar 6 13:32:49 CET 2010


>     apart that ToolButton should be used instead, don't really like a
> fuction that does enabling -and- repositioning in one. positioning should
> be done by a layout, really
>
I now have a layout, however I'm having to call update() on it everytime I 
change the button's size since it doesn't realise this itself, which seems a 
bit strange to me. On the other hand no position calculations are required, 
making life simpler.

>     i'd also position the buttons so they overlap the border of the svg.
> e.g. for the right-hand button in a horizontal panel, something like: 
>     qreal left, top, right, bottom;
>     containment()->getContentsMargins(&left, &top, &right, &bottom)
>     setContentsMargins(0, 0, m_hideButton.width() - int(right), 0);
>     m_hideButton->move(0, geometry().right() - m_hideButton.width());
>    
>     (obviously would need to be generalized for vertical panels and
> top/left/right/bottom buttons)
I've now implemented the buttons as part of a layout (which is part of the 
view), so the positioning isn't required, however what I have noticed is that 
for setContentsMargins(left, top...), when used on the view, only the top and 
bottom values have any influence, with the left and right values not doing 
anything. However the margins on the view don't affect the containment (i.e. 
only these hiding buttons are affected, the containment behaves in exactly 
the same way), and the problem is I need the containment to know that it 
isn't allowed to put anything below where the hiding buttons are, which I 
only seem to be able to do by setting its margins, and even then, while the 
applets on the panel move correctly, the cashew stays at the end of the 
panel, leaving a gap between it and the first applet, instead of the gap 
being beneath the hide button. (Without the cashew everything works fine.)

One solution I'm thinking of now is adding a special method to the panel 
containment such as requestEmptySpace(int left, int top, ...), which in the 
containment creates empty spacer objects, similar to the cashew which is also 
permanent (i.e. separate from the applets), giving the required space without 
editing the contentsMargins. (A better method might be requestEndSpace(int 
leftTop, int rightBottom), since we only need the spaces at the ends.) This 
also means the cashew doesn't have to be modified to move with the contents 
margins since the spacer objects already shift it along by the required 
amount.

-- 
Andrzej JR Hunt -- andrzej (at) ahunt.org


More information about the Plasma-devel mailing list