diff --git a/app/SysTray-X/SysTray-X-app/SysTray-X-app.pro b/app/SysTray-X/SysTray-X-app/SysTray-X-app.pro index 99d6922..c2011c8 100644 --- a/app/SysTray-X/SysTray-X-app/SysTray-X-app.pro +++ b/app/SysTray-X/SysTray-X-app/SysTray-X-app.pro @@ -19,7 +19,7 @@ include( ../SysTray-X.pri ) QT += core gui unix:!macx: { contains(DEFINES,KDE_INTEGRATION) { - QT += dbus KNotifications + QT += dbus KNotifications x11extras } } @@ -147,6 +147,9 @@ win32: { SOURCES += \ main.cpp \ + nativeeventfilter-x11.cpp \ + nativeeventfilterbase.cpp \ + shortcut.cpp \ systrayxlink.cpp \ systrayxicon.cpp \ systrayx.cpp \ @@ -169,6 +172,9 @@ SOURCES += \ HEADERS += \ debug.h \ + nativeeventfilter-x11.h \ + nativeeventfilterbase.h \ + shortcut.h \ systrayxlink.h \ systrayxicon.h \ systrayx.h \ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.qm index 8dade02..1d9ef5d 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.ts index 7593aa9..79c89b2 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.de.ts @@ -433,21 +433,41 @@ + Shortcuts + Tastatürkürzel + + + + Current show / hide shortcut: + Aktuelle Tastenkombination zum Anzeigen / Verbergen + + + + New show / hide shortcut: + Neuer Tastenkombination zum Anzeigen / Verbergen + + + + Clear + Löschen + + + Debug Debug - + Display debug window Debug-Fenster anzeigen - + Save Speichern - + Cancel Annullieren @@ -458,20 +478,20 @@ Hauptfenster minimieren - - + + Open Image Bild öffnen - - + + Image Files (*.png *.jpg *.bmp) Bilddateien (*.png *.jpg *.bmp) - - + + Select application Anwendung auswählen @@ -479,27 +499,27 @@ SysTrayX - + &Show/Hide &Anzeigen/Verbergen - + &Preferences &Einstellungen - + &About &Über - + &Quit &Beenden - + Close Schließen diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.qm index cb18ac6..5cd9a42 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.ts index 0bc188a..1fede97 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.el.ts @@ -422,12 +422,17 @@ Χρησιμοποιήστε το παράθυρο διαλόγου Προτιμήσεις Thunderbird για να επιλέξετε λογαριασμούς και φακέλους - + + Clear + Αφαιρώ + + + Debug Αποσφαλμάτωση - + Display debug window Προβολή παραθύρου αποσφαλμάτωσης @@ -448,30 +453,45 @@ Εφαρμογή εκκίνησης - + + Shortcuts + Συντομεύσεις + + + + Current show / hide shortcut: + Τρέχουσα συντόμευση Εμφάνιση / Απόκρυψη + + + + New show / hide shortcut: + Νέα συντόμευση Εμφάνιση / Απόκρυψη + + + Save Αποθήκευση - + Cancel Άκυρο - - + + Open Image Άνοιγμα εικόνας - - + + Image Files (*.png *.jpg *.bmp) Αρχεία εικόνας (*.png *.jpg *.bmp) - - + + Select application επιλέξτε εφαρμογή @@ -479,27 +499,27 @@ SysTrayX - + &Show/Hide &Εμφάνιση/Απόκρυψη - + &Preferences &Προτιμήσεις - + &About &Σχετικά - + &Quit &Έξοδος - + Close Κλείσιμο diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.qm index 1e9625a..44869d1 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.ts index 3254cbb..603d9cf 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.en-US.ts @@ -438,21 +438,53 @@ + Shortcuts + Shortcuts + + + + Current show / hide shortcut: + Current Show / Hide shortcut + + + + New show / hide shortcut: + New Show / Hide shortcut + + + Shortcut + Shortcut + + + Current shortcut: + Current shortcut + + + New shortcut: + New shortcut + + + + Clear + Clear + + + Debug Debug - + Display debug window Display debug window - + Save Save - + Cancel Cancel @@ -463,20 +495,20 @@ Minimize to tray - - + + Open Image Open Image - - + + Image Files (*.png *.jpg *.bmp) Image Files (*.png *.jpg *.bmp) - - + + Select application Select application @@ -484,27 +516,27 @@ SysTrayX - + &Show/Hide &Show/Hide - + &Preferences &Preferences - + &About &About - + &Quit &Quit - + Close Close diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.qm index 64bc6af..f6da257 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.ts index 60deac1..4ca907c 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.it.ts @@ -423,12 +423,17 @@ Usa la finestra di dialogo delle preferenze in Thunderbird per selezionare account e cartelle - + + Clear + Rimuovi + + + Debug Debug - + Display debug window Mostra finestra di debug @@ -449,30 +454,45 @@ Applicazione di avvio - + + Shortcuts + Scorciatoie + + + + Current show / hide shortcut: + Scorciatoia corrente Mostra / Nascondi + + + + New show / hide shortcut: + Nuova scorciatoia Mostra / Nascondi + + + Save Salva - + Cancel Annulla - - + + Open Image Apri immagine - - + + Image Files (*.png *.jpg *.bmp) File immagine (*.png *.jpg *.bmp) - - + + Select application Selezionare l'applicazione @@ -480,27 +500,27 @@ SysTrayX - + &Show/Hide &Mostra/Nascondi - + &Preferences &Preferenze - + &About &Informazioni - + &Quit &Esci - + Close Chiudi diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.qm index d3b1f24..93f80aa 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.ts index 54bfef2..008a520 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.nl.ts @@ -437,21 +437,41 @@ + Shortcuts + Snelkoppelingen + + + + Current show / hide shortcut: + Huidige snelkoppeling Tonen / Verbergen + + + + New show / hide shortcut: + Nieuwe snelkoppeling Tonen / Verbergen + + + + Clear + Verwijderen + + + Debug Debug - + Display debug window Toon debug venster - + Save Bewaren - + Cancel Annnuleren @@ -462,20 +482,20 @@ Minimaliseer naar systeemvak - - + + Open Image Open afbeelding - - + + Image Files (*.png *.jpg *.bmp) Afbeeldingsbestanden (*.png *.jpg *.bmp) - - + + Select application Selecteer programma @@ -483,27 +503,27 @@ SysTrayX - + &Show/Hide &Tonen/Verbergen - + &Preferences &Opties - + &About O&ver - + &Quit &Afsluiten - + Close Sluiten diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.qm index 00c57cf..1cd794c 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.ts index 5fd046f..9ac1a67 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.pt-BR.ts @@ -437,21 +437,41 @@ + Shortcuts + Atalhos + + + + Current show / hide shortcut: + Atual Mostrar / Ocultar atalho + + + + New show / hide shortcut: + Novo atalho Mostrar / Ocultar + + + + Clear + Remover + + + Debug Depuração - + Display debug window Mostrar janela de depuração - + Save Salvar - + Cancel Cancelar @@ -462,20 +482,20 @@ Minimizar para a tray - - + + Open Image Abrir imagem - - + + Image Files (*.png *.jpg *.bmp) Arquivo de imagem (*.png *.jpg *.bmp) - - + + Select application Selecione o aplicativo @@ -483,27 +503,27 @@ SysTrayX - + &Show/Hide &Exibir/Ocultar - + &Preferences &Preferências - + &About &Sobre - + &Quit &Sair - + Close Fechar diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.qm b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.qm index b3a19b5..ae475d4 100644 Binary files a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.qm and b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.qm differ diff --git a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.ts b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.ts index 7a23183..b97e086 100644 --- a/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.ts +++ b/app/SysTray-X/SysTray-X-app/languages/SysTray-X.ru.ts @@ -434,21 +434,41 @@ + Shortcuts + Сочетания + + + + Current show / hide shortcut: + Текущий ярлык Показать / Скрыть + + + + New show / hide shortcut: + Новый ярлык Показать / Скрыть + + + + Clear + Удалять + + + Debug Отладка - + Display debug window Показывать окно отладки - + Save Сохранить - + Cancel Отменить @@ -459,20 +479,20 @@ Свернуть в трей - - + + Open Image Открыть изображение - - + + Image Files (*.png *.jpg *.bmp) Файлы изображений (*.png *.jpg *.bmp) - - + + Select application выберите приложение @@ -480,27 +500,27 @@ SysTrayX - + &Show/Hide &Показать/Скрыть - + &Preferences &Настройки - + &About &О приложении - + &Quit &Выход - + Close Закрыть diff --git a/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.cpp b/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.cpp new file mode 100644 index 0000000..9e51395 --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.cpp @@ -0,0 +1,168 @@ +#include "nativeeventfilter-x11.h" + + +/* + * System includes + */ + +/* + * Qt includes + */ +#include +#include + + +/* + * Define the statics + */ +const QVector< int > NativeEventFilterX11::m_special_modifiers = { 0, Mod2Mask, LockMask, ( Mod2Mask | LockMask ) }; +const int NativeEventFilterX11::m_valid_mods_mask = ShiftMask | ControlMask | Mod1Mask | Mod4Mask; + +/* + * Catch the key press + */ +bool NativeEventFilterX11::nativeEventFilter( const QByteArray& eventType, void* message, long* result ) +{ + Q_UNUSED( eventType ) + Q_UNUSED( result ) + + xcb_generic_event_t* generic_event = static_cast< xcb_generic_event_t* >( message ); + if( generic_event->response_type == XCB_KEY_PRESS ) + { + xcb_key_press_event_t key_press_event = *static_cast< xcb_key_press_event_t* >( message ); + + if( m_key_code_x11 == key_press_event.detail && + m_key_modifiers_x11 == key_press_event.state & NativeEventFilterX11::m_valid_mods_mask ) + { + activated(); + } + } + + return false; +} + + +/* + * Connect the shortcut key + */ +bool NativeEventFilterX11::connectShortcut( QKeySequence key_seq ) +{ + Qt::Key key_code = Qt::Key( key_seq[ 0 ] & static_cast< int >( ~Qt::KeyboardModifierMask ) ); + Qt::KeyboardModifiers key_modifiers = Qt::KeyboardModifiers( key_seq[ 0 ] & static_cast( Qt::KeyboardModifierMask ) ); + + return connectShortcut( key_code, key_modifiers ); +} + + +/* + * Connect the shortcut key + */ +bool NativeEventFilterX11::connectShortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers ) +{ + /* + * Convert the Qt key code to a X11 key code + */ + QString key_string; + switch( key_code ) + { + case Qt::Key_MediaLast : + case Qt::Key_MediaPrevious : + key_string = "XF86AudioPrev"; + break; + case Qt::Key_MediaNext : + key_string = "XF86AudioNext"; + break; + case Qt::Key_MediaPause : + case Qt::Key_MediaPlay : + case Qt::Key_MediaTogglePlayPause : + key_string = "XF86AudioPlay"; + break; + case Qt::Key_MediaRecord : + key_string = "XF86AudioRecord"; + break; + case Qt::Key_MediaStop : + key_string = "XF86AudioStop"; + break; + default : + key_string = QKeySequence( key_code ).toString(); + } + + KeySym key_sym = XStringToKeysym( key_string.toLocal8Bit().constData() ); + if( key_sym == NoSymbol ) + { + if( key_code <= 0xffff ) + { + // Bad conversion, use only the key + key_sym = key_code; + } + else + { + // Cannot decode the key + return false; + } + } + + /* + * Convert the Qt key modifiers to X11 key modifiers + */ + m_key_modifiers_x11 = 0; + if( key_modifiers & Qt::ShiftModifier ) + { + m_key_modifiers_x11 |= ShiftMask; + } + if( key_modifiers & Qt::ControlModifier ) + { + m_key_modifiers_x11 |= ControlMask; + } + if( key_modifiers & Qt::AltModifier ) + { + m_key_modifiers_x11 |= Mod1Mask; + } + if( key_modifiers & Qt::MetaModifier ) + { + m_key_modifiers_x11 |= Mod4Mask; + } + + /* + * Get the X11 display + */ + Display *display = QX11Info::display(); + + /* + * Get the final key code + */ + m_key_code_x11 = XKeysymToKeycode( display, key_sym ); + + /* + * Grab the key + */ + for( int special_mod : NativeEventFilterX11::m_special_modifiers ) + { + XGrabKey( display, m_key_code_x11, m_key_modifiers_x11 | special_mod, XDefaultRootWindow( display ), True, GrabModeAsync, GrabModeAsync ); + } + + XSync( display, False ); + + return true; +} + + +/* + * Disconnect the shortcut key + */ +bool NativeEventFilterX11::disconnectShortcut() +{ + Display* display = QX11Info::display(); + + /* + * Ungrab the key + */ + for( int special_mod : NativeEventFilterX11::m_special_modifiers ) + { + XUngrabKey( display, m_key_code_x11, m_key_modifiers_x11 | special_mod, XDefaultRootWindow( display ) ); + } + + XSync( display, False ); + + return true; +} diff --git a/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.h b/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.h new file mode 100644 index 0000000..0daf226 --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/nativeeventfilter-x11.h @@ -0,0 +1,90 @@ +#ifndef NATIVEEVENTFILTERX11_H +#define NATIVEEVENTFILTERX11_H + +/* + * Local includes + */ +#include "nativeeventfilterbase.h" + +/* + * System includes + */ +#include + +/* + * Qt includes + */ + + +/** + * @brief The NativeEventFilterX11 class + */ +class NativeEventFilterX11 : public NativeEventFilterBase +{ + public: + + /** + * @brief nativeEventFilter. Set the native event filter to catch the key press. + * + * @param eventType Event type to handle. + * @param message Message to handle. + * @param result Result to handle. + * + * @return Result + */ + bool nativeEventFilter( const QByteArray& eventType, void* message, long* result ) override; + + protected: + + /** + * @brief connectShortcut. Connect the shortcut to the system. + * + * @param key_seq Key sequence to connect. + * + * @return Succeeded? + */ + bool connectShortcut( QKeySequence key_seq ); + + /** + * @brief connectShortcut. Connect the shortcut to the system. + * + * @param key_code Qt key code to connect. + * @param key_modifiers Qt key modifiers to connect. + * + * @return Succeeded? + */ + bool connectShortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers ); + + /** + * @brief disconnectShortcut. Disconnect the shortcut. + * + * @return Succeeded? + */ + bool disconnectShortcut(); + + private: + + /** + * @brief m_key_modifiers_x11. Storage for the X11 key modifiers. + */ + int m_key_modifiers_x11; + + /** + * @brief m_key_code_x11. Storage for the X11 key code. + */ + KeyCode m_key_code_x11; + + /** + * @brief m_special_modifiers. Storage for the special modifiers. + */ + static const QVector< int > m_special_modifiers; + + /** + * @brief m_valid_mods_mask. Storage for the valid modifiers mask. + */ + static const int m_valid_mods_mask; +}; + +SINGLETON( NativeEventFilterX11 ) + +#endif // NATIVEEVENTFILTERX11_H diff --git a/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.cpp b/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.cpp new file mode 100644 index 0000000..887fc62 --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.cpp @@ -0,0 +1,74 @@ +#include "nativeeventfilterbase.h" + +/* + * Local includes + */ +#include "shortcut.h" + +/* + * System includes + */ + +/* + * Qt includes + */ +#include +#include + + +/* + * Constructor + */ +NativeEventFilterBase::NativeEventFilterBase() +{ + /* + * Install the new filter + */ + qApp->eventDispatcher()->installNativeEventFilter( this ); +} + + +/* + * Destructor + */ +NativeEventFilterBase::~NativeEventFilterBase() +{ + if( qApp && qApp->eventDispatcher() ) + { + /* + * Remove the filter + */ + qApp->eventDispatcher()->removeNativeEventFilter( this ); + } +} + + +/* + * Send the activate signal + */ +void NativeEventFilterBase::activated() +{ + emit m_shortcut->activated(); +} + + +/* + * Set the shortcut key + */ +bool NativeEventFilterBase::setShortcut( Shortcut* shortcut ) +{ + m_shortcut = shortcut; + + return connectShortcut( m_shortcut->getKeyCode(), m_shortcut->getKeyModifiers() ); +} + + +/* + * Unset the shortcut key + */ +bool NativeEventFilterBase::unsetShortcut() +{ + m_shortcut = nullptr; + + return disconnectShortcut(); +} diff --git a/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.h b/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.h new file mode 100644 index 0000000..5f5ab2d --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/nativeeventfilterbase.h @@ -0,0 +1,97 @@ +#ifndef NATIVEEVENTFILTERBASE_H +#define NATIVEEVENTFILTERBASE_H + +/* + * Local includes + */ + +/* + * System includes + */ + +/* + * Qt includes + */ +#include +#include +#include + +/* + * Predefines + */ +class Shortcut; + + +/** + * @brief The NativeEventFilterBase class + */ +class NativeEventFilterBase : public QObject, public QAbstractNativeEventFilter +{ + Q_OBJECT + + public: + + /** + * @brief NativeEventFilterBase. Constructor, destructor. + */ + NativeEventFilterBase(); + ~NativeEventFilterBase(); + + /** + * @brief instance. Pointer to the instance. + * + * @return Pointer to the instance. + */ + static NativeEventFilterBase* instance(); + + /** + * @brief setShortcut. Set a shortcut. + * + * @param shortcut Shortcut to set. + */ + bool setShortcut( Shortcut* shortcut ); + + /** + * @brief unsetShortcut. Unset a shortcut. + */ + bool unsetShortcut(); + + protected: + + /** + * @brief connectShortcut. Connect the shortcut to the system. + * + * @param key_code The key code to connect. + * @param key_modifiers The modifiers to use. + * + * @return Succeeded? + */ + virtual bool connectShortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers ) = 0; + + /** + * @brief disconnectShortcut. Disconnect the shortcut. + * + * @return Succeeded? + */ + virtual bool disconnectShortcut() = 0; + + /** + * @brief activated. Shortcut has been activated. + */ + void activated(); + + private: + + /** + * @brief m_shortcut. Shortcut storage. + */ + Shortcut* m_shortcut; +}; + +#define SINGLETON( ClassName ) Q_GLOBAL_STATIC( ClassName, nativeEventFilterBase ) \ + NativeEventFilterBase* NativeEventFilterBase::instance()\ + {\ + return nativeEventFilterBase;\ + } + +#endif // NATIVEEVENTFILTERBASE_H diff --git a/app/SysTray-X/SysTray-X-app/preferences.cpp b/app/SysTray-X/SysTray-X-app/preferences.cpp index 6554f5b..d347be1 100644 --- a/app/SysTray-X/SysTray-X-app/preferences.cpp +++ b/app/SysTray-X/SysTray-X-app/preferences.cpp @@ -44,10 +44,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) /* * Initialize */ - m_app_pref_changed = false; - m_minimize_type = PREF_MINIMIZE_METHOD_1; - m_close_type = PREF_MINIMIZE_MAIN_CLOSE_CHILDREN_WINDOWS; + m_close_type = PREF_MINIMIZE_MAIN_TRAY_CLOSE_CHILDREN_WINDOWS; m_minimize_icon_type = PREF_MINIMIZE_TRAY_ICON; m_startup_type = PREF_START_DEFAULT; @@ -70,6 +68,7 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_number_size = 10; m_count_type = PREF_COUNT_UNREAD; m_startup_delay = 5; + m_api_count_method = false; m_number_alignment = 4; m_number_margins = QMargins(); m_new_indicator_type = PREF_NEW_INDICATOR_SHADE; @@ -91,27 +90,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_start_app_args = ""; m_close_app = ""; m_close_app_args = ""; -} - -/* - * Get the icon mime. - */ -bool Preferences::getAppPrefChanged() const -{ - return m_app_pref_changed; -} - - -/* - * Control the sending of preferences changes to the add-on - */ -void Preferences::setAppPrefChanged( bool state ) -{ - if( m_app_pref_changed != state ) - { - m_app_pref_changed = state; - } + m_show_hide_shortcut = QKeySequence(); } @@ -941,6 +921,32 @@ void Preferences::setApiCountMethod( bool state ) } +/* + * Get the show / hide shortcut key sequence. + */ +QKeySequence Preferences::getShowHideShortcut() const +{ + return m_show_hide_shortcut; +} + + +/* + * Set the show / hide shortcut key sequence. + */ +void Preferences::setShowHideShortcut( QKeySequence key_seq ) +{ + if( m_show_hide_shortcut != key_seq ) + { + m_show_hide_shortcut = key_seq; + + /* + * Tell the world the new preference + */ + emit signalShowHideShortcutChange(); + } +} + + /* * Get the debug state. */ diff --git a/app/SysTray-X/SysTray-X-app/preferences.h b/app/SysTray-X/SysTray-X-app/preferences.h index c3dc36a..1dcca66 100644 --- a/app/SysTray-X/SysTray-X-app/preferences.h +++ b/app/SysTray-X/SysTray-X-app/preferences.h @@ -13,6 +13,8 @@ #include #include #include +#include + /** * @brief The Preferences class. Class to hold the preferences. @@ -125,20 +127,6 @@ class Preferences : public QObject */ Preferences( QObject *parent = nullptr ); - /** - * @brief getAppPrefChanged. Control for sending changes to the add-on. - * - * @return The state - */ - bool getAppPrefChanged() const; - - /** - * @brief setAppPrefChanged. Control for sending changes to the add-on. - * - * @param state The state - */ - void setAppPrefChanged( bool state ); - /** * @brief setPlatformOs. Set the platform OS. * @@ -587,6 +575,16 @@ class Preferences : public QObject */ void setApiCountMethod( bool state ); + /** + * @brief getShowHideShortcut. Get the show / hide shortcut key sequence. + */ + QKeySequence getShowHideShortcut() const; + + /** + * @brief setShowHideShortcut. Set the show / hide shortcut key sequence. + */ + void setShowHideShortcut( QKeySequence key_seq ); + /** * @brief getDebug. Get the debug windows state. * @@ -769,16 +767,16 @@ class Preferences : public QObject void signalCloseAppArgsChange(); /** - * @brief signalApiCountMethodChange + * @brief signalApiCountMethodChange. Signal the api count method change. */ void signalApiCountMethodChange(); - private: - /** - * @brief m_app_pref_changed. Control for sending changes to the add-on. + * @brief signalShowHideShortcutChange. Signal the show / hide shortcut key sequence change. */ - bool m_app_pref_changed; + void signalShowHideShortcutChange(); + + private: /** * @brief m_platform_xx. Platform description. @@ -964,6 +962,11 @@ class Preferences : public QObject */ bool m_api_count_method; + /** + * @brief m_show_hide_shortcut. The show / hide shortcut key sequence. + */ + QKeySequence m_show_hide_shortcut; + /** * @brief m_debug. Display debug window. */ diff --git a/app/SysTray-X/SysTray-X-app/preferences.ui b/app/SysTray-X/SysTray-X-app/preferences.ui index d764434..5d9ed8b 100644 --- a/app/SysTray-X/SysTray-X-app/preferences.ui +++ b/app/SysTray-X/SysTray-X-app/preferences.ui @@ -6,7 +6,7 @@ 0 0 - 556 + 608 468 @@ -27,7 +27,7 @@ - 2 + 0 @@ -1133,6 +1133,79 @@ + + + Shortcuts + + + + + 11 + 10 + 571 + 58 + + + + + + + + + + + Current show / hide shortcut: + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + New show / hide shortcut: + + + + + + + + + + + + + + Clear + + + + + + + + Debug @@ -1217,13 +1290,13 @@ - - + + + - - - + + diff --git a/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp b/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp index 3e61e7b..904833d 100644 --- a/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp +++ b/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp @@ -137,6 +137,9 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi connect( m_ui->startBrowseButton, &QPushButton::clicked, this, &PreferencesDialog::slotStartAppSelect ); connect( m_ui->closeBrowseButton, &QPushButton::clicked, this, &PreferencesDialog::slotCloseAppSelect ); + connect( m_ui->showHideKeySequenceEdit, &QKeySequenceEdit::editingFinished, this, &PreferencesDialog::slotTruncateShowHideShortcut ); + connect( m_ui->clearShowHideShortcutPushButton, &QPushButton::clicked, this, &PreferencesDialog::slotClearShowHideShortcut ); + /* * Set number color */ @@ -180,6 +183,11 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi setCloseApp( m_pref->getCloseApp() ); setCloseAppArgs( m_pref->getCloseAppArgs() ); + /* + * Set the show / hide shortcut + */ + setShowHideShortcut( m_pref->getShowHideShortcut() ); + /* * Dialog on top */ @@ -540,6 +548,17 @@ void PreferencesDialog::setApiCountMethod( bool state ) } +/* + * Set the show / hide shortcut + */ +void PreferencesDialog::setShowHideShortcut( QKeySequence key_seq ) +{ + m_ui->currentShowHideShortcut->setText( key_seq.toString() ); + + m_ui->showHideKeySequenceEdit->setKeySequence( key_seq ); +} + + /* * Handle show dialog signal */ @@ -565,11 +584,6 @@ void PreferencesDialog::slotShowDialog() */ void PreferencesDialog::slotAccept() { - /* - * Settings changed by app - */ - m_pref->setAppPrefChanged( true ); - /* * Get all the selected values and store them in the preferences */ @@ -604,20 +618,22 @@ void PreferencesDialog::slotAccept() QString startApp = m_ui->startAppLineEdit->text(); m_pref->setStartApp( startApp ); - QString startAppArgs= m_ui->startAppArgsLineEdit->text(); + QString startAppArgs = m_ui->startAppArgsLineEdit->text(); m_pref->setStartAppArgs( startAppArgs ); QString closeApp = m_ui->closeAppLineEdit->text(); m_pref->setCloseApp( closeApp ); - QString closeAppArgs= m_ui->closeAppArgsLineEdit->text(); + QString closeAppArgs = m_ui->closeAppArgsLineEdit->text(); m_pref->setCloseAppArgs( closeAppArgs ); m_pref->setNumberColor( m_number_color ); + m_pref->setShowHideShortcut( m_ui->showHideKeySequenceEdit->keySequence() ); + m_pref->setDebug( m_ui->debugWindowCheckBox->isChecked() ); /* * Settings changed by app */ - m_pref->setAppPrefChanged( false ); + emit signalPreferencesChanged(); /* * Close it @@ -672,6 +688,8 @@ void PreferencesDialog::slotReject() setCloseApp( m_pref->getCloseApp() ); setCloseAppArgs( m_pref->getCloseAppArgs() ); + setShowHideShortcut( m_pref->getShowHideShortcut() ); + setDebug( m_pref->getDebug()); } @@ -957,6 +975,15 @@ void PreferencesDialog::slotStartupDelayChange() } +/* + * Handle the API count method change signal + */ +void PreferencesDialog::slotApiCountMethodChange() +{ + setApiCountMethod( m_pref->getApiCountMethod() ); +} + + /* * Handle the number alignment change */ @@ -1030,9 +1057,43 @@ void PreferencesDialog::slotCloseAppArgsChange() /* - * Handle the API count method change signal + * Handle the show / hide shortcut change signal */ -void PreferencesDialog::slotApiCountMethodChange() +void PreferencesDialog::slotShowHideShortcutChange() { - setApiCountMethod( m_pref->getApiCountMethod() ); + setShowHideShortcut( m_pref->getShowHideShortcut() ); +} + + +/* + * Handle the edit show / hide shortcut key field + */ +void PreferencesDialog::slotTruncateShowHideShortcut() +{ + QKeySequence key_seq = m_ui->showHideKeySequenceEdit->keySequence(); + + /* + * Workaround for a Qt5 bug in QKeySequenceEdit object, Meta/Win key is not handled correctly. + */ + int value = 0; + if( key_seq[ 0 ] == 16777299 && key_seq.count() > 1 ) + { + value = key_seq[ 1 ]; + } + else if( !(key_seq[ 0 ] == 16777299 && key_seq.count() == 1) ) + { + value = key_seq[ 0 ]; + } + + QKeySequence shortcut( value ); + m_ui->showHideKeySequenceEdit->setKeySequence( shortcut ); +} + + +/* + * Handle the clear show / hide shortcut push button + */ +void PreferencesDialog::slotClearShowHideShortcut() +{ + m_ui->showHideKeySequenceEdit->setKeySequence( QKeySequence() ); } diff --git a/app/SysTray-X/SysTray-X-app/preferencesdialog.h b/app/SysTray-X/SysTray-X-app/preferencesdialog.h index 67edba0..0ac2929 100644 --- a/app/SysTray-X/SysTray-X-app/preferencesdialog.h +++ b/app/SysTray-X/SysTray-X-app/preferencesdialog.h @@ -265,6 +265,13 @@ class PreferencesDialog : public QDialog */ void setApiCountMethod( bool state ); + /** + * @brief setShowHideShortcut. Set the show / hide shortcut. + * + * @param key_seq The shortcut key sequence. + */ + void setShowHideShortcut( QKeySequence key_seq ); + signals: /** @@ -279,6 +286,11 @@ class PreferencesDialog : public QDialog */ void signalUpdateSysTrayIcon(); + /** + * @brief signalPreferencesChanged. The preferences have been changed. + */ + void signalPreferencesChanged(); + public slots: /** @@ -356,6 +368,11 @@ class PreferencesDialog : public QDialog */ void slotStartupDelayChange(); + /** + * @brief slotApiCountMethodChange. Slot for handling the API count methid change. + */ + void slotApiCountMethodChange(); + /** * @brief slotShowNumberChange. Slot for handling show number state change. */ @@ -417,9 +434,9 @@ class PreferencesDialog : public QDialog void slotCloseAppArgsChange(); /** - * @brief slotApiCountMethodChange. Slot for handling the API count methid change. + * @brief slotShowHideShortcutChange. Slot for handling a show / hide shortcut change. */ - void slotApiCountMethodChange(); + void slotShowHideShortcutChange(); private slots: @@ -463,6 +480,16 @@ class PreferencesDialog : public QDialog */ void slotCloseAppSelect(); + /** + * @brief slotTruncateShowHideShortcut. Handle the edit show / hide shortcut key field. + */ + void slotTruncateShowHideShortcut(); + + /** + * @brief slotClearShowHideShortcut. Handle the clear show / hide shortcut button. + */ + void slotClearShowHideShortcut(); + private: /** diff --git a/app/SysTray-X/SysTray-X-app/shortcut.cpp b/app/SysTray-X/SysTray-X-app/shortcut.cpp new file mode 100644 index 0000000..87f021b --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/shortcut.cpp @@ -0,0 +1,86 @@ +#include "shortcut.h" + +/* + * Local includes + */ +#include "nativeeventfilterbase.h" + + +/* + * Constructor + */ +Shortcut::Shortcut( QObject *parent ) + : QObject( parent ) +{ +} + + +/* + * Constructor with arguments + */ +Shortcut::Shortcut( QKeySequence key_seq, QObject *parent ) : + Shortcut( parent ) +{ + setShortcut( key_seq ); +} + + +/* + * Constructor with arguments + */ +Shortcut::Shortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers, QObject *parent ) : + Shortcut( parent ) +{ + setShortcut( key_code, key_modifiers ); +} + + +/* + * Destructor + */ +Shortcut::~Shortcut() +{ + NativeEventFilterBase::instance()->unsetShortcut(); +} + + +/* + * Set the shortcut + */ +bool Shortcut::setShortcut( QKeySequence key_seq ) +{ + Qt::Key key_code = Qt::Key( key_seq[ 0 ] & ~Qt::KeyboardModifierMask ); + Qt::KeyboardModifiers key_modifiers = Qt::KeyboardModifiers( key_seq[ 0 ] & Qt::KeyboardModifierMask); + + return setShortcut( key_code, key_modifiers ); +} + + +/* + * Set the shortcut + */ +bool Shortcut::setShortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers ) +{ + m_key_code = key_code; + m_key_modifiers = key_modifiers; + + return NativeEventFilterBase::instance()->setShortcut( this ); +} + + +/* + * Get the stored Qt key code + */ +Qt::Key Shortcut::getKeyCode() +{ + return m_key_code; +} + + +/* + * Get the stored Qt key modifiers + */ +Qt::KeyboardModifiers Shortcut::getKeyModifiers() +{ + return m_key_modifiers; +} diff --git a/app/SysTray-X/SysTray-X-app/shortcut.h b/app/SysTray-X/SysTray-X-app/shortcut.h new file mode 100644 index 0000000..3e64866 --- /dev/null +++ b/app/SysTray-X/SysTray-X-app/shortcut.h @@ -0,0 +1,112 @@ +#ifndef SHORTCUT_H +#define SHORTCUT_H + +/* + * Local includes + */ +#include "nativeeventfilterbase.h" + +/* + * Qt includes + */ +#include +#include + + +/** + * @brief The Shortcut class + */ +class Shortcut : public QObject +{ + Q_OBJECT + + private: + + /** + * @brief NativeEventFilterBase. Singleton friend class. + */ + friend class NativeEventFilterBase; + + public: + + /** + * @brief Shortcut. Constructor, destructor. + * + * @param parent Parent object. + */ + explicit Shortcut( QObject* parent = nullptr ); + ~Shortcut() override; + + /** + * @brief Shortcut Constructor with arguments. + * + * @param key_seq The Qt key sequence for the shortcut. + * @param parent The parent object. + */ + explicit Shortcut( QKeySequence key_seq, QObject* parent = nullptr ); + + /** + * @brief Shortcut. Constructor with arguments. + * + * @param keyCode The Qt key code for the shortcut. + * @param modifiers The Qt key modifiers for the shortcut. + * @param parent The parent object. + */ + explicit Shortcut( Qt::Key keyCode, Qt::KeyboardModifiers modifiers, QObject* parent = nullptr ); + + /** + * @brief getKeyCode. Get the stored key code. + * + * @return The key code. + */ + Qt::Key getKeyCode(); + + /** + * @brief getKeyModifiers. Get the stored key modifiers. + * + * @return The key modifiers. + */ + Qt::KeyboardModifiers getKeyModifiers(); + + private: + + /** + * @brief setShortcut. Set the shortcut. + * + * @param key_seq The Qt keysequence to use. + * + * @return Succeeded? + */ + bool setShortcut( QKeySequence key_seq ); + + /** + * @brief setShortcut. Set the shortcut. + * + * @param key_code The Qt key code to use. + * @param key_modifiers The Qt key modifiers to use. + * + * @return Succeeded? + */ + bool setShortcut( Qt::Key key_code, Qt::KeyboardModifiers key_modifiers ); + + signals: + + /** + * @brief activated. Signal send when activated. + */ + void activated(); + + private: + + /** + * @brief m_key_code. Storage for the key code. + */ + Qt::Key m_key_code; + + /** + * @brief m_key_modifiers. Storage for the key modifiers. + */ + Qt::KeyboardModifiers m_key_modifiers; +}; + +#endif // SHORTCUT_H diff --git a/app/SysTray-X/SysTray-X-app/systrayx.cpp b/app/SysTray-X/SysTray-X-app/systrayx.cpp index 6178c49..67741b7 100644 --- a/app/SysTray-X/SysTray-X-app/systrayx.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayx.cpp @@ -9,6 +9,7 @@ #include "systrayxicon.h" #include "systrayxstatusnotifier.h" #include "windowctrl.h" +#include "shortcut.h" /* * Qt includes @@ -43,6 +44,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) m_new_mail = 0; m_locale = QString(); + m_show_hide_shortcut = nullptr; + /* * Setup preferences storage */ @@ -105,8 +108,6 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) #endif - connect( this, &SysTrayX::signalConsole, m_debug, &DebugWidget::slotConsole ); - /* * Connect preferences signals */ @@ -128,6 +129,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalShowNumberChange, m_pref_dialog, &PreferencesDialog::slotShowNumberChange ); connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_pref_dialog, &PreferencesDialog::slotShowNewIndicatorChange ); connect( m_preferences, &Preferences::signalStartupDelayChange, m_pref_dialog, &PreferencesDialog::slotStartupDelayChange ); + connect( m_preferences, &Preferences::signalApiCountMethodChange, m_pref_dialog, &PreferencesDialog::slotApiCountMethodChange ); connect( m_preferences, &Preferences::signalCountTypeChange, m_pref_dialog, &PreferencesDialog::slotCountTypeChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_pref_dialog, &PreferencesDialog::slotNumberColorChange ); connect( m_preferences, &Preferences::signalNumberSizeChange, m_pref_dialog, &PreferencesDialog::slotNumberSizeChange ); @@ -139,37 +141,13 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalStartAppArgsChange, m_pref_dialog, &PreferencesDialog::slotStartAppArgsChange ); connect( m_preferences, &Preferences::signalCloseAppChange, m_pref_dialog, &PreferencesDialog::slotCloseAppChange ); connect( m_preferences, &Preferences::signalCloseAppArgsChange, m_pref_dialog, &PreferencesDialog::slotCloseAppArgsChange ); - connect( m_preferences, &Preferences::signalApiCountMethodChange, m_pref_dialog, &PreferencesDialog::slotApiCountMethodChange ); + connect( m_preferences, &Preferences::signalShowHideShortcutChange, m_pref_dialog, &PreferencesDialog::slotShowHideShortcutChange ); connect( m_preferences, &Preferences::signalDebugChange, m_pref_dialog, &PreferencesDialog::slotDebugChange ); - connect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_link, &SysTrayXLink::slotDefaultIconTypeChange ); - connect( m_preferences, &Preferences::signalDefaultIconDataChange, m_link, &SysTrayXLink::slotDefaultIconDataChange ); - connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_link, &SysTrayXLink::slotHideDefaultIconChange ); - connect( m_preferences, &Preferences::signalIconTypeChange, m_link, &SysTrayXLink::slotIconTypeChange ); - connect( m_preferences, &Preferences::signalIconDataChange, m_link, &SysTrayXLink::slotIconDataChange ); - connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_link, &SysTrayXLink::slotMinimizeTypeChange ); - connect( m_preferences, &Preferences::signalMinimizeIconTypeChange, m_link, &SysTrayXLink::slotMinimizeIconTypeChange ); - connect( m_preferences, &Preferences::signalStartupTypeChange, m_link, &SysTrayXLink::slotStartupTypeChange ); - connect( m_preferences, &Preferences::signalRestoreWindowPositionsChange, m_link, &SysTrayXLink::slotRestoreWindowPositionsChange ); - connect( m_preferences, &Preferences::signalCloseTypeChange, m_link, &SysTrayXLink::slotCloseTypeChange ); - connect( m_preferences, &Preferences::signalInvertIconChange, m_link, &SysTrayXLink::slotInvertIconChange ); - connect( m_preferences, &Preferences::signalShowNumberChange, m_link, &SysTrayXLink::slotShowNumberChange ); - connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_link, &SysTrayXLink::slotShowNewIndicatorChange ); - connect( m_preferences, &Preferences::signalStartupDelayChange, m_link, &SysTrayXLink::slotStartupDelayChange ); - connect( m_preferences, &Preferences::signalCountTypeChange, m_link, &SysTrayXLink::slotCountTypeChange ); - connect( m_preferences, &Preferences::signalNumberColorChange, m_link, &SysTrayXLink::slotNumberColorChange ); - connect( m_preferences, &Preferences::signalNumberSizeChange, m_link, &SysTrayXLink::slotNumberSizeChange ); - connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_link, &SysTrayXLink::slotNumberAlignmentChange ); - connect( m_preferences, &Preferences::signalNumberMarginsChange, m_link, &SysTrayXLink::slotNumberMarginsChange ); - connect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_link, &SysTrayXLink::slotNewIndicatorTypeChange ); - connect( m_preferences, &Preferences::signalNewShadeColorChange, m_link, &SysTrayXLink::slotNewShadeColorChange ); - connect( m_preferences, &Preferences::signalStartAppChange, m_link, &SysTrayXLink::slotStartAppChange ); - connect( m_preferences, &Preferences::signalStartAppArgsChange, m_link, &SysTrayXLink::slotStartAppArgsChange ); - connect( m_preferences, &Preferences::signalCloseAppChange, m_link, &SysTrayXLink::slotCloseAppChange ); - connect( m_preferences, &Preferences::signalCloseAppArgsChange, m_link, &SysTrayXLink::slotCloseAppArgsChange ); - connect( m_preferences, &Preferences::signalApiCountMethodChange, m_link, &SysTrayXLink::slotApiCountMethodChange ); - connect( m_preferences, &Preferences::signalDebugChange, m_link, &SysTrayXLink::slotDebugChange ); + connect( m_pref_dialog, &PreferencesDialog::signalPreferencesChanged, m_link, &SysTrayXLink::slotPreferencesChanged ); + connect( m_preferences, &Preferences::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObjectPref ); + connect( m_preferences, &Preferences::signalShowHideShortcutChange, this, &SysTrayX::slotShowHideShortcutChange ); connect( m_preferences, &Preferences::signalDebugChange, m_debug, &DebugWidget::slotDebugChange ); @@ -209,6 +187,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) /* m_preferences->setBrowserVersion( "115.1.0" ); // m_preferences->setBrowserVersion( "102.2.3" ); + slotLoadLanguage( "en-US" ); //slotLoadLanguage( "it" ); //slotLoadLanguage( "nl" ); @@ -217,11 +196,11 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) slotSelectIconObject( true ); slotMailCount( 10, 1 ); -*/ + // m_preferences->setStartApp( "/home/maxime/test.sh" ); // m_preferences->setStartAppArgs( "/home/maxime/startup.txt StartupString" ); // slotStartApp(); - +*/ } @@ -793,3 +772,16 @@ void SysTrayX::slotCloseApp() } } +void SysTrayX::slotShowHideShortcutChange() +{ + if( m_show_hide_shortcut != nullptr ) + { + disconnect( m_show_hide_shortcut, &Shortcut::activated, m_win_ctrl, &WindowCtrl::slotShowHide ); + + delete m_show_hide_shortcut; + m_show_hide_shortcut = nullptr; + } + + m_show_hide_shortcut = new Shortcut( m_preferences->getShowHideShortcut(), this ); + connect( m_show_hide_shortcut, &Shortcut::activated, m_win_ctrl, &WindowCtrl::slotShowHide ); +} diff --git a/app/SysTray-X/SysTray-X-app/systrayx.h b/app/SysTray-X/SysTray-X-app/systrayx.h index ca45918..acb9437 100644 --- a/app/SysTray-X/SysTray-X-app/systrayx.h +++ b/app/SysTray-X/SysTray-X-app/systrayx.h @@ -28,6 +28,9 @@ class WindowCtrl; class SysTrayXStatusNotifier; +class Shortcut; + + /** * @brief The SysTrayX class */ @@ -185,6 +188,11 @@ class SysTrayX : public QObject */ void slotVersion( QString version ); + /** + * @brief slotShowHideShortcutChange. Handle a show / hide shortcut change. + */ + void slotShowHideShortcutChange(); + private: /** @@ -254,6 +262,11 @@ class SysTrayX : public QObject * @brief m_locale. Storage for the current locale. */ QString m_locale; + + /** + * @brief m_show_hide_shortcut. Storage for the show / hide shortcut. + */ + Shortcut* m_show_hide_shortcut; }; #endif // SYSTRAYX_H diff --git a/app/SysTray-X/SysTray-X-app/systrayxlink.cpp b/app/SysTray-X/SysTray-X-app/systrayxlink.cpp index 314f7b6..28f28cc 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxlink.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayxlink.cpp @@ -796,6 +796,16 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setStartupDelay( startup_delay ); } + if( pref.contains( "apiCountMethod" ) && pref[ "apiCountMethod" ].isString() ) + { + bool api_count_method = pref[ "apiCountMethod" ].toString() == "true"; + + /* + * Store the new API cont method state + */ + m_pref->setApiCountMethod( api_count_method ); + } + if( pref.contains( "minimizeType" ) && pref[ "minimizeType" ].isString() ) { Preferences::MinimizeType minimize_type = static_cast< Preferences::MinimizeType >( pref[ "minimizeType" ].toString().toInt() ); @@ -896,14 +906,14 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setCloseAppArgs( args ); } - if( pref.contains( "apiCountMethod" ) && pref[ "apiCountMethod" ].isString() ) + if( pref.contains( "showHideShortcut" ) && pref[ "showHideShortcut" ].isString() ) { - bool api_count_method = pref[ "apiCountMethod" ].toString() == "true"; + QString shortcut = pref[ "showHideShortcut" ].toString(); /* - * Store the new API cont method state + * Store the new shortcut */ - m_pref->setApiCountMethod( api_count_method ); + m_pref->setShowHideShortcut( QKeySequence::fromString( shortcut ) ); } if( pref.contains( "debug" ) && pref[ "debug" ].isString() ) @@ -957,44 +967,46 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) * Setup the preferences JSON */ QJsonObject prefObject; - prefObject.insert("debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) ); - prefObject.insert("minimizeType", QJsonValue::fromVariant( QString::number( pref.getMinimizeType() ) ) ); - prefObject.insert("minimizeIconType", QJsonValue::fromVariant( QString::number( pref.getMinimizeIconType() ) ) ); - prefObject.insert("startupType", QJsonValue::fromVariant( QString::number( pref.getStartupType() ) ) ); - prefObject.insert("restorePositions", QJsonValue::fromVariant( QString( pref.getRestoreWindowPositions() ? "true" : "false" ) ) ); - prefObject.insert("closeType", QJsonValue::fromVariant( QString::number( pref.getCloseType() ) ) ); - prefObject.insert("defaultIconType", QJsonValue::fromVariant( QString::number( pref.getDefaultIconType() ) ) ); - prefObject.insert("defaultIconMime", QJsonValue::fromVariant( pref.getDefaultIconMime() ) ); - prefObject.insert("defaultIcon", QJsonValue::fromVariant( QString( pref.getDefaultIconData().toBase64() ) ) ); - prefObject.insert("hideDefaultIcon", QJsonValue::fromVariant( QString( pref.getHideDefaultIcon() ? "true" : "false" ) ) ); - prefObject.insert("iconType", QJsonValue::fromVariant( QString::number( pref.getIconType() ) ) ); - prefObject.insert("iconMime", QJsonValue::fromVariant( pref.getIconMime() ) ); - prefObject.insert("icon", QJsonValue::fromVariant( QString( pref.getIconData().toBase64() ) ) ); - prefObject.insert("invertIcon", QJsonValue::fromVariant( QString( pref.getInvertIcon() ? "true" : "false" ) ) ); - prefObject.insert("showNumber", QJsonValue::fromVariant( QString( pref.getShowNumber() ? "true" : "false" ) ) ); - prefObject.insert("showNewIndicator", QJsonValue::fromVariant( QString( pref.getShowNewIndicator() ? "true" : "false" ) ) ); - prefObject.insert("numberColor", QJsonValue::fromVariant( QString( pref.getNumberColor() ) ) ); - prefObject.insert("numberSize", QJsonValue::fromVariant( QString::number( pref.getNumberSize() ) ) ); - prefObject.insert("numberAlignment", QJsonValue::fromVariant( QString::number( pref.getNumberAlignment() ) ) ); + prefObject.insert( "debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) ); + prefObject.insert( "minimizeType", QJsonValue::fromVariant( QString::number( pref.getMinimizeType() ) ) ); + prefObject.insert( "minimizeIconType", QJsonValue::fromVariant( QString::number( pref.getMinimizeIconType() ) ) ); + prefObject.insert( "startupType", QJsonValue::fromVariant( QString::number( pref.getStartupType() ) ) ); + prefObject.insert( "restorePositions", QJsonValue::fromVariant( QString( pref.getRestoreWindowPositions() ? "true" : "false" ) ) ); + prefObject.insert( "closeType", QJsonValue::fromVariant( QString::number( pref.getCloseType() ) ) ); + prefObject.insert( "defaultIconType", QJsonValue::fromVariant( QString::number( pref.getDefaultIconType() ) ) ); + prefObject.insert( "defaultIconMime", QJsonValue::fromVariant( pref.getDefaultIconMime() ) ); + prefObject.insert( "defaultIcon", QJsonValue::fromVariant( QString( pref.getDefaultIconData().toBase64() ) ) ); + prefObject.insert( "hideDefaultIcon", QJsonValue::fromVariant( QString( pref.getHideDefaultIcon() ? "true" : "false" ) ) ); + prefObject.insert( "iconType", QJsonValue::fromVariant( QString::number( pref.getIconType() ) ) ); + prefObject.insert( "iconMime", QJsonValue::fromVariant( pref.getIconMime() ) ); + prefObject.insert( "icon", QJsonValue::fromVariant( QString( pref.getIconData().toBase64() ) ) ); + prefObject.insert( "invertIcon", QJsonValue::fromVariant( QString( pref.getInvertIcon() ? "true" : "false" ) ) ); + prefObject.insert( "showNumber", QJsonValue::fromVariant( QString( pref.getShowNumber() ? "true" : "false" ) ) ); + prefObject.insert( "showNewIndicator", QJsonValue::fromVariant( QString( pref.getShowNewIndicator() ? "true" : "false" ) ) ); + prefObject.insert( "numberColor", QJsonValue::fromVariant( QString( pref.getNumberColor() ) ) ); + prefObject.insert( "numberSize", QJsonValue::fromVariant( QString::number( pref.getNumberSize() ) ) ); + prefObject.insert( "numberAlignment", QJsonValue::fromVariant( QString::number( pref.getNumberAlignment() ) ) ); QJsonObject marginsObject; - marginsObject.insert("left", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().left() ) ) ); - marginsObject.insert("top", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().top() ) ) ); - marginsObject.insert("right", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().right() ) ) ); - marginsObject.insert("bottom", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().bottom() ) ) ); + marginsObject.insert( "left", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().left() ) ) ); + marginsObject.insert( "top", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().top() ) ) ); + marginsObject.insert( "right", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().right() ) ) ); + marginsObject.insert( "bottom", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().bottom() ) ) ); - prefObject.insert("numberMargins", marginsObject ); - prefObject.insert("countType", QJsonValue::fromVariant( QString::number( pref.getCountType() ) ) ); - prefObject.insert("startupDelay", QJsonValue::fromVariant( QString::number( pref.getStartupDelay() ) ) ); - prefObject.insert("apiCountMethod", QJsonValue::fromVariant( QString( pref.getApiCountMethod() ? "true" : "false" ) ) ); + prefObject.insert( "numberMargins", marginsObject ); + prefObject.insert( "countType", QJsonValue::fromVariant( QString::number( pref.getCountType() ) ) ); + prefObject.insert( "startupDelay", QJsonValue::fromVariant( QString::number( pref.getStartupDelay() ) ) ); + prefObject.insert( "apiCountMethod", QJsonValue::fromVariant( QString( pref.getApiCountMethod() ? "true" : "false" ) ) ); - prefObject.insert("startApp", QJsonValue::fromVariant( pref.getStartApp() ) ); - prefObject.insert("startAppArgs", QJsonValue::fromVariant( pref.getStartAppArgs() ) ); - prefObject.insert("closeApp", QJsonValue::fromVariant( pref.getCloseApp() ) ); - prefObject.insert("closeAppArgs", QJsonValue::fromVariant( pref.getCloseAppArgs() ) ); + prefObject.insert( "startApp", QJsonValue::fromVariant( pref.getStartApp() ) ); + prefObject.insert( "startAppArgs", QJsonValue::fromVariant( pref.getStartAppArgs() ) ); + prefObject.insert( "closeApp", QJsonValue::fromVariant( pref.getCloseApp() ) ); + prefObject.insert( "closeAppArgs", QJsonValue::fromVariant( pref.getCloseAppArgs() ) ); + + prefObject.insert( "showHideShortcut", QJsonValue::fromVariant( pref.getShowHideShortcut().toString() ) ); QJsonObject preferencesObject; - preferencesObject.insert("preferences", prefObject ); + preferencesObject.insert( "preferences", prefObject ); /* * Store the new document @@ -1029,328 +1041,14 @@ void SysTrayXLink::slotLinkRead( QByteArray message ) */ void SysTrayXLink::slotPositions( QList< QPoint > positions ) { - sendPositions( positions ); + sendPositions( positions ); } /* - * Handle a restore window positions state change signal + * Handle a preferences changed signal */ -void SysTrayXLink::slotRestoreWindowPositionsChange() +void SysTrayXLink::slotPreferencesChanged() { - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the minimize type change signal - */ -void SysTrayXLink::slotMinimizeTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the minimize icon type change signal - */ -void SysTrayXLink::slotMinimizeIconTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a startup type change signal - */ -void SysTrayXLink::slotStartupTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a close type change signal - */ -void SysTrayXLink::slotCloseTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the default icon type change signal - */ -void SysTrayXLink::slotDefaultIconTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the default icon data change signal - */ -void SysTrayXLink::slotDefaultIconDataChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the hide default icon change signal - */ -void SysTrayXLink::slotHideDefaultIconChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the icon type change signal - */ -void SysTrayXLink::slotIconTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the icon data change signal - */ -void SysTrayXLink::slotIconDataChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a invert icon change signal - */ -void SysTrayXLink::slotInvertIconChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a show number state change signal - */ -void SysTrayXLink::slotShowNumberChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a show new indicator state change signal - */ -void SysTrayXLink::slotShowNewIndicatorChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the count type change signal - */ -void SysTrayXLink::slotCountTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a startup delay change signal - */ -void SysTrayXLink::slotStartupDelayChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a number color change signal - */ -void SysTrayXLink::slotNumberColorChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a number size change signal - */ -void SysTrayXLink::slotNumberSizeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a number alignment change signal - */ -void SysTrayXLink::slotNumberAlignmentChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a number margins change signal - */ -void SysTrayXLink::slotNumberMarginsChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the new indicator type change signal - */ -void SysTrayXLink::slotNewIndicatorTypeChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle the new shade color change signal - */ -void SysTrayXLink::slotNewShadeColorChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a start application change signal - */ -void SysTrayXLink::slotStartAppChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a start application arguments change signal - */ -void SysTrayXLink::slotStartAppArgsChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a close application change signal - */ -void SysTrayXLink::slotCloseAppChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a close application arguments change signal - */ -void SysTrayXLink::slotCloseAppArgsChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a API count method change signal - */ -void SysTrayXLink::slotApiCountMethodChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - -/* - * Handle a debug state change signal - */ -void SysTrayXLink::slotDebugChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } + sendPreferences(); } diff --git a/app/SysTray-X/SysTray-X-app/systrayxlink.h b/app/SysTray-X/SysTray-X-app/systrayxlink.h index 459b69d..f27218f 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxlink.h +++ b/app/SysTray-X/SysTray-X-app/systrayxlink.h @@ -268,145 +268,15 @@ class SysTrayXLink : public QObject public slots: - /** - * @brief slotDebugChange. Handle a change in debug state. - */ - void slotDebugChange(); - /** * @brief slotPositions. Slot for handling a window positions change. */ void slotPositions( QList< QPoint > positions ); /** - * @brief slotRestoreWindowPositionsChange. Handle a change in restore window positions state. + * @brief slotPreferencesChanged */ - void slotRestoreWindowPositionsChange(); - - /** - * @brief slotMinimizeTypeChange. Slot for handling minimize type change signals. - */ - void slotMinimizeTypeChange(); - - /** - * @brief slotMinimizeIconTypeChange. Slot for handling minimize icon type change signals. - */ - void slotMinimizeIconTypeChange(); - - /** - * @brief slotStartupTypeChange. Handle a change in startup type. - */ - void slotStartupTypeChange(); - - /** - * @brief slotCloseTypeChange. Slot for handling close type change signals. - */ - void slotCloseTypeChange(); - - /** - * @brief slotDefaultIconTypeChange. Slot for handling default icon type change signals. - */ - void slotDefaultIconTypeChange(); - - /** - * @brief slotDefaultIconDataChange. Slot for handling default icon data change signals. - */ - void slotDefaultIconDataChange(); - - /** - * @brief slotHideDefaultIconChange. Slot for handling hide default icon change signals. - */ - void slotHideDefaultIconChange(); - - /** - * @brief slotIconTypeChange. Slot for handling icon type change signals. - */ - void slotIconTypeChange(); - - /** - * @brief slotIconDataChange. Slot for handling icon data change signals. - */ - void slotIconDataChange(); - - /** - * @brief slotInvertIconChange. Slot for handling invert icon change signals. - */ - void slotInvertIconChange(); - - /** - * @brief slotShowNumberChange. Handle a change in show number state. - */ - void slotShowNumberChange(); - - /** - * @brief slotShowNewIndicatorChange. Handle a change in show new indicator state. - */ - void slotShowNewIndicatorChange(); - - /** - * @brief slotCountTypeChange. Slot for handling count type change signals. - */ - void slotCountTypeChange(); - - /** - * @brief slotStartupDelayChange. Handle a change in startup delay. - */ - void slotStartupDelayChange(); - - /** - * @brief slotNumberColorChange. Handle a change in number color. - */ - void slotNumberColorChange(); - - /** - * @brief slotNumberSizeChange. Handle a change in number size. - */ - void slotNumberSizeChange(); - - /** - * @brief slotNumberAlignmentChange. Handle a change in number alignment. - */ - void slotNumberAlignmentChange(); - - /** - * @brief slotNumberMarginsChange. Handle a change in number margins. - */ - void slotNumberMarginsChange(); - - /** - * @brief slotNewIndicatorTypeChange. Slot for handling new indicator type change signals. - */ - void slotNewIndicatorTypeChange(); - - /** - * @brief slotNewShadeColorChange. Handle a change in new shade color. - */ - void slotNewShadeColorChange(); - - /** - * @brief slotStartAppChange. Slot for handling start application change signals. - */ - void slotStartAppChange(); - - /** - * @brief slotStartAppArgsChange. Slot for handling start application arguments change signals. - */ - void slotStartAppArgsChange(); - - /** - * @brief slotCloseAppChange. Slot for handling close application change signals. - */ - void slotCloseAppChange(); - - /** - * @brief slotCloseAppArgsChange. Slot for handling close application arguments change signals. - */ - void slotCloseAppArgsChange(); - - /** - * @brief slotApiCountMethodChange. Slot for handling the API count method change signals. - */ - void slotApiCountMethodChange(); + void slotPreferencesChanged(); private slots: diff --git a/webext/_locales/de/messages.json b/webext/_locales/de/messages.json index 6897555..6c628e1 100644 --- a/webext/_locales/de/messages.json +++ b/webext/_locales/de/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Tastatürkürzel", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Debug", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Tastatürkürzel", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Tastenkombination Einblenden / Ausblenden: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Löschen", + "description": "Clear" + }, + "debug": { "message": "Debug", "description": "Title for Debug options" diff --git a/webext/_locales/el/messages.json b/webext/_locales/el/messages.json index 9070200..7879664 100644 --- a/webext/_locales/el/messages.json +++ b/webext/_locales/el/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Συντομεύσεις", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Αποσφαλμάτωση", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Συντομεύσεις", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Συντόμευση Εμφάνιση / Απόκρυψη: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Αφαιρώ", + "description": "Clear" + }, + "debug": { "message": "Αποσφαλμάτωση", "description": "Title for Debug options" diff --git a/webext/_locales/en-US/messages.json b/webext/_locales/en-US/messages.json index dcf9483..f4621ec 100644 --- a/webext/_locales/en-US/messages.json +++ b/webext/_locales/en-US/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Shortcuts", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Debug", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Shortcuts", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Shortcut Show / Hide: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Clear", + "description": "Clear" + }, + "debug": { "message": "Debug", "description": "Title for Debug options" diff --git a/webext/_locales/it/messages.json b/webext/_locales/it/messages.json index 0ded23c..15cab54 100644 --- a/webext/_locales/it/messages.json +++ b/webext/_locales/it/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Scorciatoie", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Debug", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Scorciatoie", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Scorciatoia Mostra / Nascondi: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Rimuovi", + "description": "Clear" + }, + "debug": { "message": "Debug", "description": "Title for Debug options" diff --git a/webext/_locales/nl/messages.json b/webext/_locales/nl/messages.json index 483251e..4af130b 100644 --- a/webext/_locales/nl/messages.json +++ b/webext/_locales/nl/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Snelkoppelingen", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Debug", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Snelkoppelingen", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Snelkoppeling Tonen / Verbergen: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Verwijderen", + "description": "Clear" + }, + "debug": { "message": "Debug", "description": "Title for Debug options" diff --git a/webext/_locales/pt-BR/messages.json b/webext/_locales/pt-BR/messages.json index b1d5d8f..357f23c 100644 --- a/webext/_locales/pt-BR/messages.json +++ b/webext/_locales/pt-BR/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Atalhos", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Depuração", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Atalhos", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Atalho Mostrar / Ocultar: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Remover", + "description": "Clear" + }, + "debug": { "message": "Depuração", "description": "Title for Debug options" diff --git a/webext/_locales/ru/messages.json b/webext/_locales/ru/messages.json index 8df3ec4..57f0e5a 100644 --- a/webext/_locales/ru/messages.json +++ b/webext/_locales/ru/messages.json @@ -49,6 +49,11 @@ "description": "Tab for Mail options" }, + "tab_shortcuts": { + "message": "Сочетания", + "description": "Tab for Shortcuts options" + }, + "tab_debug": { "message": "Отладка", "description": "Tab for Debug options" @@ -394,6 +399,21 @@ "description": "Title for Accounts options" }, + "shortcuts": { + "message": "Сочетания", + "description": "Title for Shortcuts options" + }, + + "shortcuts_showhide_shortcut": { + "message": "Ярлык Показать / Скрыть: ", + "description": "Label for the show / hide shortcut edit box" + }, + + "shortcuts_clear_button": { + "message": "Удалять", + "description": "Clear" + }, + "debug": { "message": "Отладка", "description": "Title for Debug options" diff --git a/webext/background.js b/webext/background.js index 8487927..6498edc 100644 --- a/webext/background.js +++ b/webext/background.js @@ -632,6 +632,7 @@ SysTrayX.Messaging = { "startAppArgs", "closeApp", "closeAppArgs", + "showHideShortcut", ]) .then( SysTrayX.Messaging.sendPreferencesStorage, @@ -674,6 +675,7 @@ SysTrayX.Messaging = { const startAppArgs = result.startAppArgs || ""; const closeApp = result.closeApp || ""; const closeAppArgs = result.closeAppArgs || ""; + const showHideShortcut = result.showHideShortcut || ""; // Send it to the app SysTrayX.Link.postSysTrayXMessage({ @@ -707,6 +709,7 @@ SysTrayX.Messaging = { startAppArgs, closeApp, closeAppArgs, + showHideShortcut, }, }); }, @@ -965,6 +968,13 @@ SysTrayX.Link = { }); } + const showHideShortcut = response["preferences"].showHideShortcut; + if (showHideShortcut !== undefined) { + await storage().set({ + showHideShortcut: showHideShortcut, + }); + } + const debug = response["preferences"].debug; if (debug) { await storage().set({ @@ -1023,7 +1033,7 @@ SysTrayX.Window = { async function start() { // Setup the link first SysTrayX.Link.init(); - + // Force close a window using a toolbar button browser.browserAction.disable(); diff --git a/webext/options.html b/webext/options.html index 7411397..7ea6912 100644 --- a/webext/options.html +++ b/webext/options.html @@ -32,6 +32,7 @@ + @@ -668,6 +669,30 @@ +
+
+

__MSG_shortcuts__

+ +
+
+ + + +
+
+ +
+ + +
+

__MSG_debug__

diff --git a/webext/options.js b/webext/options.js index 93bf747..33be871 100644 --- a/webext/options.js +++ b/webext/options.js @@ -322,6 +322,17 @@ SysTrayX.SaveOptions = { closeAppArgs: closeAppArgs, }); + // + // Save shortcuts + // + const showHideShortcutInput = document.getElementById("showHideShortcutInput"); + const showHideShortcut = showHideShortcutInput.value; + + // Store show / hide shortcut + await storage().set({ + showHideShortcut: showHideShortcut, + }); + // Mark add-on preferences changed await storage().set({ addonprefchanged: true, @@ -584,26 +595,36 @@ SysTrayX.RestoreOptions = { SysTrayX.RestoreOptions.onStartAppError ); - await storage() - .get("startAppArgs") - .then( - SysTrayX.RestoreOptions.setStartAppArgs, - SysTrayX.RestoreOptions.onStartAppArgsError - ); + await storage() + .get("startAppArgs") + .then( + SysTrayX.RestoreOptions.setStartAppArgs, + SysTrayX.RestoreOptions.onStartAppArgsError + ); - await storage() - .get("closeApp") - .then( - SysTrayX.RestoreOptions.setCloseApp, - SysTrayX.RestoreOptions.onCloseAppError - ); + await storage() + .get("closeApp") + .then( + SysTrayX.RestoreOptions.setCloseApp, + SysTrayX.RestoreOptions.onCloseAppError + ); - await storage() - .get("closeAppArgs") + await storage() + .get("closeAppArgs") + .then( + SysTrayX.RestoreOptions.setCloseAppArgs, + SysTrayX.RestoreOptions.onCloseAppArgsError + ); + + // + // Restore show / hide shortcut + // + await storage() + .get("showHideShortcut") .then( - SysTrayX.RestoreOptions.setCloseAppArgs, - SysTrayX.RestoreOptions.onCloseAppArgsError - ); + SysTrayX.RestoreOptions.setShowHideShortcut, + SysTrayX.RestoreOptions.onShowHideShortcutError + ); }, // @@ -1118,6 +1139,20 @@ SysTrayX.RestoreOptions = { console.log(`CloseAppArgs Error: ${error}`); }, + // + // Restore show / hide shortcut + // + setShowHideShortcut: function (result) { + const showHideShortcut = result.showHideShortcut || ""; + + const showHideShortcutInput = document.getElementById("showHideShortcutInput"); + showHideShortcutInput.value = showHideShortcut; + }, + + onShowHideShortcutError: function (error) { + console.log(`ShowHideShortcut Error: ${error}`); + }, + // // Restore filters callbacks // @@ -1367,6 +1402,11 @@ SysTrayX.StorageChanged = { closeAppArgs: changes[item].newValue, }); } + if (item === "showHideShortcut") { + SysTrayX.RestoreOptions.setShowHideShortcut({ + showHideShortcut: changes[item].newValue, + }); + } if (item === "filters") { SysTrayX.RestoreOptions.setFilters({