summaryrefslogtreecommitdiffstats
path: root/khotkeys/app/app.cpp
blob: 8da646ef6376e05e761562263f98e8ddb16d28b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/****************************************************************************

 KHotKeys
 
 Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org>

 Distributed under the terms of the GNU General Public License version 2.
 
****************************************************************************/

#define _KHOTKEYS_APP_CPP_

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "app.h"

#include <dcopclient.h>
#include <tdecmdlineargs.h>
#include <tdeconfig.h>
#include <tdelocale.h>

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <X11/Xlib.h>

#include <settings.h>
#include <input.h>
#include <action_data.h>
#include <gestures.h>
#include <voices.h>

namespace KHotKeys
{

// KhotKeysApp

KHotKeysApp::KHotKeysApp()
    :   KUniqueApplication( false, true ), // no styles
        delete_helper( new TQObject )
    {
    init_global_data( true, delete_helper ); // grab keys
    actions_root = NULL;
    reread_configuration();
    }

KHotKeysApp::~KHotKeysApp()
    {
    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
    delete delete_helper;
    }

void KHotKeysApp::reread_configuration()
    { // TODO
    kdDebug( 1217 ) << "reading configuration" << endl;
    delete actions_root;
    khotkeys_set_active( false );
    Settings settings;
    settings.read_settings( false );
    gesture_handler->set_mouse_button( settings.gesture_mouse_button );
    gesture_handler->set_timeout( settings.gesture_timeout );
    gesture_handler->enable( !settings.gestures_disabled_globally );
    gesture_handler->set_exclude( settings.gestures_exclude );
    voice_handler->set_shortcut( settings.voice_shortcut );
#if 0 // TEST CHECKME
    settings.write_settings();
#endif
    actions_root = settings.actions;
    khotkeys_set_active( true );
    actions_root->update_triggers();
    }

void KHotKeysApp::quit()
    {
    kapp->quit();
    }

} // namespace KHotKeys



using namespace KHotKeys;

// for multihead
static int khotkeys_screen_number = 0;

extern "C"
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")
    {
      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 );
  KUniqueApplication::addCmdLineOptions();
  if( !KHotKeysApp::start()) // already running
  {
    return 0;
  }
  KHotKeysApp app;
  app.disableSessionManagement();
  return app.exec();
}


#include "app.moc"