summaryrefslogtreecommitdiffstats
path: root/src/traylabelmgr.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2020-03-26 15:10:12 +0900
committerMichele Calgaro <[email protected]>2020-03-26 15:10:12 +0900
commit88fbf7e81a6ab317262bd97875a0296f59287586 (patch)
tree0effe4e64f5cdf3c0aa42e8ca8096cca8b6ddc89 /src/traylabelmgr.cpp
parent5c2a45303ead893a78c69ddbef21d5acedf654ff (diff)
downloadtdedocker-88fbf7e81a6ab317262bd97875a0296f59287586.tar.gz
tdedocker-88fbf7e81a6ab317262bd97875a0296f59287586.zip
1) Additional work on tq app -> tde app translation.
2) Make sure to exit app after restore if no app window can be grabbed 3) Save state only for known applications (app with empty name will not be saved and restored) Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'src/traylabelmgr.cpp')
-rw-r--r--src/traylabelmgr.cpp78
1 files changed, 53 insertions, 25 deletions
diff --git a/src/traylabelmgr.cpp b/src/traylabelmgr.cpp
index ae32167..29aa0f4 100644
--- a/src/traylabelmgr.cpp
+++ b/src/traylabelmgr.cpp
@@ -37,7 +37,6 @@
#include <stdlib.h>
TrayLabelMgr* TrayLabelMgr::gTrayLabelMgr = NULL;
-const char *TrayLabelMgr::mOptionString = "+bdefi:lmop:qtw:";
TrayLabelMgr* TrayLabelMgr::instance()
{
@@ -85,7 +84,7 @@ void TrayLabelMgr::startup(void)
state == SysTrayAbsent ? i18n("No system tray found") : i18n("System tray appears to be hidden"),
i18n("TDEDocker")) == KMessageBox::Cancel)
{
- tqApp->quit();
+ TDEApplication::kApplication()->quit();
return;
}
}
@@ -106,8 +105,13 @@ void TrayLabelMgr::startup(void)
// Process the request Q from previous instances
TRACE("Request queue has %i requests", mRequestQ.count());
for(unsigned i=0; i < mRequestQ.count(); i++)
+ {
ok |= processCommand(mRequestQ[i]);
- if (!ok) tqApp->quit();
+ }
+ if (!ok)
+ {
+ TDEApplication::kApplication()->quit();
+ }
}
// Initialize a TQTrayLabel after its creation
@@ -258,7 +262,7 @@ bool TrayLabelMgr::processCommand(int argc, char** argv)
optind = 0; // initialise the getopt static
- while ((option = getopt(argc, argv, mOptionString)) != EOF)
+ while ((option = getopt(argc, argv, "+bdefi:lmop:qtw:")) != EOF)
{
switch (option)
{
@@ -364,7 +368,7 @@ TQTrayLabel *TrayLabelMgr::selectAndDock(Window w, bool checkNormality)
if (!isWindowDocked(w)) return new CustomTrayLabel(w);
- TRACE("0x%x is not docked", (unsigned) w);
+ TRACE("0x%x is alredy docked", (unsigned) w);
KMessageBox::error(NULL, i18n("This window is already docked.\n"
"Click on system tray icon to toggle docking."), i18n("TDEDocker"));
@@ -407,7 +411,9 @@ TQTrayLabel *TrayLabelMgr::dockApplication(char *argv[])
if (execvp(argv[0], argv) == -1)
{
tqDebug("%s", i18n("Failed to exec [%1]: %2").arg(argv[0]).arg(strerror(errno)).local8Bit().data());
- ::exit(0); // will become a zombie in some systems :(
+ // Exit the forked process only.
+ // Using TDEApplication::kApplication()->quit() crashes the parent application.
+ exit(0);
return NULL;
}
}
@@ -423,7 +429,7 @@ TQTrayLabel *TrayLabelMgr::dockApplication(char *argv[])
if (argv[i]) cmd_line << argv[i]; else break;
TQTrayLabel *label = new CustomTrayLabel(cmd_line, pid);
- tqApp->syncX();
+ TDEApplication::kApplication()->syncX();
write(filedes[1], buf, sizeof(buf));
close(filedes[0]);
close(filedes[1]);
@@ -453,7 +459,10 @@ void TrayLabelMgr::trayLabelDestroyed(TQObject *t)
{
bool reconnect = ((TQObject *)mTrayLabels.getLast() == t);
mTrayLabels.removeRef((TQTrayLabel*)t);
- if (mTrayLabels.isEmpty()) tqApp->quit();
+ if (mTrayLabels.isEmpty())
+ {
+ TDEApplication::kApplication()->quit();
+ }
else if (reconnect)
{
TRACE("Reconnecting");
@@ -500,39 +509,58 @@ void TrayLabelMgr::doRestoreSession()
TRACE("Restoring session");
TDEConfig *config = TDEApplication::kApplication()->sessionConfig();
- for (int i = 1; ; ++i)
+ if (config->hasGroup("General"))
{
- if (!config->hasGroup("Instance" + TQString::number(i)))
+ config->setGroup("General");
+ int count = config->readNumEntry("InstanceCount", 0);
+ for (int i = 0; i < count; ++i)
{
- return;
- }
- config->setGroup("Instance" + TQString::number(i));
- TQString pname = config->readEntry("Application", TQString::null);
- if (!pname.isEmpty())
- {
- TRACE("Restoring Application[%s]", pname.ascii());
- manageTrayLabel(new CustomTrayLabel(TQStringList::split(" ", pname), 0));
- mTrayLabels.getFirst()->restoreState(config);
+ if (!config->hasGroup(TQString::number(i)))
+ {
+ break;
+ }
+ config->setGroup(TQString::number(i));
+ TQString pname = config->readEntry("Application", TQString::null);
+ if (!pname.isEmpty())
+ {
+ TRACE("Restoring Application[%s]", pname.ascii());
+ manageTrayLabel(new CustomTrayLabel(TQStringList::split(" ", pname), 0));
+ mTrayLabels.getFirst()->restoreState(config);
+ }
}
}
+ // Exit if no application could be restored
+ if (mTrayLabels.isEmpty())
+ {
+ TDEApplication::kApplication()->quit();
+ }
}
bool TrayLabelMgr::saveState(TQSessionManager &sm)
{
TRACE("Saving session");
- int i = 1;
+ int i = 0;
TQTrayLabel *t;
TDEConfig *config = TDEApplication::kApplication()->sessionConfig();
- TQPtrListIterator <TQTrayLabel> it(mTrayLabels);
+ TQPtrListIterator<TQTrayLabel> it(mTrayLabels);
for (it.toFirst(); it.current(); ++it)
{
t = it.current();
- TRACE("Saving instance %i", i);
- config->setGroup("Instance" + TQString::number(i));
- t->saveState(config);
- ++i;
+ config->setGroup(TQString::number(i));
+ if (t->saveState(config))
+ {
+ TRACE("Saved instance %i", i);
+ ++i;
+ }
+ else
+ {
+ config->deleteGroup(TQString::number(i));
+ }
}
+
+ config->setGroup("General");
+ config->writeEntry("InstanceCount", i);
return true;
}