2002-03-14 Marc Mulcahy <marc.mulcahy@sun.com>
authormarcm <marcm@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Fri, 15 Mar 2002 06:41:03 +0000 (06:41 +0000)
committermarcm <marcm@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Fri, 15 Mar 2002 06:41:03 +0000 (06:41 +0000)
* cspi/spi-roletypes.h cspi/spi_accessible.c
idl/Accessibility_Role.idl libspi/accessible.c: synched up role
types with ATK.

* registryd/desktop.c registryd/desktop.h registryd/registry.c:
Added signals to SpiDesktop and callbacks in SpiRegistry to notify
AT when applications are added and removed from the desktop.  This
reverts the previous broken implementation using the backing
AtkObject for the SpiDesktop.

git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@257 e2bd861d-eb25-0410-b326-f6ed22b6b98c

ChangeLog
cspi/spi-roletypes.h
cspi/spi_accessible.c
libspi/accessible.c
registryd/desktop.c
registryd/desktop.h
registryd/registry.c

index d1952c1..f66f603 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,16 @@
-2001-03-14  Marc Mulcahy <marc.mulcahy@sun.com>
+2002-03-14 Marc Mulcahy <marc.mulcahy@sun.com>
+
+       * cspi/spi-roletypes.h cspi/spi_accessible.c
+       idl/Accessibility_Role.idl libspi/accessible.c: synched up role
+       types with ATK.
+
+       * registryd/desktop.c registryd/desktop.h registryd/registry.c:
+       Added signals to SpiDesktop and callbacks in SpiRegistry to notify
+       AT when applications are added and removed from the desktop.  This
+       reverts the previous broken implementation using the backing
+       AtkObject for the SpiDesktop.
+       
+       2002-03-14  Marc Mulcahy <marc.mulcahy@sun.com>
 
        * registryd/desktop.c: emit the "children-changed::add" and
        "children-changed::remove" signals on the backing ATK object for
index 3cbd182..a281895 100644 (file)
@@ -30,6 +30,7 @@ extern "C" {
  * @SPI_ROLE_DIALOG: A top level window with title bar and a border
  * @SPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate
  *              through and select the contents of a directory.
+ * @SPI_ROLE_DRAWING_AREA: An object used for drawing custom user interface elements
  * @SPI_ROLE_FILE_CHOOSER: A specialized dialog that displays the files in the
  *               directory and lets the user select a file, browse a different
  *              directory, or specify a filename.
@@ -70,7 +71,7 @@ extern "C" {
  *        the application to do something.
  * @SPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the
  *        same group to become uncghecked when this one is checked.
- * @SPI_RADIO_MENU_ITEM: A specialized menu item that behaves like a 
+ * @SPI_ROLE_RADIO_MENU_ITEM: A specialized menu item that behaves like a 
  *        radio button.
  * @SPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its
  *        children.
@@ -129,9 +130,9 @@ typedef enum
   SPI_ROLE_DIAL,
   SPI_ROLE_DIALOG,
   SPI_ROLE_DIRECTORY_PANE,
+  SPI_ROLE_DRAWING_AREA,
   SPI_ROLE_FILE_CHOOSER,
   SPI_ROLE_FILLER,
-  SPI_ROLE_FOCUS_TRAVERSABLE,
   SPI_ROLE_FONT_CHOOSER,
   SPI_ROLE_FRAME,
   SPI_ROLE_GLASS_PANE,
@@ -170,6 +171,7 @@ typedef enum
   SPI_ROLE_TABLE_COLUMN_HEADER,
   SPI_ROLE_TABLE_ROW_HEADER,
   SPI_ROLE_TEAROFF_MENU_ITEM,
+  SPI_ROLE_TERMINAL,
   SPI_ROLE_TEXT,
   SPI_ROLE_TOGGLE_BUTTON,
   SPI_ROLE_TOOL_BAR,
index 60c2699..6817c30 100644 (file)
@@ -21,9 +21,9 @@ static const char *role_names [] =
   "dial",
   "dialog",
   "directory pane",
+  "drawing area",
   "file chooser",
   "filler",
-  "focus traversable",
   "font chooser",
   "frame",
   "glass pane",
@@ -62,12 +62,13 @@ static const char *role_names [] =
   "table column header",
   "table row header",
   "tearoff menu item",
+  "terminal",
   "text",
   "toggle button",
   "toolbar",
   "tooltip",
   "tree",
-  "tree-table",
+  "tree table",
   "<unknown>",
   "viewport",
   "window",
@@ -102,6 +103,7 @@ cspi_init_role_table (AccessibleRole *role_table)
   role_table [Accessibility_ROLE_DIAL] = SPI_ROLE_DIAL;
   role_table [Accessibility_ROLE_DIALOG] = SPI_ROLE_DIALOG;
   role_table [Accessibility_ROLE_DIRECTORY_PANE] = SPI_ROLE_DIRECTORY_PANE;
+  role_table[Accessibility_ROLE_DRAWING_AREA] = SPI_ROLE_DRAWING_AREA;
   role_table [Accessibility_ROLE_FILE_CHOOSER] = SPI_ROLE_FILE_CHOOSER;
   role_table [Accessibility_ROLE_FILLER] = SPI_ROLE_FILLER;
   role_table [Accessibility_ROLE_FONT_CHOOSER] = SPI_ROLE_FONT_CHOOSER;
@@ -139,14 +141,16 @@ cspi_init_role_table (AccessibleRole *role_table)
   role_table [Accessibility_ROLE_STATUS_BAR] = SPI_ROLE_STATUS_BAR;
   role_table [Accessibility_ROLE_TABLE] = SPI_ROLE_TABLE;
   role_table [Accessibility_ROLE_TABLE_CELL] = SPI_ROLE_TABLE_CELL;
+  role_table[Accessibility_ROLE_TABLE_COLUMN_HEADER] = SPI_ROLE_TABLE_COLUMN_HEADER;
+  role_table[Accessibility_ROLE_TABLE_ROW_HEADER] = SPI_ROLE_TABLE_ROW_HEADER;
   role_table [Accessibility_ROLE_TEAROFF_MENU_ITEM] = SPI_ROLE_TEAROFF_MENU_ITEM;
+  role_table[Accessibility_ROLE_TERMINAL] = SPI_ROLE_TERMINAL;
   role_table [Accessibility_ROLE_TEXT] = SPI_ROLE_TEXT;
   role_table [Accessibility_ROLE_TOGGLE_BUTTON] = SPI_ROLE_TOGGLE_BUTTON;
   role_table [Accessibility_ROLE_TOOL_BAR] = SPI_ROLE_TOOL_BAR;
   role_table [Accessibility_ROLE_TOOL_TIP] = SPI_ROLE_TOOL_TIP;
   role_table [Accessibility_ROLE_TREE] = SPI_ROLE_TREE;
   role_table [Accessibility_ROLE_TREE_TABLE] = SPI_ROLE_TREE_TABLE;
-  role_table [Accessibility_ROLE_UNKNOWN] = SPI_ROLE_UNKNOWN;
   role_table [Accessibility_ROLE_VIEWPORT] = SPI_ROLE_VIEWPORT;
   role_table [Accessibility_ROLE_WINDOW] = SPI_ROLE_WINDOW;
   role_table [Accessibility_ROLE_EXTENDED] = SPI_ROLE_EXTENDED;
index 9cbd0cf..cd4f9b1 100644 (file)
@@ -62,6 +62,7 @@ spi_init_role_lookup_table (Accessibility_Role *role_table)
   role_table [ATK_ROLE_DIAL] =             Accessibility_ROLE_DIAL;
   role_table [ATK_ROLE_DIALOG] =           Accessibility_ROLE_DIALOG;
   role_table [ATK_ROLE_DIRECTORY_PANE] =   Accessibility_ROLE_DIRECTORY_PANE;
+  role_table[ATK_ROLE_DRAWING_AREA] = Accessibility_ROLE_DRAWING_AREA;
   role_table [ATK_ROLE_FILE_CHOOSER] =     Accessibility_ROLE_FILE_CHOOSER;
   role_table [ATK_ROLE_FILLER] =           Accessibility_ROLE_FILLER;
   role_table [ATK_ROLE_FONT_CHOOSER] =     Accessibility_ROLE_FONT_CHOOSER;
@@ -94,16 +95,14 @@ spi_init_role_lookup_table (Accessibility_Role *role_table)
   role_table [ATK_ROLE_SCROLL_PANE] =      Accessibility_ROLE_SCROLL_PANE;
   role_table [ATK_ROLE_SEPARATOR] =        Accessibility_ROLE_SEPARATOR;
   role_table [ATK_ROLE_SLIDER] =           Accessibility_ROLE_SLIDER;
-  role_table [ATK_ROLE_SPLIT_PANE] =       Accessibility_ROLE_SPLIT_PANE;
   role_table [ATK_ROLE_SPIN_BUTTON] =      Accessibility_ROLE_SPIN_BUTTON;
+  role_table [ATK_ROLE_SPLIT_PANE] =       Accessibility_ROLE_SPLIT_PANE;
   role_table [ATK_ROLE_STATUSBAR] =        Accessibility_ROLE_STATUS_BAR;
   role_table [ATK_ROLE_TABLE] =            Accessibility_ROLE_TABLE;
   role_table [ATK_ROLE_TABLE_CELL] =       Accessibility_ROLE_TABLE_CELL;
-  role_table [ATK_ROLE_TABLE_COLUMN_HEADER] =
-                                          Accessibility_ROLE_COLUMN_HEADER;
+  role_table [ATK_ROLE_TABLE_COLUMN_HEADER] = Accessibility_ROLE_COLUMN_HEADER;
   role_table [ATK_ROLE_TABLE_ROW_HEADER] = Accessibility_ROLE_ROW_HEADER;
-  role_table [ATK_ROLE_TEAR_OFF_MENU_ITEM] =
-                                          Accessibility_ROLE_TEAROFF_MENU_ITEM;
+  role_table [ATK_ROLE_TEAR_OFF_MENU_ITEM] = Accessibility_ROLE_TEAROFF_MENU_ITEM;
   role_table [ATK_ROLE_TERMINAL] =         Accessibility_ROLE_TERMINAL;
   role_table [ATK_ROLE_TEXT] =             Accessibility_ROLE_TEXT;
   role_table [ATK_ROLE_TOGGLE_BUTTON] =    Accessibility_ROLE_TOGGLE_BUTTON;
index e3ed7de..06f688b 100644 (file)
 #include <libbonobo.h>
 #include "desktop.h"
 
+/* SpiDesktop signals */
+enum {
+  APPLICATION_ADDED,
+  APPLICATION_REMOVED,  
+LAST_SIGNAL
+};
+static guint spi_desktop_signals[LAST_SIGNAL];
+
+
 /* Our parent Gtk object type */
 #define PARENT_TYPE SPI_ACCESSIBLE_TYPE
 
@@ -116,6 +125,24 @@ spi_desktop_class_init (SpiDesktopClass *klass)
   
   parent_class = g_type_class_ref (SPI_ACCESSIBLE_TYPE);
 
+  spi_desktop_signals[APPLICATION_ADDED] =
+    g_signal_new ("application_added",
+                 G_TYPE_FROM_CLASS (klass),
+                 G_SIGNAL_RUN_LAST,
+                 G_STRUCT_OFFSET (SpiDesktopClass, application_added),
+                 NULL, NULL,
+                 g_cclosure_marshal_VOID__UINT,
+                 G_TYPE_NONE,
+                 1, G_TYPE_UINT);
+  spi_desktop_signals[APPLICATION_REMOVED] =
+    g_signal_new ("application_removed",
+                 G_TYPE_FROM_CLASS (klass),
+                 G_SIGNAL_RUN_LAST,
+                 G_STRUCT_OFFSET (SpiDesktopClass, application_removed),
+                 NULL, NULL,
+                 g_cclosure_marshal_VOID__UINT,
+                 G_TYPE_NONE,
+                 1, G_TYPE_UINT);
   epv->_get_childCount = impl_desktop_get_child_count;
   epv->getChildAtIndex = impl_desktop_get_child_at_index;
 }
@@ -164,9 +191,10 @@ spi_desktop_add_application (SpiDesktop *desktop,
       app->ref = ref;
 
       desktop->applications = g_list_append (desktop->applications, app);
+      g_signal_emit (G_OBJECT (desktop), spi_desktop_signals[APPLICATION_ADDED], 0,
+                    g_list_index (desktop->applications, app));
 
       ORBit_small_listen_for_broken (app->ref, G_CALLBACK (abnormal_application_termination), app);
-      g_signal_emit_by_name (SPI_BASE(desktop)->gobj, "children_changed::add", g_list_index (desktop->applications, app), NULL);
     }
 
   CORBA_exception_free (&ev);
@@ -199,7 +227,8 @@ spi_desktop_remove_application (SpiDesktop *desktop,
     {
       Application *app = (Application *) l->data;
 
-      g_signal_emit_by_name (SPI_BASE(desktop)->gobj, "children_changed::remove", g_list_index (desktop->applications, l), NULL);
+      g_signal_emit (G_OBJECT (desktop), spi_desktop_signals[APPLICATION_REMOVED], 0,
+                    g_list_index (desktop->applications, l));
       desktop->applications = g_list_delete_link (desktop->applications, l);
 
       ORBit_small_unlisten_for_broken (app->ref, G_CALLBACK (abnormal_application_termination));
index 8c60834..993a66e 100644 (file)
@@ -41,6 +41,12 @@ typedef struct {
 typedef struct {
         SpiAccessibleClass parent_class;
         POA_Accessibility_Desktop__epv epv;
+
+        /*Signals */
+        void (*application_added) (SpiDesktop *desktop,
+                                  guint index);
+        void (*application_removed) (SpiDesktop *desktop,
+                                    guint index);
 } SpiDesktopClass;
 
 GType       spi_desktop_get_type           (void);
index 0224e8a..1bd0fb2 100644 (file)
@@ -83,6 +83,46 @@ spi_listener_struct_free (SpiListenerStruct *ls, CORBA_Environment *ev)
 
 
 static void
+desktop_add_application (SpiDesktop *desktop,
+                        guint index, gpointer data)
+{
+  BonoboObject *registry = BONOBO_OBJECT(data);
+  Accessibility_Event e;
+  CORBA_Environment ev;
+  
+  e.type = g_strdup ("object:children-changed::add");
+  e.source = BONOBO_OBJREF (desktop);
+  e.detail1 = index;
+  e.detail2 = 0;
+  CORBA_exception_init (&ev);
+  Accessibility_Registry_notifyEvent (BONOBO_OBJREF(registry),
+                                     &e, &ev);
+  CORBA_exception_free (&ev);
+}
+
+
+
+static void
+desktop_remove_application (SpiDesktop *desktop,
+                           guint index, gpointer data)
+{
+  BonoboObject *registry = BONOBO_OBJECT(data);
+  Accessibility_Event e;
+  CORBA_Environment ev;
+  
+  e.type = g_strdup ("object:children-changed::remove");
+  e.source = BONOBO_OBJREF (desktop);
+  e.detail1 = index;
+  e.detail2 = 0;
+  CORBA_exception_init (&ev);
+  Accessibility_Registry_notifyEvent (BONOBO_OBJREF(registry),
+                                     &e, &ev);
+  CORBA_exception_free (&ev);
+}
+
+
+
+static void
 spi_registry_object_finalize (GObject *object)
 {
   printf ("spi_registry_object_finalize called\n");
@@ -620,6 +660,12 @@ spi_registry_init (SpiRegistry *registry)
   registry->window_listeners = NULL;
   registry->toolkit_listeners = NULL;
   registry->desktop = spi_desktop_new ();
+  /* Register callback notification for application addition and removal */
+  g_signal_connect (G_OBJECT (registry->desktop), "application_added",
+                           G_CALLBACK(desktop_add_application), (gpointer)registry);
+  g_signal_connect (G_OBJECT (registry->desktop), "application_removed",
+                           G_CALLBACK(desktop_remove_application), (gpointer)registry);
+
   registry->de_controller = NULL;
 }