From: Marcus Eggenberger Date: Sun, 30 Nov 2008 15:26:18 +0000 (+0100) Subject: Fixing BR #419 - Any Action that would normaly trigger a scroll in the X-Git-Tag: 0.4.0~382 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=22b225ba81373362e6d02a88cd3a906e8c394aac Fixing BR #419 - Any Action that would normaly trigger a scroll in the ChatView triggers now a backlogrequest even if there is no scrollbar visible. (MouseWheel, Page_Up/_Down, Shift Key_Up/_Down) --- diff --git a/src/qtui/bufferwidget.cpp b/src/qtui/bufferwidget.cpp index 69718d52..9ac555f4 100644 --- a/src/qtui/bufferwidget.cpp +++ b/src/qtui/bufferwidget.cpp @@ -173,25 +173,16 @@ bool BufferWidget::eventFilter(QObject *watched, QEvent *event) { return true; } - int direction = 1; switch(keyEvent->key()) { - case Qt::Key_PageUp: - case Qt::Key_PageDown: - // static cast to access public qobject::event - return static_cast(ui.stackedWidget->currentWidget())->event(event); - - case Qt::Key_Up: - direction = -1; - case Qt::Key_Down: - if(keyEvent->modifiers() == Qt::ShiftModifier) { - QAbstractScrollArea *scrollArea = qobject_cast(ui.stackedWidget->currentWidget()); - if(!scrollArea) - return false; - int sliderPosition = scrollArea->verticalScrollBar()->value(); - scrollArea->verticalScrollBar()->setValue(sliderPosition + (direction * 12)); - return true; - } - default: + case Qt::Key_Up: + case Qt::Key_Down: + if(!(keyEvent->modifiers() & Qt::ShiftModifier)) return false; + case Qt::Key_PageUp: + case Qt::Key_PageDown: + // static cast to access public qobject::event + return static_cast(ui.stackedWidget->currentWidget())->event(event); + default: + return false; } } diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 024e49d6..14f508ec 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -70,11 +70,37 @@ void ChatView::init(MessageFilter *filter) { connect(_scene, SIGNAL(lastLineChanged(QGraphicsItem *, qreal)), this, SLOT(lastLineChanged(QGraphicsItem *, qreal))); connect(_scene, SIGNAL(mouseMoveWhileSelecting(const QPointF &)), this, SLOT(mouseMoveWhileSelecting(const QPointF &))); setScene(_scene); - // installEventFilter(_scene); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int))); } +bool ChatView::event(QEvent *event) { + if(event->type() == QEvent::KeyPress) { + QKeyEvent *keyEvent = static_cast(event); + switch(keyEvent->key()) { + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_PageUp: + case Qt::Key_PageDown: + if(!verticalScrollBar()->isVisible()) { + scene()->requestBacklog(); + return true; + } + default: + break; + } + } + + if(event->type() == QEvent::Wheel) { + if(!verticalScrollBar()->isVisible()) { + scene()->requestBacklog(); + return true; + } + } + + return QGraphicsView::event(event); +} + void ChatView::resizeEvent(QResizeEvent *event) { QGraphicsView::resizeEvent(event); diff --git a/src/qtui/chatview.h b/src/qtui/chatview.h index 3d29bff5..9a405b13 100644 --- a/src/qtui/chatview.h +++ b/src/qtui/chatview.h @@ -49,6 +49,8 @@ public: virtual void addActionsToMenu(QMenu *, const QPointF &pos); + virtual bool event(QEvent *event); + public slots: inline virtual void clear() {} void zoomIn(); diff --git a/src/qtui/settingspages/backlogsettingspage.ui b/src/qtui/settingspages/backlogsettingspage.ui index aa4d3743..fd5c2cd8 100644 --- a/src/qtui/settingspages/backlogsettingspage.ui +++ b/src/qtui/settingspages/backlogsettingspage.ui @@ -59,15 +59,15 @@ - 1 + 0 0 0 - 481 - 259 + 415 + 216 @@ -253,8 +253,8 @@ You can also chose to fetch additional older chatlines to provide a better conte 0 0 - 100 - 30 + 415 + 216