kde-workspace/ksystraycmd/main.cpp
Ivailo Monev 08bd97aff5 generic: compiler warning fixes
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2021-06-13 17:59:56 +03:00

137 lines
4.1 KiB
C++

#include <fcntl.h>
#include <kapplication.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <kdebug.h>
#include <klocale.h>
#include <kshell.h>
#include "ksystraycmd.h"
#include <X11/Xlib.h>
#include <QtGui/qx11info_x11.h>
#include <fixx11h.h>
int main( int argc, char *argv[] )
{
KAboutData aboutData( "ksystraycmd", 0, ki18n( "KSysTrayCmd" ),
"0.1",
ki18n( "Allows any application to be kept in the system tray" ),
KAboutData::License_GPL,
ki18n("(C) 2001-2002 Richard Moore (rich@kde.org)") );
aboutData.addAuthor( ki18n("Richard Moore"), KLocalizedString(), "rich@kde.org" );
KCmdLineArgs::init( argc, argv, &aboutData );
KCmdLineOptions options;
options.add("!+command", ki18n("Command to execute"));
// "!" means: all options after command are treated as arguments to the command
options.add("window <regexp>", ki18n("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."));
options.add("wid <int>", ki18n("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."));
options.add("hidden", ki18n( "Hide the window to the tray on startup" ));
options.add("startonshow", ki18n( "Wait until we are told to show the window before\n"
"executing the command" ));
options.add("tooltip <text>", ki18n( "Sets the initial tooltip for the tray icon" ));
options.add("keeprunning", ki18n( "Keep the tray icon even if the client exits. This option\n"
"has no effect unless startonshow is specified." ));
options.add("ownicon", ki18n( "Use ksystraycmd's icon instead of the window's icon in the systray\n"
"(should be used with --icon to specify ksystraycmd icon)" ));
options.add("ontop", ki18n( "Try to keep the window above other windows"));
options.add("quitonhide", ki18n( "Quit the client when we are told to hide the window.\n"
"This has no effect unless startonshow is specified and implies keeprunning." ));
/*options.add("menuitem <item>", ki18n( "Adds a custom entry to the tray icon menu\n"
"The item should have the form text:command." ));*/
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
QString 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 {
kWarning() << "KSysTrayCmd: Got bad win id" ;
}
}
// Read window title regexp
QString title = args->getOption( "window" );
if ( !title.isEmpty() )
cmd.setPattern( title );
if ( title.isEmpty() && wid.isEmpty() && (args->count() == 0) )
KCmdLineArgs::usageError(i18n("No command or window specified"));
// Read the command
QString command;
for ( int i = 0; i < args->count(); i++ )
command += KShell::quoteArg(args->arg(i)) + ' ';
if ( !command.isEmpty() )
cmd.setCommand( command );
// Tooltip
QString tip = args->getOption( "tooltip" );
if ( !tip.isEmpty() )
cmd.setDefaultTip( tip );
// Apply icon and tooltip
cmd.refresh();
// 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(QX11Info::display()), F_SETFD, 1);
args->clear();
return app.exec();
}