diff --git a/src/plugins/VerticalTabs/verticaltabscontroller.cpp b/src/plugins/VerticalTabs/verticaltabscontroller.cpp index b782c6db..7135175e 100644 --- a/src/plugins/VerticalTabs/verticaltabscontroller.cpp +++ b/src/plugins/VerticalTabs/verticaltabscontroller.cpp @@ -1,73 +1,108 @@ /* ============================================================ * VerticalTabs plugin for Falkon * Copyright (C) 2018 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ============================================================ */ #include "verticaltabscontroller.h" #include "verticaltabsplugin.h" #include "verticaltabswidget.h" #include "tabwidget.h" #include #include VerticalTabsController::VerticalTabsController(VerticalTabsPlugin *plugin) : SideBarInterface(plugin) , m_plugin(plugin) { } QString VerticalTabsController::title() const { return tr("Vertical Tabs"); } QAction *VerticalTabsController::createMenuAction() { QAction *act = new QAction(title(), this); act->setCheckable(true); return act; } QWidget *VerticalTabsController::createSideBarWidget(BrowserWindow *window) { VerticalTabsWidget *widget = new VerticalTabsWidget(window); widget->setViewType(m_plugin->viewType()); widget->setStyleSheet(m_plugin->styleSheet()); connect(m_plugin, &VerticalTabsPlugin::viewTypeChanged, widget, &VerticalTabsWidget::setViewType); connect(m_plugin, &VerticalTabsPlugin::styleSheetChanged, widget, &VerticalTabsWidget::setStyleSheet); m_widgets[window] = widget; return widget; } bool VerticalTabsController::handleKeyPress(QKeyEvent *event, TabWidget *tabWidget) { - if (event->key() == Qt::Key_Tab && event->modifiers() == Qt::ControlModifier) { + auto switchToNextTab = [=]() { VerticalTabsWidget *widget = m_widgets.value(tabWidget->browserWindow()); if (widget) { widget->switchToNextTab(); return true; } - } else if (event->key() == Qt::Key_Backtab && event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { + return false; + }; + + auto switchToPreviousTab = [=]() { VerticalTabsWidget *widget = m_widgets.value(tabWidget->browserWindow()); if (widget) { widget->switchToPreviousTab(); return true; } + return false; + }; + + switch (event->key()) { + case Qt::Key_Tab: + case Qt::Key_PageDown: + if (event->modifiers() == Qt::ControlModifier) { + if (switchToNextTab()) { + return true; + } + } + break; + + case Qt::Key_Backtab: + if (event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { + if (switchToPreviousTab()) { + return true; + } + } + break; + + case Qt::Key_PageUp: + if (event->modifiers() == Qt::ControlModifier) { + if (switchToPreviousTab()) { + return true; + } + } + break; + + default: + break; } + return false; }