Add minimize normalize close to tray using container

This commit is contained in:
Ximi1970
2020-02-23 22:02:56 +01:00
parent fa67207229
commit a020b6c256
15 changed files with 630 additions and 127 deletions

View File

@@ -1,16 +1,31 @@
#include "container.h"
#include "ui_container.h"
/*
* Local includes
*/
#include "preferences.h"
/*
* System includes
*/
/*
* Qt includes
*/
#include <QIcon>
#include <QCloseEvent>
#include <QVBoxLayout>
/*
* Constructor
*/
Container::Container( QWidget *parent ) : QWidget( parent )
Container::Container( Preferences* pref, QWidget *parent ) : QWidget( parent )
{
/*
* Store the preferences
*/
m_pref = pref;
/*
* Construct conatainer
*/
@@ -21,10 +36,85 @@ Container::Container( QWidget *parent ) : QWidget( parent )
* Set properties
*/
setWindowIcon( QIcon( ":/files/icons/Thunderbird.png" ) );
setWindowTitle( "Mozilla Thunderbird" );
}
/*
* Set the TB widget
*/
void Container::setWidget( QWidget* widget )
{
layout()->addWidget( widget );
}
/*
* Remove the TB widget
*/
void Container::removeWidget( QWidget* widget )
{
layout()->removeWidget( widget );
}
/*
* Override the close event handler
*/
void Container::closeEvent( QCloseEvent *event )
{
if( m_minimize_close )
{
/*
* Minimize instead of close
*/
event->ignore();
emit signalShowHide();
}
else
{
/*
* Close
*/
event->accept();
}
}
#ifdef FF_NEET
/*
* Override the minimize event
*/
void Container::changeEvent( QEvent * event )
{
switch( event->type() )
{
case QEvent::WindowStateChange:
{
if( isMinimized() )
{
setWindowState(reinterpret_cast<QWindowStateChangeEvent *>(event)->oldState());
event->accept();
}
break;
}
default:
{
QWidget::changeEvent( event );
}
}
}
#endif
/**
* @brief slotMinimizeOnClose. Hnadle preference minimize on close signal.
*/
void Container::slotMinimizeOnClose()
{
m_minimize_close = m_pref->getMinimizeOnClose();
}

View File

@@ -10,6 +10,7 @@
* Predefines
*/
class QVBoxLayout;
class Preferences;
/**
* @brief The Container class. Class to hold the Thunderbird window.
@@ -25,7 +26,7 @@ class Container : public QWidget
*
* @param parent My parent.
*/
Container( QWidget *parent = nullptr );
Container( Preferences* pref, QWidget *parent = nullptr );
/**
* @brief setWidget. Set the container widget.
@@ -34,7 +35,47 @@ class Container : public QWidget
*/
void setWidget( QWidget* widget );
/**
* @brief removeWidget. Remove the container widget.
*
* @param widget
*/
void removeWidget( QWidget* widget );
private:
/**
* @brief closeEvent. Override the close event handler.
*
* @param event The event.
*/
void closeEvent( QCloseEvent *event );
signals:
/**
* @brief signalShowHide. Signal show / hide window.
*/
void signalShowHide();
public slots:
/**
* @brief slotMinimizeOnClose. Hnadle preference minimize on close signal.
*/
void slotMinimizeOnClose();
private:
/**
* @brief m_pref. Pointer to the preferences storage.
*/
Preferences* m_pref;
/**
* @brief m_minimize_close. Minimize on close state.
*/
bool m_minimize_close;
};
#endif // CONTAINER_H

View File

@@ -14,7 +14,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent )
m_icon_mime = "image/png";
m_icon_data = QByteArray();
m_minimize_hide = true;
m_hide_minimize = true;
m_minimize_close = true;
m_debug = false;
}
@@ -113,27 +114,53 @@ void Preferences::setIconData( const QByteArray& icon_data )
/*
* Get the icon data.
* Get the hide on minimize state.
*/
bool Preferences::getMinimizeHide() const
bool Preferences::getHideOnMinimize() const
{
return m_minimize_hide;
return m_hide_minimize;
}
/*
* Set the minimizeHide data.
* Set the minimize on close state.
*/
void Preferences::setMinimizeHide( bool state )
void Preferences::setHideOnMinimize( bool state )
{
if( m_minimize_hide != state )
if( m_hide_minimize != state )
{
m_minimize_hide = state;
m_hide_minimize = state;
/*
* Tell the world the new preference
*/
emit signalMinimizeHideChange();
emit signalHideOnMinimizeChange();
}
}
/*
* Get the minimuze on close state.
*/
bool Preferences::getMinimizeOnClose() const
{
return m_minimize_close;
}
/*
* Set the minimize on close data.
*/
void Preferences::setMinimizeOnClose( bool state )
{
if( m_minimize_close != state )
{
m_minimize_close = state;
/*
* Tell the world the new preference
*/
emit signalMinimizeOnCloseChange();
}
}

View File

@@ -42,138 +42,162 @@ class Preferences : public QObject
*
* @return The state
*/
bool getAppPrefChanged() const;
bool getAppPrefChanged() const;
/**
* @brief setAppPrefChanged. Control for sending changes to the add-on.
*
* @param state The state
*/
void setAppPrefChanged( bool state );
void setAppPrefChanged( bool state );
/**
* @brief getIconType. Get the icon type.
*
* @return The icon type.
*/
IconType getIconType() const;
IconType getIconType() const;
/**
* @brief setIconType. Set the icon type.
*
* @param The icon type.
*/
void setIconType( IconType icon_type );
void setIconType( IconType icon_type );
/**
* @brief getIconMime. Get the icon mime.
*
* @return The icon mime.
*/
const QString& getIconMime() const;
const QString& getIconMime() const;
/**
* @brief setIconMime. Set the icon mime.
*
* @param The icon mime.
*/
void setIconMime( const QString& icon_mime );
void setIconMime( const QString& icon_mime );
/**
* @brief getIconData. Get the icon data.
*
* @return The icon data.
*/
const QByteArray& getIconData() const;
const QByteArray& getIconData() const;
/**
* @brief setIconData. Set the icon data.
*
* @param The icon data.
*/
void setIconData( const QByteArray& icon_data );
void setIconData( const QByteArray& icon_data );
/**
* @brief getMinimizeHide. Get the minimizeHide state.
* @brief getHideOnMinimize. Get the hide on minimize state.
*
* @return The state.
*/
bool getMinimizeHide() const;
bool getHideOnMinimize() const;
/**
* @brief setMinimizeHide. Set the minimizeHide state.
* @brief setHideOnMinimize. Set the hide on minimize state.
*
* @param The state.
*/
void setMinimizeHide( bool state );
void setHideOnMinimize( bool state );
/**
* @brief getMinimizeOnClose. Get the minimize on close state.
*
* @return The state.
*/
bool getMinimizeOnClose() const;
/**
* @brief setMinimizeOnClose. Set the minimize on close state.
*
* @param The state.
*/
void setMinimizeOnClose( bool state );
/**
* @brief getDebug. Get the debug windows state.
*
* @return The state.
*/
bool getDebug() const;
bool getDebug() const;
/**
* @brief setDebug. Set the debug windows state.
*
* @param The state.
*/
void setDebug( bool state );
void setDebug( bool state );
signals:
/**
* @brief signalIconTypeChange. Signal a icon type change.
*/
void signalIconTypeChange();
void signalIconTypeChange();
/**
* @brief signalIconDataChange. Signal a icon data change.
*/
void signalIconDataChange();
void signalIconDataChange();
/**
* @brief signalMinimizeHideChange. Signal a minimizeHide state change.
* @brief signalHideOnMinimizeChange. Signal a hide on minimize state change.
*/
void signalMinimizeHideChange();
void signalHideOnMinimizeChange();
/**
* @brief signalMinimizeOnCloseChange. Signal a minimize on close state change.
*/
void signalMinimizeOnCloseChange();
/**
* @brief signalDebugChange. Signal a debug state change.
*/
void signalDebugChange();
void signalDebugChange();
private:
/**
* @brief m_app_pref_changed. Control for sending changes to the add-on.
*/
bool m_app_pref_changed;
bool m_app_pref_changed;
/**
* @brief m_icon_type. Selected icon type.
*/
IconType m_icon_type;
IconType m_icon_type;
/**
* @brief m_icon_mime. Selected icon mime.
*/
QString m_icon_mime;
QString m_icon_mime;
/**
* @brief m_icon_data. Binary data icon image.
*/
QByteArray m_icon_data;
QByteArray m_icon_data;
/**
* @brief m_minimize_hide. Hide the minimized window.
* @brief m_hide_minimize. Hide the minimized window.
*/
bool m_minimize_hide;
bool m_hide_minimize;
/**
* @brief m_minimize_close. Hide the closing window.
*/
bool m_minimize_close;
/**
* @brief m_debug. Display debug window.
*/
bool m_debug;
bool m_debug;
};
#endif // PREFERENCES_H

View File

@@ -57,7 +57,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QCheckBox" name="minimizeHideCheckBox">
<widget class="QCheckBox" name="hideOnMinimizeCheckBox">
<property name="text">
<string>Minimizing window hides to tray</string>
</property>
@@ -66,6 +66,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="minimizeOnCloseCheckBox">
<property name="text">
<string>Closing window hides to tray</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -59,11 +59,20 @@ void PreferencesDialog::setDebug( bool state )
/*
* Set the minimizeHide state
* Set the hide on minimize state
*/
void PreferencesDialog::setMinimizeHide( bool state )
void PreferencesDialog::setHideOnMinimize( bool state )
{
m_ui->minimizeHideCheckBox->setChecked( state );
m_ui->hideOnMinimizeCheckBox->setChecked( state );
}
/*
* Set the minimize on close state
*/
void PreferencesDialog::setMinimizeOnClose( bool state )
{
m_ui->minimizeOnCloseCheckBox->setChecked( state );
}
@@ -128,7 +137,8 @@ void PreferencesDialog::slotAccept()
m_pref->setIconMime( m_tmp_icon_mime );
m_pref->setIconData( m_tmp_icon_data );
m_pref->setMinimizeHide( m_ui->minimizeHideCheckBox->isChecked() );
m_pref->setHideOnMinimize( m_ui->hideOnMinimizeCheckBox->isChecked() );
m_pref->setMinimizeOnClose( m_ui->minimizeOnCloseCheckBox->isChecked() );
m_pref->setDebug( m_ui->debugWindowCheckBox->isChecked() );
@@ -179,11 +189,20 @@ void PreferencesDialog::slotDebugChange()
/*
* Handle the minimizeHide change signal
* Handle the hide on minimize change signal
*/
void PreferencesDialog::slotMinimizeHideChange()
void PreferencesDialog::slotHideOnMinimizeChange()
{
setMinimizeHide( m_pref->getMinimizeHide() );
setHideOnMinimize( m_pref->getHideOnMinimize() );
}
/*
* Handle the minimize on close change signal
*/
void PreferencesDialog::slotMinimizeOnCloseChange()
{
setMinimizeOnClose( m_pref->getMinimizeOnClose() );
}

View File

@@ -49,11 +49,18 @@ class PreferencesDialog : public QDialog
void setDebug( bool state );
/**
* @brief setMinimizeHide. Set the miniizeHide state.
* @brief setHideOnMinimize. Set the hide on minimize state.
*
* @param state The state.
*/
void setMinimizeHide( bool state );
void setHideOnMinimize( bool state );
/**
* @brief setMinimizeOnClose. Set the minimize on close state.
*
* @param state The state.
*/
void setMinimizeOnClose( bool state );
/**
* @brief setIconType. Set the icon type.
@@ -87,68 +94,73 @@ class PreferencesDialog : public QDialog
/**
* @brief signalUpdateSysTray. Signal to update the system tray icon.
*/
void signalUpdateSysTrayIcon();
void signalUpdateSysTrayIcon();
public slots:
/**
* @brief slotDebugChange. Slot for handling debug change signals.
*/
void slotDebugChange();
void slotDebugChange();
/**
* @brief slotMinimizeHideChange. Slot for handling minimizeHide change signals.
* @brief slotHideOnMinimizeChange. Slot for handling hide on minimize change signals.
*/
void slotMinimizeHideChange();
void slotHideOnMinimizeChange();
/**
* @brief slotMinimizeOnCloseChange. Slot for handling minimize on close change signals.
*/
void slotMinimizeOnCloseChange();
/**
* @brief slotIconTypeChange. Slot for handling icon type change signals.
*/
void slotIconTypeChange();
void slotIconTypeChange();
/**
* @brief slotIconDataChange. Slot for handling icon data change signals.
*/
void slotIconDataChange();
void slotIconDataChange();
private slots:
/**
* @brief slotAccept. Store the preferences on the accept signal.
*/
void slotAccept();
void slotAccept();
/**
* @brief slotFileSelect. Handle the choose custom button click.
*/
void slotFileSelect();
void slotFileSelect();
private:
/**
* @brief m_ui. Pointer to the dialog.
*/
Ui::PreferencesDialog *m_ui;
Ui::PreferencesDialog* m_ui;
/**
* @brief m_link. Pointer to the link.
*/
SysTrayXLink *m_link;
SysTrayXLink* m_link;
/**
* @brief m_pref. Pointer to the preferences storage.
*/
Preferences *m_pref;
Preferences* m_pref;
/**
* @brief m_tmp_icon_mime. Temporary storage for icon mime.
*/
QString m_tmp_icon_mime;
QString m_tmp_icon_mime;
/**
* @brief m_tmp_icon_data. Temporary storage for icon data.
*/
QByteArray m_tmp_icon_data;
QByteArray m_tmp_icon_data;
};

View File

@@ -35,7 +35,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
/*
* Setup window control
*/
m_tb_container = new Container();
m_tb_container = new Container( m_preferences );
/*
* Setup window control
@@ -74,6 +74,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
connect( m_link, &SysTrayXLink::signalUnreadMail, m_debug, &DebugWidget::slotUnreadMail );
connect( m_link, &SysTrayXLink::signalConsole, m_debug, &DebugWidget::slotConsole );
connect( m_link, &SysTrayXLink::signalLinkReceiveError, m_debug, &DebugWidget::slotReceiveError );
connect( m_debug, &DebugWidget::signalWriteMessage, m_link, &SysTrayXLink::slotLinkWrite );
@@ -94,17 +95,20 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
connect( m_preferences, &Preferences::signalIconTypeChange, m_tray_icon, &SysTrayXIcon::slotIconTypeChange );
connect( m_preferences, &Preferences::signalIconDataChange, m_tray_icon, &SysTrayXIcon::slotIconDataChange );
connect( m_preferences, &Preferences::signalMinimizeHideChange, m_win_ctrl, &WindowCtrl::slotMinimizeHideChange );
connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_win_ctrl, &WindowCtrl::slotHideOnMinimizeChange );
connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_win_ctrl, &WindowCtrl::slotMinimizeOnCloseChange );
connect( m_preferences, &Preferences::signalIconTypeChange, m_pref_dialog, &PreferencesDialog::slotIconTypeChange );
connect( m_preferences, &Preferences::signalIconDataChange, m_pref_dialog, &PreferencesDialog::slotIconDataChange );
connect( m_preferences, &Preferences::signalMinimizeHideChange, m_pref_dialog, &PreferencesDialog::slotMinimizeHideChange );
connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_pref_dialog, &PreferencesDialog::slotHideOnMinimizeChange );
connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_pref_dialog, &PreferencesDialog::slotMinimizeOnCloseChange );
connect( m_preferences, &Preferences::signalDebugChange, m_pref_dialog, &PreferencesDialog::slotDebugChange );
connect( m_preferences, &Preferences::signalIconTypeChange, m_link, &SysTrayXLink::slotIconTypeChange );
connect( m_preferences, &Preferences::signalIconDataChange, m_link, &SysTrayXLink::slotIconDataChange );
connect( m_preferences, &Preferences::signalMinimizeHideChange, m_link, &SysTrayXLink::slotMinimizeHideChange );
connect( m_preferences, &Preferences::signalHideOnMinimizeChange, m_link, &SysTrayXLink::slotHideOnMinimizeChange );
connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_link, &SysTrayXLink::slotMinimizeOnCloseChange );
connect( m_preferences, &Preferences::signalDebugChange, m_link, &SysTrayXLink::slotDebugChange );
connect( m_preferences, &Preferences::signalDebugChange, m_debug, &DebugWidget::slotDebugChange );
@@ -128,6 +132,11 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
*/
connect( m_tray_icon, &SysTrayXIcon::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide );
/*
* Connect conainer signals
*/
connect( m_tb_container, &Container::signalShowHide, m_win_ctrl, &WindowCtrl::slotShowHide );
/*
* Request preferences from add-on
*/
@@ -220,6 +229,12 @@ void SysTrayX::createTrayIcon()
*/
void SysTrayX::slotShutdown()
{
#ifdef ENABLE_CONTAINER
m_win_ctrl->shutdown();
#endif
/*
* Let's quit
*/

View File

@@ -28,6 +28,7 @@
#include <QJsonValue>
#include <QJsonObject>
#include <QTextStream>
/*****************************************************************************
*
@@ -104,6 +105,8 @@ void SysTrayXLinkReader::stopThread()
*/
void SysTrayXLinkReader::slotWorker()
{
int error_count = 0;
while( m_doWork )
{
qint32 data_len;
@@ -121,7 +124,21 @@ void SysTrayXLinkReader::slotWorker()
/*
* Send the data to my parent
*/
emit signalReceivedMessage( data );
if( data.at( 0 ) == '{' )
{
emit signalReceivedMessage( data );
error_count = 0;
}
else
{
error_count++;
if( error_count > 20 )
{
emit signalShutdown();
}
}
}
}
@@ -165,7 +182,9 @@ SysTrayXLink::SysTrayXLink( Preferences* pref )
connect( m_reader_thread, &QThread::finished, reader, &QObject::deleteLater );
connect( reader, &SysTrayXLinkReader::signalReceivedMessage, this, &SysTrayXLink::slotLinkRead );
connect( reader, &SysTrayXLinkReader::signalShutdown, this, &SysTrayXLink::slotShutdown );
connect( reader, &SysTrayXLinkReader::signalConsole, this, &SysTrayXLink::slotConsole );
connect( reader, &SysTrayXLinkReader::signalDebugMessage, this, &SysTrayXLink::slotDebugMessage );
connect( reader, &SysTrayXLinkReader::signalReceivedDataLength, this, &SysTrayXLink::slotReceivedDataLength );
@@ -323,6 +342,7 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message )
}
else
{
emit signalConsole( "Link error: " + jsonError.errorString() );
emit signalLinkReceiveError( jsonError.errorString() );
}
}
@@ -366,14 +386,24 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
m_pref->setIconData( QByteArray::fromBase64( icon_base64.toUtf8() ) );
}
if( pref.contains( "minimizeHide" ) && pref[ "minimizeHide" ].isString() )
if( pref.contains( "hideOnMinimize" ) && pref[ "hideOnMinimize" ].isString() )
{
bool minimize_hide = pref[ "minimizeHide" ].toString() == "true";
bool hide_minimize = pref[ "hideOnMinimize" ].toString() == "true";
/*
* Store the new MinimizeHide state
* Store the new hide on minimize state
*/
m_pref->setMinimizeHide( minimize_hide );
m_pref->setHideOnMinimize( hide_minimize );
}
if( pref.contains( "minimizeOnClose" ) && pref[ "minimizeOnClose" ].isString() )
{
bool minimize_close = pref[ "minimizeOnClose" ].toString() == "true";
/*
* Store the new minimize on close state
*/
m_pref->setMinimizeOnClose( minimize_close );
}
if( pref.contains( "debug" ) && pref[ "debug" ].isString() )
@@ -398,7 +428,8 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref )
*/
QJsonObject prefObject;
prefObject.insert("debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) );
prefObject.insert("minimizeHide", QJsonValue::fromVariant( QString( pref.getMinimizeHide() ? "true" : "false" ) ) );
prefObject.insert("hideOnMinimize", QJsonValue::fromVariant( QString( pref.getHideOnMinimize() ? "true" : "false" ) ) );
prefObject.insert("minimizeOnClose", QJsonValue::fromVariant( QString( pref.getMinimizeOnClose() ? "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() ) ) );
@@ -413,6 +444,15 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref )
}
/*
* Handle the console message from the reader thread
*/
void SysTrayXLink::slotConsole( QString message )
{
emit signalConsole( message );
}
/*
* Handle the debug message from the reader thread
*/
@@ -440,6 +480,15 @@ void SysTrayXLink::slotReceivedData( QByteArray data )
}
/*
* Relay shutdown signal
*/
void SysTrayXLink::slotShutdown()
{
emit signalShutdown();
}
/*
* Read the input
*/
@@ -479,9 +528,21 @@ void SysTrayXLink::slotDebugChange()
/*
* Handle a minimizeHide state change signal
* Handle a hide on minimize state change signal
*/
void SysTrayXLink::slotMinimizeHideChange()
void SysTrayXLink::slotHideOnMinimizeChange()
{
if( m_pref->getAppPrefChanged() )
{
sendPreferences();
}
}
/*
* Handle a minimize on close state change signal
*/
void SysTrayXLink::slotMinimizeOnCloseChange()
{
if( m_pref->getAppPrefChanged() )
{

View File

@@ -57,6 +57,13 @@ class SysTrayXLinkReader : public QObject
signals:
/**
* @brief signalConsole
*
* @param message The message.
*/
void signalConsole( QString message );
/**
* @brief signalDebugMessage
*
@@ -85,6 +92,11 @@ class SysTrayXLinkReader : public QObject
*/
void signalReceivedMessage( QByteArray message );
/**
* @brief signalShutdown. Signal to shutdown the app.
*/
void signalShutdown();
private:
/**
@@ -166,7 +178,6 @@ class SysTrayXLink : public QObject
*/
void signalTitle( QString title );
/**
* @brief signalShutdown. Signal to shutdown the app.
*/
@@ -205,6 +216,13 @@ class SysTrayXLink : public QObject
*/
void signalDebugMessage( QString message );
/**
* @brief signalConsole. Send message to debug console.
*
* @param message The message
*/
void signalConsole( QString message );
/**
* @brief signalUnreadMail. Signal numder of unread mails.
*
@@ -220,9 +238,14 @@ class SysTrayXLink : public QObject
void slotDebugChange();
/**
* @brief slotMinimizeHideChange. Handle a change in minimizeHide state.
* @brief slotHideOnMinimizeChange. Handle a change in hide on minimize state.
*/
void slotMinimizeHideChange();
void slotHideOnMinimizeChange();
/**
* @brief slotMinimizeOnCloseChange. Handle a change in minimize on close state.
*/
void slotMinimizeOnCloseChange();
/**
* @brief slotLinkWrite. Write the link.
@@ -252,7 +275,14 @@ class SysTrayXLink : public QObject
private slots:
/**
* @brief slotDebugMessage. Handle the signal for a debuf message from the reader thread.
* @brief slotConsole. Handle the signal for console message from the reader thread.
*
* @param message The message.
*/
void slotConsole( QString message );
/**
* @brief slotDebugMessage. Handle the signal for a debug message from the reader thread.
*
* @param message The message.
*/
@@ -277,6 +307,11 @@ class SysTrayXLink : public QObject
*/
void slotLinkRead( QByteArray message );
/**
* @brief slotShutdown. Handle sahutdown signal from reader thread.
*/
void slotShutdown();
private:
/**

View File

@@ -3,6 +3,8 @@
*/
#include <QWidget>
#include <QWindow>
#include <QString>
#include <QCoreApplication>
/*
* Main include
@@ -40,11 +42,75 @@ WindowCtrl::WindowCtrl( Container* container, Preferences* pref, QObject *parent
/*
* Initialize
*/
m_minimize_hide = m_pref->getMinimizeHide();
m_state = "mormal";
m_hide_minimize = m_pref->getHideOnMinimize();
m_tb_window = nullptr;
m_tb_container = nullptr;
}
/*
* Destructor
*/
WindowCtrl::~WindowCtrl()
{
shutdown();
}
/*
* Handle app shutdown
*/
void WindowCtrl::shutdown()
{
#ifdef ENABLE_CONTAINER
if( m_tb_window )
{
/*
* Release the Thunderbird window
*/
m_tb_window->setParent( nullptr );
m_tb_window->setFlags( Qt::Window );
/*
* Remove the TB container
*/
m_container->removeWidget( m_tb_container );
m_container->hide();
/*
* Cleanup
*/
delete m_tb_container;
// delete m_tb_window;
emit signalConsole( QString( "Container %1").arg( reinterpret_cast<quint64>( m_tb_container ) ) );
emit signalConsole( QString( "Window %1").arg( reinterpret_cast<quint64>( m_tb_window ) ) );
m_tb_container = nullptr;
m_tb_window = nullptr;
/*
* Normalize the window
*/
foreach( quint64 win_id, getWinIds() )
{
normalizeWindow( win_id );
}
/*
* Make sure all events for the release are handled
*/
QCoreApplication::processEvents();
}
#endif
}
void WindowCtrl::slotWindowTest1()
{
emit signalConsole("Test 1 started");
@@ -54,7 +120,8 @@ void WindowCtrl::slotWindowTest1()
// displayWindowElements( "- Mozilla Thunderbird" );
// findWindow( 4313 );
captureWindow( "Debugging with Firefox Developer Tools - Mozilla Thunderbird" );
// captureWindow( "Debugging with Firefox Developer Tools - Mozilla Thunderbird" );
captureWindow( "- Mozilla Thunderbird" );
emit signalConsole("Test 1 done");
}
@@ -66,20 +133,17 @@ void WindowCtrl::slotWindowTest2()
// Do something.
shutdown();
/*
if( !m_tb_window->parent() )
{
m_tb_window->setParent( nullptr );
m_tb_window->setFlags( Qt::Window );
m_tb_window->setParent( nullptr );
m_tb_window->setFlags( Qt::Window );
/*
* Disconnect container?
*/
/*
m_tb_window->setParent( nullptr );
delete m_tb_container;
m_tb_container = nullptr;
m_container->hide();
}
*/
emit signalConsole("Test 2 done");
}
@@ -162,11 +226,20 @@ void WindowCtrl::slotWindowTitle( QString title )
/*
* Handle change in minimizeHide state
* Handle change in hide on minimize state
*/
void WindowCtrl::slotMinimizeHideChange()
void WindowCtrl::slotHideOnMinimizeChange()
{
m_minimize_hide = m_pref->getMinimizeHide();
m_hide_minimize = m_pref->getHideOnMinimize();
}
/*
* Handle change in minimize on close state
*/
void WindowCtrl::slotMinimizeOnCloseChange()
{
m_minimize_close = m_pref->getMinimizeOnClose();
}
@@ -188,6 +261,15 @@ void WindowCtrl::slotShowHide()
{
m_state = "normal";
#ifdef ENABLE_CONTAINER
if( m_tb_window )
{
m_container->show();
}
#else
foreach( quint64 win_id, getWinIds() )
{
normalizeWindow( win_id );
@@ -197,17 +279,30 @@ void WindowCtrl::slotShowHide()
// emit signalWindowNormal(); // TB window control
#endif
} else {
m_state = "minimized";
#ifdef ENABLE_CONTAINER
if( m_tb_window )
{
m_container->hide();
}
#else
foreach( quint64 win_id, getWinIds() )
{
minimizeWindow( win_id, m_minimize_hide );
minimizeWindow( win_id, m_hide_minimize );
emit signalConsole("Minimize");
}
// emit signalWindowMinimize(); // TB window control
#endif
}
}

View File

@@ -48,6 +48,11 @@ class WindowCtrl : public QObject
*/
explicit WindowCtrl( Container* container, Preferences* pref, QObject *parent = nullptr );
/**
* @brief ~WindowCtrlUnix. Destructor.
*/
~WindowCtrl();
/**
* @brief captureWindow. Capture the TB window.
*
@@ -57,6 +62,11 @@ class WindowCtrl : public QObject
*/
bool captureWindow( const QString& title );
/**
* @brief shutdown. Handle app shutdown.
*/
void shutdown();
public slots:
/**
@@ -82,11 +92,18 @@ class WindowCtrl : public QObject
void slotWindowTitle( QString title );
/**
* @brief slotMinimizeHideChange. Handle the minimizeHide signal.
* @brief slotHideOnMinimizeChange. Handle the hide on minimize signal.
*
* @param state The state
*/
void slotMinimizeHideChange();
void slotHideOnMinimizeChange();
/**
* @brief slotMinimizeOnCloseChange. Handle the minimize on close signal.
*
* @param state The state
*/
void slotMinimizeOnCloseChange();
/**
* @brief slotWindowState. Handle the window state change signal.
@@ -128,9 +145,14 @@ class WindowCtrl : public QObject
QString m_window_title;
/**
* @brief m_minimize_hide. State of minimizeHide
* @brief m_hide_minimize. State of hide on minimize.
*/
bool m_minimize_hide;
bool m_hide_minimize;
/**
* @brief m_minimize_close. State of minimize on close.
*/
bool m_minimize_close;
/**
* @brief m_state. State of the TB window.

View File

@@ -131,7 +131,8 @@ SysTrayX.Messaging = {
const getter = browser.storage.sync.get([
"debug",
"minimizeHide",
"hideOnMinimize",
"minimizeOnClose",
"iconType",
"iconMime",
"icon"
@@ -143,13 +144,15 @@ SysTrayX.Messaging = {
console.debug("Get preferences from storage");
const debug = result.debug || "false";
const minimizeHide = result.minimizeHide || "true";
const hideOnMinimize = result.hideOnMinimize || "true";
const minimizeOnClose = result.minimizeOnClose || "true";
const iconType = result.iconType || "0";
const iconMime = result.iconMime || "image/png";
const icon = result.icon || [];
console.log(`Debug ${debug}`);
console.log(`Debug ${minimizeHide}`);
console.log(`Debug ${hideOnMinimize}`);
console.log(`Debug ${minimizeOnClose}`);
console.log(`Type ${iconType}`);
console.log(`Mime ${iconMime}`);
console.log(icon);
@@ -158,7 +161,8 @@ SysTrayX.Messaging = {
SysTrayX.Link.postSysTrayXMessage({
preferences: {
debug: debug,
minimizeHide: minimizeHide,
hideOnMinimize: hideOnMinimize,
minimizeOnClose: minimizeOnClose,
iconType: iconType,
iconMime: iconMime,
icon: icon
@@ -281,10 +285,17 @@ SysTrayX.Link = {
});
}
const minimizeHide = response["preferences"].minimizeHide;
if (minimizeHide) {
const hideOnMinimize = response["preferences"].hideOnMinimize;
if (hideOnMinimize) {
browser.storage.sync.set({
minimizeHide: minimizeHide
hideOnMinimize: hideOnMinimize
});
}
const minimizeOnClose = response["preferences"].minimizeOnClose;
if (minimizeOnClose) {
browser.storage.sync.set({
minimizeOnClose: minimizeOnClose
});
}

View File

@@ -25,7 +25,9 @@
<div id="WindowsContent" class="tabcontent" style="display:block">
<form>
<h3>Windows</h3>
<input type="checkbox" name="minimizeHide" value="" /> Minimizing window
<input type="checkbox" name="hideOnMinimize" value="" /> Minimizing
window hides to tray<br />
<input type="checkbox" name="minimizeOnClose" value="" /> Closing window
hides to tray<br />
</form>
</div>

View File

@@ -58,13 +58,22 @@ SysTrayX.SaveOptions = {
console.debug("Store debug state: " + `${debug}`);
//
// Save minimize hide state
// Save hide on minimize state
//
let minimizeHide = document.querySelector('input[name="minimizeHide"]').checked;
let hideOnMinimize = document.querySelector('input[name="hideOnMinimize"]').checked;
browser.storage.sync.set({
minimizeHide: `${minimizeHide}`
hideOnMinimize: `${hideOnMinimize}`
});
console.debug("Store minimizeHide state: " + `${minimizeHide}`);
console.debug("Store hideOnMinimize state: " + `${hideOnMinimize}`);
//
// Save minimize on close state
//
let minimizeOnClose = document.querySelector('input[name="minimizeOnClose"]').checked;
browser.storage.sync.set({
minimizeOnClose: `${minimizeOnClose}`
});
console.debug("Store minimizeOnClose state: " + `${minimizeOnClose}`);
//
// Save icon preferences
@@ -115,12 +124,21 @@ SysTrayX.RestoreOptions = {
);
//
// Restore minimize hide
// Restore hide on minimize
//
const getMinimizeHide = browser.storage.sync.get("minimizeHide");
getMinimizeHide.then(
SysTrayX.RestoreOptions.setMinimizeHide,
SysTrayX.RestoreOptions.onMinimizeHideError
const getHideOnMinimize = browser.storage.sync.get("hideOnMinimize");
getHideOnMinimize.then(
SysTrayX.RestoreOptions.setHideOnMinimize,
SysTrayX.RestoreOptions.onHideOnMinimizeError
);
//
// Restore minimize on close
//
const getMinimizeOnClose = browser.storage.sync.get("minimizeOnClose");
getMinimizeOnClose.then(
SysTrayX.RestoreOptions.setMinimizeOnClose,
SysTrayX.RestoreOptions.onMinimizeOnCloseError
);
//
@@ -161,19 +179,35 @@ SysTrayX.RestoreOptions = {
},
//
// Restore minimize hide callbacks
// Restore hide on minimize callbacks
//
setMinimizeHide: function(result) {
const minimizeHide = result.minimizeHide || "true";
setHideOnMinimize: function(result) {
const hideOnMinimize = result.hideOnMinimize || "true";
console.debug("MinimizeHide: " + minimizeHide);
console.debug("hideOnMinimize: " + hideOnMinimize);
const checkbox = document.querySelector(`input[name="minimizeHide"]`);
checkbox.checked = minimizeHide === "true";
const checkbox = document.querySelector(`input[name="hideOnMinimize"]`);
checkbox.checked = hideOnMinimize === "true";
},
onMinimizeHideError: function(error) {
console.log(`MinimizeHide Error: ${error}`);
onHideOnMinimizeError: function(error) {
console.log(`hideOnMinimize Error: ${error}`);
},
//
// Restore minimize on close callbacks
//
setMinimizeOnClose: function(result) {
const minimizeOnClose = result.minimizeOnClose || "true";
console.debug("minimizeOnClose: " + minimizeOnClose);
const checkbox = document.querySelector(`input[name="minimizeOnClose"]`);
checkbox.checked = minimizeOnClose === "true";
},
onMinimizeOnCloseError: function(error) {
console.log(`minimizeOnClose Error: ${error}`);
},
//
@@ -262,9 +296,14 @@ SysTrayX.StorageChanged = {
});
changed_icon_mime = true;
}
if (item === "minimizeHide") {
SysTrayX.RestoreOptions.setMinimizeHide({
minimizeHide: changes[item].newValue
if (item === "hideOnMinimize") {
SysTrayX.RestoreOptions.setHideOnMinimize({
hideOnMinimize: changes[item].newValue
});
}
if (item === "minimizeOnClose") {
SysTrayX.RestoreOptions.setMinimizeOnClose({
minimizeOnClose: changes[item].newValue
});
}
if (item === "debug") {