You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/ksystraycmd/main.cpp

144 lines
4.2 KiB

#include <fcntl.h>
#include <tdeapplication.h>
#include <tdeaboutdata.h>
#include <tdecmdlineargs.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <kprocess.h>
#include "ksystraycmd.h"
#include <X11/Xlib.h>
#ifndef KDE_USE_FINAL
const int XFocusOut = FocusOut;
const int XFocusIn = FocusIn;
#endif
#undef FocusOut
#undef FocusIn
#undef KeyPress
#undef KeyRelease
static TDECmdLineOptions options[] =
{
{ "!+command", I18N_NOOP("Command to execute"), 0 },
// "!" means: all options after command are treated as arguments to the command
{ "window <regexp>", I18N_NOOP("A regular expression matching the window title\n"
"If you do not specify one, then the very first window\n"
"to appear will be taken - not recommended."), 0 },
{ "wid <int>", I18N_NOOP("The window id of the target window\n"
"Specifies the id of the window to use. If the id starts with 0x\n"
"it is assumed to be in hex."), 0 },
{ "hidden", I18N_NOOP( "Hide the window to the tray on startup" ), 0 },
{ "startonshow", I18N_NOOP( "Wait until we are told to show the window before\n"
"executing the command" ), 0 },
{ "tooltip <text>", I18N_NOOP( "Sets the initial tooltip for the tray icon" ), 0 },
{ "keeprunning", I18N_NOOP( "Keep the tray icon even if the client exits. This option\n"
"has no effect unless startonshow is specified." ), 0 },
{ "ownicon", I18N_NOOP( "Use ksystraycmd's icon instead of window's icon in systray\n"
"(should be used with --icon to specify ksystraycmd icon)" ), 0 },
{ "ontop", I18N_NOOP( "Try to keep the window above other windows"), 0 },
{ "quitonhide", I18N_NOOP( "Quit the client when we are told to hide the window.\n"
"This has no effect unless startonshow is specified and implies keeprunning." ), 0 },
/* { "menuitem <item>", I18N_NOOP( "Adds a custom entry to the tray icon menu\n"
"The item should have the form text:command." ), 0 },*/
TDECmdLineLastOption
};
int main( int argc, char *argv[] )
{
TDEAboutData aboutData( "ksystraycmd", I18N_NOOP( "KSysTrayCmd" ),
"KSysTrayCmd 0.1",
I18N_NOOP( "Allows any application to be kept in the system tray" ),
TDEAboutData::License_GPL,
"(C) 2001-2002 Richard Moore (rich@kde.org)" );
aboutData.addAuthor( "Richard Moore", 0, "rich@kde.org" );
TDECmdLineArgs::init( argc, argv, &aboutData );
TDECmdLineArgs::addCmdLineOptions( options ); // Add our own options.
TDEApplication app;
//
// Setup the tray icon from the arguments.
//
TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
KSysTrayCmd cmd;
// Read the window id
TQString wid = args->getOption( "wid" );
if ( !wid.isEmpty() ) {
int base = 10;
if ( wid.startsWith( "0x" ) ) {
base = 16;
wid = wid.right( wid.length() - 2 );
}
bool ok=true;
ulong w = wid.toULong( &ok, base );
if ( ok )
cmd.setTargetWindow( w );
else {
kdWarning() << "KSysTrayCmd: Got bad win id" << endl;
}
}
// Read window title regexp
TQString title = args->getOption( "window" );
if ( !title.isEmpty() )
cmd.setPattern( title );
if ( !title && !wid && (args->count() == 0) )
TDECmdLineArgs::usage(i18n("No command or window specified"));
// Read the command
TQString command;
for ( int i = 0; i < args->count(); i++ )
command += TDEProcess::quote(TQString::fromLocal8Bit( args->arg(i) )) + " ";
if ( !command.isEmpty() )
cmd.setCommand( command );
// Tooltip
TQString tip = args->getOption( "tooltip" );
if ( !tip.isEmpty() )
cmd.setDefaultTip( tip );
// Keep running flag
if ( args->isSet( "keeprunning" ) )
cmd.setNoQuit( true );
if ( args->isSet( "quitonhide" ) ) {
cmd.setNoQuit( true );
cmd.setQuitOnHide( true );
}
// Start hidden
if ( args->isSet( "hidden" ) )
cmd.hideWindow();
// On top
if ( args->isSet( "ontop" ) )
cmd.setOnTop(true);
// Use ksystraycmd icon
if ( args->isSet( "ownicon" ) )
cmd.setOwnIcon(true);
// Lazy invocation flag
if ( args->isSet( "startonshow" ) ) {
cmd.setStartOnShow( true );
cmd.show();
}
else {
if ( !cmd.start() )
return 1;
}
fcntl(ConnectionNumber(tqt_xdisplay()), F_SETFD, 1);
args->clear();
return app.exec();
}