void BufferWidget::showChatView(BufferId id) { if(!id.isValid()) { ui.stackedWidget->setCurrentWidget(ui.page); } else { ChatView *view = qobject_cast<ChatView *>(_chatViews.value(id)); Q_ASSERT(view); ui.stackedWidget->setCurrentWidget(view); _chatViewSearchController->setScene(view->scene()); } }
bool BufferWidget::eventFilter(QObject *watched, QEvent *event) { if (event->type() != QEvent::KeyPress) return false; QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); MultiLineEdit *inputLine = qobject_cast<MultiLineEdit *>(watched); if (!inputLine) return false; // Intercept copy key presses if (keyEvent == QKeySequence::Copy) { if (inputLine->hasSelectedText()) return false; ChatView *view = qobject_cast<ChatView *>(ui.stackedWidget->currentWidget()); if (view) view->scene()->selectionToClipboard(); return true; } // We don't want to steal cursor movement keys if the input line is in multiline mode if (!inputLine->isSingleLine()) return false; switch (keyEvent->key()) { 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<QObject *>(ui.stackedWidget->currentWidget())->event(event); default: return false; } }