-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
* @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.
* 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.
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,
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,
"dial",
"dialog",
"directory pane",
+ "drawing area",
"file chooser",
"filler",
- "focus traversable",
"font chooser",
"frame",
"glass pane",
"table column header",
"table row header",
"tearoff menu item",
+ "terminal",
"text",
"toggle button",
"toolbar",
"tooltip",
"tree",
- "tree-table",
+ "tree table",
"<unknown>",
"viewport",
"window",
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;
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;
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;
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;
#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
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;
}
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);
{
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));
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);
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");
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;
}