X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fqtui%2Fchatview.cpp;h=71c14276b5cfb676a5245779f371573c0de85c1b;hb=1b8b7589f2fb30e1b3583a8914dabced8a190655;hp=695b513b6efbd773e66ff8ad20e350aeeb3bb11e;hpb=a944d240396d5e78086cd9d7b0c6d62b94f9bae7;p=quassel.git diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 695b513b..71c14276 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -37,9 +37,7 @@ ChatView::ChatView(BufferId bufferId, QWidget *parent) AbstractChatView(), _bufferContainer(0), _currentScaleFactor(1), - _invalidateFilter(false), - _verticalOffset(0), - _verticalOffsetStable(false) + _invalidateFilter(false) { QList filterList; filterList.append(bufferId); @@ -79,6 +77,7 @@ void ChatView::init(MessageFilter *filter) { setScene(_scene); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int))); + _lastScrollbarPos = verticalScrollBar()->value(); // only connect if client is synched with a core if(Client::isConnected()) @@ -129,49 +128,15 @@ void ChatView::resizeEvent(QResizeEvent *event) { verticalScrollBar()->setValue(verticalScrollBar()->maximum()); } -// Workaround for QTBUG-6322 -// The viewport rect gets some margins where it shouldn't, resulting in scrollbars to appear void ChatView::adjustSceneRect() { - QRectF rect = scene()->sceneRect(); // qDebug() << "sceneRect" << rect; - if(rect.height() <= viewport()->height()) { - setSceneRect(rect); - return; - } - - if(_verticalOffsetStable && rect.height() > viewport()->height()) - setSceneRect(rect.adjusted(0, 0, 0, _verticalOffset)); - else - setSceneRect(rect); - - QScrollBar *vbar = verticalScrollBar(); - qreal sceneHeight = rect.height(); - qreal viewHeight = vbar->maximum() + viewport()->height() - vbar->minimum(); - if(sceneHeight != viewHeight) { - qreal voffset = sceneHeight - viewHeight; //voffset *= _currentScaleFactor; - // qDebug() << "Adjusting ChatView offset to" << voffset << "(QTBUG-6322)"; - if(sceneHeight + voffset <= viewport()->height()) { - setSceneRect(rect.adjusted(0, -voffset, 0, 0)); - _verticalOffsetStable = false; - return; - } else { - _verticalOffsetStable = true; - _verticalOffset = voffset; - setSceneRect(rect.adjusted(0, 0, 0, voffset)); - } - if(vbar->maximum() + viewport()->height() - vbar->minimum() != sceneHeight) { - //qWarning() << "Workaround for QTBUG-6322 failed!1!!" << vbar->maximum() + viewport()->height() - vbar->minimum() << sceneHeight; - _verticalOffsetStable = false; - adjustSceneRect(); - return; - } - if(voffset == _verticalOffset) - _verticalOffsetStable = true; - else { - //if(voffset <= 0) - _verticalOffset = voffset; - } - } //else - //_verticalOffsetStable = true; + // Workaround for QTBUG-6322 + // If the viewport's sceneRect() is (almost) as wide as as the viewport itself, + // Qt wants to reserve space for scrollbars even if they're turned off, resulting in + // an ugly white space at the bottom of the ChatView. + // Since the view's scene's width actually doesn't matter at all, we just adjust it + // by some hopefully large enough value to avoid this problem. + + setSceneRect(scene()->sceneRect().adjusted(0, 0, -25 ,0)); } void ChatView::mouseMoveWhileSelecting(const QPointF &scenePos) {