Re: [g-a-devel]AccessibleComponent for desktop objects
- From: Bill Haneman <bill haneman sun com>
- To: "Padraig O'Briain" <Padraig Obriain sun com>
- Cc: gnome-accessibility-devel gnome org
- Subject: Re: [g-a-devel]AccessibleComponent for desktop objects
- Date: 27 Jan 2003 11:32:42 +0000
On Mon, 2003-01-27 at 10:17, Padraig O'Briain wrote:
> The attached patch causes AccessibleComponent to be implemented for SpiDesktop
> and provides implementation for AccessibleComponent_getExtents().
>
> This is bug 101524.
>
> OK to commit.
Please do! But... isn't "spi_api_desktop_get_type()" a typo? Seems
like it should be "spi_atk_desktop_get_type()".
As we noted before, eventually this patch will need to be reworked to
allow for the fact that different virtual desktops may be on non-default
GdkScreens. Should we add the GdkScreen as an internal property of the
AtkDesktop object (set to the GDK default screen for now), so that we
use that in atk_desktop_get_extents() rather than calling
gdk_display_get_default_screen() ?
nitpicking at this point perhaps, but it seems that it would be closer
to what we eventually need.
thanks Padraig.
-Bill
>
> Padraig
>
> ______________________________________________________________________
>
> Index: desktop.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/registryd/desktop.c,v
> retrieving revision 1.21
> diff -u -p -r1.21 desktop.c
> --- desktop.c 13 Sep 2002 13:09:02 -0000 1.21
> +++ desktop.c 27 Jan 2003 10:16:31 -0000
> @@ -27,6 +27,9 @@
> #include <stdio.h>
> #include <libbonobo.h>
> #include "desktop.h"
> +#include <atk/atkcomponent.h>
> +#include <gdk/gdkscreen.h>
> +#include <gdk/gdkx.h>
>
> /* SpiDesktop signals */
> enum {
> @@ -48,15 +51,97 @@ typedef struct {
> /* A pointer to our parent object class */
> static SpiAccessibleClass *parent_class;
>
> +#define SPI_TYPE_ATK_DESKTOP (spi_api_desktop_get_type ())
> +
> +typedef struct {
> + AtkObject parent;
> +} SpiAtkDesktop;
> +
> +typedef struct {
> + AtkObjectClass parent;
> +} SpiAtkDesktopClass;
> +
> +static void spi_atk_desktop_init (SpiAtkDesktop *desktop);
> +static void atk_component_interface_init (AtkComponentIface *iface);
> +static void spi_atk_desktop_get_extents (AtkComponent *component,
> + gint *x,
> + gint *y,
> + gint *width,
> + gint *height,
> + AtkCoordType coord_type);
> +
> +static GType
> +spi_api_desktop_get_type ()
> +{
> + static GType type = 0;
> +
> + if (!type)
> + {
> + static const GTypeInfo typeInfo =
> + {
> + sizeof (SpiAtkDesktopClass),
> + (GBaseInitFunc) NULL,
> + (GBaseFinalizeFunc) NULL,
> + (GClassInitFunc) NULL,
> + (GClassFinalizeFunc) NULL,
> + NULL,
> + sizeof (SpiAtkDesktop),
> + 0,
> + (GInstanceInitFunc) spi_atk_desktop_init,
> + } ;
> + static const GInterfaceInfo atk_component_info =
> + {
> + (GInterfaceInitFunc) atk_component_interface_init,
> + (GInterfaceFinalizeFunc) NULL,
> + NULL
> + };
> +
> + type = g_type_register_static (ATK_TYPE_OBJECT,
> + "SpiAtkDesktop", &typeInfo, 0);
> + g_type_add_interface_static (type, ATK_TYPE_COMPONENT,
> + &atk_component_info);
> + }
> + return type;
> +}
> +
> +static void
> +spi_atk_desktop_init (SpiAtkDesktop *desktop)
> +{
> + atk_object_set_name (ATK_OBJECT (desktop), "main");
> +}
> +
> static void
> -spi_desktop_init (SpiDesktop *desktop)
> +atk_component_interface_init (AtkComponentIface *iface)
> {
> - spi_base_construct (SPI_BASE (desktop), g_object_new (ATK_TYPE_OBJECT, NULL));
> + g_return_if_fail (iface != NULL);
> +
> + iface->get_extents = spi_atk_desktop_get_extents;
> +}
> +
> +static void
> +spi_atk_desktop_get_extents (AtkComponent *component,
> + gint *x,
> + gint *y,
> + gint *width,
> + gint *height,
> + AtkCoordType coord_type)
> +{
> + GdkDisplay *display;
> + GdkScreen *screen;
> +
> + display = gdk_x11_lookup_xdisplay (GDK_DISPLAY ());
> + screen = gdk_display_get_default_screen (display);
> + *x = 0;
> + *y = 0;
> + *width = gdk_screen_get_width (screen);
> + *height = gdk_screen_get_height (screen);
> +}
>
> +static void
> +spi_desktop_init (SpiDesktop *desktop)
> +{
> desktop->applications = NULL;
> bonobo_object_set_immortal (BONOBO_OBJECT (desktop), TRUE);
> -
> - atk_object_set_name (ATK_OBJECT (SPI_BASE (desktop)->gobj), "main");
> }
>
> static void
> @@ -158,9 +243,14 @@ BONOBO_TYPE_FUNC_FULL (SpiDesktop,
> SpiDesktop *
> spi_desktop_new (void)
> {
> - SpiDesktop *retval = g_object_new (SPI_DESKTOP_TYPE, NULL);
> + SpiDesktop *desktop;
> + SpiAccessible *accessible;
> +
> + accessible = spi_accessible_construct (SPI_DESKTOP_TYPE, g_object_new (SPI_TYPE_ATK_DESKTOP, NULL));
> + g_assert (SPI_IS_DESKTOP (accessible));
> + desktop = SPI_DESKTOP (accessible);
>
> - return retval;
> + return desktop;
> }
>
> static void
--
Bill Haneman <bill haneman sun com>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]