Abdelrazak Younes wrote: >>> There is no way to see what kind of events are pending? >>> If not we could probably install an event filter. >> >> When we are in "adjustViewWithScrollBar" which calls "scrollBufferView" >> isn't it clear that it is a scroll event? > > Of course the current event is a scroll event but my question was about > the _pending_ event.
To check the pending events is maybe a bit complicated, but attached patch minimizes the side effect risk, because it only ckecks for QCoreApplication::hasPendingEvents() when a scrollbar event happens. And we could fine tune it by using the argument if there are problems. Maybe Helge could test the patch before beta 3 (when was it? Next month ;) ) Peter
Index: src/frontends/qt4/GuiWorkArea.cpp =================================================================== --- src/frontends/qt4/GuiWorkArea.cpp (revision 18380) +++ src/frontends/qt4/GuiWorkArea.cpp (working copy) @@ -190,7 +190,7 @@ // Initialize the vertical Scroll Bar QObject::connect(verticalScrollBar(), SIGNAL(actionTriggered(int)), - this, SLOT(adjustViewWithScrollBar(int))); + this, SLOT(verticalScrollBarActionTriggered(int))); // disable context menu for the scrollbar verticalScrollBar()->setContextMenuPolicy(Qt::NoContextMenu); @@ -231,6 +231,16 @@ } +void GuiWorkArea::verticalScrollBarActionTriggered(int) +{ + // TODO Should we use the action argument + // (SliderPageStepSub, SliderPageStepAdd)? + if (!QCoreApplication::hasPendingEvents()) { + scrollBufferView(verticalScrollBar()->sliderPosition()); + } +} + + void GuiWorkArea::adjustViewWithScrollBar(int) { scrollBufferView(verticalScrollBar()->sliderPosition()); Index: src/frontends/qt4/GuiWorkArea.h =================================================================== --- src/frontends/qt4/GuiWorkArea.h (revision 18379) +++ src/frontends/qt4/GuiWorkArea.h (working copy) @@ -156,6 +156,10 @@ /// timer to limit triple clicks void doubleClickTimeout(); +private Q_SLOTS: + /// process vertical scroll bar event + void verticalScrollBarActionTriggered(int action); + private: /// The slot connected to SyntheticMouseEvent::timeout. void generateSyntheticMouseEvent();