> On 2010-03-17 12:31:22, Marco Martin wrote:
> > just by a quick test, the physics seems to work indeed better, it just 
> > still has some quirks:
> > 
> > - scrollbars aren't syncronized when dragging (yeah i know it needs a mode 
> > without scrollbars but i would keep them on the desktop)
> > 
> > - event stealing doesn't seem to work (even with setFiltersChildEvents): if 
> > registerasdraghandle is used clicks don't pass anymore to childrens, if 
> > it's not used is the parent to not receive events)
> > 
> > - the old behaviour of scrolwidget was to center the inner widget into the 
> > parent if it's smaller, now seems to always go to 0,0
> > 
> > 
> > about scrollStateChanged uhm.. permits external things to know the scrlling 
> > state, to for instance show/hide things depending if the user is 
> > dragging... not terribly useful indeed..
> 
> Zack Rusin wrote:
>     The scrollbars issue is fixed.
>     The event stealing works for sure, since that was the first thing I got 
> working. I don't really understand what draghandle's are supposed to be doing 
> or why there are event filters for them so I'm not sure what exactly is 
> expected to happen there. Is there an example that uses that code so that I 
> can figure out what's the expected behavior for those?
>     I don't see the centering behavior with the old code (especially since 
> the setWidget has been calling an unconditional setPos(0,0)) , is there an 
> example that shows the behavior you mention?
> 
> Marco Martin wrote:
>     in plasma some places that are using the scrollwidget and have lots of 
> child items (that are supposed to manage clicks too) is the microblog 
> plasmoid or the netbook search and launch interface (just plasmoidviewer sal) 
> where all the icons can be clicked or it should be possible to drag the view 
> around also by draging the icons, here the need of stealing  events when 
> needed.
>     before it was working wit the registerasdraghandle function: it installed 
> an eventfilter and bounced the event back and forth between the child and the 
> scroll widget.
>     this would hopefully become deprecated, since now it's using 
> setFiltersChildEvents.
>     Icons in search and launch had this eventfilters in place, by killing the 
> implementation of registerasdraghandle we are sure there shouldn't 
> eventfilters around that do strange things, but it's still impossible to 
> scroll by dragging over the icons.
>     
>     about the centering thing, always with search and launch, usually when it 
> starts the contents of the scrollwidget are just some icons, so  content it's 
> smaller than the scrollwidget and is centered.
>     If the inner widget was placed centered by hand, it stayed there, it 
> simply couldn't scroll horizontally, so no problems. now as soon as is 
> touched by the mouse it animates and it goes to 0,0.
>     I know is not a prety thing to move the inner widget by code, but 
> probably the scrollwidget will need a Qt::Alignment flag in the api to decide 
> how to align the inner widget if it's smaller than the scroll widget...
> 
> Zack Rusin wrote:
>     Yes, the "lots of child items that accept clicks on top of a scrollview" 
> is exactly the case that works here. 
>     Here "sal" seems to be working ok. BTW, setting the position of a widget 
> managed by another widget from somewhere else is pretty evil =) I did add 
> setAlignment code to the ScrollWidget, i think it makes a lot more sense than 
> allowing others to position the items that it's supposed to be managing :)
>     
>     With the patch underneath sal has items centered correctly and I can 
> flick the view by click&dragging items without them executing. BTW, sal could 
> probably actually use the scrollStateChanged signal to not call 
> ensureItemVisible when another animation is in progress (when that happens 
> ScrollView has to immediately stop the currently running animation and invoke 
> another one, since otherwise we could have two different animations pulling 
> in opposite directions, which causes a small jump on hover events during the 
> flick animation)
>     
>     Index: containments/sal/itemcontainer.cpp
>     ===================================================================
>     --- containments/sal/itemcontainer.cpp  (revision 1104506)
>     +++ containments/sal/itemcontainer.cpp  (working copy)
>     @@ -150,7 +150,6 @@
>              m_usedItems.remove(key, item);
>          } else {
>              item = new ResultWidget(this);
>     -        m_itemView->registerAsDragHandle(item);
>              item->hide();
>              item->setPos(boundingRect().center().x(), size().height());
>          }
>     Index: containments/sal/itemview.cpp
>     ===================================================================
>     --- containments/sal/itemview.cpp       (revision 1104506)
>     +++ containments/sal/itemview.cpp       (working copy)
>     @@ -32,6 +32,7 @@
>          setFocusPolicy(Qt::StrongFocus);
>          setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
>          m_itemContainer = new ItemContainer(this);
>     +    setAlignment(Qt::AlignCenter);
>          setWidget(m_itemContainer);
>          m_noActivateTimer = new QTimer(this);
>          m_noActivateTimer->setSingleShot(true);

yes, evil indeeed, a setalignment function is -way- better


- Marco


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/3312/#review4532
-----------------------------------------------------------


On 2010-03-17 22:20:25, Zack Rusin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.kde.org/r/3312/
> -----------------------------------------------------------
> 
> (Updated 2010-03-17 22:20:25)
> 
> 
> Review request for Plasma.
> 
> 
> Summary
> -------
> 
> As previously discussed with this approach we can actually properly intercept 
> events from child items. Furthermore now we properly "steal" events which 
> cause a flick (it's important for child items to properly act on 
> mouseReleaseEvents and not on mousePressEvents as some like to do, since it's 
> the release events that cause a flick) so items don't get clicks when 
> flicked. The physics and especially the overshoot behavior is a lot better in 
> this code as well.
> I tried to preserve the old behavior and emit the scrollStateChanged when 
> needed, but I'm not quite sure what that signal was meant to be good for.
> 
> 
> Diffs
> -----
> 
>   trunk/KDE/kdelibs/plasma/widgets/scrollwidget.h 1102878 
>   trunk/KDE/kdelibs/plasma/widgets/scrollwidget.cpp 1102878 
> 
> Diff: http://reviewboard.kde.org/r/3312/diff
> 
> 
> Testing
> -------
> 
> Done in a custom app. Would be nice if someone double checked it with other 
> things that use ScrollWidget though (e.g. the notebook shell :) ).
> 
> 
> Thanks,
> 
> Zack
> 
>

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to