diff --git a/src/lib/tabwidget/tabbar.cpp b/src/lib/tabwidget/tabbar.cpp index d1fefae4a..dd80a59c1 100644 --- a/src/lib/tabwidget/tabbar.cpp +++ b/src/lib/tabwidget/tabbar.cpp @@ -346,14 +346,14 @@ void TabBar::contextMenuEvent(QContextMenuEvent* event) return; } - int index = tabAt(event->pos()); - - TabContextMenu menu(index, Qt::Horizontal, m_window, m_tabWidget); - - // Prevent choosing first option with double rightclick - const QPoint pos = event->globalPos(); - QPoint p(pos.x(), pos.y() + 1); - menu.exec(p); + WebTab* webTab = qobject_cast(m_tabWidget->widget(tabAt(event->pos()))); + if (webTab) { + TabContextMenu menu(webTab, Qt::Horizontal); + // Prevent choosing first option with double rightclick + const QPoint pos = event->globalPos(); + QPoint p(pos.x(), pos.y() + 1); + menu.exec(p); + } m_window->action(QSL("Other/RestoreClosedTab"))->setEnabled(true); } diff --git a/src/lib/tabwidget/tabcontextmenu.cpp b/src/lib/tabwidget/tabcontextmenu.cpp index 67ad5c663..9934ca80b 100644 --- a/src/lib/tabwidget/tabcontextmenu.cpp +++ b/src/lib/tabwidget/tabcontextmenu.cpp @@ -27,12 +27,12 @@ #include "checkboxdialog.h" -TabContextMenu::TabContextMenu(int index, Qt::Orientation orientation, BrowserWindow* window, TabWidget* tabWidget, bool showCloseOtherTabs) +TabContextMenu::TabContextMenu(WebTab *tab, Qt::Orientation orientation, bool showCloseOtherTabs) : QMenu() - , m_clickedTab(index) + , m_clickedTab(tab->tabIndex()) , m_tabsOrientation(orientation) - , m_window(window) - , m_tabWidget(tabWidget) + , m_window(tab->webView()->browserWindow()) + , m_tabWidget(m_window->tabWidget()) , m_showCloseOtherTabs(showCloseOtherTabs) { setObjectName("tabcontextmenu"); diff --git a/src/lib/tabwidget/tabcontextmenu.h b/src/lib/tabwidget/tabcontextmenu.h index 0d162623b..0b0ad07ce 100644 --- a/src/lib/tabwidget/tabcontextmenu.h +++ b/src/lib/tabwidget/tabcontextmenu.h @@ -22,14 +22,15 @@ #include "qzcommon.h" -class BrowserWindow; +class WebTab; class TabWidget; +class BrowserWindow; class FALKON_EXPORT TabContextMenu : public QMenu { Q_OBJECT public: - explicit TabContextMenu(int index, Qt::Orientation orientation, BrowserWindow* window, TabWidget* tabWidget, bool showCloseOtherTabs = true); + explicit TabContextMenu(WebTab *tab, Qt::Orientation orientation, bool showCloseOtherTabs = true); signals: void reloadTab(int index); diff --git a/src/plugins/TabManager/tabmanagerwidget.cpp b/src/plugins/TabManager/tabmanagerwidget.cpp index 383286194..c445228c8 100644 --- a/src/plugins/TabManager/tabmanagerwidget.cpp +++ b/src/plugins/TabManager/tabmanagerwidget.cpp @@ -279,16 +279,12 @@ void TabManagerWidget::customContextMenuRequested(const QPoint &pos) TabItem* item = static_cast(ui->treeWidget->itemAt(pos)); if (item) { - BrowserWindow* mainWindow = item->window(); - QWidget* tabWidget = item->webTab(); - - if (mainWindow && tabWidget) { - int index = mainWindow->tabWidget()->indexOf(tabWidget); - + WebTab *tab = item->webTab(); + if (tab) { // if items are not grouped by Window then actions "Close Other Tabs", // "Close Tabs To The Bottom" and "Close Tabs To The Top" // are ambiguous and should be hidden. - menu = new TabContextMenu(index, Qt::Vertical, mainWindow, mainWindow->tabWidget(), m_groupType == GroupByWindow); + menu = new TabContextMenu(tab, Qt::Vertical, m_groupType == GroupByWindow); menu->addSeparator(); } }