From 77d49caee38238ba3dae2a4f99475de59c5fadd8 Mon Sep 17 00:00:00 2001 From: Ximi1970 Date: Tue, 7 Apr 2020 17:19:02 +0200 Subject: [PATCH] Add hide type option --- app/SysTray-X/preferences.cpp | 45 +++++++++++++++++----- app/SysTray-X/preferences.h | 33 ++++++++++++++++ app/SysTray-X/preferences.ui | 60 +++++++++++++++++++++++------ app/SysTray-X/preferencesdialog.cpp | 29 +++++++++++++- app/SysTray-X/preferencesdialog.h | 12 ++++++ app/SysTray-X/systrayx.cpp | 3 ++ app/SysTray-X/systrayxlink.cpp | 23 +++++++++++ app/SysTray-X/systrayxlink.h | 5 +++ app/SysTray-X/windowctrl-unix.cpp | 10 ++++- app/SysTray-X/windowctrl-unix.h | 2 +- app/SysTray-X/windowctrl-win.cpp | 2 +- app/SysTray-X/windowctrl-win.h | 2 +- app/SysTray-X/windowctrl.cpp | 13 ++++++- app/SysTray-X/windowctrl.h | 14 +++++-- webext/background.js | 10 +++++ webext/css/options.css | 7 ++++ webext/options.html | 20 ++++++++++ webext/options.js | 41 +++++++++++++++++++- 18 files changed, 299 insertions(+), 32 deletions(-) diff --git a/app/SysTray-X/preferences.cpp b/app/SysTray-X/preferences.cpp index 7557820..820e5a8 100644 --- a/app/SysTray-X/preferences.cpp +++ b/app/SysTray-X/preferences.cpp @@ -30,6 +30,7 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_show_number = true; m_number_color = "#000000"; + m_minimize_type = PREF_DEFAULT_MINIMIZE; m_hide_minimize = true; m_start_minimized = false; @@ -48,15 +49,6 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) } -/* - * Get the icon type. - */ -Preferences::IconType Preferences::getIconType() const -{ - return m_icon_type; -} - - /* * Get the icon mime. */ @@ -78,6 +70,15 @@ void Preferences::setAppPrefChanged( bool state ) } +/* + * Get the icon type. + */ +Preferences::IconType Preferences::getIconType() const +{ + return m_icon_type; +} + + /* * Set the icon type. */ @@ -192,6 +193,32 @@ void Preferences::setNumberColor( QString color ) } +/* + * Get the icon type. + */ +Preferences::MinimizeType Preferences::getMinimizeType() const +{ + return m_minimize_type; +} + + +/* + * Set the icon type. + */ +void Preferences::setMinimizeType( MinimizeType minimize_type ) +{ + if( m_minimize_type != minimize_type) + { + m_minimize_type = minimize_type; + + /* + * Tell the world the new preference + */ + emit signalMinimizeTypeChange(); + } +} + + /* * Get the hide on minimize pref. */ diff --git a/app/SysTray-X/preferences.h b/app/SysTray-X/preferences.h index c5d4539..f25dc86 100644 --- a/app/SysTray-X/preferences.h +++ b/app/SysTray-X/preferences.h @@ -21,6 +21,15 @@ class Preferences : public QObject public: + /* + * Minimize types + */ + enum MinimizeType { + PREF_DEFAULT_MINIMIZE = 0, + PREF_MINIMIZE_METHOD_1, + PREF_MINIMIZE_METHOD_2 + }; + /* * Icon types */ @@ -121,6 +130,20 @@ class Preferences : public QObject */ void setNumberColor( QString color ); + /** + * @brief getMinimizeType. Get the minimize type. + * + * @return The minimize type. + */ + MinimizeType getMinimizeType() const; + + /** + * @brief setMinimizeType. Set the minimize type. + * + * @param The minimize type. + */ + void setMinimizeType( MinimizeType icon_type ); + /** * @brief getHideOnMinimize. Get the hide on minimize state. * @@ -248,6 +271,11 @@ class Preferences : public QObject */ void signalNumberColorChange(); + /** + * @brief signalMinimizeTypeChange. Signal a minimize type change. + */ + void signalMinimizeTypeChange(); + /** * @brief signalHideOnMinimizeChange. Signal a hide on mnimize state change. */ @@ -305,6 +333,11 @@ class Preferences : public QObject */ QString m_number_color; + /** + * @brief m_minimize_type. Selected minimize type. + */ + MinimizeType m_minimize_type; + /** * @brief m_hide_minimize. Hide the minimized window. */ diff --git a/app/SysTray-X/preferences.ui b/app/SysTray-X/preferences.ui index 48b5482..057dc2d 100644 --- a/app/SysTray-X/preferences.ui +++ b/app/SysTray-X/preferences.ui @@ -7,7 +7,7 @@ 0 0 684 - 278 + 310 @@ -20,12 +20,49 @@ - + Windows - + + + + + + + Default minimize + + + true + + + minimizeTypeGroup + + + + + + + Minimize to tray, method 1 + + + minimizeTypeGroup + + + + + + + Minimize to tray, method 2 + + + minimizeTypeGroup + + + + + @@ -203,14 +240,7 @@ - - - - Display debug window - - - - + Number properties @@ -263,6 +293,13 @@ + + + + Display debug window + + + @@ -300,5 +337,6 @@ + diff --git a/app/SysTray-X/preferencesdialog.cpp b/app/SysTray-X/preferencesdialog.cpp index 1d0dbda..4e78cbf 100644 --- a/app/SysTray-X/preferencesdialog.cpp +++ b/app/SysTray-X/preferencesdialog.cpp @@ -31,7 +31,14 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi m_pref = pref; /* - * Set button Ids + * Set minimize type button Ids + */ + m_ui->minimizeTypeGroup->setId( m_ui->defaultMinimizeRadioButton, Preferences::PREF_DEFAULT_MINIMIZE); + m_ui->minimizeTypeGroup->setId( m_ui->minimizeMethod1RadioButton, Preferences::PREF_MINIMIZE_METHOD_1 ); + m_ui->minimizeTypeGroup->setId( m_ui->minimizeMethod2RadioButton, Preferences::PREF_MINIMIZE_METHOD_2 ); + + /* + * Set icon type button Ids */ m_ui->iconTypeGroup->setId( m_ui->blankRadioButton, Preferences::PREF_BLANK_ICON ); m_ui->iconTypeGroup->setId( m_ui->newMailButton, Preferences::PREF_NEWMAIL_ICON ); @@ -85,6 +92,15 @@ void PreferencesDialog::setPollInterval( int val ) } +/* + * Set the minimize type + */ +void PreferencesDialog::setMinimizeType( Preferences::MinimizeType minimize_type ) +{ + ( m_ui->minimizeTypeGroup->button( minimize_type ) )->setChecked( true ); +} + + /* * Set the hide on minimize state */ @@ -187,6 +203,7 @@ void PreferencesDialog::slotAccept() m_pref->setIconMime( m_tmp_icon_mime ); m_pref->setIconData( m_tmp_icon_data ); + m_pref->setMinimizeType( static_cast< Preferences::MinimizeType >( m_ui->minimizeTypeGroup->checkedId() ) ); m_pref->setHideOnMinimize( m_ui->hideOnMinimizeCheckBox->isChecked() ); m_pref->setStartMinimized( m_ui->startMinimizedCheckBox->isChecked() ); @@ -291,6 +308,15 @@ void PreferencesDialog::slotPollIntervalChange() } +/* + * Handle the minimize type change signal + */ +void PreferencesDialog::slotMinimizeTypeChange() +{ + setMinimizeType( m_pref->getMinimizeType() ); +} + + /* * Handle the hide on minimize change signal */ @@ -308,6 +334,7 @@ void PreferencesDialog::slotStartMinimizedChange() setStartMinimized( m_pref->getStartMinimized() ); } + /* * Handle the icon type change signal */ diff --git a/app/SysTray-X/preferencesdialog.h b/app/SysTray-X/preferencesdialog.h index 04783ca..3100ec3 100644 --- a/app/SysTray-X/preferencesdialog.h +++ b/app/SysTray-X/preferencesdialog.h @@ -62,6 +62,13 @@ class PreferencesDialog : public QDialog */ void setPollInterval( int val ); + /** + * @brief setMinimizeType. Set the minimize type. + * + * @param minimize_type The minimize type. + */ + void setMinimizeType( Preferences::MinimizeType minimize_type ); + /** * @brief setHideOnMinimize. Set the hide on minimize state. * @@ -141,6 +148,11 @@ class PreferencesDialog : public QDialog */ void slotPollIntervalChange(); + /** + * @brief slotMinimizeTypeChange. Slot for handling minimize type change signals. + */ + void slotMinimizeTypeChange(); + /** * @brief slotHideOnMinimizeChange. Slot for handling hide on minimize change signals. */ diff --git a/app/SysTray-X/systrayx.cpp b/app/SysTray-X/systrayx.cpp index d89c465..d6010b5 100644 --- a/app/SysTray-X/systrayx.cpp +++ b/app/SysTray-X/systrayx.cpp @@ -85,6 +85,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon, &SysTrayXIcon::slotShowNumberChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_tray_icon, &SysTrayXIcon::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_win_ctrl, &WindowCtrl::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_win_ctrl, &WindowCtrl::slotHideOnMinimizeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_win_ctrl, &WindowCtrl::slotStartMinimizedChange ); @@ -92,6 +93,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalIconDataChange, m_pref_dialog, &PreferencesDialog::slotIconDataChange ); connect( m_preferences, &Preferences::signalShowNumberChange, m_pref_dialog, &PreferencesDialog::slotShowNumberChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_pref_dialog, &PreferencesDialog::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_pref_dialog, &PreferencesDialog::slotHideOnMinimizeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_pref_dialog, &PreferencesDialog::slotStartMinimizedChange ); connect( m_preferences, &Preferences::signalPollStartupDelayChange, m_pref_dialog, &PreferencesDialog::slotPollStartupDelayChange ); @@ -102,6 +104,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalIconDataChange, m_link, &SysTrayXLink::slotIconDataChange ); connect( m_preferences, &Preferences::signalShowNumberChange, m_link, &SysTrayXLink::slotShowNumberChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_link, &SysTrayXLink::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_link, &SysTrayXLink::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_link, &SysTrayXLink::slotHideOnMinimizeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_link, &SysTrayXLink::slotStartMinimizedChange ); connect( m_preferences, &Preferences::signalPollStartupDelayChange, m_link, &SysTrayXLink::slotPollStartupDelayChange ); diff --git a/app/SysTray-X/systrayxlink.cpp b/app/SysTray-X/systrayxlink.cpp index c538399..4c4098c 100644 --- a/app/SysTray-X/systrayxlink.cpp +++ b/app/SysTray-X/systrayxlink.cpp @@ -383,6 +383,16 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setNumberColor( number_color ); } + if( pref.contains( "minimizeType" ) && pref[ "minimizeType" ].isString() ) + { + Preferences::MinimizeType minimize_type = static_cast< Preferences::MinimizeType >( pref[ "minimizeType" ].toString().toInt() ); + + /* + * Store the new icon type + */ + m_pref->setMinimizeType( minimize_type ); + } + if( pref.contains( "hideOnMinimize" ) && pref[ "hideOnMinimize" ].isString() ) { bool hide_minimize = pref[ "hideOnMinimize" ].toString() == "true"; @@ -447,6 +457,7 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) prefObject.insert("debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) ); prefObject.insert("pollStartupDelay", QJsonValue::fromVariant( QString::number( pref.getPollStartupDelay() ) ) ); prefObject.insert("pollInterval", QJsonValue::fromVariant( QString::number( pref.getPollInterval() ) ) ); + prefObject.insert("minimizeType", QJsonValue::fromVariant( QString::number( pref.getMinimizeType() ) ) ); prefObject.insert("hideOnMinimize", QJsonValue::fromVariant( QString( pref.getHideOnMinimize() ? "true" : "false" ) ) ); prefObject.insert("startMinimized", QJsonValue::fromVariant( QString( pref.getStartMinimized() ? "true" : "false" ) ) ); prefObject.insert("iconType", QJsonValue::fromVariant( QString::number( pref.getIconType() ) ) ); @@ -522,6 +533,18 @@ void SysTrayXLink::slotPollIntervalChange() } +/* + * Handle the minimize type change signal + */ +void SysTrayXLink::slotMinimizeTypeChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + /* * Handle a hide on minimize state change signal */ diff --git a/app/SysTray-X/systrayxlink.h b/app/SysTray-X/systrayxlink.h index c96443b..f964780 100644 --- a/app/SysTray-X/systrayxlink.h +++ b/app/SysTray-X/systrayxlink.h @@ -196,6 +196,11 @@ class SysTrayXLink : public QObject */ void slotPollIntervalChange(); + /** + * @brief slotMinimizeTypeChange. Slot for handling minimize type change signals. + */ + void slotMinimizeTypeChange(); + /** * @brief slotHideOnMinimizeChange. Handle a change in hide on minimize state. */ diff --git a/app/SysTray-X/windowctrl-unix.cpp b/app/SysTray-X/windowctrl-unix.cpp index a4ea348..40079ce 100644 --- a/app/SysTray-X/windowctrl-unix.cpp +++ b/app/SysTray-X/windowctrl-unix.cpp @@ -261,7 +261,7 @@ QList< quint64 > WindowCtrlUnix::getWinIds() /* * Minimize a window */ -void WindowCtrlUnix::minimizeWindow( quint64 window, bool hide ) +void WindowCtrlUnix::minimizeWindow( quint64 window, int hide ) { if( !isThunderbird( getPpid() ) ) { @@ -270,12 +270,18 @@ void WindowCtrlUnix::minimizeWindow( quint64 window, bool hide ) Window win = static_cast( window ); - if( hide ) + if( hide == Preferences::PREF_MINIMIZE_METHOD_1 ) { hideWindow( win, hide ); } XIconifyWindow( m_display, win, m_screen ); + + if( hide == Preferences::PREF_MINIMIZE_METHOD_2 ) + { + hideWindow( win, hide ); + } + XFlush( m_display ); } diff --git a/app/SysTray-X/windowctrl-unix.h b/app/SysTray-X/windowctrl-unix.h index 938be1c..8f983b8 100644 --- a/app/SysTray-X/windowctrl-unix.h +++ b/app/SysTray-X/windowctrl-unix.h @@ -190,7 +190,7 @@ class WindowCtrlUnix : public QObject * @param window The window. * @param hide Hide from taskbar. */ - void minimizeWindow( quint64 window, bool hide ); + void minimizeWindow( quint64 window, int hide ); /** * @brief normalizeWindow. Normalize window. diff --git a/app/SysTray-X/windowctrl-win.cpp b/app/SysTray-X/windowctrl-win.cpp index 3ac0e21..8d733df 100644 --- a/app/SysTray-X/windowctrl-win.cpp +++ b/app/SysTray-X/windowctrl-win.cpp @@ -222,7 +222,7 @@ QList< quint64 > WindowCtrlWin::getWinIds() /* * Minimize a window */ -void WindowCtrlWin::minimizeWindow( quint64 window, bool hide ) +void WindowCtrlWin::minimizeWindow( quint64 window, int hide ) { if( !isThunderbird( getPpid() ) ) { diff --git a/app/SysTray-X/windowctrl-win.h b/app/SysTray-X/windowctrl-win.h index e23fadf..90602af 100644 --- a/app/SysTray-X/windowctrl-win.h +++ b/app/SysTray-X/windowctrl-win.h @@ -131,7 +131,7 @@ class WindowCtrlWin : public QObject * @param window The window. * @param hide Hide from taskbar */ - void minimizeWindow( quint64 window, bool hide ); + void minimizeWindow( quint64 window, int hide ); /** * @brief normalizeWindow. Normalize window. diff --git a/app/SysTray-X/windowctrl.cpp b/app/SysTray-X/windowctrl.cpp index b095741..3de2801 100644 --- a/app/SysTray-X/windowctrl.cpp +++ b/app/SysTray-X/windowctrl.cpp @@ -35,6 +35,7 @@ WindowCtrl::WindowCtrl( Preferences* pref, QObject *parent ) /* * Initialize */ + m_minimize_type = m_pref->getMinimizeType(); m_hide_minimize = m_pref->getHideOnMinimize(); /* @@ -110,6 +111,15 @@ void WindowCtrl::slotWindowTitle( QString title ) } +/* + * Handle change in minimize type change + */ +void WindowCtrl::slotMinimizeTypeChange() +{ + m_minimize_type = m_pref->getMinimizeType(); +} + + /* * Handle change in hide on minimize state */ @@ -162,7 +172,8 @@ void WindowCtrl::slotShowHide() else { m_state = "minimized"; - minimizeWindow( getWinId(), m_hide_minimize ); + minimizeWindow( getWinId(), m_minimize_type ); +// minimizeWindow( getWinId(), m_hide_minimize ); } } diff --git a/app/SysTray-X/windowctrl.h b/app/SysTray-X/windowctrl.h index 506a4e7..441db66 100644 --- a/app/SysTray-X/windowctrl.h +++ b/app/SysTray-X/windowctrl.h @@ -64,17 +64,18 @@ class WindowCtrl : public QObject */ void slotWindowTitle( QString title ); + /** + * @brief slotMinimizeTypeChange. Handle the minimize type signal. + */ + void slotMinimizeTypeChange(); + /** * @brief slotHideOnMinimizeChange. Handle the hide on minimize signal. - * - * @param state The state */ void slotHideOnMinimizeChange(); /** * @brief slotStartMinimizedChange. Handle the start minimized signal. - * - * @param state The state */ void slotStartMinimizedChange(); @@ -122,6 +123,11 @@ class WindowCtrl : public QObject */ QString m_window_title; + /** + * @brief m_minimize_type. Minimize type. + */ + int m_minimize_type; + /** * @brief m_hide_minimize. State of hide on minimize. */ diff --git a/webext/background.js b/webext/background.js index 93b0df8..526bd06 100644 --- a/webext/background.js +++ b/webext/background.js @@ -154,6 +154,7 @@ SysTrayX.Messaging = { "debug", "pollStartupDelay", "pollInterval", + "minimizeType", "hideOnMinimize", "startMinimized", "iconType", @@ -169,6 +170,7 @@ SysTrayX.Messaging = { const debug = result.debug || "false"; const pollStartupDelay = result.pollStartupDelay || "30"; const pollInterval = result.pollInterval || "30"; + const minimizeType = result.minimizeType || "0"; const hideOnMinimize = result.hideOnMinimize || "true"; const startMinimized = result.startMinimized || "false"; const iconType = result.iconType || "0"; @@ -183,6 +185,7 @@ SysTrayX.Messaging = { debug: debug, pollStartupDelay: pollStartupDelay, pollInterval: pollInterval, + minimizeType: minimizeType, hideOnMinimize: hideOnMinimize, startMinimized: startMinimized, iconType: iconType, @@ -317,6 +320,13 @@ SysTrayX.Link = { }); } + const minimizeType = response["preferences"].minimizeType; + if (minimizeType) { + browser.storage.sync.set({ + minimizeType: minimizeType, + }); + } + const hideOnMinimize = response["preferences"].hideOnMinimize; if (hideOnMinimize) { browser.storage.sync.set({ diff --git a/webext/css/options.css b/webext/css/options.css index 205d494..ce55cdf 100644 --- a/webext/css/options.css +++ b/webext/css/options.css @@ -60,6 +60,13 @@ body { color: dodgerblue; } +#minimizeselect { + border-style: solid; + border-width: 1px; + margin: 10px 10px 10px 10px; + padding: 10px 10px 10px 10px; +} + #iconselect { border-style: solid; border-width: 1px; diff --git a/webext/options.html b/webext/options.html index ca84ff2..6a91d3b 100644 --- a/webext/options.html +++ b/webext/options.html @@ -32,6 +32,26 @@

Windows

+ + + + + + + + + + +
+ Default minimize +
+ Minimize to + tray, method 1 +
+ Minimize to + tray, method 2 +
+ Minimizing window hides to tray
Start diff --git a/webext/options.js b/webext/options.js index 1038f3f..e81090a 100644 --- a/webext/options.js +++ b/webext/options.js @@ -69,6 +69,17 @@ SysTrayX.SaveOptions = { debug: `${debug}`, }); + // + // Save minimize preferences + // + const minimizeType = document.querySelector('input[name="minimizeType"]:checked') + .value; + + // Store minimize preferences + browser.storage.sync.set({ + minimizeType: minimizeType, + }); + // // Save hide on minimize state // @@ -142,6 +153,15 @@ SysTrayX.RestoreOptions = { SysTrayX.RestoreOptions.onDebugError ); + // + // Restore minimize type + // + const getMinimizeType = browser.storage.sync.get("minimizeType"); + getMinimizeType.then( + SysTrayX.RestoreOptions.setMinimizeType, + SysTrayX.RestoreOptions.onMinimizeTypeError + ); + // // Restore hide on minimize // @@ -229,6 +249,19 @@ SysTrayX.RestoreOptions = { console.log(`Debug Error: ${error}`); }, + // + // Restore minimize type callbacks + // + setMinimizeType: function (result) { + const minimizeType = result.minimizeType || "0"; + const radioButton = document.querySelector(`input[name="minimizeType"][value="${minimizeType}"]`); + radioButton.checked = true; + }, + + onMinimizeTypeError: function (error) { + console.log(`Minimize type Error: ${error}`); + }, + // // Restore hide on minimize callbacks // @@ -262,7 +295,7 @@ SysTrayX.RestoreOptions = { // setIconType: function (result) { const iconType = result.iconType || "0"; - const radioButton = document.querySelector(`[value="${iconType}"]`); + const radioButton = document.querySelector(`input[name="iconType"][value="${iconType}"]`); radioButton.checked = true; }, @@ -409,6 +442,11 @@ SysTrayX.StorageChanged = { numberColor: changes[item].newValue, }); } + if (item === "minimizeType") { + SysTrayX.RestoreOptions.setMinimizeType({ + minimizeType: changes[item].newValue, + }); + } if (item === "hideOnMinimize") { SysTrayX.RestoreOptions.setHideOnMinimize({ hideOnMinimize: changes[item].newValue, @@ -445,6 +483,7 @@ SysTrayX.StorageChanged = { // document.getElementById("debugselect").className = "active"; document.getElementById("iconselect").className = "active"; + document.getElementById("minimizeselect").className = "active"; }, };