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();

Reply via email to