mirror of
https://github.com/KDE/konsole.git
synced 2025-12-23 23:38:08 -05:00
fixup! Adopt KHamburgerMenu
This commit is contained in:
@@ -4,3 +4,4 @@ add_subdirectory( keyboard-layouts )
|
||||
add_subdirectory( layouts )
|
||||
|
||||
install( FILES konsole.knsrc DESTINATION ${KDE_INSTALL_KNSRCDIR})
|
||||
install(FILES konsolerc DESTINATION ${KDE_INSTALL_CONFDIR})
|
||||
|
||||
2
data/konsolerc
Normal file
2
data/konsolerc
Normal file
@@ -0,0 +1,2 @@
|
||||
[MainWindow]
|
||||
MenuBar=Disabled
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE gui SYSTEM "kpartgui.dtd">
|
||||
|
||||
<gui name="konsole" version="20">
|
||||
<gui name="konsole" version="19">
|
||||
<MenuBar>
|
||||
<Menu name="file"><text>File</text>
|
||||
<Action name="new-window"/>
|
||||
@@ -56,14 +56,9 @@
|
||||
</Menu>
|
||||
</MenuBar>
|
||||
<ToolBar name="mainToolBar">
|
||||
<!-- FIXME: setting session toolbar to index 0 and main toolbar to index 1
|
||||
doesn't seem to put them in the right order; the main toolbar is still first! -->
|
||||
<text>Main Toolbar</text>
|
||||
<index>1</index>
|
||||
<!-- FIXME: doesn't seem to appear -->
|
||||
<Spacer/>
|
||||
<index>0</index>
|
||||
<Action name="new-tab"/>
|
||||
<Action name="split-view"/>
|
||||
<Action name="hamburger_menu"/>
|
||||
</ToolBar>
|
||||
</gui>
|
||||
|
||||
@@ -68,9 +68,11 @@
|
||||
</Menu>
|
||||
<ToolBar name="sessionToolbar">
|
||||
<text>Session Toolbar</text>
|
||||
<index>0</index>
|
||||
<index>1</index>
|
||||
<Spacer/>
|
||||
<Action name="edit_copy" />
|
||||
<Action name="edit_paste" />
|
||||
<Action name="edit_find" />
|
||||
<Action name="hamburger_menu"/>
|
||||
</ToolBar>
|
||||
</gui>
|
||||
|
||||
@@ -8,5 +8,17 @@ target_link_libraries(konsole_globalaccel PRIVATE
|
||||
KF5::Service
|
||||
)
|
||||
|
||||
install(TARGETS konsole_globalaccel DESTINATION ${KDE_INSTALL_LIBDIR}/kconf_update_bin)
|
||||
install(FILES konsole_globalaccel.upd DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR})
|
||||
|
||||
set(konsole_show_menubar_SRCS konsole_show_menubar.cpp)
|
||||
qt_add_resources(konsole_show_menubar_SRCS ../desktop/konsole.qrc)
|
||||
|
||||
add_executable(konsole_show_menubar ${konsole_show_menubar_SRCS})
|
||||
|
||||
target_link_libraries(konsole_show_menubar
|
||||
KF5::XmlGui
|
||||
)
|
||||
|
||||
|
||||
install(FILES konsole.upd DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR})
|
||||
install(PROGRAMS konsole_add_hamburgermenu_to_toolbar.sh DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR})
|
||||
install(TARGETS konsole_globalaccel konsole_show_menubar DESTINATION ${KDE_INSTALL_LIBDIR}/kconf_update_bin)
|
||||
|
||||
9
kconf_update/konsole.upd
Normal file
9
kconf_update/konsole.upd
Normal file
@@ -0,0 +1,9 @@
|
||||
Version=5
|
||||
|
||||
Id=konsole_globalaccel
|
||||
File=khotkeysrc
|
||||
Script=konsole_globalaccel
|
||||
|
||||
Id=add-hamburgermenu-to-toolbar
|
||||
Script=konsole_add_hamburgermenu_to_toolbar.sh
|
||||
Script=konsole_show_menubar
|
||||
6
kconf_update/konsole_add_hamburgermenu_to_toolbar.sh
Executable file
6
kconf_update/konsole_add_hamburgermenu_to_toolbar.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
sed --regexp-extended --null-data --in-place '
|
||||
s/(<ToolBar.*)(<\/ToolBar>)/\1<Action name="hamburger_menu"\/>\n\2/
|
||||
' \
|
||||
`qtpaths --locate-file GenericDataLocation kxmlgui5/konsole/sessionui.rc`
|
||||
@@ -1,4 +0,0 @@
|
||||
Version=5
|
||||
Id=konsole_globalaccel
|
||||
File=khotkeysrc
|
||||
Script=konsole_globalaccel
|
||||
31
kconf_update/konsole_show_menubar.cpp
Normal file
31
kconf_update/konsole_show_menubar.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2022 Andrey Butirsky <butirsky@gmail.com>
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Keeps Menu Bar enabled if user has hidden a Session Toolbar thus no Hamburger Menu button is shown
|
||||
*/
|
||||
|
||||
#include <QApplication>
|
||||
#include <KAboutData>
|
||||
#include <KXmlGuiWindow>
|
||||
#include <KSharedConfig>
|
||||
#include <KConfigGroup>
|
||||
#include <QMenuBar>
|
||||
#include <KToolBar>
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
KAboutData::setApplicationData(KAboutData(QStringLiteral("konsole")));
|
||||
|
||||
KXmlGuiWindow mainWindow;
|
||||
mainWindow.setupGUI(KXmlGuiWindow::Default, QStringLiteral("sessionui.rc"));
|
||||
|
||||
static const char menuBarKey[] = "MenuBar";
|
||||
// SimpleConfig so that system-wide default won't interfere and hasKey() indicates user defined setting
|
||||
if (auto cg = KSharedConfig::openConfig(QStringLiteral("konsolerc"), KConfig::OpenFlag::SimpleConfig)->group("MainWindow"); !cg.hasKey(menuBarKey) &&
|
||||
mainWindow.menuBar()->isHidden() && mainWindow.toolBar(QStringLiteral("sessionToolbar"))->isHidden()) {
|
||||
cg.writeEntry(menuBarKey, "Enabled");
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <KIconUtils>
|
||||
#include <KLocalizedString>
|
||||
#include <KShortcutsDialog>
|
||||
#include <KToolBar>
|
||||
#include <KWindowEffects>
|
||||
|
||||
#include <KMessageBox>
|
||||
@@ -39,7 +40,6 @@
|
||||
|
||||
// Konsole
|
||||
#include "BookmarkHandler.h"
|
||||
#include "BookmarkMenu.h"
|
||||
#include "KonsoleSettings.h"
|
||||
#include "ViewManager.h"
|
||||
#include "WindowSystemInfo.h"
|
||||
@@ -63,8 +63,6 @@
|
||||
|
||||
#include <konsoledebug.h>
|
||||
|
||||
#include <functional>
|
||||
|
||||
using namespace Konsole;
|
||||
|
||||
MainWindow::MainWindow()
|
||||
@@ -74,7 +72,6 @@ MainWindow::MainWindow()
|
||||
, _toggleMenuBarAction(nullptr)
|
||||
, _newTabMenuAction(nullptr)
|
||||
, _pluggedController(nullptr)
|
||||
, _hamburgerMenu(nullptr)
|
||||
{
|
||||
// Set the WA_NativeWindow attribute to force the creation of the QWindow.
|
||||
// Without this QWidget::windowHandle() returns 0.
|
||||
@@ -89,7 +86,8 @@ MainWindow::MainWindow()
|
||||
// create view manager
|
||||
_viewManager = new ViewManager(this, actionCollection());
|
||||
connect(_viewManager, &Konsole::ViewManager::empty, this, &QWidget::close);
|
||||
connect(_viewManager, &Konsole::ViewManager::activeViewChanged, this, &Konsole::MainWindow::activeViewChanged);
|
||||
// QueuedConnection so that KHamburgerMenu showed up properly on the first tab
|
||||
connect(_viewManager, &Konsole::ViewManager::activeViewChanged, this, &Konsole::MainWindow::activeViewChanged, Qt::QueuedConnection);
|
||||
connect(_viewManager, &Konsole::ViewManager::unplugController, this, &Konsole::MainWindow::disconnectController);
|
||||
connect(_viewManager, &Konsole::ViewManager::viewPropertiesChanged, bookmarkHandler(), &Konsole::BookmarkHandler::setViews);
|
||||
connect(_viewManager, &Konsole::ViewManager::blurSettingChanged, this, &Konsole::MainWindow::setBlur);
|
||||
@@ -284,6 +282,11 @@ void MainWindow::activeViewChanged(SessionController *controller)
|
||||
connect(controller, &Konsole::SessionController::rawTitleChanged, this, &Konsole::MainWindow::updateWindowCaption);
|
||||
connect(controller, &Konsole::SessionController::iconChanged, this, &Konsole::MainWindow::updateWindowIcon);
|
||||
|
||||
// to prevent shortcuts conflict
|
||||
if (auto hamburgerMenu = _hamburgerMenu->menu()) {
|
||||
hamburgerMenu->clear();
|
||||
}
|
||||
|
||||
controller->setShowMenuAction(_toggleMenuBarAction);
|
||||
guiFactory()->addClient(controller);
|
||||
|
||||
@@ -428,27 +431,14 @@ void MainWindow::setupActions()
|
||||
_hamburgerMenu = KStandardAction::hamburgerMenu(nullptr, nullptr, collection);
|
||||
_hamburgerMenu->setShowMenuBarAction(_toggleMenuBarAction);
|
||||
_hamburgerMenu->setMenuBar(menuBar());
|
||||
connect(_hamburgerMenu, &KHamburgerMenu::aboutToShowMenu, [this]() {
|
||||
updateHamburgerMenu();
|
||||
});
|
||||
connect(_hamburgerMenu, &KHamburgerMenu::aboutToShowMenu, this, &MainWindow::updateHamburgerMenu);
|
||||
}
|
||||
|
||||
void MainWindow::updateHamburgerMenu()
|
||||
{
|
||||
KActionCollection *collection = actionCollection();
|
||||
QList<KActionCollection *> allCollections = actionCollection()->allCollections();
|
||||
KActionCollection *controllerCollection = _pluggedController->actionCollection();
|
||||
|
||||
std::function<QAction *(const QString &)> actionByName = [allCollections](const QString &name) {
|
||||
for (auto *ac : allCollections) {
|
||||
auto actions = ac->actions();
|
||||
for (auto *action : actions) {
|
||||
if (action->objectName() == name) {
|
||||
return action;
|
||||
}
|
||||
}
|
||||
}
|
||||
return static_cast<QAction *>(nullptr);
|
||||
};
|
||||
QMenu *menu = _hamburgerMenu->menu();
|
||||
if (!menu) {
|
||||
menu = new QMenu(widget());
|
||||
@@ -459,58 +449,56 @@ void MainWindow::updateHamburgerMenu()
|
||||
|
||||
menu->addAction(collection->action(QStringLiteral("new-window")));
|
||||
menu->addAction(collection->action(QStringLiteral("new-tab")));
|
||||
menu->addAction(actionByName(QStringLiteral("file_save_as")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("file_save_as")));
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
menu->addAction(actionByName(QStringLiteral("edit-copy")));
|
||||
menu->addAction(actionByName(QStringLiteral("edit-paste")));
|
||||
menu->addAction(actionByName(QStringLiteral("edit-find")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("edit_copy")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("edit_paste")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("edit_find")));
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
// FIXME: missing
|
||||
menu->addAction(actionByName(QStringLiteral("view-full-screen")));
|
||||
menu->addAction(actionByName(QStringLiteral("view-split")));
|
||||
// FIXME: this causes it to get duplicated and then there's a shortcut conflict
|
||||
menu->addAction(actionByName(QStringLiteral("clear-history-and-reset")));
|
||||
menu->addAction(actionByName(QStringLiteral("enlarge-font")));
|
||||
menu->addAction(actionByName(QStringLiteral("reset-font-size")));
|
||||
menu->addAction(actionByName(QStringLiteral("shrink-font")));
|
||||
menu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::FullScreen))));
|
||||
menu->addAction(collection->action(QStringLiteral("split-view")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("clear-history-and-reset")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("enlarge-font")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("reset-font-size")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("shrink-font")));
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
menu->addAction(actionByName(QStringLiteral("edit-current-profile")));
|
||||
menu->addAction(actionByName(QStringLiteral("switch-profile")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("edit-current-profile")));
|
||||
menu->addAction(controllerCollection->action(QStringLiteral("switch-profile")));
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
auto monitorMenu = menu->addMenu(QIcon::fromTheme(QStringLiteral("visibility")), i18nc("@action:inmenu menu for 'monitor for action' actions", "Monitor"));
|
||||
monitorMenu->addAction(actionByName(QStringLiteral("monitor-silence")));
|
||||
monitorMenu->addAction(actionByName(QStringLiteral("monitor-activity")));
|
||||
monitorMenu->addAction(actionByName(QStringLiteral("monitor-process-finish")));
|
||||
auto monitorMenu = menu->addMenu(QIcon::fromTheme(QStringLiteral("visibility")), static_cast<QMenu *>(factory()->container(QStringLiteral("view"), nullptr))->title());
|
||||
monitorMenu->addAction(controllerCollection->action(QStringLiteral("monitor-silence")));
|
||||
monitorMenu->addAction(controllerCollection->action(QStringLiteral("monitor-activity")));
|
||||
monitorMenu->addAction(controllerCollection->action(QStringLiteral("monitor-process-finish")));
|
||||
menu->addMenu(monitorMenu);
|
||||
_hamburgerMenu->hideActionsOf(monitorMenu);
|
||||
|
||||
auto bookmarkMenu = collection->action(QStringLiteral("bookmark"));
|
||||
bookmarkMenu->setIcon(QIcon::fromTheme(QStringLiteral("bookmarks")));
|
||||
bookmarkMenu->setIcon(QIcon::fromTheme(QStringLiteral("bookmarks"))); // Icon will be removed again when the menu bar is enabled.
|
||||
menu->addAction(bookmarkMenu);
|
||||
|
||||
auto pluginsMenu = static_cast<QMenu *>(factory()->container(QStringLiteral("plugins"), this));
|
||||
pluginsMenu->setIcon(QIcon::fromTheme(QStringLiteral("plugins")));
|
||||
pluginsMenu->setIcon(QIcon::fromTheme(QStringLiteral("plugins"))); // Icon will be removed again when the menu bar is enabled.
|
||||
menu->addMenu(pluginsMenu);
|
||||
|
||||
auto configureMenu = menu->addMenu(QIcon::fromTheme(QStringLiteral("configure")), i18nc("@action:inmenu menu for configure actions", "Configure"));
|
||||
configureMenu->addAction(collection->action(QStringLiteral("edit-current-profile")));
|
||||
configureMenu->addAction(collection->action(QString::fromUtf8(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))));
|
||||
configureMenu->addAction(collection->action(QString::fromUtf8(KStandardAction::name(KStandardAction::KeyBindings))));
|
||||
configureMenu->addAction(collection->action(QString::fromUtf8(KStandardAction::name(KStandardAction::ConfigureToolbars))));
|
||||
configureMenu->addAction(collection->action(QString::fromUtf8(KStandardAction::name(KStandardAction::Preferences))));
|
||||
configureMenu->addAction(collection->action(QStringLiteral("configure-settings")));
|
||||
configureMenu->addAction(collection->action(QStringLiteral("configure-language")));
|
||||
configureMenu->addAction(collection->action(QStringLiteral("configure-shortcuts")));
|
||||
configureMenu->addAction(collection->action(QStringLiteral("configure-notifications")));
|
||||
auto configureMenu = menu->addMenu(QIcon::fromTheme(QStringLiteral("configure")), static_cast<QMenu *>(factory()->container(QStringLiteral("settings"), nullptr))->title());
|
||||
configureMenu->addAction(toolBarMenuAction());
|
||||
configureMenu->addSeparator();
|
||||
configureMenu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))));
|
||||
configureMenu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::KeyBindings))));
|
||||
configureMenu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::ConfigureToolbars))));
|
||||
configureMenu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::ConfigureNotifications))));
|
||||
configureMenu->addAction(collection->action(QLatin1String(KStandardAction::name(KStandardAction::Preferences))));
|
||||
_hamburgerMenu->hideActionsOf(configureMenu);
|
||||
|
||||
_hamburgerMenu->hideActionsOf(toolBar());
|
||||
}
|
||||
|
||||
void MainWindow::viewFullScreen(bool fullScreen)
|
||||
@@ -529,10 +517,6 @@ void MainWindow::applyMainWindowSettings(const KConfigGroup &config)
|
||||
// Override the menubar state from the config file
|
||||
if (_windowArgsMenuBarVisible.enabled) {
|
||||
menuBar()->setVisible(_windowArgsMenuBarVisible.showMenuBar);
|
||||
} else {
|
||||
// FIXME: only do this on first run; we don't want existing Konsole users
|
||||
// to see any changes to their UI!
|
||||
menuBar()->hide();
|
||||
}
|
||||
|
||||
_toggleMenuBarAction->setChecked(menuBar()->isVisibleTo(this));
|
||||
@@ -644,6 +628,9 @@ Session *MainWindow::createSession(Profile::Ptr profile, const QString &director
|
||||
auto newView = _viewManager->createView(session);
|
||||
_viewManager->activeContainer()->addView(newView);
|
||||
|
||||
_viewManager->activeViewController()->actionCollection()->addActions(
|
||||
{_hamburgerMenu});
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
|
||||
class QAction;
|
||||
class KActionMenu;
|
||||
class KToggleAction;
|
||||
class KHamburgerMenu;
|
||||
class KToggleAction;
|
||||
|
||||
namespace Konsole
|
||||
{
|
||||
|
||||
@@ -1987,13 +1987,7 @@ void SessionController::showDisplayContextMenu(const QPoint &position)
|
||||
|
||||
_preventClose = true;
|
||||
|
||||
if (_showMenuAction != nullptr) {
|
||||
if (_showMenuAction->isChecked()) {
|
||||
popup->removeAction(_showMenuAction);
|
||||
} else {
|
||||
popup->insertAction(_switchProfileMenu, _showMenuAction);
|
||||
}
|
||||
}
|
||||
static_cast<KHamburgerMenu *>(actionCollection()->action(QLatin1String(KStandardAction::name(KStandardAction::HamburgerMenu))))->addToMenu(popup);
|
||||
|
||||
// they are here.
|
||||
// qDebug() << popup->actions().indexOf(contentActions[0]) << popup->actions().indexOf(contentActions[1]) << popup->actions()[3];
|
||||
|
||||
Reference in New Issue
Block a user