Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Education
OpenBoard
0955-shortcut-configuration.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0955-shortcut-configuration.patch of Package OpenBoard
From 07141652f2bcd3eba16fb5291532b52e8b530fc0 Mon Sep 17 00:00:00 2001 From: letsfindaway <me@letsfindaway.de> Date: Sun, 25 Aug 2024 15:34:04 +0200 Subject: [PATCH 1/2] feat: add preferences dialog for shortcut configuration - recording of key sequences amd mouse/stylus buttons - collect actions, filtering, collision detection - persist shortcut settings --- resources/forms/preferences.ui | 169 ++++++++++++++++++ src/core/UBApplication.cpp | 28 +++ src/core/UBPreferencesController.cpp | 252 ++++++++++++++++++++++++++- src/core/UBPreferencesController.h | 12 ++ 4 files changed, 459 insertions(+), 2 deletions(-) diff --git a/resources/forms/preferences.ui b/resources/forms/preferences.ui index 45a2fc180..9b73f8d65 100644 --- a/resources/forms/preferences.ui +++ b/resources/forms/preferences.ui @@ -1095,6 +1095,175 @@ </item> </layout> </widget> + <widget class="QWidget" name="shortcutTab"> + <attribute name="title"> + <string>Shortcut</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <widget class="QLineEdit" name="filter"> + <property name="placeholderText"> + <string>Filter</string> + </property> + </widget> + </item> + <item> + <widget class="QScrollArea" name="shortcutScrollArea"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>789</width> + <height>447</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_41"> + <item> + <widget class="QTableView" name="shortcutTableView"> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="showDropIndicator" stdset="0"> + <bool>false</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="showGrid"> + <bool>false</bool> + </property> + <property name="wordWrap"> + <bool>false</bool> + </property> + <attribute name="horizontalHeaderCascadingSectionResizes"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderMinimumSectionSize"> + <number>25</number> + </attribute> + <attribute name="verticalHeaderDefaultSectionSize"> + <number>25</number> + </attribute> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <item> + <widget class="QCheckBox" name="noCtrl"> + <property name="text"> + <string>Active keyboard shortcuts without pressing Ctrl key</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QGroupBox" name="shortcutsGroupBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="title"> + <string>Shortcuts</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <layout class="QGridLayout" name="gridLayout_20"> + <item row="3" column="0" colspan="2"> + <widget class="QLabel" name="report"> + <property name="styleSheet"> + <string notr="true">color: red;</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLineEdit" name="stylusButton"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QPushButton" name="abortButton"> + <property name="text"> + <string>Abort</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QPushButton" name="recordButton"> + <property name="text"> + <string>Record</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Stylus Button</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Mouse Button</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="mouseButton"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="keySequence"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QPushButton" name="resetButton"> + <property name="text"> + <string>Reset</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Key Sequence</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> <widget class="QWidget" name="thirdPartyLicence"> <property name="enabled"> <bool>true</bool> diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index 9e74e09a3..44017610b 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -704,6 +704,34 @@ bool UBApplication::eventFilter(QObject *obj, QEvent *event) || result; } + else if (event->type() == QEvent::MouseButtonPress) + { + // intercept special mouse buttons for shortcut handler + QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); + Qt::MouseButton button = mouseEvent->button(); + + if (button != Qt::LeftButton && button != Qt::RightButton) + { + return mPreferencesController->handleMouseEvent(mouseEvent) + || UBShortcutManager::shortcutManager()->handleMouseEvent(mouseEvent) + || result; + } + } + + else if (event->type() == QEvent::TabletPress) + { + // intercept special tablet buttons for shortcut handler + QTabletEvent *tabletEvent = static_cast<QTabletEvent *>(event); + Qt::MouseButton button = tabletEvent->button(); + + if (button != Qt::LeftButton) + { + return mPreferencesController->handleTabletEvent(tabletEvent) + || UBShortcutManager::shortcutManager()->handleTabletEvent(tabletEvent) + || result; + } + } + return result; } diff --git a/src/core/UBPreferencesController.cpp b/src/core/UBPreferencesController.cpp index ed0e393d8..145323385 100644 --- a/src/core/UBPreferencesController.cpp +++ b/src/core/UBPreferencesController.cpp @@ -37,6 +37,7 @@ #include "core/UBSetting.h" #include "core/UBApplicationController.h" #include "core/UBDisplayManager.h" +#include "core/UBShortcutManager.h" #include "frameworks/UBStringUtils.h" @@ -72,7 +73,6 @@ void UBPreferencesDialog::closeEvent(QCloseEvent* e) } - UBPreferencesController::UBPreferencesController(QWidget *parent) : QObject(parent) , mPreferencesWindow(0) @@ -88,6 +88,8 @@ UBPreferencesController::UBPreferencesController(QWidget *parent) adjustScreensPreferences(); connect(UBApplication::displayManager, &UBDisplayManager::availableScreenCountChanged, this, &UBPreferencesController::adjustScreensPreferences); + mPreferencesUI->shortcutTab->installEventFilter(this); + wire(); } @@ -103,6 +105,90 @@ UBPreferencesController::~UBPreferencesController() delete mMarkerProperties; } +bool UBPreferencesController::handleKeyEvent(QKeyEvent *event) +{ + if (!mPreferencesUI->recordButton->isChecked() + || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab) + { + return false; + } + + int key = event->key(); + Qt::KeyboardModifiers mods = event->modifiers(); + QString text = event->text(); + + int keys = mods; + + if (key < Qt::Key_Shift || key > Qt::Key_ScrollLock) + { + keys += key; + } + + // compose key sequence from active modifiers and key + QKeySequence keySequence(keys); + QString keyString = keySequence.toString(); + mPreferencesUI->keySequence->setText(keyString); + + if (currentIndex.isValid()) + { + bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(2), keyString); + applyShortcutFilter(ok ? mPreferencesUI->filter->text() : keyString, ok ? -1 : 2); + mPreferencesUI->recordButton->setEnabled(ok); + mPreferencesUI->report->setText(ok ? "" : tr("Key sequence already in use")); + mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts(keySequence)); + } + + return true; +} + +bool UBPreferencesController::handleMouseEvent(QMouseEvent *event) +{ + if (!mPreferencesUI->recordButton->isChecked() + || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab) + { + return false; + } + + Qt::MouseButton button = event->button(); + + if (currentIndex.isValid()) + { + QString buttonName = UBShortcutManager::buttonName(button); + mPreferencesUI->mouseButton->setText(buttonName); + bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(3), buttonName); + applyShortcutFilter(ok ? mPreferencesUI->filter->text() : buttonName, ok ? -1 : 3); + mPreferencesUI->recordButton->setEnabled(ok); + mPreferencesUI->report->setText(ok ? "" : tr("Mouse button already in use")); + return true; + } + + return false; +} + +bool UBPreferencesController::handleTabletEvent(QTabletEvent *event) +{ + if (!mPreferencesUI->recordButton->isChecked() + || mPreferencesUI->mainTabWidget->currentWidget() != mPreferencesUI->shortcutTab) + { + return false; + } + + Qt::MouseButton button = event->button(); + + if (currentIndex.isValid()) + { + QString buttonName = UBShortcutManager::buttonName(button); + mPreferencesUI->stylusButton->setText(buttonName); + bool ok = UBShortcutManager::shortcutManager()->checkData(currentIndex.siblingAtColumn(4), buttonName); + applyShortcutFilter(ok ? mPreferencesUI->filter->text() : buttonName, ok ? -1 : 4); + mPreferencesUI->recordButton->setEnabled(ok); + mPreferencesUI->report->setText(ok ? "" : tr("Stylus button already in use")); + return true; + } + + return false; +} + void UBPreferencesController::adjustScreensPreferences() { bool enabled = UBApplication::displayManager->numScreens() > 1; @@ -139,6 +225,50 @@ void UBPreferencesController::adjustScreensPreferences() } } +void UBPreferencesController::applyShortcutFilter(const QString &filter, int filterCol) +{ + // go throug rows in reverse direction + QAbstractItemModel* model = mPreferencesUI->shortcutTableView->model(); + QModelIndex index = model->index(0, 0); + bool groupVisible = false; + int minCol = filterCol < 0 ? 0 : filterCol; + int maxCol = filterCol < 0 ? model->columnCount() : filterCol + 1; + + for (int row = model->rowCount() - 1; row >= 0; --row) + { + QModelIndex rowIndex = index.siblingAtRow(row); + bool match = false; + bool header = model->data(rowIndex, UBShortcutManager::GroupHeaderRole).toBool(); + + if (header) + { + match = groupVisible; + groupVisible = false; + } + else if (currentIndex.isValid() && currentIndex.row() == row) + { + match = true; + groupVisible = true; + } + else + { + for (int col = minCol; col < maxCol; ++col) + { + QModelIndex colIndex = rowIndex.siblingAtColumn(col); + + if (model->data(colIndex).toString().contains(filter, Qt::CaseInsensitive)) + { + match = true; + groupVisible = true; + break; + } + } + } + + mPreferencesUI->shortcutTableView->setRowHidden(row, !match); + } +} + void UBPreferencesController::show() { init(); @@ -293,6 +423,21 @@ void UBPreferencesController::wire() // about tab connect(mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox, SIGNAL(clicked(bool)), settings->appEnableAutomaticSoftwareUpdates, SLOT(setBool(bool))); + + // shortcut tab + connect(mPreferencesUI->shortcutTableView, SIGNAL(activated(const QModelIndex&)), this, SLOT(actionSelected(const QModelIndex&))); + connect(mPreferencesUI->filter, SIGNAL(textChanged(const QString&)), this, SLOT(applyShortcutFilter(const QString&))); + connect(mPreferencesUI->recordButton, SIGNAL(clicked(bool)), this, SLOT(recordingClicked(bool))); + connect(mPreferencesUI->abortButton, SIGNAL(clicked()), this, SLOT(abortClicked())); + connect(mPreferencesUI->resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); + connect(mPreferencesUI->noCtrl, &QCheckBox::toggled, UBShortcutManager::shortcutManager(), &UBShortcutManager::ignoreCtrl); + connect(mPreferencesUI->mainTabWidget, &QTabWidget::currentChanged, [this](int tab){ + auto shortcutTab = mPreferencesUI->mainTabWidget->indexOf(mPreferencesUI->shortcutTab); + + if (tab != shortcutTab) { + abortClicked(); + } + }); } void UBPreferencesController::init() @@ -351,6 +496,27 @@ void UBPreferencesController::init() mMarkerProperties->opacitySlider->setValue(settings->boardMarkerAlpha->get().toDouble() * 100); + // shortcut tab + mPreferencesUI->shortcutTableView->setModel(UBShortcutManager::shortcutManager()); + mPreferencesUI->shortcutTableView->horizontalHeader()->setModel(UBShortcutManager::shortcutManager()); + mPreferencesUI->shortcutTableView->horizontalHeader()->resizeSection(0, 150); + mPreferencesUI->shortcutTableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); + mPreferencesUI->noCtrl->setChecked(settings->value("Shortcut/IgnoreCtrl").toBool()); + mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts()); +} + +bool UBPreferencesController::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); + return handleKeyEvent(keyEvent); + } + else + { + // standard event processing + return QObject::eventFilter(obj, event); + } } void UBPreferencesController::close() @@ -445,7 +611,8 @@ void UBPreferencesController::defaultSettings() mPreferencesUI->checkSoftwareUpdateAtLaunchCheckBox->setChecked(defaultValue); } - else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->networkTab){ + else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->networkTab) + { bool defaultValue = settings->webUseExternalBrowser->reset().toBool(); mPreferencesUI->useExternalBrowserCheckBox->setChecked(defaultValue); defaultValue = settings->webShowPageImmediatelyOnMirroredScreen->reset().toBool(); @@ -480,6 +647,23 @@ void UBPreferencesController::defaultSettings() lightBackgroundCrossOpacityValueChanged(lightBackgroundOpacity); } + else if(mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->shortcutTab) + { + if (mPreferencesUI->recordButton->isChecked()) + { + abortClicked(); + } + + UBShortcutManager* sm = UBShortcutManager::shortcutManager(); + + for (int row = 0; row < sm->rowCount(); ++row) + { + QModelIndex rowIndex = sm->index(row, 0); + sm->resetData(rowIndex); + } + + resetClicked(); + } } void UBPreferencesController::darkBackgroundCrossOpacityValueChanged(int value) @@ -690,6 +874,70 @@ void UBPreferencesController::systemOSKCheckBoxToggled(bool checked) mPreferencesUI->keyboardPaletteKeyButtonSize_Label->setVisible(!checked); } +void UBPreferencesController::actionSelected(const QModelIndex &index) +{ + currentIndex = index; + UBShortcutManager* sm = UBShortcutManager::shortcutManager(); + mPreferencesUI->keySequence->setText(sm->data(index.siblingAtColumn(2), UBShortcutManager::PrimaryShortcutRole).toString()); + mPreferencesUI->mouseButton->setText(sm->data(index.siblingAtColumn(3)).toString()); + mPreferencesUI->stylusButton->setText(sm->data(index.siblingAtColumn(4)).toString()); + + bool isAction = sm->data(index, UBShortcutManager::ActionRole).toBool(); + mPreferencesUI->recordButton->setEnabled(true); + mPreferencesUI->shortcutsGroupBox->setEnabled(isAction); +} + +void UBPreferencesController::recordingClicked(bool checked) +{ + if (!checked && currentIndex.isValid()) + { + UBShortcutManager* sm = UBShortcutManager::shortcutManager(); + sm->setData(currentIndex.siblingAtColumn(2), mPreferencesUI->keySequence->text()); + sm->setData(currentIndex.siblingAtColumn(3), sm->buttonIndex(mPreferencesUI->mouseButton->text())); + sm->setData(currentIndex.siblingAtColumn(4), sm->buttonIndex(mPreferencesUI->stylusButton->text())); + } + + mPreferencesUI->shortcutTableView->setSelectionMode(checked ? QTableView::NoSelection : QTableView::SingleSelection); + mPreferencesUI->recordButton->setText(checked ? tr("Accept", "preferencesDialog") : tr("Record", "preferencesDialog")); +} + +void UBPreferencesController::abortClicked() +{ + applyShortcutFilter(mPreferencesUI->filter->text()); + + mPreferencesUI->recordButton->setEnabled(true); + mPreferencesUI->recordButton->setChecked(false); + mPreferencesUI->recordButton->setText(tr("Record", "preferencesDialog")); + mPreferencesUI->shortcutTableView->setSelectionMode(QTableView::SingleSelection); + mPreferencesUI->shortcutTableView->clearSelection(); + mPreferencesUI->report->setText(""); + mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts()); + actionSelected(mPreferencesUI->shortcutTableView->model()->index(0, 0)); +} + +void UBPreferencesController::resetClicked() +{ + if (mPreferencesUI->recordButton->isChecked()) + { + abortClicked(); + } + + if (currentIndex.isValid()) + { + UBShortcutManager* sm = UBShortcutManager::shortcutManager(); + + sm->resetData(currentIndex); + applyShortcutFilter(mPreferencesUI->filter->text()); + + mPreferencesUI->keySequence->setText(sm->data(currentIndex.siblingAtColumn(2)).toString()); + mPreferencesUI->mouseButton->setText(sm->data(currentIndex.siblingAtColumn(3)).toString()); + mPreferencesUI->stylusButton->setText(sm->data(currentIndex.siblingAtColumn(4)).toString()); + } + + mPreferencesUI->report->setText(""); + mPreferencesUI->noCtrl->setEnabled(!UBShortcutManager::shortcutManager()->hasCtrlConflicts()); +} + UBBrushPropertiesFrame::UBBrushPropertiesFrame(QFrame* owner, const QList<QColor>& lightBackgroundColors, const QList<QColor>& darkBackgroundColors, const QList<QColor>& lightBackgroundSelectedColors, const QList<QColor>& darkBackgroundSelectedColors, UBPreferencesController* controller) diff --git a/src/core/UBPreferencesController.h b/src/core/UBPreferencesController.h index d89b4c181..25413762c 100644 --- a/src/core/UBPreferencesController.h +++ b/src/core/UBPreferencesController.h @@ -70,6 +70,9 @@ class UBPreferencesController : public QObject UBPreferencesController(QWidget *parent); virtual ~UBPreferencesController(); + bool handleKeyEvent(QKeyEvent *event); + bool handleMouseEvent(QMouseEvent *event); + bool handleTabletEvent(QTabletEvent *event); public slots: @@ -80,6 +83,8 @@ class UBPreferencesController : public QObject void wire(); void init(); + virtual bool eventFilter(QObject* obj, QEvent* event) Q_DECL_OVERRIDE; + UBPreferencesDialog* mPreferencesWindow; Ui::preferencesDialog* mPreferencesUI; UBBrushPropertiesFrame* mPenProperties; @@ -104,14 +109,21 @@ class UBPreferencesController : public QObject void toolbarOrientationVertical(bool checked); void toolbarOrientationHorizontal(bool checked); void systemOSKCheckBoxToggled(bool checked); + void actionSelected(const QModelIndex& index); + void recordingClicked(bool checked); + void abortClicked(); + void resetClicked(); private slots: void adjustScreensPreferences(); + void applyShortcutFilter(const QString& filter, int filterCol = -1); + private: static qreal sSliderRatio; static qreal sMinPenWidth; static qreal sMaxPenWidth; + QModelIndex currentIndex; }; class UBBrushPropertiesFrame : public Ui::brushProperties From 414b6d55e67c0612a6318fd3acfa495432e44b73 Mon Sep 17 00:00:00 2001 From: letsfindaway <me@letsfindaway.de> Date: Mon, 30 Sep 2024 16:21:21 +0200 Subject: [PATCH 2/2] i18n: update German translation - change ownership of a translation string in UBShortcutManager - add new translation strings - update a few translations --- resources/i18n/OpenBoard_de.ts | 70 ++++++++++++++++++++++++++++++++-- src/core/UBShortcutManager.cpp | 2 +- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/resources/i18n/OpenBoard_de.ts b/resources/i18n/OpenBoard_de.ts index 275332271..b4e278c81 100644 --- a/resources/i18n/OpenBoard_de.ts +++ b/resources/i18n/OpenBoard_de.ts @@ -3008,6 +3008,28 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation> <source>Use all available displays</source> <translation>Alle verfügbaren Bildschirme nutzen</translation> </message> + <message> + <source>Key sequence already in use</source> + <translation>Tastenkombination wird bereits benutzt</translation> + </message> + <message> + <source>Mouse button already in use</source> + <translation>Maustaste wird bereits benutzt</translation> + </message> + <message> + <source>Stylus button already in use</source> + <translation>Stifttaste wird bereits benutzt</translation> + </message> + <message> + <source>Accept</source> + <comment>preferencesDialog</comment> + <translation>Übernehmen</translation> + </message> + <message> + <source>Record</source> + <comment>preferencesDialog</comment> + <translation>Aufnehmen</translation> + </message> </context> <context> <name>UBSettings</name> @@ -3079,7 +3101,7 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="260"/> <source>Reset zoom factor</source> - <translation>Zoom zurücksetzen</translation> + <translation>Zoom-Faktor zurücksetzen</translation> </message> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="266"/> @@ -3129,7 +3151,7 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="466"/> <source>Command</source> - <translation>Kommando</translation> + <translation>Befehl</translation> </message> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="469"/> @@ -3144,12 +3166,12 @@ Möchten Sie diese Fehler für diesen Computer ignorieren?</translation> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="475"/> <source>Mouse Button</source> - <translation>Mausknopf</translation> + <translation>Maustaste</translation> </message> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="478"/> <source>Tablet Button</source> - <translation>Tablet Stiftknopf</translation> + <translation>Stifttaste</translation> </message> <message> <location filename="../../src/core/UBShortcutManager.cpp" line="629"/> @@ -4076,6 +4098,46 @@ p, li { white-space: pre-wrap; } <source>List of screens used for Control, Display and Previous pages</source> <translation>Liste der Bildschirme, die für die Hauptansicht, Erweiterte Ansicht und Vorherige Seiten verwendet werden</translation> </message> + <message> + <source>Shortcut</source> + <translation>Kurzbefehl</translation> + </message> + <message> + <source>Filter</source> + <translation>Filter</translation> + </message> + <message> + <source>Active keyboard shortcuts without pressing Ctrl key</source> + <translation>Aktiviere Kurzbefehle auch ohne Strg Taste</translation> + </message> + <message> + <source>Shortcuts</source> + <translation>Kurzbefehle</translation> + </message> + <message> + <source>Abort</source> + <translation>Abbrechen</translation> + </message> + <message> + <source>Record</source> + <translation>Aufnehmen</translation> + </message> + <message> + <source>Stylus Button</source> + <translation>Stifttaste</translation> + </message> + <message> + <source>Mouse Button</source> + <translation>Maustaste</translation> + </message> + <message> + <source>Reset</source> + <translation>Zurücksetzen</translation> + </message> + <message> + <source>Key Sequence</source> + <translation>Tasten</translation> + </message> </context> <context> <name>trapFlashDialog</name> diff --git a/src/core/UBShortcutManager.cpp b/src/core/UBShortcutManager.cpp index dfe8c8239..56a66a870 100644 --- a/src/core/UBShortcutManager.cpp +++ b/src/core/UBShortcutManager.cpp @@ -43,7 +43,7 @@ UBShortcutManager* UBShortcutManager::sShortcutManager = nullptr; UBShortcutManager::UBShortcutManager() : mIgnoreCtrl(false) { - actionsOfGroup(QObject::tr("Common")); + actionsOfGroup(tr("Common")); } UBShortcutManager *UBShortcutManager::shortcutManager()
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor