<div class="gmail_quote">On Fri, May 18, 2012 at 8:28 PM, Ignat Semenov <span dir="ltr"><<a href="mailto:ignat.semenov@blue-systems.com" target="_blank">ignat.semenov@blue-systems.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hello fellow plasma devs and users!<br>
<br>
Let me apologise for the long break, now I'm back to some intense bug fixing.<br>
<br>
Currently I'm investigating this bug in folderview:<br>
<br>
Sometimes folder peek popups appear at (0,0) (upper left corner of the screen)<br>
instead of a position depending on the relevant icon. Quickly narrowed the<br>
issue down to IconView::openPopup (iconview.cpp:2672). First, it computes the<br>
popup point relative to the icon view then it tries to find a QGraphicsView to<br>
map the point to. The bug occurs when the second branch of<br>
<br>
if (m_popupCausedWidget)<br>
<br>
is executed, i.e. when m_popupCausedWidget is false (if we're not dragging, it<br>
is false). In that second branch, all the views in the scene are iterated to<br>
find the view under mouse:<br>
<br>
foreach (QGraphicsView *view, scene()->views()) {<br>
            qDebug() << "view"' << view;<br>
            if (view->underMouse()) {<br>
                gv = view;<br>
                break;<br>
            }<br>
<br>
Now according to the docs for QGraphicsView::underMouse(), it returns an<br>
invalid value only if we're dragging, which is handled in the first branch. In<br>
practice, sometimes, none of the views returns true, and gv remains 0, which<br>
leads to the point being calculated as (0,0):<br>
<br>
const QPoint pos = gv ? gv->mapToGlobal(gv->mapFromScene(scenePos)) : QPoint();<br>
<br>
The debug output reads:<br>
<br>
view QGraphicsView(0x19b2ae0)<br>
view QGraphicsView(0x2193580)<br>
view QGraphicsView(0x1fd88b0)<br>
view PanelView(0x21c6dc0)<br>
view DesktopView(0x1837010)<br>
gv DesktopView(0x1837010)<br>
<br>
These are the views being checked in openPopup(). Sometimes, when the bug<br>
occurs, none of those returns true in underMouse().<br>
<br>
Now the questions are:<br>
1)Why do we need to iterate through the views like this? Anything more elegant<br>
in the Plasma library?<br>
2)Any ideas when underMouse() might fail like this when not dragging? Seems to<br>
be completely random.<br>
<br>
Basically, we need to change the iteration loop to something more reliable, and<br>
that will fix the bug.<br>
<br>
Best regards,<br>
Ignat Semenov<br>
_______________________________________________<br>
Plasma-devel mailing list<br>
<a href="mailto:Plasma-devel@kde.org">Plasma-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/plasma-devel" target="_blank">https://mail.kde.org/mailman/listinfo/plasma-devel</a><br>
</blockquote></div><br><div>I don't know the code so this is mainly based on assumptions..</div><div>When you hover an item it's visible (icon changes/highlight/whatever) so isn't there some signal that emits the current QGraphicsView pointer? That would solve the loop issue and make it neater i guess.</div>