GSoC Idea: better multi-head support

Aaron J. Seigo aseigo at kde.org
Sun Mar 23 07:30:09 CET 2008


On Saturday 22 March 2008, Aike J Sommer wrote:
> Am Samstag 22 März 2008 18:25:58 schrieb Aaron J. Seigo:
> > the code path is something like:
> >
> > Corona gets the screen resized(int) signal from QApplication::desktop().
> > it
>
> This doesnt seem to happen all the time... Especially on reducing the
> resolution that signal seems to be missing... And even when its emitted it
> will *always* report screen 0 no matter which one actually was
> resized/enabled/disabled!

hm. that's very broken, and not much we can do about in plasma if indeed the 
signal out of QDesktopWidget is malfunctioning. if we can document this 
thoroughly, then we should be able to get people at TT to look into it more.

> > finds the current Containment associated the screen and notifies it of
> > this; that should result in the resizing of the Containment (and, if
> > necessary, the repositioning of it on the canvas), which then emits its
> > geometryChanged() signal, cahsing the View to adjust what it is looking
> > at on the Corona.
>
> Even with cycling through all screens (since resized only reports 0) it
> doesnt work. It will find a desktop-containment for screen 1 (even if
> screen 1 didnt exist before) and will call setScreen on that, but the
> screen will just stay grey!

finding a containment for screen 1 is perfectly fine. that way, when the 
screen comes back: voila, you have your containment for that screen back with 
everything you had set up on it. so that's intentional.

(a possible avenue for future optimization is to "cold store" such 
containments and only run/show them when requested or when the screen comes 
back ... the exact wins of that have not been researched much, however.)

so ... as for the screen staying grey: the View will only respond to changes 
made to the associated containment. so first thing to check is that the 
containment is still associated with the View (it should be, but it's good to 
get the easy stuff that would create obvious breakage out of the way first)

next, if the geometryChanged() signal is not being emitted from the 
Containment, then the View won't react. now... in Containment::setScreen, 
resize should be being called on line 839. that should result in 
Applet::setGeometry being called (Widget::resize just calls setGeometry, 
which is a virtual method that is implemented in Applet) and in 
Applet::setGeometry it should be emitting geometryChanged if either the size 
or the position changes.

possible problems: the size isn't actually changing (so no geometry change 
emit'd) or resize on line 839 isn't getting called for some reason.

otherwise, if the Containment is associated with the View, the View should 
shift what it is looking at on the Corona scene when geometryChanged is 
emitted.

if all goes well you should actually see a line in the debug output on console 
that starts with: !!!!!!!!!!!!!!!!! setting the scene rect to

> > some of this code is pretty new and it hasn't been thoroughly tested yet.
>
> I'd be willing to do that!! ;-)

sweet =))

> I'll keep trying to find my way through the 
> relevant parts of the source, too... Do u have any hints what to look at??

hopefully the above will help somewhat. if you have additional questions, feel 
free to ask..

-- 
Aaron J. Seigo
humru othro a kohnu se
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA  EE75 D6B7 2EB1 A7F1 DB43

KDE core developer sponsored by Trolltech
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 194 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/panel-devel/attachments/20080323/61efcb8e/attachment.pgp 


More information about the Panel-devel mailing list