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.
144 lines
4.2 KiB
144 lines
4.2 KiB
#include <fcntl.h>
|
|
|
|
#include <kapplication.h>
|
|
#include <kaboutdata.h>
|
|
#include <kcmdlineargs.h>
|
|
#include <kdebug.h>
|
|
#include <klocale.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 KCmdLineOptions 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 },*/
|
|
KCmdLineLastOption
|
|
};
|
|
|
|
int main( int argc, char *argv[] )
|
|
{
|
|
KAboutData aboutData( "ksystraycmd", I18N_NOOP( "KSysTrayCmd" ),
|
|
"KSysTrayCmd 0.1",
|
|
I18N_NOOP( "Allows any application to be kept in the system tray" ),
|
|
KAboutData::License_GPL,
|
|
"(C) 2001-2002 Richard Moore (rich@kde.org)" );
|
|
aboutData.addAuthor( "Richard Moore", 0, "rich@kde.org" );
|
|
|
|
KCmdLineArgs::init( argc, argv, &aboutData );
|
|
KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
|
|
|
|
KApplication app;
|
|
|
|
//
|
|
// Setup the tray icon from the arguments.
|
|
//
|
|
KCmdLineArgs *args = KCmdLineArgs::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) )
|
|
KCmdLineArgs::usage(i18n("No command or window specified"));
|
|
|
|
// Read the command
|
|
TQString command;
|
|
for ( int i = 0; i < args->count(); i++ )
|
|
command += KProcess::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();
|
|
}
|
|
|