Back to index

easystroke  0.5.5.1
Classes | Defines | Functions | Variables
main.cc File Reference
#include "win.h"
#include "main.h"
#include "shape.h"
#include "prefs.h"
#include "actiondb.h"
#include "prefdb.h"
#include "trace.h"
#include "annotate.h"
#include "fire.h"
#include "water.h"
#include "composite.h"
#include "grabber.h"
#include <glibmm/i18n.h>
#include <X11/Xutil.h>
#include <X11/extensions/XTest.h>
#include <X11/extensions/Xfixes.h>
#include <X11/Xproto.h>
#include <string.h>
#include <signal.h>
#include <fcntl.h>
#include <getopt.h>

Go to the source code of this file.

Classes

class  Handler
class  OSD
class  IgnoreHandler
class  ButtonHandler
class  WaitForPongHandler
class  AbstractScrollHandler
class  ScrollHandler
class  ScrollAdvancedHandler
class  AdvancedStrokeActionHandler
class  AdvancedHandler
class  StrokeHandler
struct  StrokeHandler::Connection
class  IdleHandler
class  SelectHandler
class  Main
class  ReloadTrace
class  Modifiers

Defines

#define X_GrabDeviceButton   17
#define H   (handler->top())

Functions

static Tracetrace_composite ()
static Traceinit_trace ()
void fake_core_button (guint b, bool press)
static void fake_click (guint b)
void queue (sigc::slot< void > f)
static void bail_out ()
static int xErrorHandler (Display *dpy2, XErrorEvent *e)
static int xIOErrorHandler (Display *dpy2)
static void ping ()
static void update_core_mapping ()
static float abs (float x)
static bool mods_equal (RModifiers m1, RModifiers m2)
Atom get_atom (Window w, Atom prop)
bool has_atom (Window w, Atom prop, Atom value)
Window get_window (Window w, Atom prop)
static void icccm_client_message (Window w, Atom a, Time t)
static void activate_window (Window w, Time t)
static void get_timeouts (TimeoutType type, int *init, int *final)
static void do_run_by_name (RAction act)
void run_by_name (const char *str)
void icon_warning ()
void quit ()
static void quit (int)
static void schedule_reload_trace ()
static void xdg_open (const Glib::ustring str)
static void link_button_hook (Gtk::LinkButton *, const Glib::ustring &uri)
static void about_dialog_hook (Gtk::AboutDialog &, const Glib::ustring &url)
static void send_dbus (const char *str)
int start_dbus ()
Window get_app_window (Window w)
static void print_coordinates (XIValuatorState *valuators, double *values)
int main (int argc_, char **argv_)
std::string select_window ()
void fake_unicode (gunichar c)
bool fake_char (gunichar c)
bool is_file (std::string filename)
bool is_dir (std::string dirname)

Variables

Source< bool > disabled
bool experimental = false
int verbosity = 0
const char * prefs_versions [] = { "-0.5.5", "-0.4.1", "-0.4.0", "", NULL }
const char * actions_versions [] = { "-0.4.1", "-0.4.0", "", NULL }
Source< Window > current_app_window (None)
std::string config_dir
Winwin = NULL
Display * dpy
Window ROOT
bool in_proximity = false
boost::shared_ptr< sigc::slot
< void, RStroke > > 
stroke_action
Grabber::XiDevicecurrent_dev = 0
std::set< guint > xinput_pressed
static bool show_gui = false
static bool no_dbus = false
static int argc
static char ** argv
static Window ping_window = 0
static boost::shared_ptr< Tracetrace
static std::map< guint, guint > core_inv_map
static Handlerhandler = 0
static ActionDBWatcheraction_watcher = 0
static int(* oldHandler )(Display *, XErrorEvent *)=0
static int(* oldIOHandler )(Display *)=0
static std::list< sigc::slot
< void > > 
queued
static XAtom EASYSTROKE_PING ("EASYSTROKE_PING")
ReloadTrace reload_trace
const char * gui_buffer
const char * version_string
struct {
guint mask
guint sym
modkeys []
static int n_modkeys = 10

Define Documentation

#define H   (handler->top())

Definition at line 1370 of file main.cc.

#define X_GrabDeviceButton   17

Definition at line 37 of file main.cc.


Function Documentation

static void about_dialog_hook ( Gtk::AboutDialog &  ,
const Glib::ustring &  url 
) [static]

Definition at line 1130 of file main.cc.

{ xdg_open(url); }

Here is the call graph for this function:

Here is the caller graph for this function:

static float abs ( float  x) [inline, static]

Definition at line 370 of file main.cc.

{ return x > 0 ? x : -x; }

Here is the caller graph for this function:

static void activate_window ( Window  w,
Time  t 
) [static]

Definition at line 739 of file main.cc.

                                              {
       static XAtom _NET_ACTIVE_WINDOW("_NET_ACTIVE_WINDOW");
       static XAtom _NET_WM_WINDOW_TYPE("_NET_WM_WINDOW_TYPE");
       static XAtom _NET_WM_WINDOW_TYPE_DOCK("_NET_WM_WINDOW_TYPE_DOCK");
       static XAtom WM_PROTOCOLS("WM_PROTOCOLS");
       static XAtom WM_TAKE_FOCUS("WM_TAKE_FOCUS");

       if (w == get_window(ROOT, *_NET_ACTIVE_WINDOW))
              return;

       Atom window_type = get_atom(w, *_NET_WM_WINDOW_TYPE);
       if (window_type == *_NET_WM_WINDOW_TYPE_DOCK)
              return;

       XWMHints *wm_hints = XGetWMHints(dpy, w);
       if (wm_hints) {
              bool input = wm_hints->input;
              XFree(wm_hints);
              if (!input)
                     return;
       }

       if (!has_atom(w, *WM_PROTOCOLS, *WM_TAKE_FOCUS))
              return;

       XWindowAttributes attr;
       if (XGetWindowAttributes(dpy, w, &attr) && attr.override_redirect)
              return;

       if (verbosity >= 3)
              printf("Giving focus to window 0x%lx\n", w);

       icccm_client_message(w, *WM_TAKE_FOCUS, t);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void bail_out ( ) [static]

Definition at line 283 of file main.cc.

                       {
       handler->replace_child(NULL);
       xinput_pressed.clear();
       XFlush(dpy);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void do_run_by_name ( RAction  act) [static]

Definition at line 1039 of file main.cc.

                                        {
       RModifiers mods = act->prepare();
       if (IS_IGNORE(act))
              return handler->replace_child(new IgnoreHandler(mods));
       if (IS_SCROLL(act))
              return handler->replace_child(new ScrollHandler(mods));
       act->run();
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool fake_char ( gunichar  c)

Definition at line 1609 of file main.cc.

                           {
       char buf[16];
       snprintf(buf, sizeof(buf), "U%04X", c);
       KeySym keysym = XStringToKeysym(buf);
       if (keysym == NoSymbol)
              return false;
       KeyCode keycode = XKeysymToKeycode(dpy, keysym);
       if (!keycode)
              return false;
       KeyCode modifier = 0;
       if (XKeycodeToKeysym(dpy, keycode, 0) != keysym) {
              int i;
              for (i = 1; i < 8; i++)
                     if (XKeycodeToKeysym(dpy, keycode, i) == keysym)
                            break;
              if (i == 8)
                     return false;
              XModifierKeymap *keymap = XGetModifierMapping(dpy);
              modifier = keymap->modifiermap[i];
              XFreeModifiermap(keymap);
       }
       if (modifier)
              XTestFakeKeyEvent(dpy, modifier, true, 0);
       XTestFakeKeyEvent(dpy, keycode, true, 0);
       XTestFakeKeyEvent(dpy, keycode, false, 0);
       if (modifier)
              XTestFakeKeyEvent(dpy, modifier, false, 0);
       return true;
}

Here is the caller graph for this function:

static void fake_click ( guint  b) [static]

Definition at line 116 of file main.cc.

                                {
       fake_core_button(b, true);
       fake_core_button(b, false);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void fake_core_button ( guint  b,
bool  press 
)

Definition at line 110 of file main.cc.

                                           {
       if (core_inv_map.count(b))
              b = core_inv_map[b];
       XTestFakeButtonEvent(dpy, b, press, CurrentTime);
}

Here is the caller graph for this function:

void fake_unicode ( gunichar  c)

Definition at line 1580 of file main.cc.

                              {
       static const KeySym numcode[10] = { XK_0, XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8, XK_9 };
       static const KeySym hexcode[6] = { XK_a, XK_b, XK_c, XK_d, XK_e, XK_f };

       if (verbosity >= 3) {
              char buf[7];
              buf[g_unichar_to_utf8(c, buf)] = '\0';
              printf("using unicode input for character %s\n", buf);
       }
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), true, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), true, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), true, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_u), false, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Shift_L), false, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_Control_L), false, 0);
       char buf[16];
       snprintf(buf, sizeof(buf), "%x", c);
       for (int i = 0; buf[i]; i++)
              if (buf[i] >= '0' && buf[i] <= '9') {
                     XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i]-'0']), true, 0);
                     XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, numcode[buf[i]-'0']), false, 0);
              } else if (buf[i] >= 'a' && buf[i] <= 'f') {
                     XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i]-'a']), true, 0);
                     XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, hexcode[buf[i]-'a']), false, 0);
              }
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), true, 0);
       XTestFakeKeyEvent(dpy, XKeysymToKeycode(dpy, XK_space), false, 0);
}

Here is the caller graph for this function:

Window get_app_window ( Window  w)

Definition at line 594 of file grabber.cc.

                                {
       if (!w)
              return w;

       if (frame_win.contains1(w))
              return frame_win.find1(w);

       if (frame_child.contains1(w))
              return frame_child.find1(w);

       Window w2 = find_wm_state(w);
       if (w2) {
              frame_child.add(w, w2);
              if (w2 != w) {
                     w = w2;
                     XSelectInput(dpy, w2, StructureNotifyMask | PropertyChangeMask);
              }
              return w2;
       }
       if (verbosity >= 1)
              printf("Window 0x%lx does not have an associated top-level window\n", w);
       return w;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Atom get_atom ( Window  w,
Atom  prop 
)

Definition at line 675 of file main.cc.

                                   {
       Atom actual_type;
       int actual_format;
       unsigned long nitems, bytes_after;
       unsigned char *prop_return = NULL;

       if (XGetWindowProperty(dpy, w, prop, 0, sizeof(Atom), False, XA_ATOM, &actual_type, &actual_format,
                            &nitems, &bytes_after, &prop_return) != Success)
              return None;
       if (!prop_return)
              return None;
       Atom atom = *(Atom *)prop_return;
       XFree(prop_return);
       return atom;
}

Here is the caller graph for this function:

static void get_timeouts ( TimeoutType  type,
int *  init,
int *  final 
) [static]

Definition at line 789 of file main.cc.

                                                                  {
       switch (type) {
              case TimeoutOff:
                     *init = 0;
                     *final = 0;
                     break;
              case TimeoutConservative:
                     *init = 750;
                     *final = 750;
                     break;
              case TimeoutDefault:
                     *init = 250;
                     *final = 250;
                     break;
              case TimeoutMedium:
                     *init = 100;
                     *final = 100;
                     break;
              case TimeoutAggressive:
                     *init = 50;
                     *final = 75;
                     break;
              case TimeoutFlick:
                     *init = 30;
                     *final = 50;
                     break;
              default:;
       }
}

Here is the caller graph for this function:

Window get_window ( Window  w,
Atom  prop 
)

Definition at line 711 of file main.cc.

                                       {
       Atom actual_type;
       int actual_format;
       unsigned long nitems, bytes_after;
       unsigned char *prop_return = NULL;

       if (XGetWindowProperty(dpy, w, prop, 0, sizeof(Atom), False, XA_WINDOW, &actual_type, &actual_format,
                            &nitems, &bytes_after, &prop_return) != Success)
              return None;
       if (!prop_return)
              return None;
       Window ret = *(Window *)prop_return;
       XFree(prop_return);
       return ret;
}

Here is the caller graph for this function:

bool has_atom ( Window  w,
Atom  prop,
Atom  value 
)

Definition at line 691 of file main.cc.

                                               {
       Atom actual_type;
       int actual_format;
       unsigned long nitems, bytes_after;
       unsigned char *prop_return = NULL;

       if (XGetWindowProperty(dpy, w, prop, 0, sizeof(Atom), False, XA_ATOM, &actual_type, &actual_format,
                            &nitems, &bytes_after, &prop_return) != Success)
              return None;
       if (!prop_return)
              return None;
       Atom *atoms = (Atom *)prop_return;
       bool ans = false;
       for (unsigned long i = 0; i < nitems; i++)
              if (atoms[i] == value)
                     ans = true;
       XFree(prop_return);
       return ans;
}

Here is the caller graph for this function:

static void icccm_client_message ( Window  w,
Atom  a,
Time  t 
) [static]

Definition at line 727 of file main.cc.

                                                           {
       static XAtom WM_PROTOCOLS("WM_PROTOCOLS");
       XClientMessageEvent ev;
       ev.type = ClientMessage;
       ev.window = w;
       ev.message_type = *WM_PROTOCOLS;
       ev.format = 32;
       ev.data.l[0] = a;
       ev.data.l[1] = t;
       XSendEvent(dpy, w, False, 0, (XEvent *)&ev);
}

Here is the caller graph for this function:

void icon_warning ( )

Definition at line 1063 of file main.cc.

                    {
       for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) {
              Misc *m = dynamic_cast<Misc *>(i->second.action.get());
              if (m && m->type == Misc::SHOWHIDE)
                     return;
       }
       if (!win)
              return;

       Gtk::MessageDialog *md;
       widgets->get_widget("dialog_icon", md);
       md->set_message(_("Tray icon disabled"));
       md->set_secondary_text(_("To bring the configuration dialog up again, you should define an action of type Misc...Show/Hide."));
       md->run();
       md->hide();
}

Here is the call graph for this function:

Here is the caller graph for this function:

static Trace* init_trace ( ) [static]

Definition at line 87 of file main.cc.

                           {
       try {
              switch(prefs.trace.get()) {
                     case TraceNone:
                            return new Trivial();
                     case TraceShape:
                            return new Shape();
                     case TraceAnnotate:
                            return new Annotate();
                     case TraceFire:
                            return new Fire();
                     case TraceWater:
                            return new Water();
                     default:
                            return trace_composite();
              }
       } catch (DBusException &e) {
              printf(_("Error: %s\n"), e.what());
              return trace_composite();
       }

}

Here is the call graph for this function:

Here is the caller graph for this function:

bool is_dir ( std::string  dirname)

Definition at line 1736 of file main.cc.

                               {
       struct stat st;
       return lstat(dirname.c_str(), &st) != -1 && S_ISDIR(st.st_mode);
}

Here is the caller graph for this function:

bool is_file ( std::string  filename)

Definition at line 1731 of file main.cc.

                                 {
       struct stat st;
       return lstat(filename.c_str(), &st) != -1 && S_ISREG(st.st_mode);
}

Here is the caller graph for this function:

static void link_button_hook ( Gtk::LinkButton *  ,
const Glib::ustring &  uri 
) [static]

Definition at line 1129 of file main.cc.

{ xdg_open(uri); }

Here is the call graph for this function:

Here is the caller graph for this function:

int main ( int  argc_,
char **  argv_ 
)

Definition at line 1549 of file main.cc.

                                  {
       argc = argc_;
       argv = argv_;
       Main mn;
       mn.run();
       if (verbosity >= 2)
              printf("Exiting...\n");
       return EXIT_SUCCESS;
}

Here is the call graph for this function:

static bool mods_equal ( RModifiers  m1,
RModifiers  m2 
) [static]

Definition at line 1711 of file main.cc.

                                                     {
       return m1 && m2 && *m1 == *m2;
}

Here is the caller graph for this function:

static void ping ( ) [static]

Definition at line 337 of file main.cc.

                   {
       XClientMessageEvent ev;
       ev.type = ClientMessage;
       ev.window = ping_window;
       ev.message_type = *EASYSTROKE_PING;
       ev.format = 32;
       XSendEvent(dpy, ping_window, False, 0, (XEvent *)&ev);
       XFlush(dpy);
}

Here is the caller graph for this function:

static void print_coordinates ( XIValuatorState *  valuators,
double *  values 
) [static]

Definition at line 1413 of file main.cc.

                                                                          {
       int n = 0;
       for (int i = valuators->mask_len - 1; i >= 0; i--)
              if (XIMaskIsSet(valuators->mask, i)) {
                     n = i+1;
                     break;
              }
       bool first = true;
       int elt = 0;
       for (int i = 0; i < n; i++) {
              if (first)
                     first = false;
              else
                     printf(", ");
              if (XIMaskIsSet(valuators->mask, i))
                     printf("%.3f", values[elt++]);
              else
                     printf("*");
       }
}

Here is the caller graph for this function:

void queue ( sigc::slot< void >  f)

Definition at line 176 of file main.cc.

                             {
       if (Handler::idle()) {
              f();
              XFlush(dpy);
       } else
              queued.push_back(f);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void quit ( )

Definition at line 1080 of file main.cc.

            {
       static bool dead = false;
       if (dead)
              bail_out();
       dead = true;
       queue(sigc::ptr_fun(&Gtk::Main::quit));
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void quit ( int  ) [static]

Definition at line 1088 of file main.cc.

{ quit(); }

Here is the call graph for this function:

void run_by_name ( const char *  str)

Definition at line 1048 of file main.cc.

                                  {
       if (!strcmp(str, "")) {
              win->show_hide();
              return;
       }
       for (ActionDB::const_iterator i = actions.begin(); i != actions.end(); i++) {
              if (i->second.name == std::string(str)) {
                     if (i->second.action)
                            queue(sigc::bind(sigc::ptr_fun(do_run_by_name), i->second.action));
                     return;
              }
       }
       printf(_("Warning: No action \"%s\" defined\n"), str);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void schedule_reload_trace ( ) [static]

Definition at line 1120 of file main.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

std::string select_window ( )

Definition at line 1559 of file main.cc.

                          {
       queue(sigc::ptr_fun(&SelectHandler::create));
       gtk_main();
       win->get_window().raise();
       return grabber->current_class->get();
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void send_dbus ( const char *  str) [static]

Definition at line 1133 of file main.cc.

                                       {
       GError *error = 0;
       DBusGConnection *bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
       if (!bus) {
              printf(_("Error initializing D-BUS\n"));
              exit(EXIT_FAILURE);
       }
       DBusGProxy *proxy = dbus_g_proxy_new_for_name(bus, "org.easystroke", "/org/easystroke", "org.easystroke");
       dbus_g_proxy_call_no_reply(proxy, "send", G_TYPE_STRING, str, G_TYPE_INVALID);
}

Here is the caller graph for this function:

int start_dbus ( )

Definition at line 49 of file dbus-server.cc.

                 {
       DBusGConnection *connection;
       DBusGProxy *proxy;
       GError *error = NULL;
       ServerObject *obj;
       guint32 request_name_ret;

       connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
       if (!connection)
              return false;

       proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);
       if (!org_freedesktop_DBus_request_name(proxy, "org.easystroke", 0, &request_name_ret, &error))
              return false;

       if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
              return -1;

       g_object_unref(proxy);

       obj =(ServerObject *)g_object_new(SERVER_OBJECT_TYPE, NULL);
       dbus_g_connection_register_g_object(connection, "/org/easystroke", G_OBJECT(obj));
       return true;
}

Here is the caller graph for this function:

static Trace* trace_composite ( ) [static]

Definition at line 77 of file main.cc.

                                {
       try {
              return new Composite();
       } catch (std::exception &e) {
              if (verbosity >= 1)
                     printf("Falling back to Shape method: %s\n", e.what());
              return new Shape();
       }
}

Here is the caller graph for this function:

static void update_core_mapping ( ) [static]

Definition at line 359 of file main.cc.

                                  {
       unsigned char map[MAX_BUTTONS];
       int n = XGetPointerMapping(dpy, map, MAX_BUTTONS);
       core_inv_map.clear();
       for (int i = n-1; i; i--)
              if (map[i] == i+1)
                     core_inv_map.erase(i+1);
              else
                     core_inv_map[map[i]] = i+1;
}

Here is the caller graph for this function:

static void xdg_open ( const Glib::ustring  str) [static]

Definition at line 1122 of file main.cc.

                                            {
       if (!fork()) {
              execlp("xdg-open", "xdg-open", str.c_str(), NULL);
              exit(EXIT_FAILURE);
       }
}

Here is the caller graph for this function:

static int xErrorHandler ( Display *  dpy2,
XErrorEvent *  e 
) [static]

Definition at line 289 of file main.cc.

                                                        {
       if (dpy != dpy2)
              return oldHandler(dpy2, e);
       if (verbosity == 0 && e->error_code == BadWindow) {
              switch (e->request_code) {
                     case X_ChangeWindowAttributes:
                     case X_GetProperty:
                     case X_QueryTree:
                            return 0;
              }
       }
       if (e->request_code == X_GrabButton ||
                     (grabber && e->request_code == grabber->event &&
                      e->minor_code == X_GrabDeviceButton)) {
              if (!handler || Handler::idle()) {
                     printf(_("Error: %s\n"), e->request_code==X_GrabButton ? "A grab failed" : "An XInput grab failed");
              } else {
                     printf(_("Error: A grab failed.  Resetting...\n"));
                     bail_out();
              }
       } else {
              char text[64];
              XGetErrorText(dpy, e->error_code, text, sizeof text);
              char msg[16];
              snprintf(msg, sizeof msg, "%d", e->request_code);
              char def[32];
              snprintf(def, sizeof def, "request_code=%d, minor_code=%d", e->request_code, e->minor_code);
              char dbtext[128];
              XGetErrorDatabaseText(dpy, "XRequest", msg,
                            def, dbtext, sizeof dbtext);
              printf("XError: %s: %s\n", text, dbtext);
       }
       return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int xIOErrorHandler ( Display *  dpy2) [static]

Definition at line 324 of file main.cc.

                                          {
       if (dpy != dpy2)
              return oldIOHandler(dpy2);
       printf(_("Fatal Error: Connection to X server lost, restarting...\n"));
       char *args[argc+1];
       for (int i = 0; i<argc; i++)
              args[i] = argv[i];
       args[argc] = NULL;
       execv(argv[0], args);
       return 0;
}

Here is the caller graph for this function:


Variable Documentation

Definition at line 72 of file main.cc.

const char* actions_versions[] = { "-0.4.1", "-0.4.0", "", NULL }

Definition at line 49 of file main.cc.

int argc [static]

Definition at line 63 of file main.cc.

char** argv [static]

Definition at line 64 of file main.cc.

std::string config_dir

Definition at line 51 of file main.cc.

std::map<guint, guint> core_inv_map [static]

Definition at line 68 of file main.cc.

Source<Window> current_app_window(None)

Definition at line 57 of file main.cc.

Display* dpy

Definition at line 53 of file main.cc.

XAtom EASYSTROKE_PING("EASYSTROKE_PING") [static]
bool experimental = false

Definition at line 46 of file main.cc.

const char* gui_buffer
Handler* handler = 0 [static]

Definition at line 71 of file main.cc.

bool in_proximity = false

Definition at line 55 of file main.cc.

struct { ... } modkeys[] [static]
int n_modkeys = 10 [static]

Definition at line 1660 of file main.cc.

bool no_dbus = false [static]

Definition at line 61 of file main.cc.

int(* oldHandler)(Display *, XErrorEvent *)=0 [static]

Definition at line 74 of file main.cc.

int(* oldIOHandler)(Display *)=0 [static]

Definition at line 75 of file main.cc.

Window ping_window = 0 [static]

Definition at line 66 of file main.cc.

const char* prefs_versions[] = { "-0.5.5", "-0.4.1", "-0.4.0", "", NULL }

Definition at line 48 of file main.cc.

std::list<sigc::slot<void> > queued [static]

Definition at line 121 of file main.cc.

Window ROOT

Definition at line 54 of file main.cc.

bool show_gui = false [static]

Definition at line 60 of file main.cc.

boost::shared_ptr<sigc::slot<void, RStroke> > stroke_action

Definition at line 56 of file main.cc.

boost::shared_ptr<Trace> trace [static]

Definition at line 67 of file main.cc.

int verbosity = 0

Definition at line 47 of file main.cc.

const char* version_string
Win* win = NULL

Definition at line 52 of file main.cc.

std::set<guint> xinput_pressed

Definition at line 58 of file main.cc.