mirror of
https://github.com/Ximi1970/systray-x.git
synced 2025-10-26 00:36:07 +02:00
Add new message menu item
This commit is contained in:
Binary file not shown.
@@ -528,27 +528,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Anzeigen/Verbergen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Neue Nachricht...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Standardkonto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&Über</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Beenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Schließen</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -528,27 +528,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Εμφάνιση/Απόκρυψη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Νέο μήνυμα...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Προεπιλεγμένος λογαριασμός</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Προτιμήσεις</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&Σχετικά</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Έξοδος</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Κλείσιμο</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -15,7 +15,7 @@
|
||||
<message>
|
||||
<location filename="../aboutdialog.ui" line="26"/>
|
||||
<source><a href="https://github.com/Ximi1970/systray-x">SysTray-X</a> Companion App by Ximi1970</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation><a href="https://github.com/Ximi1970/systray-x">SysTray-X</a> Companion App by Ximi1970</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../aboutdialog.ui" line="43"/>
|
||||
@@ -326,27 +326,27 @@
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="137"/>
|
||||
<source>Position</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Position</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="145"/>
|
||||
<source>Correct window positions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Correct window positions</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="154"/>
|
||||
<source>No titlebar correction</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>No titlebar correction</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="167"/>
|
||||
<source>Add titlebar size</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Add titlebar size</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="177"/>
|
||||
<source>Subtract titlebar size</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Subtract titlebar size</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../preferences.ui" line="282"/>
|
||||
@@ -545,27 +545,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Show/Hide</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&New message...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Default account</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Preferences</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&About</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Quit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Close</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -529,27 +529,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Mostra/Nascondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Nuovo messaggio...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Conto predefinito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Preferenze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&Informazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Esci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Chiudi</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -532,27 +532,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Tonen/Verbergen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Nieuw bericht...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Standaardaccount</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Opties</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>O&ver</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Afsluiten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Sluiten</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -528,27 +528,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Exibir/Ocultar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Nova mensagem...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Conta padrão</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Preferências</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&Sobre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Sair</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Fechar</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -529,27 +529,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>&Показать/Скрыть</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&Новое сообщение...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&Стандартный аккаунт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>&Настройки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>&О приложении</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>&Выход</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>Закрыть</translation>
|
||||
</message>
|
||||
|
||||
Binary file not shown.
@@ -512,27 +512,38 @@
|
||||
<context>
|
||||
<name>SysTrayX</name>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="242"/>
|
||||
<location filename="../systrayx.cpp" line="256"/>
|
||||
<source>&Show/Hide</source>
|
||||
<translation>显示 / 隐藏(&S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="246"/>
|
||||
<location filename="../systrayx.cpp" line="269"/>
|
||||
<location filename="../systrayx.cpp" line="279"/>
|
||||
<source>&New message...</source>
|
||||
<translation>&新消息...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="282"/>
|
||||
<source>&Default account</source>
|
||||
<translation>&标准账户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="308"/>
|
||||
<source>&Preferences</source>
|
||||
<translation>首选项(&P)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="250"/>
|
||||
<location filename="../systrayx.cpp" line="317"/>
|
||||
<source>&About</source>
|
||||
<translation>关于(&A)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="254"/>
|
||||
<location filename="../systrayx.cpp" line="327"/>
|
||||
<source>&Quit</source>
|
||||
<translation>退出(&Q)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../systrayx.cpp" line="683"/>
|
||||
<location filename="../systrayx.cpp" line="746"/>
|
||||
<source>Close</source>
|
||||
<translation>关闭</translation>
|
||||
</message>
|
||||
|
||||
@@ -1141,6 +1141,32 @@ void Preferences::setShowHideShortcut( QKeySequence key_seq )
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get the new message from list.
|
||||
*/
|
||||
const QStringList& Preferences::getNewMessageFroms() const
|
||||
{
|
||||
return m_new_message_froms;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set the new message from list.
|
||||
*/
|
||||
void Preferences::setNewMessageFroms( const QStringList& list )
|
||||
{
|
||||
if( m_new_message_froms != list )
|
||||
{
|
||||
m_new_message_froms = list;
|
||||
|
||||
/*
|
||||
* Tell the world the new preference
|
||||
*/
|
||||
emit signalNewMessageFromsChange();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get the KDE integration option.
|
||||
*/
|
||||
|
||||
@@ -627,6 +627,16 @@ class Preferences : public QObject
|
||||
*/
|
||||
void setShowHideShortcut( QKeySequence key_seq );
|
||||
|
||||
/**
|
||||
* @brief getNewMessageFroms. Get the new message from list.
|
||||
*/
|
||||
const QStringList& getNewMessageFroms() const;
|
||||
|
||||
/**
|
||||
* @brief setNewMessageFroms. Set the new message from list.
|
||||
*/
|
||||
void setNewMessageFroms( const QStringList& list );
|
||||
|
||||
/**
|
||||
* @brief getKdeIntegrationOption. Get the KDE integration option.
|
||||
*
|
||||
@@ -856,6 +866,11 @@ class Preferences : public QObject
|
||||
*/
|
||||
void signalShowHideShortcutChange();
|
||||
|
||||
/**
|
||||
* @brief signalNewMessageFromsChange. Signal the new message froms change.
|
||||
*/
|
||||
void signalNewMessageFromsChange();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
@@ -1077,6 +1092,11 @@ class Preferences : public QObject
|
||||
*/
|
||||
QKeySequence m_show_hide_shortcut;
|
||||
|
||||
/**
|
||||
* @brief m_new_message_froms. The new message froms list.
|
||||
*/
|
||||
QStringList m_new_message_froms;
|
||||
|
||||
/**
|
||||
* @brief m_kde_integration_option. KDE integration option.
|
||||
*/
|
||||
|
||||
@@ -161,6 +161,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
|
||||
|
||||
#endif
|
||||
|
||||
connect( m_preferences, &Preferences::signalNewMessageFromsChange, this, &SysTrayX::slotNewMessageFromsChange );
|
||||
|
||||
/*
|
||||
* Connect link signals
|
||||
*/
|
||||
@@ -194,12 +196,16 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
|
||||
*/
|
||||
getPreferences();
|
||||
|
||||
m_preferences->displayDebug();
|
||||
|
||||
/*
|
||||
// m_preferences->displayDebug();
|
||||
m_preferences->setBrowserVersion( "115.1.0" );
|
||||
// m_preferences->setBrowserVersion( "102.2.3" );
|
||||
|
||||
QStringList list;
|
||||
list.append( "ximi1" );
|
||||
list.append( "ximi2" );
|
||||
m_preferences->setNewMessageFroms( list );
|
||||
|
||||
if( m_preferences->getShortcutsOption() )
|
||||
{
|
||||
m_preferences->setShowHideShortcut( QKeySequence( Qt::CTRL | Qt::Key_P ) );
|
||||
@@ -239,38 +245,89 @@ void SysTrayX::getPreferences()
|
||||
*/
|
||||
void SysTrayX::createMenu()
|
||||
{
|
||||
m_showhide_action = new QAction(tr("&Show/Hide"), this);
|
||||
m_showhide_action->setIcon( QIcon( ":/files/icons/window-restore.png" ) );
|
||||
connect( m_showhide_action, &QAction::triggered, m_win_ctrl, &WindowCtrl::slotShowHide );
|
||||
|
||||
m_new_action = new QAction(tr("&New message..."), this);
|
||||
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
|
||||
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
|
||||
|
||||
m_pref_action = new QAction(tr("&Preferences"), this);
|
||||
m_pref_action->setIcon( QIcon( ":/files/icons/gtk-preferences.png" ) );
|
||||
connect( m_pref_action, &QAction::triggered, m_pref_dialog, &PreferencesDialog::slotShowDialog );
|
||||
|
||||
m_about_action = new QAction(tr("&About"), this);
|
||||
m_about_action->setIcon( QIcon( ":/files/icons/help-about.png" ) );
|
||||
connect( m_about_action, &QAction::triggered, this, &SysTrayX::slotAbout );
|
||||
|
||||
m_quit_action = new QAction( tr("&Quit"), this );
|
||||
m_quit_action->setIcon( QIcon( ":/files/icons/window-close.png" ) );
|
||||
connect( m_quit_action, &QAction::triggered, this, &SysTrayX::slotShutdown );
|
||||
|
||||
/*
|
||||
* Setup menu
|
||||
*/
|
||||
m_tray_icon_menu = new QMenu();
|
||||
|
||||
/*
|
||||
* Show / hide
|
||||
*/
|
||||
m_showhide_action = new QAction(tr("&Show/Hide"), this);
|
||||
m_showhide_action->setIcon( QIcon( ":/files/icons/window-restore.png" ) );
|
||||
connect( m_showhide_action, &QAction::triggered, m_win_ctrl, &WindowCtrl::slotShowHide );
|
||||
|
||||
m_tray_icon_menu->addAction( m_showhide_action );
|
||||
m_tray_icon_menu->addSeparator();
|
||||
m_tray_icon_menu->addAction( m_new_action );
|
||||
m_tray_icon_menu->addSeparator();
|
||||
|
||||
/*
|
||||
* New message
|
||||
*/
|
||||
QStringList froms = m_preferences->getNewMessageFroms();
|
||||
if( froms.size() < 2 )
|
||||
{
|
||||
m_new_action = new QAction(tr("&New message..."), this);
|
||||
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
|
||||
m_new_action->setData(0);
|
||||
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
|
||||
|
||||
m_tray_icon_menu->addAction( m_new_action );
|
||||
m_tray_icon_menu->addSeparator();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_new_menu = new QMenu(tr("&New message..."), m_tray_icon_menu);
|
||||
m_new_menu->setIcon( QIcon( ":/files/icons/document-new.png" ) );
|
||||
|
||||
m_new_action = new QAction(tr("&Default account"), this);
|
||||
m_new_action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
|
||||
connect( m_new_action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
|
||||
|
||||
m_new_menu->addAction( m_new_action );
|
||||
m_new_menu->addSeparator();
|
||||
|
||||
for( int i = 0; i < froms.size(); ++i )
|
||||
{
|
||||
QAction* action = new QAction(froms.at( i ), this);
|
||||
action->setIcon( QIcon( ":/files/icons/document-new.png" ) );
|
||||
action->setData( i + 1 );
|
||||
connect( action, &QAction::triggered, this, &SysTrayX::slotNewMessage );
|
||||
|
||||
m_new_actions.append(action);
|
||||
|
||||
m_new_menu->addAction( action );
|
||||
}
|
||||
|
||||
m_tray_icon_menu->addMenu( m_new_menu );
|
||||
m_tray_icon_menu->addSeparator();
|
||||
}
|
||||
|
||||
/*
|
||||
* Preferences
|
||||
*/
|
||||
m_pref_action = new QAction(tr("&Preferences"), this);
|
||||
m_pref_action->setIcon( QIcon( ":/files/icons/gtk-preferences.png" ) );
|
||||
connect( m_pref_action, &QAction::triggered, m_pref_dialog, &PreferencesDialog::slotShowDialog );
|
||||
|
||||
m_tray_icon_menu->addAction( m_pref_action );
|
||||
|
||||
/*
|
||||
* About
|
||||
*/
|
||||
m_about_action = new QAction(tr("&About"), this);
|
||||
m_about_action->setIcon( QIcon( ":/files/icons/help-about.png" ) );
|
||||
connect( m_about_action, &QAction::triggered, this, &SysTrayX::slotAbout );
|
||||
|
||||
m_tray_icon_menu->addAction( m_about_action );
|
||||
m_tray_icon_menu->addSeparator();
|
||||
|
||||
/*
|
||||
* Quit
|
||||
*/
|
||||
m_quit_action = new QAction( tr("&Quit"), this );
|
||||
m_quit_action->setIcon( QIcon( ":/files/icons/window-close.png" ) );
|
||||
connect( m_quit_action, &QAction::triggered, this, &SysTrayX::slotShutdown );
|
||||
|
||||
m_tray_icon_menu->addAction( m_quit_action );
|
||||
}
|
||||
|
||||
@@ -814,5 +871,46 @@ void SysTrayX::slotShowHideShortcutChange()
|
||||
*/
|
||||
void SysTrayX::slotNewMessage()
|
||||
{
|
||||
m_link->sendNewMessage();
|
||||
QStringList fromList = m_preferences->getNewMessageFroms();
|
||||
int fromListIndex = ((QAction*)sender())->data().toInt() - 1;
|
||||
|
||||
if( fromListIndex < 0 )
|
||||
{
|
||||
if( fromList.size() == 1 )
|
||||
{
|
||||
m_link->sendNewMessage( fromList.at( 0 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_link->sendNewMessage( "" );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
m_link->sendNewMessage( fromList.at( fromListIndex ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SysTrayX::slotNewMessageFromsChange()
|
||||
{
|
||||
// Update the menu item
|
||||
emit signalConsole("New message froms");
|
||||
|
||||
/*
|
||||
* Setup new menu
|
||||
*/
|
||||
destroyMenu();
|
||||
createMenu();
|
||||
|
||||
if( m_tray_icon != nullptr )
|
||||
{
|
||||
m_tray_icon->setContextMenu( m_tray_icon_menu );
|
||||
}
|
||||
|
||||
if( m_kde_tray_icon != nullptr )
|
||||
{
|
||||
m_kde_tray_icon->setContextMenu( m_tray_icon_menu );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,6 +198,11 @@ class SysTrayX : public QObject
|
||||
*/
|
||||
void slotNewMessage();
|
||||
|
||||
/**
|
||||
* @brief slotNewMessageFromsChange. Handle a new message froms change.
|
||||
*/
|
||||
void slotNewMessageFromsChange();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
@@ -243,12 +248,15 @@ class SysTrayX : public QObject
|
||||
/**
|
||||
* @brief m_xxxx_action. Pointer to the menu actions.
|
||||
*/
|
||||
QMenu* m_new_menu;
|
||||
QAction* m_showhide_action;
|
||||
QAction* m_new_action;
|
||||
QAction* m_pref_action;
|
||||
QAction* m_about_action;
|
||||
QAction* m_quit_action;
|
||||
|
||||
QList< QAction* > m_new_actions;
|
||||
|
||||
/**
|
||||
* @brief m_unread_mail. Number of unread mails
|
||||
*/
|
||||
|
||||
@@ -304,10 +304,10 @@ void SysTrayXLink::sendPositions( QList< QPoint > positions )
|
||||
/*
|
||||
* Send a new message request.
|
||||
*/
|
||||
void SysTrayXLink::sendNewMessage()
|
||||
void SysTrayXLink::sendNewMessage( const QString& from )
|
||||
{
|
||||
QJsonObject newMessageObject;
|
||||
newMessageObject.insert("newMessage", QJsonValue::fromVariant( "true" ) );
|
||||
newMessageObject.insert("newMessage", QJsonValue::fromVariant( from ) );
|
||||
|
||||
/*
|
||||
* Store the new document
|
||||
@@ -670,6 +670,8 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
|
||||
{
|
||||
bool debug = pref[ "debug" ].toString() == "true";
|
||||
|
||||
emit signalConsole( QString("Debug %1").arg( debug ) );
|
||||
|
||||
/*
|
||||
* Store the new debug state
|
||||
*/
|
||||
@@ -988,6 +990,24 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
|
||||
*/
|
||||
m_pref->setShowHideShortcut( QKeySequence::fromString( shortcut ) );
|
||||
}
|
||||
|
||||
if( pref.contains( "newMessageFroms" ) && pref[ "newMessageFroms" ].isArray() )
|
||||
{
|
||||
QJsonArray froms = pref[ "newMessageFroms" ].toArray();
|
||||
|
||||
QStringList fromsList;
|
||||
for( int i = 0 ; i < froms.size() ; ++i )
|
||||
{
|
||||
fromsList.append( froms.at( i ).toString());
|
||||
|
||||
emit signalConsole( QString("From %1").arg( froms.at( i ).toString() ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* Store the new message from list
|
||||
*/
|
||||
m_pref->setNewMessageFroms( fromsList );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ class SysTrayXLink : public QObject
|
||||
/**
|
||||
* @brief sendNewMessage. Send a new message request.
|
||||
*/
|
||||
void sendNewMessage();
|
||||
void sendNewMessage( const QString& from );
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Konten und Ordner",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Neue Nachricht",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Tastatürkürzel",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Λογαριασμοί και φάκελοι",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Νέο μήνυμα",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Συντομεύσεις",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Accounts and folders",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "New message",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Shortcuts",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Account e cartelle",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Nuovo messaggio",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Scorciatoie",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Accounts en mappen",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Nieuw bericht",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Snelkoppelingen",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Contas e pastas",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Nova mensagem",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Atalhos",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "Аккаунты и папки",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "Новое сообщение",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "Сочетания",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -424,6 +424,16 @@
|
||||
"description": "Title for Accounts options"
|
||||
},
|
||||
|
||||
"accounts_folders": {
|
||||
"message": "帐户和文件夹",
|
||||
"description": "Header for the accounts and folders list"
|
||||
},
|
||||
|
||||
"accounts_new": {
|
||||
"message": "新消息",
|
||||
"description": "Header for the new message 'from' list"
|
||||
},
|
||||
|
||||
"shortcuts": {
|
||||
"message": "快捷键",
|
||||
"description": "Title for Shortcuts options"
|
||||
|
||||
@@ -455,6 +455,7 @@ SysTrayX.Messaging = {
|
||||
"closeApp",
|
||||
"closeAppArgs",
|
||||
"showHideShortcut",
|
||||
"newMessageFroms",
|
||||
])
|
||||
.then(
|
||||
SysTrayX.Messaging.sendPreferencesStorage,
|
||||
@@ -500,6 +501,7 @@ SysTrayX.Messaging = {
|
||||
const closeApp = result.closeApp || "";
|
||||
const closeAppArgs = result.closeAppArgs || "";
|
||||
const showHideShortcut = result.showHideShortcut || "";
|
||||
const newMessageFroms = result.newMessageFroms || [];
|
||||
|
||||
// Send it to the app
|
||||
SysTrayX.Link.postSysTrayXMessage({
|
||||
@@ -536,6 +538,7 @@ SysTrayX.Messaging = {
|
||||
closeApp,
|
||||
closeAppArgs,
|
||||
showHideShortcut,
|
||||
newMessageFroms,
|
||||
},
|
||||
});
|
||||
},
|
||||
@@ -573,6 +576,7 @@ SysTrayX.Link = {
|
||||
},
|
||||
|
||||
receiveSysTrayXMessage: async function (response) {
|
||||
|
||||
if (response["shutdown"]) {
|
||||
browser.windowEvent.onNewWindow.removeListener(
|
||||
SysTrayX.Messaging.onNewWindow
|
||||
@@ -584,6 +588,19 @@ SysTrayX.Link = {
|
||||
SysTrayX.Link.postSysTrayXMessage({ shutdown: "true" });
|
||||
}
|
||||
|
||||
const newMessage = response["newMessage"];
|
||||
if (newMessage !== undefined) {
|
||||
if (newMessage === "")
|
||||
{
|
||||
var tab = await browser.compose.beginNew();
|
||||
} else {
|
||||
const details = {
|
||||
from: newMessage
|
||||
}
|
||||
var tab = await browser.compose.beginNew(undefined,details);
|
||||
}
|
||||
}
|
||||
|
||||
const options = response["options"];
|
||||
if (options !== undefined) {
|
||||
SysTrayX.Info.options = options;
|
||||
|
||||
@@ -94,6 +94,14 @@ body {
|
||||
padding: 10px 10px 10px 10px;
|
||||
}
|
||||
|
||||
#accountsTreeHeader {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 25em;
|
||||
height: 2.2em;
|
||||
margin-left: 10px
|
||||
}
|
||||
|
||||
ul,
|
||||
#accountsTree {
|
||||
list-style-type: none;
|
||||
@@ -108,6 +116,11 @@ ul,
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#account {
|
||||
float: right;
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
/* Style the caret/arrow filler */
|
||||
.caretfiller::before {
|
||||
user-select: none; /* Prevent text selection */
|
||||
|
||||
@@ -125,6 +125,15 @@ SysTrayX.Accounts = {
|
||||
);
|
||||
typeLi.appendChild(typeText);
|
||||
|
||||
if (prop === "imap" || prop === "pop3") {
|
||||
const typeInputAccount = document.createElement("input");
|
||||
typeInputAccount.setAttribute("type", "checkbox");
|
||||
typeInputAccount.setAttribute("id", "account");
|
||||
typeInputAccount.setAttribute("name", accounts[prop][i].name);
|
||||
|
||||
typeLi.appendChild(typeInputAccount);
|
||||
}
|
||||
|
||||
// Create a usable folder tree
|
||||
let folders = [];
|
||||
|
||||
@@ -206,14 +215,14 @@ SysTrayX.Accounts = {
|
||||
treeBase.appendChild(typeLi);
|
||||
|
||||
// Setup checkbox control
|
||||
let checkboxes = treeBase.querySelectorAll('input[type="checkbox"]');
|
||||
let checkboxes = treeBase.querySelectorAll('input[type="checkbox"]:not([id="account"])');
|
||||
|
||||
for (let x = 0; x < checkboxes.length; x++) {
|
||||
checkboxes[x].addEventListener("change", function (e) {
|
||||
let parentNode = this.parentNode;
|
||||
|
||||
const cbDescendants = parentNode.querySelectorAll(
|
||||
'input[type="checkbox"]'
|
||||
'input[type="checkbox"]:not([id="account"])'
|
||||
);
|
||||
for (let y = 0; y < cbDescendants.length; y++) {
|
||||
cbDescendants[y].checked = this.checked;
|
||||
|
||||
@@ -718,6 +718,11 @@
|
||||
<form name="mailform">
|
||||
<h3>__MSG_accounts__</h3>
|
||||
|
||||
<div id="accountsTreeHeader">
|
||||
<p>__MSG_accounts_folders__</p>
|
||||
<p>__MSG_accounts_new__</p>
|
||||
</div>
|
||||
|
||||
<ul id="accountsTree"></ul>
|
||||
|
||||
<br />
|
||||
|
||||
@@ -24,7 +24,7 @@ SysTrayX.SaveOptions = {
|
||||
// Find all selected folders
|
||||
const folders = Array.from(
|
||||
account.parentNode.querySelectorAll(
|
||||
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"])'
|
||||
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"]):not([id="account"])'
|
||||
)
|
||||
).filter((folder) => folder.checked);
|
||||
|
||||
@@ -53,6 +53,25 @@ SysTrayX.SaveOptions = {
|
||||
filters: filters,
|
||||
});
|
||||
|
||||
//
|
||||
// Save new message from list
|
||||
//
|
||||
const newMessageCheckBoxes = treeBase.querySelectorAll(
|
||||
'input[type="checkbox"][id="account"]'
|
||||
);
|
||||
|
||||
let froms = [];
|
||||
newMessageCheckBoxes.forEach((checkbox) => {
|
||||
if (checkbox.checked) {
|
||||
froms.push(checkbox.name)
|
||||
}
|
||||
});
|
||||
|
||||
// Store new message from list
|
||||
await storage().set({
|
||||
newMessageFroms: froms,
|
||||
});
|
||||
|
||||
//
|
||||
// Save debug state
|
||||
//
|
||||
@@ -396,6 +415,16 @@ SysTrayX.RestoreOptions = {
|
||||
SysTrayX.RestoreOptions.onFiltersError
|
||||
);
|
||||
|
||||
//
|
||||
// Restore new message froms
|
||||
//
|
||||
await storage()
|
||||
.get("newMessageFroms")
|
||||
.then(
|
||||
SysTrayX.RestoreOptions.setNewMessageFroms,
|
||||
SysTrayX.RestoreOptions.onNewMessageFromsError
|
||||
);
|
||||
|
||||
//
|
||||
// Restore minimize type
|
||||
//
|
||||
@@ -1265,7 +1294,7 @@ SysTrayX.RestoreOptions = {
|
||||
|
||||
const treeBase = document.getElementById("accountsTree");
|
||||
const accountsBoxes = treeBase.querySelectorAll(
|
||||
'input[type="checkbox"][name*="account"]'
|
||||
'input[type="checkbox"][name*="account"]:not([id="account"])'
|
||||
);
|
||||
|
||||
let accounts = [];
|
||||
@@ -1299,7 +1328,7 @@ SysTrayX.RestoreOptions = {
|
||||
);
|
||||
const checkboxes = Array.from(
|
||||
account.parentNode.querySelectorAll(
|
||||
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"])'
|
||||
'input[type="checkbox"]:not([name^="account"]):not([name^="parent-"]):not([id="account"])'
|
||||
)
|
||||
);
|
||||
|
||||
@@ -1331,6 +1360,30 @@ SysTrayX.RestoreOptions = {
|
||||
onFiltersError: function (error) {
|
||||
console.log(`Filters Error: ${error}`);
|
||||
},
|
||||
|
||||
//
|
||||
// Restore new message froms callbacks
|
||||
//
|
||||
setNewMessageFroms: function (result) {
|
||||
let froms = result.newMessageFroms || [];
|
||||
|
||||
const checkboxes = document
|
||||
.getElementById("accountsTree")
|
||||
.querySelectorAll('input[type="checkbox"][id="account"]');
|
||||
|
||||
froms.forEach((from) => {
|
||||
checkboxes.forEach((checkbox) => {
|
||||
if (from === checkbox.name)
|
||||
{
|
||||
checkbox.checked = true;
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
onNewMessageFromsError: function (error) {
|
||||
console.log(`NewMessageFroms Error: ${error}`);
|
||||
},
|
||||
};
|
||||
|
||||
SysTrayX.StorageReset = {
|
||||
|
||||
Reference in New Issue
Block a user