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