Add hide type option

This commit is contained in:
Ximi1970
2020-04-07 17:19:02 +02:00
parent 5a30f49ccc
commit 77d49caee3
18 changed files with 299 additions and 32 deletions

View File

@@ -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.
*/

View File

@@ -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.
*/

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>684</width>
<height>278</height>
<height>310</height>
</rect>
</property>
<property name="windowTitle">
@@ -20,12 +20,49 @@
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<item row="0" column="0" rowspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Windows</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QRadioButton" name="defaultMinimizeRadioButton">
<property name="text">
<string>Default minimize</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">minimizeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="minimizeMethod1RadioButton">
<property name="text">
<string>Minimize to tray, method 1</string>
</property>
<attribute name="buttonGroup">
<string notr="true">minimizeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="minimizeMethod2RadioButton">
<property name="text">
<string>Minimize to tray, method 2</string>
</property>
<attribute name="buttonGroup">
<string notr="true">minimizeTypeGroup</string>
</attribute>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="hideOnMinimizeCheckBox">
<property name="text">
@@ -203,14 +240,7 @@
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="debugWindowCheckBox">
<property name="text">
<string>Display debug window</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<item row="1" column="1" rowspan="2" colspan="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Number properties</string>
@@ -263,6 +293,13 @@
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="debugWindowCheckBox">
<property name="text">
<string>Display debug window</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
@@ -300,5 +337,6 @@
</connections>
<buttongroups>
<buttongroup name="iconTypeGroup"/>
<buttongroup name="minimizeTypeGroup"/>
</buttongroups>
</ui>

View File

@@ -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
*/

View File

@@ -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.
*/

View File

@@ -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 );

View File

@@ -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
*/

View File

@@ -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.
*/

View File

@@ -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>( 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 );
}

View File

@@ -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.

View File

@@ -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() ) )
{

View File

@@ -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.

View File

@@ -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 );
}
}

View File

@@ -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.
*/

View File

@@ -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({

View File

@@ -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;

View File

@@ -32,6 +32,26 @@
<div id="WindowsContent" class="tabcontent" style="display: block;">
<form>
<h3>Windows</h3>
<table id="minimizeselect">
<tr>
<td>
<input type="radio" name="minimizeType" value="0" /> Default minimize
</td>
</tr>
<tr>
<td>
<input type="radio" name="minimizeType" value="1" /> Minimize to
tray, method 1
</td>
</tr>
<tr>
<td>
<input type="radio" name="minimizeType" value="2" /> Minimize to
tray, method 2
</td>
</tr>
</table>
<input type="checkbox" name="hideOnMinimize" value="" /> Minimizing
window hides to tray<br />
<input type="checkbox" name="startMinimized" value="" /> Start

View File

@@ -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";
},
};