diff options
Diffstat (limited to 'khotkeys/app')
-rw-r--r-- | khotkeys/app/CMakeLists.txt | 8 | ||||
-rw-r--r-- | khotkeys/app/app.cpp | 117 | ||||
-rw-r--r-- | khotkeys/app/app.h | 6 | ||||
-rw-r--r-- | khotkeys/app/kded.cpp | 32 | ||||
-rw-r--r-- | khotkeys/app/kded.h | 10 | ||||
-rw-r--r-- | khotkeys/app/khotkeys.desktop | 13 |
6 files changed, 93 insertions, 93 deletions
diff --git a/khotkeys/app/CMakeLists.txt b/khotkeys/app/CMakeLists.txt index df2bd70db..470fdf1ce 100644 --- a/khotkeys/app/CMakeLists.txt +++ b/khotkeys/app/CMakeLists.txt @@ -22,6 +22,14 @@ link_directories( ) +##### other data ################################ + +tde_create_translated_desktop( + SOURCE khotkeys.desktop + DESTINATION ${SERVICES_INSTALL_DIR}/kded +) + + ##### kded_khotkeys (module) #################### tde_add_kpart( kded_khotkeys AUTOMOC diff --git a/khotkeys/app/app.cpp b/khotkeys/app/app.cpp index 27e78d90c..64da17c14 100644 --- a/khotkeys/app/app.cpp +++ b/khotkeys/app/app.cpp @@ -16,6 +16,7 @@ #include "app.h" +#include <dcopclient.h> #include <tdecmdlineargs.h> #include <tdeconfig.h> #include <tdelocale.h> @@ -38,22 +39,20 @@ namespace KHotKeys // KhotKeysApp KHotKeysApp::KHotKeysApp() - : KUniqueApplication( false, true ), // no styles + : TDEUniqueApplication( false, true ), // no styles delete_helper( new TQObject ) { init_global_data( true, delete_helper ); // grab keys - // CHECKME triggery a dalsi vytvaret az tady za inicializaci actions_root = NULL; reread_configuration(); } KHotKeysApp::~KHotKeysApp() { - // CHECKME triggery a dalsi rusit uz tady pred cleanupem delete actions_root; -// Many global data should be destroyed while the TQApplication object still -// exists, and therefore 'this' cannot be the parent, as ~Object -// for 'this' would be called after ~TQApplication - use proxy object + // Many global data should be destroyed while the TQApplication object still + // exists, and therefore 'this' cannot be the parent, as ~Object() + // for 'this' would be called after ~TQApplication() - use proxy object delete delete_helper; } @@ -79,7 +78,7 @@ void KHotKeysApp::reread_configuration() void KHotKeysApp::quit() { - kapp->quit(); + tdeApp->quit(); } } // namespace KHotKeys @@ -92,67 +91,53 @@ using namespace KHotKeys; static int khotkeys_screen_number = 0; extern "C" -int KDE_EXPORT kdemain( int argc, char** argv ) +int TDE_EXPORT kdemain( int argc, char** argv ) +{ + // Check if khotkeys is already running as a kded module. + // In such case just exit. + DCOPClient *dcopClient = new DCOPClient; + if (!dcopClient->isAttached()) + { + if (!dcopClient->attach()) + { + kdWarning(1217) << "khotkeys [application]: could not register with DCOP. Exiting." << endl; + delete dcopClient; + return 1; + } + } + TQCString replyType; + TQByteArray replyData; + if (dcopClient->call("kded", "kded", "loadedModules()", + TQByteArray(), replyType, replyData)) + { + if (replyType == "QCStringList") { - { - // multiheaded hotkeys - TQCString multiHead = getenv("TDE_MULTIHEAD"); - if (multiHead.lower() == "true") { - Display *dpy = XOpenDisplay(NULL); - if (! dpy) { - fprintf(stderr, "%s: FATAL ERROR while trying to open display %s\n", - argv[0], XDisplayName(NULL)); - exit(1); - } - - int number_of_screens = ScreenCount(dpy); - khotkeys_screen_number = DefaultScreen(dpy); - int pos; - TQCString displayname = XDisplayString(dpy); - XCloseDisplay(dpy); - dpy = 0; - - if ((pos = displayname.findRev('.')) != -1) - displayname.remove(pos, 10); - - TQCString env; - if (number_of_screens != 1) { - for (int i = 0; i < number_of_screens; i++) { - if (i != khotkeys_screen_number && fork() == 0) { - khotkeys_screen_number = i; - // break here because we are the child process, we don't - // want to fork() anymore - break; - } - } - - env.sprintf("DISPLAY=%s.%d", displayname.data(), khotkeys_screen_number); - if (putenv(strdup(env.data()))) { - fprintf(stderr, - "%s: WARNING: unable to set DISPLAY environment variable\n", - argv[0]); - perror("putenv()"); - } - } - } - } - - TQCString appname; - if (khotkeys_screen_number == 0) - appname = "khotkeys"; - else - appname.sprintf("khotkeys-screen-%d", khotkeys_screen_number); - - // no need to i18n these, no GUI - TDECmdLineArgs::init( argc, argv, appname, I18N_NOOP( "KHotKeys" ), - I18N_NOOP( "KHotKeys daemon" ), KHOTKEYS_VERSION ); - KUniqueApplication::addCmdLineOptions(); - if( !KHotKeysApp::start()) // already running - return 0; - KHotKeysApp app; - app.disableSessionManagement(); - return app.exec(); + TQDataStream reply(replyData, IO_ReadOnly); + QCStringList modules; + reply >> modules; + if (modules.contains("khotkeys")) + { + // khotkeys is already running as a service, do nothing + kdWarning(1217) << "khotkeys is already running as a kded module. Exiting." << endl; + delete dcopClient; + return 2; + } } + } + delete dcopClient; + + // no need to i18n these, no GUI + TDECmdLineArgs::init( argc, argv, "khotkeys", I18N_NOOP( "KHotKeys" ), + I18N_NOOP( "KHotKeys daemon" ), KHOTKEYS_VERSION ); + TDEUniqueApplication::addCmdLineOptions(); + if( !KHotKeysApp::start()) // already running + { + return 0; + } + KHotKeysApp app; + app.disableSessionManagement(); + return app.exec(); +} #include "app.moc" diff --git a/khotkeys/app/app.h b/khotkeys/app/app.h index e23edfcb1..56c590886 100644 --- a/khotkeys/app/app.h +++ b/khotkeys/app/app.h @@ -11,7 +11,7 @@ #ifndef _KHOTKEYS_APP_H_ #define _KHOTKEYS_APP_H_ -#include <kuniqueapplication.h> +#include <tdeuniqueapplication.h> namespace KHotKeys { @@ -19,9 +19,9 @@ namespace KHotKeys class Action_data_group; class KHotKeysApp - : public KUniqueApplication + : public TDEUniqueApplication { - Q_OBJECT + TQ_OBJECT K_DCOP k_dcop: ASYNC reread_configuration(); diff --git a/khotkeys/app/kded.cpp b/khotkeys/app/kded.cpp index afbd2bceb..debb08d80 100644 --- a/khotkeys/app/kded.cpp +++ b/khotkeys/app/kded.cpp @@ -16,6 +16,7 @@ #include "kded.h" +#include <dcopclient.h> #include <tdecmdlineargs.h> #include <tdeconfig.h> #include <tdelocale.h> @@ -34,10 +35,18 @@ #include <voices.h> extern "C" -KDE_EXPORT KDEDModule *create_khotkeys( const TQCString& obj ) - { - return new KHotKeys::KHotKeysModule( obj ); - } +TDE_EXPORT KDEDModule *create_khotkeys( const TQCString& obj ) +{ + // Check if khotkeys is already running as a stand alone application. + // In such case just exit. + if (tdeApp->dcopClient()->isApplicationRegistered("khotkeys")) + { + kdWarning(1217) << "khotkeys [kded module] is already running as a standalone application. Exiting." << endl; + return nullptr; + } + + return new KHotKeys::KHotKeysModule( obj ); +} namespace KHotKeys { @@ -47,22 +56,7 @@ namespace KHotKeys KHotKeysModule::KHotKeysModule( const TQCString& obj ) : KDEDModule( obj ) { - for( int i = 0; - i < 5; - ++i ) - { - if( kapp->dcopClient()->isApplicationRegistered( "khotkeys" )) - { - TQByteArray data, replyData; - TQCString reply; - // wait for it to finish - kapp->dcopClient()->call( "khotkeys*", "khotkeys", "quit()", data, reply, replyData ); - sleep( 1 ); - } - } - client.registerAs( "khotkeys", false ); // extra dcop connection (like if it was an app) init_global_data( true, this ); // grab keys - // CHECKME triggery a dalsi vytvaret az tady za inicializaci actions_root = NULL; reread_configuration(); } diff --git a/khotkeys/app/kded.h b/khotkeys/app/kded.h index c0a1526ee..026087abe 100644 --- a/khotkeys/app/kded.h +++ b/khotkeys/app/kded.h @@ -12,27 +12,27 @@ #define _KHOTKEYS_KDED_H_ #include <kdedmodule.h> -#include <dcopclient.h> namespace KHotKeys { class Action_data_group; -class KHotKeysModule - : public KDEDModule +class KHotKeysModule : public KDEDModule { - Q_OBJECT + TQ_OBJECT K_DCOP + k_dcop: ASYNC reread_configuration(); ASYNC quit(); + public: KHotKeysModule( const TQCString& obj ); virtual ~KHotKeysModule(); + private: Action_data_group* actions_root; - DCOPClient client; }; //*************************************************************************** diff --git a/khotkeys/app/khotkeys.desktop b/khotkeys/app/khotkeys.desktop new file mode 100644 index 000000000..b40b5a6e5 --- /dev/null +++ b/khotkeys/app/khotkeys.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Type=Service + +Name=KHotkeys Daemon + +Comment=Handles input actions for the current session + +X-TDE-ServiceTypes=KDEDModule +X-TDE-ModuleType=Library +X-TDE-Library=khotkeys +X-TDE-FactoryName=khotkeys +X-TDE-Kded-autoload=true +X-TDE-Kded-load-on-demand=false |