void NotificationScrollArea::findPreviousWidget() { int value = 0; GenericChatroomWidget* next = nullptr; QHash<GenericChatroomWidget*, Visibility>::iterator i = trackedWidgets.begin(); // Find the first next, to avoid nullptr. for (; i != trackedWidgets.end(); ++i) { if (i.value() == Above) { next = i.key(); value = next->mapTo(viewport(), QPoint()).y(); break; } } // Try finding a closer one. for (; i != trackedWidgets.end(); ++i) { if (i.value() == Above) { int y = i.key()->mapTo(viewport(), QPoint()).y(); if (y > value) { next = i.key(); value = y; } } } if (next != nullptr) ensureWidgetVisible(next, 0, referencesAbove != 1 ? topEdge->height() : 0); }
/*! \reimp */ bool QScrollArea::focusNextPrevChild(bool next) { if (QWidget::focusNextPrevChild(next)) { if (QWidget *fw = focusWidget()) ensureWidgetVisible(fw); return true; } return false; }
void ImagesList::keyPressEvent(QKeyEvent* e) { #ifndef QT_NO_DEBUG // qDebug("ImagesList::keyPressEvent()"); #endif switch (e->key()) { case Qt::Key_Up: if (current>0) { current--; ensureWidgetVisible(images_l[current],0,0); emit selected(current); } e->accept(); break; case Qt::Key_Down: if (current<(images_l.size()-1)) { current++; ensureWidgetVisible(images_l[current],0,0); emit selected(current); } e->accept(); break; /* case Qt::Key_Home: e->accept(); current= (images_l.size()) ? 0 : -1; emit selected(current); break; case Qt::Key_End: e->accept(); current=images_l.size()-1; emit selected(current); break; */ case Qt::Key_Escape: QScrollArea::keyPressEvent(e); break; default: e->ignore(); } }
/*! \reimp */ bool QScrollArea::eventFilter(QObject *o, QEvent *e) { Q_D(QScrollArea); #ifdef QT_KEYPAD_NAVIGATION if (d->widget && o != d->widget && e->type() == QEvent::FocusIn && QApplication::keypadNavigationEnabled()) { if (o->isWidgetType()) ensureWidgetVisible(static_cast<QWidget *>(o)); } #endif if (o == d->widget && e->type() == QEvent::Resize) d->updateScrollBars(); return QAbstractScrollArea::eventFilter(o, e); }