diff --git a/app/SysTray-X/preferences.cpp b/app/SysTray-X/preferences.cpp index 738073e..43f3a73 100644 --- a/app/SysTray-X/preferences.cpp +++ b/app/SysTray-X/preferences.cpp @@ -52,7 +52,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_start_minimized = false; m_minimize_on_close = true; - m_debug = false; +// m_debug = false; + m_debug = true; m_version_major = QLatin1String( APP_VERSION_MAJOR ); m_version_minor = QLatin1String( APP_VERSION_MINOR ); diff --git a/app/SysTray-X/systrayx.cpp b/app/SysTray-X/systrayx.cpp index 843efd7..ea5822f 100644 --- a/app/SysTray-X/systrayx.cpp +++ b/app/SysTray-X/systrayx.cpp @@ -33,7 +33,9 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) * Initialize */ m_tray_icon = nullptr; - m_tray_icon2 = nullptr; + m_kde_tray_icon = nullptr; + + m_tray_icon_menu = nullptr; /* * Setup preferences storage @@ -67,13 +69,6 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) */ m_pref_dialog = new PreferencesDialog( m_link, m_preferences ); - /* - * Setup tray icon - */ - createMenu(); -// showTrayIcon(); - showTrayIconKDE(); - /* * Setup debug window */ @@ -86,9 +81,6 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) * Connect debug link signals */ connect( m_link, &SysTrayXLink::signalUnreadMail, m_debug, &DebugWidget::slotUnreadMail ); -// connect( m_link, &SysTrayXLink::signalUnreadMail, this, &SysTrayX::slotUnreadMail ); -// connect( m_win_ctrl, &WindowCtrl::signalShow, this, &SysTrayX::slotShow ); -// connect( m_win_ctrl, &WindowCtrl::signalHide, this, &SysTrayX::slotHide ); connect( this, &SysTrayX::signalConsole, m_debug, &DebugWidget::slotConsole ); connect( m_preferences, &Preferences::signalConsole, m_debug, &DebugWidget::slotConsole ); @@ -100,6 +92,9 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_debug, &DebugWidget::signalTest2ButtonClicked, m_win_ctrl, &WindowCtrl::slotWindowTest2 ); connect( m_debug, &DebugWidget::signalTest3ButtonClicked, m_win_ctrl, &WindowCtrl::slotWindowTest3 ); + connect( m_win_ctrl, &WindowCtrl::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObject ); + connect( this, &SysTrayX::signalConsole, m_debug, &DebugWidget::slotConsole ); + /* * Connect preferences signals */ @@ -134,6 +129,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_link, &SysTrayXLink::slotMinimizeOnCloseChange ); connect( m_preferences, &Preferences::signalDebugChange, m_link, &SysTrayXLink::slotDebugChange ); + connect( m_preferences, &Preferences::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObjectPref ); + connect( m_preferences, &Preferences::signalDebugChange, m_debug, &DebugWidget::slotDebugChange ); /* @@ -141,6 +138,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) */ connect( m_link, &SysTrayXLink::signalAddOnShutdown, this, &SysTrayX::slotAddOnShutdown ); connect( m_link, &SysTrayXLink::signalWindowState, m_win_ctrl, &WindowCtrl::slotWindowState ); + connect( m_link, &SysTrayXLink::signalKdeIntegration, this, &SysTrayX::slotSelectIconObject ); connect( m_link, &SysTrayXLink::signalTitle, m_win_ctrl, &WindowCtrl::slotWindowTitle ); connect( m_link, &SysTrayXLink::signalVersion, this, &SysTrayX::slotVersion ); @@ -204,13 +202,31 @@ void SysTrayX::createMenu() } +/* + * Destroy the icon menu + */ +void SysTrayX::destroyMenu() +{ + if( m_tray_icon_menu ) + { + delete m_tray_icon_menu; + m_tray_icon_menu = nullptr; + } +} + + /* * Show / create tray icon */ void SysTrayX::showTrayIcon() { if( !m_tray_icon ) - { + { + /* + * Setup tray menu + */ + createMenu(); + /* * Create system tray icon */ @@ -286,6 +302,11 @@ void SysTrayX::hideTrayIcon() */ delete m_tray_icon; m_tray_icon = nullptr; + + /* + * Destroy the mennu + */ + destroyMenu(); } } @@ -293,46 +314,51 @@ void SysTrayX::hideTrayIcon() /* * Show / create tray icon */ -void SysTrayX::showTrayIconKDE() +void SysTrayX::showKdeTrayIcon() { - if( !m_tray_icon2 ) + if( !m_kde_tray_icon ) { + /* + * Setup tray menu + */ + createMenu(); + /* * Create system tray icon */ - m_tray_icon2 = new SysTrayXStatusNotifier( m_link, m_preferences ); - m_tray_icon2->setStandardActionsEnabled( false ); - m_tray_icon2->setContextMenu( m_tray_icon_menu ); + m_kde_tray_icon = new SysTrayXStatusNotifier( m_link, m_preferences ); + m_kde_tray_icon->setStandardActionsEnabled( false ); + m_kde_tray_icon->setContextMenu( m_tray_icon_menu ); /* * Set default icon */ - m_tray_icon2->setDefaultIconMime( m_preferences->getDefaultIconMime() ); - m_tray_icon2->setDefaultIconData( m_preferences->getDefaultIconData() ); - m_tray_icon2->setDefaultIconType( m_preferences->getDefaultIconType() ); + m_kde_tray_icon->setDefaultIconMime( m_preferences->getDefaultIconMime() ); + m_kde_tray_icon->setDefaultIconData( m_preferences->getDefaultIconData() ); + m_kde_tray_icon->setDefaultIconType( m_preferences->getDefaultIconType() ); /* * Set icon */ - m_tray_icon2->setIconMime( m_preferences->getIconMime() ); - m_tray_icon2->setIconData( m_preferences->getIconData() ); - m_tray_icon2->setIconType( m_preferences->getIconType() ); + m_kde_tray_icon->setIconMime( m_preferences->getIconMime() ); + m_kde_tray_icon->setIconData( m_preferences->getIconData() ); + m_kde_tray_icon->setIconType( m_preferences->getIconType() ); /* * Connect the world */ - connect( m_tray_icon2, &SysTrayXStatusNotifier::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide ); + connect( m_kde_tray_icon, &SysTrayXStatusNotifier::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide ); - connect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotDefaultIconTypeChange ); - connect( m_preferences, &Preferences::signalDefaultIconDataChange, m_tray_icon2, &SysTrayXStatusNotifier::slotDefaultIconDataChange ); - connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_tray_icon2, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); - connect( m_preferences, &Preferences::signalIconTypeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotIconTypeChange ); - connect( m_preferences, &Preferences::signalIconDataChange, m_tray_icon2, &SysTrayXStatusNotifier::slotIconDataChange ); - connect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon2, &SysTrayXStatusNotifier::slotShowNumberChange ); - connect( m_preferences, &Preferences::signalNumberColorChange, m_tray_icon2, &SysTrayXStatusNotifier::slotNumberColorChange ); - connect( m_preferences, &Preferences::signalNumberSizeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotNumberSizeChange ); + connect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotDefaultIconTypeChange ); + connect( m_preferences, &Preferences::signalDefaultIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotDefaultIconDataChange ); + connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); + connect( m_preferences, &Preferences::signalIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconTypeChange ); + connect( m_preferences, &Preferences::signalIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconDataChange ); + connect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); + connect( m_preferences, &Preferences::signalNumberColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalNumberSizeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberSizeChange ); - connect( m_link, &SysTrayXLink::signalUnreadMail, m_tray_icon2, &SysTrayXStatusNotifier::slotSetUnreadMail ); + connect( m_link, &SysTrayXLink::signalUnreadMail, m_kde_tray_icon, &SysTrayXStatusNotifier::slotSetUnreadMail ); } } @@ -340,73 +366,72 @@ void SysTrayX::showTrayIconKDE() /* * Hide / remove tray icon */ -void SysTrayX::hideTrayIconKDE() +void SysTrayX::hideKdeTrayIcon() { - if( m_tray_icon2 ) + if( m_kde_tray_icon ) { /* * Disconnect all signals */ - disconnect( m_tray_icon2, &SysTrayXStatusNotifier::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide ); + disconnect( m_kde_tray_icon, &SysTrayXStatusNotifier::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide ); - disconnect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotDefaultIconTypeChange ); - disconnect( m_preferences, &Preferences::signalDefaultIconDataChange, m_tray_icon2, &SysTrayXStatusNotifier::slotDefaultIconDataChange ); - disconnect( m_preferences, &Preferences::signalHideDefaultIconChange, m_tray_icon2, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); - disconnect( m_preferences, &Preferences::signalIconTypeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotIconTypeChange ); - disconnect( m_preferences, &Preferences::signalIconDataChange, m_tray_icon2, &SysTrayXStatusNotifier::slotIconDataChange ); - disconnect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon2, &SysTrayXStatusNotifier::slotShowNumberChange ); - disconnect( m_preferences, &Preferences::signalNumberColorChange, m_tray_icon2, &SysTrayXStatusNotifier::slotNumberColorChange ); - disconnect( m_preferences, &Preferences::signalNumberSizeChange, m_tray_icon2, &SysTrayXStatusNotifier::slotNumberSizeChange ); + disconnect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotDefaultIconTypeChange ); + disconnect( m_preferences, &Preferences::signalDefaultIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotDefaultIconDataChange ); + disconnect( m_preferences, &Preferences::signalHideDefaultIconChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); + disconnect( m_preferences, &Preferences::signalIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconTypeChange ); + disconnect( m_preferences, &Preferences::signalIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconDataChange ); + disconnect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); + disconnect( m_preferences, &Preferences::signalNumberColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberColorChange ); + disconnect( m_preferences, &Preferences::signalNumberSizeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberSizeChange ); - disconnect( m_link, &SysTrayXLink::signalUnreadMail, m_tray_icon2, &SysTrayXStatusNotifier::slotSetUnreadMail ); + disconnect( m_link, &SysTrayXLink::signalUnreadMail, m_kde_tray_icon, &SysTrayXStatusNotifier::slotSetUnreadMail ); /* * Remove the notifier icon */ - delete m_tray_icon2; - m_tray_icon2 = nullptr; + delete m_kde_tray_icon; + m_kde_tray_icon = nullptr; + + /* + * Destroy the mennu + */ + m_tray_icon_menu = nullptr; + //destroyMenu(); } } /* - * Handle icon show signal + * Select the prefered icon */ -void SysTrayX::slotShow() +void SysTrayX::slotSelectIconObjectPref() { - showTrayIcon(); + slotSelectIconObject( m_preferences->getHideDefaultIcon() ); } - -/* - * Handle icon hide signal - */ -void SysTrayX::slotHide() +void SysTrayX::slotSelectIconObject( bool state ) { - hideTrayIcon(); -} - - -/* - * Hndle the unread mail signal - */ -void SysTrayX::slotUnreadMail( int unread_mail ) -{ - if( m_preferences->getDefaultIconType() == Preferences::PREF_DEFAULT_ICON_HIDE ) + if( state ) { - if( unread_mail > 0 ) - { - showTrayIcon(); - } - else - { - hideTrayIcon(); - } + // Use the KDE icon object + emit signalConsole("Enable KDE icon"); + + // Remove the Qt tray icon + hideTrayIcon(); + + // Setup KDE tray icon + showKdeTrayIcon(); } else { - showTrayIcon(); + // Use default Qt system tray icon + emit signalConsole("Enable Qt icon"); + // Remove KDE trsy icon + hideKdeTrayIcon(); + + // Setup the Qt tray icon + showTrayIcon(); } } @@ -501,9 +526,9 @@ void SysTrayX::slotVersion( QString version ) QSystemTrayIcon::Warning ); } - if( m_tray_icon2 ) + if( m_kde_tray_icon ) { - m_tray_icon2->showMessage("SysTray-X Warning", "Version mismatch addon and app", ":/files/icons/dialog-warning.png" ); + m_kde_tray_icon->showMessage("SysTray-X Warning", "Version mismatch addon and app", ":/files/icons/dialog-warning.png" ); } } } diff --git a/app/SysTray-X/systrayx.h b/app/SysTray-X/systrayx.h index 10ccf30..4193f6a 100644 --- a/app/SysTray-X/systrayx.h +++ b/app/SysTray-X/systrayx.h @@ -59,6 +59,11 @@ class SysTrayX : public QObject */ void createMenu(); + /** + * @brief destroyMenu. Destroy the menu. + */ + void destroyMenu(); + /** * @brief showTrayIcon. Create and show the icon. */ @@ -70,14 +75,14 @@ class SysTrayX : public QObject void hideTrayIcon(); /** - * @brief showTrayIconKDE. Create and show the KDE icon. + * @brief showKdeTrayIcon. Create and show the KDE icon. */ - void showTrayIconKDE(); + void showKdeTrayIcon(); /** - * @brief hideTrayIcon. Hide and destroy the KDE icon. + * @brief hideKdeTrayIcon. Hide and destroy the KDE icon. */ - void hideTrayIconKDE(); + void hideKdeTrayIcon(); signals: @@ -102,15 +107,13 @@ class SysTrayX : public QObject private slots: - void slotShow(); - void slotHide(); - /** - * @brief slotUnreadMail. Handle unread mail signal. + * @brief slotSelectIconObject. Select the prefered icon. * - * @param unread_mail Number of unread mail. + * @param state The state. */ - void slotUnreadMail( int unread_mail ); + void slotSelectIconObjectPref(); + void slotSelectIconObject( bool state ); /** * @brief slotAddOnShutdown. Handle shutdown request from the add-on. @@ -165,9 +168,9 @@ class SysTrayX : public QObject SysTrayXIcon* m_tray_icon; /** - * @brief m_tray_icon2. Pointer to the KDE system tray icon. + * @brief m_kde_tray_icon. Pointer to the KDE system tray icon. */ - SysTrayXStatusNotifier* m_tray_icon2; + SysTrayXStatusNotifier* m_kde_tray_icon; /** * @brief m_tray_icon_menu. Pointer to the tray icon menu. diff --git a/app/SysTray-X/systrayxlink.cpp b/app/SysTray-X/systrayxlink.cpp index 4d2e012..370aaa7 100644 --- a/app/SysTray-X/systrayxlink.cpp +++ b/app/SysTray-X/systrayxlink.cpp @@ -262,6 +262,13 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message ) { QJsonObject jsonObject = jsonResponse.object(); + /* + QStringList list = jsonObject.keys(); + for( int i = 0 ; i < list.length() ; ++i ) + { + emit signalConsole( QString("Message %1").arg(list.at(i)) ); + } +*/ if( jsonObject.contains( "unreadMail" ) && jsonObject[ "unreadMail" ].isDouble() ) { int unreadMail = jsonObject[ "unreadMail" ].toInt(); @@ -331,6 +338,18 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message ) emit signalWindowState( window_state ); } + if( jsonObject.contains( "hideDefaultIcon" ) && jsonObject[ "hideDefaultIcon" ].isBool() ) + { + bool hide_default_icon = jsonObject[ "hideDefaultIcon" ].toBool(); + + emit signalConsole(QString("hideDefaultIcon %1").arg(hide_default_icon)); + + /* + * Signal the KDE integration or hide default icon + */ + emit signalKdeIntegration( hide_default_icon ); + } + if( jsonObject.contains( "platformInfo" ) && jsonObject[ "platformInfo" ].isObject() ) { DecodePlatform( jsonObject[ "platformInfo" ].toObject() ); @@ -343,6 +362,8 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message ) if( jsonObject.contains( "preferences" ) && jsonObject[ "preferences" ].isObject() ) { + emit signalConsole( QString("preferences") ); + DecodePreferences( jsonObject[ "preferences" ].toObject() ); } } @@ -481,6 +502,8 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) { bool hide_default_icon = pref[ "hideDefaultIcon" ].toString() == "true"; + emit signalConsole(QString("hideDefaultIcon %1").arg(hide_default_icon)); + /* * Store the new start minimized state */ diff --git a/app/SysTray-X/systrayxlink.h b/app/SysTray-X/systrayxlink.h index 274c406..b05cd67 100644 --- a/app/SysTray-X/systrayxlink.h +++ b/app/SysTray-X/systrayxlink.h @@ -181,6 +181,13 @@ class SysTrayXLink : public QObject */ void signalWindowState( int state ); + /** + * @brief signalKdeIntegration. Signal KDE integration (and use the KStatusNotifierItem icon) + * + * @param state The prefered state + */ + void signalKdeIntegration( bool state ); + /** * @brief signalUnreadMail. Signal numder of unread mails. * diff --git a/app/SysTray-X/windowctrl.cpp b/app/SysTray-X/windowctrl.cpp index cfc3b18..0a57c09 100644 --- a/app/SysTray-X/windowctrl.cpp +++ b/app/SysTray-X/windowctrl.cpp @@ -68,6 +68,8 @@ void WindowCtrl::slotWindowTest1() // Do something. + signalHideDefaultIconChange( true ); + // emit signalShow(); // emit signalConsole( QString( "Found Ppid: %1" ).arg( getPpid() ) ); @@ -91,6 +93,8 @@ void WindowCtrl::slotWindowTest2() // Do something. + signalHideDefaultIconChange( false ); + // emit signalHide(); // hideWindow( getWinId(), true ); diff --git a/app/SysTray-X/windowctrl.h b/app/SysTray-X/windowctrl.h index c74f4f8..dc531eb 100644 --- a/app/SysTray-X/windowctrl.h +++ b/app/SysTray-X/windowctrl.h @@ -49,8 +49,10 @@ class WindowCtrl : public QObject signals: - void signalShow(); - void signalHide(); +// void signalShow(); +// void signalHide(); + + void signalHideDefaultIconChange(bool hide ); public slots: diff --git a/webext/background.js b/webext/background.js index b35d339..c8d3c33 100644 --- a/webext/background.js +++ b/webext/background.js @@ -3,6 +3,8 @@ var SysTrayX = { startupState: undefined, + hideDefaultIcon: false, + platformInfo: undefined, browserInfo: undefined, @@ -31,6 +33,9 @@ SysTrayX.Messaging = { // Send version to app SysTrayX.Messaging.sendVersion(); + // Send hide default icon preference + SysTrayX.Messaging.sendHideDefaultIcon(); + // Send preferences to app SysTrayX.Messaging.sendPreferences(); @@ -137,6 +142,14 @@ SysTrayX.Messaging = { SysTrayX.Link.postSysTrayXMessage({ version: SysTrayX.version }); }, + sendHideDefaultIcon: function () { + console.debug("HideIcon:" + SysTrayX.hideDefaultIcon); + + SysTrayX.Link.postSysTrayXMessage({ + hideDefaultIcon: SysTrayX.hideDefaultIcon, + }); + }, + sendPreferences: function () { const getter = browser.storage.sync.get([ "debug", @@ -401,6 +414,10 @@ async function start() { ); } + // Hide the default icon + const hideDefaultIcon = await getHideDefaultIcon(); + SysTrayX.hideDefaultIcon = hideDefaultIcon; + // Set platform SysTrayX.platformInfo = await browser.runtime .getPlatformInfo() diff --git a/webext/js/defaults.js b/webext/js/defaults.js index 0337b1e..c903605 100644 --- a/webext/js/defaults.js +++ b/webext/js/defaults.js @@ -146,6 +146,26 @@ async function getMinimizeOnClose() { ); } +// +// Get KDE integration, default icon hide +// +async function getHideDefaultIcon() { + function getHideDefaultIconPref(result) { + const hideDefaultIcon = result.hideDefaultIcon || "false"; + return hideDefaultIcon === "true"; + } + + function onHideDefaultIconPrefError() { + return false; + } + + const getState = browser.storage.sync.get("hideDefaultIcon"); + return await getState.then( + getHideDefaultIconPref, + onHideDefaultIconPrefError + ); +} + // Check if the filters are for existing accounts function checkAccountFilters(filters) { let filtersChanged = false;