*** empty log message ***
[platform/core/uifw/at-spi2-atk.git] / atk-bridge / bridge.c
index c363a08..6161b19 100644 (file)
@@ -64,6 +64,7 @@ static guint atk_signal_text_selection_changed;
 */
 
 static guint atk_signal_link_selected;
+static guint atk_signal_bounds_changed;
 
 static Accessibility_Registry spi_atk_bridge_get_registry (void);
 static void     spi_atk_bridge_do_registration         (void);
@@ -130,9 +131,11 @@ spi_atk_bridge_init_event_type_consts ()
                                              ATK_TYPE_OBJECT);
   atk_signal_text_changed = g_signal_lookup ("text_changed", 
                                             ATK_TYPE_TEXT);
+  atk_signal_bounds_changed = g_signal_lookup ("bounds_changed", 
+                                             ATK_TYPE_COMPONENT);
   atk_signal_active_descendant_changed = 
          g_signal_lookup ("active_descendant_changed", 
-                         ATK_TYPE_OBJECT);
+                         ATK_TYPE_OBJECT); 
   atk_signal_link_selected = g_signal_lookup ("link_selected", 
                                              ATK_TYPE_HYPERTEXT);
   atk_signal_text_selection_changed = g_signal_lookup ("text_selection_changed", 
@@ -144,6 +147,7 @@ static int
 atk_bridge_init (gint *argc, gchar **argv[])
 {
   const char *debug_env_string = g_getenv ("AT_SPI_DEBUG");
+  gchar *fname;
 
   if (atk_bridge_initialized)
     {
@@ -151,8 +155,15 @@ atk_bridge_init (gint *argc, gchar **argv[])
     }
   atk_bridge_initialized = TRUE;
 
-  if (debug_env_string)
-    _dbg = (int) g_ascii_strtod (debug_env_string, NULL);
+  if (g_getenv ("ATK_BRIDGE_REDIRECT_LOG"))
+  {
+      fname = g_strconcat ("/tmp/", g_get_prgname (), ".at-spi-log");
+      freopen (fname, "w", stderr);
+      g_free (fname);
+  }
+
+  if (debug_env_string) 
+      _dbg = (int) g_ascii_strtod (debug_env_string, NULL);
 
   if (!bonobo_init (argc, argv ? *argv : NULL))
     {
@@ -258,6 +269,42 @@ spi_atk_bridge_register_application (Accessibility_Registry registry)
                                               &ev);
 }
 
+/* 
+ * Returns a 'canonicalized' value for DISPLAY,
+ * with the screen number stripped off if present.
+ */
+static const gchar*
+spi_display_name (void)
+{
+    static const char *canonical_display_name = NULL;
+    if (!canonical_display_name)
+    {
+        const gchar *display_env = g_getenv ("AT_SPI_DISPLAY");
+       if (!display_env)
+       {
+           display_env = g_getenv ("DISPLAY");
+           if (!display_env || !display_env[0]) 
+               canonical_display_name = ":0";
+           else
+           {
+               gchar *display_p, *screen_p;
+               canonical_display_name = g_strdup (display_env);
+               display_p = strrchr (canonical_display_name, ':');
+               screen_p = strrchr (canonical_display_name, '.');
+               if (screen_p && display_p && ((guint) screen_p > (guint) display_p))
+               {
+                   *screen_p = '\0';
+               }
+           }
+       }
+       else
+       {
+           canonical_display_name = display_env;
+       }
+    }
+    return canonical_display_name;
+}
+
 static Accessibility_Registry
 spi_atk_bridge_get_registry (void)
 {
@@ -267,6 +314,9 @@ spi_atk_bridge_get_registry (void)
          CORBA_exception_init (&ev);
          if (registry_died) 
            DBG (1, g_warning ("registry died! restarting..."));
+         
+         bonobo_activation_set_activation_env_value ("AT_SPI_DISPLAY", spi_display_name ());
+
          registry = bonobo_activation_activate_from_id (
                  "OAFIID:Accessibility_Registry:1.0", 0, NULL, &ev);
          
@@ -384,6 +434,7 @@ spi_atk_register_event_listeners (void)
   add_signal_listener ("Gtk:AtkObject:children-changed");
   add_signal_listener ("Gtk:AtkObject:visible-data-changed");
   add_signal_listener ("Gtk:AtkObject:active-descendant-changed");
+  add_signal_listener ("Gtk:AtkComponent:bounds-changed");
   add_signal_listener ("Gtk:AtkSelection:selection-changed");
   add_signal_listener ("Gtk:AtkText:text-selection-changed");
   add_signal_listener ("Gtk:AtkText:text-changed");
@@ -903,6 +954,14 @@ spi_atk_bridge_signal_listener (GSignalInvocationHint *signal_hint,
         detail1 = g_value_get_int (param_values + 1);
       spi_init_any_nil (&any);
     }
+  else if (signal_query.signal_id == atk_signal_bounds_changed)
+    {
+      AtkRectangle *atk_rect = NULL;
+
+      if (G_VALUE_HOLDS_BOXED (param_values + 1))
+         atk_rect = g_value_get_boxed (param_values + 1);
+      spi_init_any_rect (&any, atk_rect);
+    }
   else if ((signal_query.signal_id == atk_signal_children_changed) && gobject)
     {
       ao = atk_object_ref_accessible_child (ATK_OBJECT (gobject),