Merge upstream branch 2.31.1 into branch origin/tizen
[platform/upstream/at-spi2-core.git] / registryd / deviceeventcontroller.c
index 0a67af1..686f2cd 100644 (file)
@@ -23,7 +23,7 @@
 
 /* deviceeventcontroller.c: implement the DeviceEventController interface */
 
-#include <config.h>
+#include "config.h"
 
 #undef  SPI_XKB_DEBUG
 #undef  SPI_DEBUG
 #include <dbus/dbus.h>
 
 #include "paths.h"
-#include "keymasks.h"
 #include "de-types.h"
 #include "de-marshaller.h"
+#include "keymasks.h"
+
+#ifdef HAVE_X11
 #include "display.h"
 #include "event-source.h"
+#endif
 
 #include "deviceeventcontroller.h"
 #include "reentrant-list.h"
 
 #include "introspection.h"
 
-long ucs2keysym (long ucs);
-long keysym2ucs(long keysym); 
-
 #define CHECK_RELEASE_DELAY 20
 #define BIT(c, x)       (c[x/8]&(1<<(x%8)))
 static SpiDEController *saved_controller;
@@ -67,10 +67,13 @@ struct _SpiPoint {
     gint y;
 };
 typedef struct _SpiPoint SpiPoint;
+
 static unsigned int mouse_mask_state = 0;
 static unsigned int key_modifier_mask =
-  Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | ShiftMask | LockMask | ControlMask | SPI_KEYMASK_NUMLOCK;
-static unsigned int _numlock_physical_mask = Mod2Mask; /* a guess, will be reset */
+  SPI_KEYMASK_MOD1 | SPI_KEYMASK_MOD2 | SPI_KEYMASK_MOD3 | SPI_KEYMASK_MOD4 |
+  SPI_KEYMASK_MOD5 | SPI_KEYMASK_SHIFT | SPI_KEYMASK_SHIFTLOCK |
+  SPI_KEYMASK_CONTROL | SPI_KEYMASK_NUMLOCK;
+static unsigned int _numlock_physical_mask = SPI_KEYMASK_MOD2; /* a guess, will be reset */
 
 static gboolean have_mouse_listener = FALSE;
 static gboolean have_mouse_event_listener = FALSE;
@@ -207,7 +210,7 @@ spi_dec_plat_emit_modifier_event (SpiDEController *controller, guint prev_mask,
   SpiDEControllerClass *klass;
   klass = SPI_DEVICE_EVENT_CONTROLLER_GET_CLASS (controller);
   if (klass->plat.emit_modifier_event)
-    return klass->plat.emit_modifier_event (controller, prev_mask, current_mask);
+    klass->plat.emit_modifier_event (controller, prev_mask, current_mask);
 }
 
 static void
@@ -219,7 +222,7 @@ spi_dec_plat_generate_mouse_event (SpiDEController *controller,
   SpiDEControllerClass *klass;
   klass = SPI_DEVICE_EVENT_CONTROLLER_GET_CLASS (controller);
   if (klass->plat.generate_mouse_event)
-    return klass->plat.generate_mouse_event (controller, x, y, eventName);
+    klass->plat.generate_mouse_event (controller, x, y, eventName);
 }
 
 DBusMessage *
@@ -383,7 +386,9 @@ spi_dec_poll_mouse_idle (gpointer data)
     return TRUE;
   else
     {
-      g_timeout_add (20, spi_dec_poll_mouse_moving, data);         
+      guint id;
+      id = g_timeout_add (20, spi_dec_poll_mouse_moving, data);
+      g_source_set_name_by_id (id, "[at-spi2-core] spi_dec_poll_mouse_moving");
       return FALSE;        
     }
 }
@@ -397,7 +402,9 @@ spi_dec_poll_mouse_moving (gpointer data)
     return TRUE;
   else
     {
-      g_timeout_add (100, spi_dec_poll_mouse_idle, data);          
+      guint id;
+      id = g_timeout_add (100, spi_dec_poll_mouse_idle, data);
+      g_source_set_name_by_id (id, "[at-spi2-core] check_release");
       return FALSE;
     }
 }
@@ -631,7 +638,7 @@ handle_keygrab (SpiDEController         *controller,
   grab_mask.mod_mask = key_listener->mask;
   if (g_slist_length (key_listener->keys) == 0) /* special case means AnyKey/AllKeys */
     {
-      grab_mask.key_val = AnyKey;
+      grab_mask.key_val = 0L; /* AnyKey */
 #ifdef SPI_DEBUG
       fprintf (stderr, "AnyKey grab!");
 #endif
@@ -827,8 +834,11 @@ spi_controller_register_device_listener (SpiDEController      *controller,
       if (!have_mouse_listener)
         {
           have_mouse_listener = TRUE;
-          if (!have_mouse_event_listener)
-            g_timeout_add (100, spi_dec_poll_mouse_idle, controller);
+          if (!have_mouse_event_listener) {
+            guint id;
+            id = g_timeout_add (100, spi_dec_poll_mouse_idle, controller);
+            g_source_set_name_by_id (id, "[at-spi2-core] spi_dec_poll_mouse_idle");
+          }
         }
       spi_dbus_add_disconnect_match (controller->bus, listener->bus_name);
       notify_mouse_listener (controller, listener, TRUE);
@@ -917,6 +927,7 @@ send_and_allow_reentry (DBusConnection *bus, DBusMessage *message, int timeout,
       {
         const char *dest = dbus_message_get_destination (message);
         GSList *l;
+        dbus_bool_t result;
         gchar *bus_name_dup;
         dbus_message_ref (message);
         dbus_pending_call_set_notify (pending, reset_hung_process, message,
@@ -926,9 +937,9 @@ send_and_allow_reentry (DBusConnection *bus, DBusMessage *message, int timeout,
                                                 "Ping");
         if (!message)
           return NULL;
-        dbus_connection_send_with_reply (bus, message, &pending, -1);
+        result = dbus_connection_send_with_reply (bus, message, &pending, -1);
         dbus_message_unref (message);
-        if (!pending)
+        if (!result || !pending)
           return NULL;
         bus_name_dup = g_strdup (dest);
         dbus_pending_call_set_notify (pending, reset_hung_process_from_ping,
@@ -1355,6 +1366,7 @@ impl_register_keystroke_listener (DBusConnection *bus,
     Accessibility_KeyDefinition *kd = (Accessibility_KeyDefinition *)g_malloc(sizeof(Accessibility_KeyDefinition));
     if (!spi_dbus_message_iter_get_struct(&iter_array, DBUS_TYPE_INT32, &kd->keycode, DBUS_TYPE_INT32, &kd->keysym, DBUS_TYPE_STRING, &keystring, DBUS_TYPE_INVALID))
     {
+      g_free (kd);
       break;
     }
     kd->keystring = g_strdup (keystring);
@@ -1565,6 +1577,7 @@ impl_deregister_keystroke_listener (DBusConnection *bus,
 
     if (!spi_dbus_message_iter_get_struct(&iter_array, DBUS_TYPE_INT32, &kd->keycode, DBUS_TYPE_INT32, &kd->keysym, DBUS_TYPE_STRING, &keystring, DBUS_TYPE_INVALID))
     {
+      g_free(kd);
       break;
     }
     kd->keystring = g_strdup (keystring);
@@ -1745,13 +1758,19 @@ impl_generate_keyboard_event (DBusConnection *bus, DBusMessage *message, void *u
               * in our arg list; it can contain either
               * a keycode or a keysym.
               */
-             spi_dec_synth_keysym (controller, (KeySym) keycode);
+             spi_dec_synth_keysym (controller, keycode);
              break;
       case Accessibility_KEY_STRING:
              if (!spi_dec_plat_synth_keystring (controller, synth_type, keycode, keystring))
                      fprintf (stderr, "Keystring synthesis failure, string=%s\n",
                               keystring);
              break;
+      case Accessibility_KEY_LOCKMODIFIERS:
+             spi_dec_plat_lock_modifiers (controller, keycode);
+             break;
+      case Accessibility_KEY_UNLOCKMODIFIERS:
+             spi_dec_plat_unlock_modifiers (controller, keycode);
+             break;
     }
   reply = dbus_message_new_method_return (message);
   return reply;
@@ -1991,8 +2010,10 @@ handle_dec_method (DBusConnection *bus, DBusMessage *message, void *user_data)
   dbus_message_ref (message);
   g_queue_push_tail (saved_controller->message_queue, message);
   g_queue_push_tail (saved_controller->message_queue, user_data);
-  if (!saved_controller->message_queue_idle)
+  if (!saved_controller->message_queue_idle) {
     saved_controller->message_queue_idle = g_idle_add (message_queue_dispatch, NULL);
+    g_source_set_name_by_id (saved_controller->message_queue_idle, "[at-spi2-core] message_queue_dispatch");
+  }
   return DBUS_HANDLER_RESULT_HANDLED;
 }
 
@@ -2023,8 +2044,11 @@ spi_device_event_controller_start_poll_mouse (SpiRegistry *registry)
   if (!have_mouse_event_listener)
     {
       have_mouse_event_listener = TRUE;
-      if (!have_mouse_listener)
-      g_timeout_add (100, spi_dec_poll_mouse_idle, registry->dec);
+      if (!have_mouse_listener) {
+        guint id;
+        id = g_timeout_add (100, spi_dec_poll_mouse_idle, registry->dec);
+        g_source_set_name_by_id (id, "[at-spi2-core] spi_dec_poll_mouse_idle");
+      }
     }
 }