diff options
Diffstat (limited to 'src/tdedocker.cpp')
-rw-r--r-- | src/tdedocker.cpp | 139 |
1 files changed, 41 insertions, 98 deletions
diff --git a/src/tdedocker.cpp b/src/tdedocker.cpp index 2b404c7..2b24cf5 100644 --- a/src/tdedocker.cpp +++ b/src/tdedocker.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2004 Girish Ramakrishnan All Rights Reserved. - * + * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -19,7 +19,6 @@ // $Id: tdedocker.cpp,v 1.24 2005/02/04 10:25:46 cs19713 Exp $ -#include <tqsessionmanager.h> #include <tqdir.h> #include <tqfile.h> #include <tqtextcodec.h> @@ -27,6 +26,8 @@ #include <tqtimer.h> #include <tqstring.h> +#include <tdecmdlineargs.h> +#include <tdeconfig.h> #include <tdelocale.h> #include "trace.h" @@ -39,83 +40,37 @@ #include <stdio.h> #include <stdlib.h> -// #define TMPFILE_PREFIX TQString("/tmp/tdedocker.") -#define TMPFILE_PREFIX TQDir::homeDirPath() + "/.tdedocker." +#define TMPFILE_PREFIX TQString("/tmp/tdedocker.") -TDEDocker::TDEDocker(int& argc, char** argv) - :TQApplication(argc, argv), mTrayLabelMgr(0) +TDEDocker::TDEDocker() + : TDEApplication(), mTrayLabelMgr(NULL), firstSaveState(true) { INIT_TRACE(); - - // Attempt doing anything only if the CLI arguments were good - opterr = 0; // suppress the warning - int option; - while ((option = getopt(argc, argv, TrayLabelMgr::options().latin1())) != EOF) - { - if (option == '?') - { - if (optopt == 'v') printVersion(); else printUsage(optopt); - ::exit(0); - } - } - /* * Detect and transfer control to previous instance (if one exists) - * _KDOCKER_RUNNING is a X Selection. We start out by trying to locate the + * _TDEDOCKER_RUNNING is a X Selection. We start out by trying to locate the * selection owner. If someone else owns it, transfer control to that * instance of TDEDocker */ Display *display = TQPaintDevice::x11AppDisplay(); - Atom tdedocker = XInternAtom(display, "_KDOCKER_RUNNING", False); + Atom tdedocker = XInternAtom(display, "_TDEDOCKER_RUNNING", False); Window prev_instance = XGetSelectionOwner(display, tdedocker); if (prev_instance == None) { - mSelectionOwner = XCreateSimpleWindow(display, tqt_xrootwin(), 1, 1, 1, - 1, 1, 1, 1); + if (TDEApplication::kApplication()->isRestored()) + { + // Required so that the saved config is correctly loaded + // (see TrayLabelMgr::doRestoreSession() for usage) + TDEApplication::kApplication()->sessionConfig(); + } + mSelectionOwner = XCreateSimpleWindow(display, tqt_xrootwin(), 1, 1, 1, 1, 1, 1, 1); XSetSelectionOwner(display, tdedocker, mSelectionOwner, CurrentTime); TRACE("Selection owner set to 0x%x", (unsigned) mSelectionOwner); mTrayLabelMgr = TrayLabelMgr::instance(); } else - notifyPreviousInstance(prev_instance); // does not return -} - -void TDEDocker::printVersion(void) -{ - tqDebug("TQt: %s", tqVersion()); - tqDebug("TDEDocker: %s", KDOCKER_APP_VERSION); -} - -// Prints the CLI arguments. Does not return -void TDEDocker::printUsage(char optopt) -{ - if (optopt != 'h') tqDebug("%s", i18n("tdedocker: invalid option -- %1").arg(optopt).local8Bit().data()); - - tqDebug("%s", i18n("Usage: TDEDocker [options] command\n").local8Bit().data()); - tqDebug("%s", i18n("Docks any application into the system tray\n").local8Bit().data()); - tqDebug("%s", i18n("command \tCommand to execute\n").local8Bit().data()); - tqDebug("%s", i18n("Options").local8Bit().data()); - tqDebug("%s", i18n("-a \tShow author information").local8Bit().data()); - tqDebug("%s", i18n("-b \tDont warn about non-normal windows (blind mode)").local8Bit().data()); - tqDebug("%s", i18n("-d \tDisable session management").local8Bit().data()); - tqDebug("%s", i18n("-e \tEnable session management").local8Bit().data()); - tqDebug("%s", i18n("-f \tDock window that has the focus(active window)").local8Bit().data()); - tqDebug("%s", i18n("-h \tDisplay this help").local8Bit().data()); - tqDebug("%s", i18n("-i icon\tCustom dock Icon").local8Bit().data()); - tqDebug("%s", i18n("-l \tLaunch on startup").local8Bit().data()); - tqDebug("%s", i18n("-m \tKeep application window mapped (dont hide on dock)").local8Bit().data()); - tqDebug("%s", i18n("-o \tDock when obscured").local8Bit().data()); - tqDebug("%s", i18n("-p secs\tSet ballooning timeout (popup time)").local8Bit().data()); - tqDebug("%s", i18n("-q \tDisable ballooning title changes (quiet)").local8Bit().data()); - tqDebug("%s", i18n("-t \tRemove this application from the task bar").local8Bit().data()); - tqDebug("%s", i18n("-v \tDisplay version").local8Bit().data()); - tqDebug("%s", i18n("-w wid \tWindow id of the application to dock\n").local8Bit().data()); - - tqDebug("%s", i18n("NOTE: Use -d for all startup scripts.\n").local8Bit().data()); - - tqDebug("%s", i18n("Bugs and wishes to [email protected]").local8Bit().data()); - tqDebug("%s", i18n("Project information at http://tdedocker.sourceforge.net").local8Bit().data()); + notifyPreviousInstance(prev_instance); // does not return } void TDEDocker::notifyPreviousInstance(Window prevInstance) @@ -128,18 +83,22 @@ void TDEDocker::notifyPreviousInstance(Window prevInstance) TQFile f(TMPFILE_PREFIX + TQString().setNum(getpid())); if (!f.open(IO_WriteOnly)) return; TQTextStream s(&f); - - /* - * Its normal to use TDEDocker in startup scripts. We could be getting restored - * from a session at the same time. So, if we were getting restored and - * another instance already exists, send across the session id. Remember, qt - * strips out all the arguments that it understands. So need to do it by hand. - */ - if (isSessionRestored()) - s << argv()[0] << " " << "-session" << " " << sessionId(); - else - for (int i = 0; i < argc(); i++) s << argv()[i] << " "; + // Its normal to use TDEDocker in startup scripts. We could be getting restored + // from a session at the same time, so in such case pass along the info. + if (isRestored()) + { + s << TDECmdLineArgs::appName() << " --restore-internal"; + } + else + { + TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); + s << TDECmdLineArgs::appName(); + for (int i = 0; i < args->count(); i++) + { + s << " " << args->arg(i); + } + } f.close(); /* @@ -154,7 +113,7 @@ void TDEDocker::notifyPreviousInstance(Window prevInstance) dock_event.type = ClientMessage; dock_event.message_type = 0x220679; // it all started this day dock_event.format = 8; - dock_event.data.l[0] = 0xBABE; // love letter ;) + dock_event.data.l[0] = 0xBABE; // love letter ;) dock_event.data.l[1] = getpid(); XSendEvent(display, prevInstance, False, 0, (XEvent *) &dock_event); XSync(display, False); @@ -179,7 +138,7 @@ bool TDEDocker::x11EventFilter(XEvent * event) client->data.l[1], (unsigned) mSelectionOwner); char tmp[50]; struct stat buf; - sprintf(tmp, TQString(TMPFILE_PREFIX "%ld").local8Bit(), client->data.l[1]); + sprintf(tmp, TQString(TMPFILE_PREFIX+"%ld").local8Bit(), client->data.l[1]); if (stat(tmp, &buf) || (getuid()!=buf.st_uid)) { /* @@ -204,30 +163,14 @@ bool TDEDocker::x11EventFilter(XEvent * event) mTrayLabelMgr->processCommand(argv); return TRUE; } - else return mTrayLabelMgr->x11EventFilter(event); -} - -/* - * XSMP Support - */ -void TDEDocker::saveState(TQSessionManager &sm) -{ - TQString sf = mTrayLabelMgr->saveSession(); - - TQStringList discard_command; - discard_command << "rm" << sf; - sm.setDiscardCommand(discard_command); - - sm.setRestartHint(TQSessionManager::RestartIfRunning); - TQStringList restart_command; - restart_command << this->argv()[0] - << "-session" << sm.sessionId(); - sm.setRestartCommand(restart_command); - - TRACE("SessionFile=%s AppName=%s", sf.latin1(), this->argv()[0]); - DUMP_TRACE(TQDir::homeDirPath() + "/tdedocker.trace"); - // sm.setRestartCommand(applicationFilePath()); + else + { + if (mTrayLabelMgr->x11EventFilter(event)) + { + return true; + } + return TDEApplication::x11EventFilter(event); + } } - #include "tdedocker.moc" |