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 | 
