Extend options for close

This commit is contained in:
Ximi1970
2020-06-28 23:23:12 +02:00
parent 7d2839d7d8
commit d017bfb0a0
16 changed files with 313 additions and 74 deletions

View File

@@ -51,7 +51,7 @@ Preferences::Preferences( QObject *parent ) : QObject( parent )
m_minimize_type = PREF_DEFAULT_MINIMIZE;
m_start_minimized = false;
m_minimize_on_close = true;
m_close_type = PREF_MINIMIZE_ALL_WINDOWS;
m_debug = false;
@@ -474,27 +474,27 @@ void Preferences::setStartMinimized( bool state )
/*
* Get the minmize on close pref.
* Get the close type pref.
*/
bool Preferences::getMinimizeOnClose() const
Preferences::CloseType Preferences::getCloseType() const
{
return m_minimize_on_close;
return m_close_type;
}
/*
* Set the minmize on close pref.
* Set the close type pref.
*/
void Preferences::setMinimizeOnClose( bool state )
void Preferences::setCloseType( CloseType close_type )
{
if( m_minimize_on_close != state )
if( m_close_type != close_type )
{
m_minimize_on_close = state;
m_close_type = close_type;
/*
* Tell the world the new preference
*/
emit signalMinimizeOnCloseChange();
emit signalCloseTypeChange();
}
}

View File

@@ -21,6 +21,17 @@ class Preferences : public QObject
public:
/*
* Close types
*/
enum CloseType {
PREF_CLOSE_WINDOW = 0,
PREF_CLOSE_ALL_WINDOWS,
PREF_CLOSE_ALL_MINIMIZE_LAST,
PREF_MINIMIZE_WINDOW,
PREF_MINIMIZE_ALL_WINDOWS
};
/*
* Minimize types
*/
@@ -327,18 +338,18 @@ class Preferences : public QObject
void setStartMinimized( bool state );
/**
* @brief getMinimizeOnClose. Get the minimize on close state.
* @brief getCloseType. Get the close type.
*
* @return The state.
*/
bool getMinimizeOnClose() const;
CloseType getCloseType() const;
/**
* @brief setMinimizeOnClose. Set the minimize on close state.
* @brief setCloseType. Set the close type.
*
* @param The state.
* @param The close type.
*/
void setMinimizeOnClose( bool state );
void setCloseType( CloseType close_type );
/**
* @brief getDebug. Get the debug windows state.
@@ -447,9 +458,9 @@ class Preferences : public QObject
void signalStartMinimizedChange();
/**
* @brief signalMinimizeOnCloseChange. Signal a minimize on close state change.
* @brief signalCloseTypeChange. Signal a close type change.
*/
void signalMinimizeOnCloseChange();
void signalCloseTypeChange();
/**
* @brief signalDebugChange. Signal a debug state change.
@@ -544,9 +555,9 @@ class Preferences : public QObject
bool m_start_minimized;
/**
* @brief m_minimize_on_close. Minimize TB instead of closing.
* @brief m_close_type. Closing type for TB.
*/
bool m_minimize_on_close;
CloseType m_close_type;
/**
* @brief m_debug. Display debug window.

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>543</width>
<height>600</height>
<width>515</width>
<height>696</height>
</rect>
</property>
<property name="windowTitle">
@@ -271,7 +271,7 @@
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Minimize</string>
<string>Minimize action</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
@@ -317,6 +317,72 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_6">
<property name="title">
<string>Close action</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_17">
<item>
<layout class="QVBoxLayout" name="verticalLayout_16">
<item>
<widget class="QRadioButton" name="closeWindowRadioButton">
<property name="text">
<string>Close windows individually</string>
</property>
<attribute name="buttonGroup">
<string notr="true">closeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="closeAllWindowsRadioButton">
<property name="text">
<string>Close all windows</string>
</property>
<attribute name="buttonGroup">
<string notr="true">closeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="closeAllMinimizeLastRadioButton">
<property name="text">
<string>Close all, minimize last</string>
</property>
<attribute name="buttonGroup">
<string notr="true">closeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="minimizeWindowRadioButton">
<property name="text">
<string>Minimize windows individually</string>
</property>
<attribute name="buttonGroup">
<string notr="true">closeTypeGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="minimizeAllWindowsRadioButton">
<property name="text">
<string>Minimize all windows</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">closeTypeGroup</string>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
@@ -326,16 +392,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="minimizeOnCloseCheckBox">
<property name="text">
<string>Minimize on close</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
@@ -507,9 +563,10 @@
</connection>
</connections>
<buttongroups>
<buttongroup name="defaultIconTypeGroup"/>
<buttongroup name="minimizeTypeGroup"/>
<buttongroup name="iconTypeGroup"/>
<buttongroup name="defaultIconTypeGroup"/>
<buttongroup name="countTypeGroup"/>
<buttongroup name="iconTypeGroup"/>
<buttongroup name="closeTypeGroup"/>
</buttongroups>
</ui>

View File

@@ -30,6 +30,15 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi
m_link = link;
m_pref = pref;
/*
* Set close type button Ids
*/
m_ui->closeTypeGroup->setId( m_ui->closeWindowRadioButton, Preferences::PREF_CLOSE_WINDOW);
m_ui->closeTypeGroup->setId( m_ui->closeAllWindowsRadioButton, Preferences::PREF_CLOSE_ALL_WINDOWS );
m_ui->closeTypeGroup->setId( m_ui->closeAllMinimizeLastRadioButton, Preferences::PREF_CLOSE_ALL_MINIMIZE_LAST );
m_ui->closeTypeGroup->setId( m_ui->minimizeWindowRadioButton, Preferences::PREF_MINIMIZE_WINDOW );
m_ui->closeTypeGroup->setId( m_ui->minimizeAllWindowsRadioButton, Preferences::PREF_MINIMIZE_ALL_WINDOWS );
/*
* Set minimize type button Ids
*/
@@ -46,6 +55,13 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi
#endif
#ifdef Q_OS_LINUX
m_ui->minimizeMethod1RadioButton->setText( "Minimize to tray" );
m_ui->minimizeMethod2RadioButton->hide();
#endif
#if defined( Q_OS_UNIX ) && defined( NO_KDE_INTEGRATION )
m_ui->hideDefaultIconCheckBox->hide();
@@ -143,9 +159,9 @@ void PreferencesDialog::setStartMinimized( bool state )
/*
* Set the minimize on close state
*/
void PreferencesDialog::setMinimizeOnClose( bool state )
void PreferencesDialog::setCloseType( Preferences::CloseType close_type )
{
m_ui->minimizeOnCloseCheckBox->setChecked( state );
( m_ui->closeTypeGroup->button( close_type ) )->setChecked( true );
}
@@ -313,7 +329,7 @@ void PreferencesDialog::slotAccept()
m_pref->setMinimizeType( static_cast< Preferences::MinimizeType >( m_ui->minimizeTypeGroup->checkedId() ) );
m_pref->setStartMinimized( m_ui->startMinimizedCheckBox->isChecked() );
m_pref->setMinimizeOnClose( m_ui->minimizeOnCloseCheckBox->isChecked() );
m_pref->setCloseType( static_cast< Preferences::CloseType >( m_ui->closeTypeGroup->checkedId() ) );
m_pref->setShowNumber( m_ui->showNumberCheckBox->isChecked() );
m_pref->setNumberColor( m_number_color );
@@ -442,9 +458,9 @@ void PreferencesDialog::slotStartMinimizedChange()
/*
* Handle the minimize on close change signal
*/
void PreferencesDialog::slotMinimizeOnCloseChange()
void PreferencesDialog::slotCloseTypeChange()
{
setMinimizeOnClose( m_pref->getMinimizeOnClose() );
setCloseType( m_pref->getCloseType() );
}

View File

@@ -63,11 +63,11 @@ class PreferencesDialog : public QDialog
void setStartMinimized( bool state );
/**
* @brief setMinimizeOnClose. Set the minimize on close state.
* @brief setCloseType. Set the close type.
*
* @param state The state.
* @param state The close type.
*/
void setMinimizeOnClose( bool state );
void setCloseType( Preferences::CloseType close_type );
/**
* @brief setIconType. Set the icon type.
@@ -176,9 +176,9 @@ class PreferencesDialog : public QDialog
void slotStartMinimizedChange();
/**
* @brief slotMinimizeOnCloseChange. Slot for handling minimize on close change signals.
* @brief slotCloseTypeChange. Slot for handling close type change signals.
*/
void slotMinimizeOnCloseChange();
void slotCloseTypeChange();
/**
* @brief slotIconTypeChange. Slot for handling icon type change signals.

View File

@@ -119,7 +119,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
connect( m_preferences, &Preferences::signalCountTypeChange, m_pref_dialog, &PreferencesDialog::slotCountTypeChange );
connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeTypeChange );
connect( m_preferences, &Preferences::signalStartMinimizedChange, m_pref_dialog, &PreferencesDialog::slotStartMinimizedChange );
connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_pref_dialog, &PreferencesDialog::slotMinimizeOnCloseChange );
connect( m_preferences, &Preferences::signalCloseTypeChange, m_pref_dialog, &PreferencesDialog::slotCloseTypeChange );
connect( m_preferences, &Preferences::signalDebugChange, m_pref_dialog, &PreferencesDialog::slotDebugChange );
connect( m_preferences, &Preferences::signalDefaultIconTypeChange, m_link, &SysTrayXLink::slotDefaultIconTypeChange );
@@ -133,7 +133,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent )
connect( m_preferences, &Preferences::signalCountTypeChange, m_link, &SysTrayXLink::slotCountTypeChange );
connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_link, &SysTrayXLink::slotMinimizeTypeChange );
connect( m_preferences, &Preferences::signalStartMinimizedChange, m_link, &SysTrayXLink::slotStartMinimizedChange );
connect( m_preferences, &Preferences::signalMinimizeOnCloseChange, m_link, &SysTrayXLink::slotMinimizeOnCloseChange );
connect( m_preferences, &Preferences::signalCloseTypeChange, m_link, &SysTrayXLink::slotCloseTypeChange );
connect( m_preferences, &Preferences::signalDebugChange, m_link, &SysTrayXLink::slotDebugChange );
connect( m_preferences, &Preferences::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObjectPref );
@@ -514,30 +514,41 @@ void SysTrayX::slotAddOnShutdown()
*/
void SysTrayX::slotShutdown()
{
if( m_preferences->getMinimizeOnClose() )
/*
* What shall we do?
*/
switch( m_preferences->getCloseType() )
{
m_link->sendShutdown();
}
else
{
/*
* Hide systray icon to prevent ghost systray icon in Windows
*/
if( m_tray_icon )
case Preferences::PREF_CLOSE_WINDOW:
case Preferences::PREF_CLOSE_ALL_WINDOWS:
{
m_tray_icon->hide();
/*
* Hide systray icon to prevent ghost systray icon in Windows
*/
if( m_tray_icon )
{
m_tray_icon->hide();
}
/*
* Close the TB window
*/
emit signalClose();
/*
* Let's quit
*/
QCoreApplication::quit();
break;
}
/*
* Close the TB window
*/
emit signalClose();
/*
* Let's quit
*/
QCoreApplication::quit();
case Preferences::PREF_CLOSE_ALL_MINIMIZE_LAST:
case Preferences::PREF_MINIMIZE_WINDOW:
case Preferences::PREF_MINIMIZE_ALL_WINDOWS:
{
m_link->sendShutdown();
break;
}
}
}

View File

@@ -619,14 +619,14 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref )
m_pref->setStartMinimized( start_minimized );
}
if( pref.contains( "minimizeOnClose" ) && pref[ "minimizeOnClose" ].isString() )
if( pref.contains( "closeType" ) && pref[ "closeType" ].isString() )
{
bool minimize_on_close = pref[ "minimizeOnClose" ].toString() == "true";
Preferences::CloseType close_type = static_cast< Preferences::CloseType >( pref[ "closeType" ].toString().toInt() );
/*
* Store the new start minimized state
* Store the new close type
*/
m_pref->setMinimizeOnClose( minimize_on_close );
m_pref->setCloseType( close_type );
}
if( pref.contains( "debug" ) && pref[ "debug" ].isString() )
@@ -653,7 +653,7 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref )
prefObject.insert("debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) );
prefObject.insert("minimizeType", QJsonValue::fromVariant( QString::number( pref.getMinimizeType() ) ) );
prefObject.insert("startMinimized", QJsonValue::fromVariant( QString( pref.getStartMinimized() ? "true" : "false" ) ) );
prefObject.insert("minimizeOnClose", QJsonValue::fromVariant( QString( pref.getMinimizeOnClose() ? "true" : "false" ) ) );
prefObject.insert("closeType", QJsonValue::fromVariant( QString::number( pref.getCloseType() ) ) );
prefObject.insert("defaultIconType", QJsonValue::fromVariant( QString::number( pref.getDefaultIconType() ) ) );
prefObject.insert("defaultIconMime", QJsonValue::fromVariant( pref.getDefaultIconMime() ) );
prefObject.insert("defaultIcon", QJsonValue::fromVariant( QString( pref.getDefaultIconData().toBase64() ) ) );
@@ -734,9 +734,9 @@ void SysTrayXLink::slotStartMinimizedChange()
/*
* Handle a minimize on close state change signal
* Handle a close type change signal
*/
void SysTrayXLink::slotMinimizeOnCloseChange()
void SysTrayXLink::slotCloseTypeChange()
{
if( m_pref->getAppPrefChanged() )
{

View File

@@ -218,9 +218,9 @@ class SysTrayXLink : public QObject
void slotStartMinimizedChange();
/**
* @brief slotMinimizeOnCloseChange. Handle a change in start minimized state.
* @brief slotCloseTypeChange. Slot for handling close type change signals.
*/
void slotMinimizeOnCloseChange();
void slotCloseTypeChange();
/**
* @brief slotDefaultIconTypeChange. Slot for handling default icon type change signals.

View File

@@ -67,6 +67,23 @@ bool WindowCtrlUnix::isThunderbird( qint64 pid ) const
}
/*
* Get the number of visible windows.
*/
int WindowCtrlUnix::getVisibleWindows()
{
/*
* Get the TB windows and states
*/
findWindows( getppid() );
/*
* Count the visible states
*/
return m_tb_window_states.count( Preferences::STATE_NORMAL );
}
/*
* Get the process name
*/

View File

@@ -156,6 +156,13 @@ class WindowCtrlUnix : public QObject
*/
bool isThunderbird( qint64 pid ) const;
/**
* @brief visibleWindows. Get the number of visible windows.
*
* @return The number of windows.
*/
int getVisibleWindows();
/**
* @brief getProcessName. Get the name of the proces by pid.
*

View File

@@ -59,6 +59,15 @@ bool WindowCtrl::thunderbirdStart() const
}
/*
* Get the number of visible windows.
*/
int WindowCtrl::visibleWindows()
{
return getVisibleWindows();
}
/*
* Test func 1
*/

View File

@@ -47,6 +47,13 @@ class WindowCtrl : public QObject
*/
bool thunderbirdStart() const;
/**
* @brief visibleWindows. Get the number of visible windows.
*
* @return The number of windows.
*/
int visibleWindows();
signals:
// void signalShow();

View File

@@ -155,6 +155,7 @@ SysTrayX.Messaging = {
const getter = browser.storage.sync.get([
"debug",
"minimizeType",
"closeType",
"startMinimized",
"minimizeOnClose",
"defaultIconType",
@@ -175,6 +176,7 @@ SysTrayX.Messaging = {
sendPreferencesStorage: function (result) {
const debug = result.debug || "false";
const minimizeType = result.minimizeType || "1";
const closeType = result.closeType || "4";
const startMinimized = result.startMinimized || "false";
const minimizeOnClose = result.minimizeOnClose || "true";
const defaultIconType = result.defaultIconType || "0";
@@ -194,6 +196,7 @@ SysTrayX.Messaging = {
preferences: {
debug: debug,
minimizeType: minimizeType,
closeType: closeType,
startMinimized: startMinimized,
minimizeOnClose: minimizeOnClose,
defaultIconType: defaultIconType,
@@ -369,6 +372,13 @@ SysTrayX.Link = {
});
}
const closeType = response["preferences"].closeType;
if (closeType) {
browser.storage.sync.set({
closeType: closeType,
});
}
const startMinimized = response["preferences"].startMinimized;
if (startMinimized) {
browser.storage.sync.set({

View File

@@ -68,6 +68,14 @@ body {
padding: 10px 10px 10px 10px;
}
#closeselect {
width: 20em;
border-style: solid;
border-width: 1px;
margin: 10px 10px 10px 10px;
padding: 10px 10px 10px 10px;
}
#defaulticonselect {
width: 20em;
border-style: solid;

View File

@@ -62,6 +62,47 @@
</tr>
</table>
<table id="closeselect">
<caption>
Close action
</caption>
<tr id="closewindow">
<td>
<input type="radio" name="closeType" value="0" />
<label for="0" id="closewindowlabel">Close windows individually</label
><br />
</td>
</tr>
<tr id="closeallwindows">
<td>
<input type="radio" name="closeType" value="1" />
<label for="1" id="closeallwindowslabel">Close all windows</label
><br />
</td>
</tr>
<tr id="closeallminimizelast">
<td>
<input type="radio" name="closeType" value="2" />
<label for="2" id="closeallwindowslabel">Close all, minimize last</label
><br />
</td>
</tr>
<tr id="minimizewindow">
<td>
<input type="radio" name="closeType" value="3" />
<label for="3" id="minimizewindowlabel">Minimize window individually</label
><br />
</td>
</tr>
<tr id="minimizeallwindows">
<td>
<input type="radio" name="closeType" value="4" />
<label for="4" id="minimizeallwindowslabel">Minimize all windows</label
><br />
</td>
</tr>
</table>
<input type="checkbox" name="startMinimized" value="" /> Start
application minimized<br />

View File

@@ -65,6 +65,18 @@ SysTrayX.SaveOptions = {
minimizeType: minimizeType,
});
//
// Save close preferences
//
const closeType = document.querySelector(
'input[name="closeType"]:checked'
).value;
// Store minimize preferences
browser.storage.sync.set({
closeType: closeType,
});
//
// Save start minimized state
//
@@ -205,6 +217,17 @@ SysTrayX.RestoreOptions = {
SysTrayX.RestoreOptions.onMinimizeTypeError
);
//
// Restore close type
//
const getCloseType = browser.storage.sync.get(
"closeType",
);
getCloseType.then(
SysTrayX.RestoreOptions.setCloseType,
SysTrayX.RestoreOptions.onCloseTypeError
);
//
// Restore start minimized
//
@@ -364,6 +387,22 @@ SysTrayX.RestoreOptions = {
console.log(`Minimize type Error: ${error}`);
},
//
// Restore close type callbacks
//
setCloseType: function (result) {
const closeType = result.closeType || "4";
const radioButton = document.querySelector(
`input[name="closeType"][value="${closeType}"]`
);
radioButton.checked = true;
},
onCloseTypeError: function (error) {
console.log(`Close type Error: ${error}`);
},
//
// Restore hide on minimize callbacks
//
@@ -749,6 +788,11 @@ SysTrayX.StorageChanged = {
minimizeType: changes[item].newValue,
});
}
if (item === "closeType") {
SysTrayX.RestoreOptions.setCloseType({
closeType: changes[item].newValue,
});
}
if (item === "startMinimized") {
SysTrayX.RestoreOptions.setStartMinimized({
startMinimized: changes[item].newValue,
@@ -781,6 +825,7 @@ SysTrayX.StorageChanged = {
document.getElementById("defaulticonselect").className = "active";
document.getElementById("iconselect").className = "active";
document.getElementById("minimizeselect").className = "active";
document.getElementById("closeselect").className = "active";
},
};