diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-02-24 14:33:07 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-02-24 14:33:07 +0900 |
commit | 7fea3c42ee6179edaa3e9f36c794540ae73fcc95 (patch) | |
tree | 4cea28ad693ec218f0c17b4702fe6b01cb2fa79e /src/kdocker.cpp | |
parent | 70194b269e22711c3bbbc18d339b69aab028371e (diff) | |
download | tdedocker-7fea3c42ee6179edaa3e9f36c794540ae73fcc95.tar.gz tdedocker-7fea3c42ee6179edaa3e9f36c794540ae73fcc95.zip |
Completed kdocker -> tdedocker renaming effort.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/kdocker.cpp')
-rw-r--r-- | src/kdocker.cpp | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/src/kdocker.cpp b/src/kdocker.cpp deleted file mode 100644 index 2df7eb6..0000000 --- a/src/kdocker.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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 - * (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -// $Id: kdocker.cpp,v 1.24 2005/02/04 10:25:46 cs19713 Exp $ - -#include <tqsessionmanager.h> -#include <tqdir.h> -#include <tqfile.h> -#include <tqtextcodec.h> -#include <tqtextstream.h> -#include <tqtimer.h> -#include <tqstring.h> - -#include <tdelocale.h> - -#include "trace.h" -#include "traylabelmgr.h" -#include "kdocker.h" - -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> - -// #define TMPFILE_PREFIX TQString("/tmp/kdocker.") -#define TMPFILE_PREFIX TQDir::homeDirPath() + "/.kdocker." - -KDocker::KDocker(int& argc, char** argv) - :TQApplication(argc, argv), mTrayLabelMgr(0) -{ - 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 - * selection owner. If someone else owns it, transfer control to that - * instance of KDocker - */ - Display *display = TQPaintDevice::x11AppDisplay(); - Atom kdocker = XInternAtom(display, "_KDOCKER_RUNNING", False); - Window prev_instance = XGetSelectionOwner(display, kdocker); - - if (prev_instance == None) - { - mSelectionOwner = XCreateSimpleWindow(display, tqt_xrootwin(), 1, 1, 1, - 1, 1, 1, 1); - XSetSelectionOwner(display, kdocker, mSelectionOwner, CurrentTime); - TRACE("Selection owner set to 0x%x", (unsigned) mSelectionOwner); - mTrayLabelMgr = TrayLabelMgr::instance(); - } - else - notifyPreviousInstance(prev_instance); // does not return -} - -void KDocker::printVersion(void) -{ - tqDebug("TQt: %s", tqVersion()); - tqDebug("KDocker: %s", KDOCKER_APP_VERSION); -} - -// Prints the CLI arguments. Does not return -void KDocker::printUsage(char optopt) -{ - if (optopt != 'h') tqDebug("%s", i18n("kdocker: invalid option -- %1").arg(optopt).local8Bit().data()); - - tqDebug("%s", i18n("Usage: KDocker [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 gramakri@uiuc.edu").local8Bit().data()); - tqDebug("%s", i18n("Project information at http://kdocker.sourceforge.net").local8Bit().data()); -} - -void KDocker::notifyPreviousInstance(Window prevInstance) -{ - Display *display = TQPaintDevice::x11AppDisplay(); - - TRACE("Notifying previous instance [%x]", (unsigned) prevInstance); - - // Dump all arguments in temporary file - TQFile f(TMPFILE_PREFIX + TQString().setNum(getpid())); - if (!f.open(IO_WriteOnly)) return; - TQTextStream s(&f); - - /* - * Its normal to use KDocker 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] << " "; - - f.close(); - - /* - * Now tell our previous instance that we came to pass. Actually, it can - * figure it out itself using PropertyNotify events but this is a lot nicer - */ - XClientMessageEvent dock_event; - memset(&dock_event, 0, sizeof(XClientMessageEvent)); - dock_event.display = display; - dock_event.window = prevInstance; - dock_event.send_event = True; - 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[1] = getpid(); - XSendEvent(display, prevInstance, False, 0, (XEvent *) &dock_event); - XSync(display, False); - - ::exit(0); -} - -/* - * The X11 Event filter called by TQt. Look out for ClientMessage events from - * our new instance - */ -bool KDocker::x11EventFilter(XEvent * event) -{ - if (event->type == ClientMessage) - { - // look for requests from a new instance of kdocker - XClientMessageEvent *client = (XClientMessageEvent *) event; - if (!(client->message_type == 0x220679 && client->data.l[0] == 0xBABE)) - return FALSE; - - TRACE("ClientMessage from PID=%ld. SelOwn=0x%x", - client->data.l[1], (unsigned) mSelectionOwner); - char tmp[50]; - struct stat buf; - sprintf(tmp, TQString(TMPFILE_PREFIX "%ld").local8Bit(), client->data.l[1]); - if (stat(tmp, &buf) || (getuid()!=buf.st_uid)) - { - /* - * We make sure that the owner of this process and the owner of the file - * are the same. This will prevent someone from executing arbitrary - * programs by sending client message. Of course, you can send a message - * only if you are authenticated to the X session and have permission to - * create files in TMPFILE_PREFIX. So this code is there just for the - * heck of it. - */ - TRACE("User %i is trying something fishy...", buf.st_uid); - unlink(tmp); - return TRUE; - } - TQFile f(tmp); - if (!f.open(IO_ReadOnly)) return TRUE; - TQTextStream s(&f); - TQStringList argv; - while (!s.atEnd()) { TQString x; s >> x; argv += x; } - f.close(); - unlink(tmp); // delete the tmp file - mTrayLabelMgr->processCommand(argv); - return TRUE; - } - else return mTrayLabelMgr->x11EventFilter(event); -} - -/* - * XSMP Support - */ -void KDocker::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() + "/kdocker.trace"); - // sm.setRestartCommand(applicationFilePath()); -} - - -#include "kdocker.moc" |