]> Pileus Git - ~andy/gtk/blobdiff - gtk/a11y/gtkwindowaccessible.c
filechooser: Rename _gtk_file_is_path_not_local() to _gtk_file_has_native_path()
[~andy/gtk] / gtk / a11y / gtkwindowaccessible.c
index f07d35f550a70ca4a564fa0c7cfb90bc6cb544c7..4930ae68a8cbb2c26cb722213d7b32c3c9824ffc 100644 (file)
@@ -1,4 +1,5 @@
-/* GAIL - The GNOME Accessibility Implementation Library
+/* GTK+ - accessibility implementations
+ * Copyright 2011, F123 Consulting & Mais Diferenças
  * Copyright 2001, 2002, 2003 Sun Microsystems Inc.
  *
  * This library is free software; you can redistribute it and/or
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
 
-#include <string.h>
-
-#include <gtk/gtkx.h>
+#include <gtk/gtk.h>
 
+#include "gtkwidgetaccessibleprivate.h"
 #include "gtkwindowaccessible.h"
-#include "gailtoplevel.h"
-
-enum {
-  ACTIVATE,
-  CREATE,
-  DEACTIVATE,
-  DESTROY,
-  MAXIMIZE,
-  MINIMIZE,
-  MOVE,
-  RESIZE,
-  RESTORE,
-  LAST_SIGNAL
-};
-
+#include "gtktoplevelaccessible.h"
 
 /* atkcomponent.h */
 
@@ -52,24 +36,23 @@ static void                  gtk_window_accessible_get_size         (AtkComponen
                                                            gint                 *width,
                                                            gint                 *height);
 
-static guint gtk_window_accessible_signals [LAST_SIGNAL] = { 0, };
-
 static void atk_component_interface_init (AtkComponentIface *iface);
+static void atk_window_interface_init (AtkWindowIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (GtkWindowAccessible, gtk_window_accessible, GAIL_TYPE_CONTAINER,
-                         G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init))
+G_DEFINE_TYPE_WITH_CODE (GtkWindowAccessible,
+                         gtk_window_accessible,
+                         GTK_TYPE_CONTAINER_ACCESSIBLE,
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT,
+                                                atk_component_interface_init)
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_WINDOW,
+                                                atk_window_interface_init));
 
 
-static gboolean
-gtk_window_accessible_focus_gtk (GtkWidget     *widget,
-                                 GdkEventFocus *event)
+static void
+gtk_window_accessible_focus_event (AtkObject *obj,
+                                   gboolean   focus_in)
 {
-  AtkObject* obj;
-
-  obj = gtk_widget_get_accessible (widget);
-  atk_object_notify_state_change (obj, ATK_STATE_ACTIVE, event->in);
-
-  return FALSE;
+  atk_object_notify_state_change (obj, ATK_STATE_ACTIVE, focus_in);
 }
 
 static void
@@ -79,13 +62,13 @@ gtk_window_accessible_notify_gtk (GObject    *obj,
   GtkWidget *widget = GTK_WIDGET (obj);
   AtkObject* atk_obj = gtk_widget_get_accessible (widget);
 
-  if (strcmp (pspec->name, "title") == 0)
+  if (g_strcmp0 (pspec->name, "title") == 0)
     {
       g_object_notify (G_OBJECT (atk_obj), "accessible-name");
-      g_signal_emit_by_name (atk_obj, "visible_data_changed");
+      g_signal_emit_by_name (atk_obj, "visible-data-changed");
     }
   else
-    GAIL_WIDGET_CLASS (gtk_window_accessible_parent_class)->notify_gtk (obj, pspec);
+    GTK_WIDGET_ACCESSIBLE_CLASS (gtk_window_accessible_parent_class)->notify_gtk (obj, pspec);
 }
 
 static gboolean
@@ -106,43 +89,21 @@ gtk_window_accessible_initialize (AtkObject *obj,
                                   gpointer   data)
 {
   GtkWidget *widget = GTK_WIDGET (data);
-
-  /* A GtkWindowAccessible can be created for a GtkHandleBox or a GtkWindow */
-  if (!GTK_IS_WINDOW (widget) && !GTK_IS_HANDLE_BOX (widget))
-    return;
+  const gchar *name;
 
   ATK_OBJECT_CLASS (gtk_window_accessible_parent_class)->initialize (obj, data);
 
-  g_signal_connect (data, "window_state_event", G_CALLBACK (window_state_event_cb), NULL);
-  g_object_set_data (G_OBJECT (obj), "atk-component-layer", GINT_TO_POINTER (ATK_LAYER_WINDOW));
-
-  if (GTK_IS_FILE_CHOOSER_DIALOG (widget))
-    obj->role = ATK_ROLE_FILE_CHOOSER;
-  else if (GTK_IS_COLOR_SELECTION_DIALOG (widget))
-    obj->role = ATK_ROLE_COLOR_CHOOSER;
-  else if (GTK_IS_FONT_SELECTION_DIALOG (widget))
-    obj->role = ATK_ROLE_FONT_CHOOSER;
-  else if (GTK_IS_MESSAGE_DIALOG (widget))
-    obj->role = ATK_ROLE_ALERT;
-  else if (GTK_IS_DIALOG (widget))
-    obj->role = ATK_ROLE_DIALOG;
+  g_signal_connect (data, "window-state-event", G_CALLBACK (window_state_event_cb), NULL);
+  _gtk_widget_accessible_set_layer (GTK_WIDGET_ACCESSIBLE (obj), ATK_LAYER_WINDOW);
+
+  name = gtk_widget_get_name (widget);
+
+  if (!g_strcmp0 (name, "gtk-tooltip"))
+    obj->role = ATK_ROLE_TOOL_TIP;
+  else if (gtk_window_get_window_type (GTK_WINDOW (widget)) == GTK_WINDOW_POPUP)
+    obj->role = ATK_ROLE_WINDOW;
   else
-    {
-      const gchar *name;
-
-      name = gtk_widget_get_name (widget);
-
-      if (!g_strcmp0 (name, "gtk-tooltip"))
-        obj->role = ATK_ROLE_TOOL_TIP;
-#ifdef  GDK_WINDOWING_X11
-      else if (GTK_IS_PLUG (widget))
-        obj->role = ATK_ROLE_PANEL;
-#endif
-      else if (gtk_window_get_window_type (GTK_WINDOW (widget)) == GTK_WINDOW_POPUP)
-        obj->role = ATK_ROLE_WINDOW;
-      else
-        obj->role = ATK_ROLE_FRAME;
-    }
+    obj->role = ATK_ROLE_FRAME;
 
   /* Notify that tooltip is showing */
   if (obj->role == ATK_ROLE_TOOL_TIP && gtk_widget_get_mapped (widget))
@@ -227,10 +188,10 @@ gtk_window_accessible_get_index_in_parent (AtkObject *accessible)
   if (GTK_IS_WINDOW (widget))
     {
       GtkWindow *window = GTK_WINDOW (widget);
-      if (GAIL_IS_TOPLEVEL (atk_obj))
+      if (GTK_IS_TOPLEVEL_ACCESSIBLE (atk_obj))
         {
-          GailToplevel* toplevel = GAIL_TOPLEVEL (atk_obj);
-          index = g_list_index (toplevel->window_list, window);
+          GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (atk_obj);
+          index = g_list_index (gtk_toplevel_accessible_get_children (toplevel), window);
         }
       else
         {
@@ -302,7 +263,7 @@ gtk_window_accessible_ref_state_set (AtkObject *accessible)
     atk_state_set_add_state (state_set, ATK_STATE_ACTIVE);
 
   gdk_window = gtk_widget_get_window (widget);
-  if (window)
+  if (gdk_window)
     {
       state = gdk_window_get_state (gdk_window);
       if (state & GDK_WINDOW_STATE_ICONIFIED)
@@ -320,10 +281,9 @@ gtk_window_accessible_ref_state_set (AtkObject *accessible)
 static void
 gtk_window_accessible_class_init (GtkWindowAccessibleClass *klass)
 {
-  GailWidgetClass *widget_class = (GailWidgetClass*)klass;
-  AtkObjectClass  *class = ATK_OBJECT_CLASS (klass);
+  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
+  AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
 
-  widget_class->focus_gtk = gtk_window_accessible_focus_gtk;
   widget_class->notify_gtk = gtk_window_accessible_notify_gtk;
 
   class->get_name = gtk_window_accessible_get_name;
@@ -331,79 +291,7 @@ gtk_window_accessible_class_init (GtkWindowAccessibleClass *klass)
   class->ref_relation_set = gtk_window_accessible_ref_relation_set;
   class->ref_state_set = gtk_window_accessible_ref_state_set;
   class->initialize = gtk_window_accessible_initialize;
-
-  gtk_window_accessible_signals [ACTIVATE] =
-    g_signal_new ("activate",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [CREATE] =
-    g_signal_new ("create",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [DEACTIVATE] =
-    g_signal_new ("deactivate",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [DESTROY] =
-    g_signal_new ("destroy",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [MAXIMIZE] =
-    g_signal_new ("maximize",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [MINIMIZE] =
-    g_signal_new ("minimize",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [MOVE] =
-    g_signal_new ("move",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [RESIZE] =
-    g_signal_new ("resize",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  gtk_window_accessible_signals [RESTORE] =
-    g_signal_new ("restore",
-                  G_TYPE_FROM_CLASS (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
+  class->focus_event = gtk_window_accessible_focus_event;
 }
 
 static void
@@ -420,6 +308,7 @@ gtk_window_accessible_get_extents (AtkComponent  *component,
                                    AtkCoordType   coord_type)
 {
   GtkWidget *widget;
+  GdkWindow *window;
   GdkRectangle rect;
   gint x_toplevel, y_toplevel;
 
@@ -436,7 +325,11 @@ gtk_window_accessible_get_extents (AtkComponent  *component,
       return;
     }
 
-  gdk_window_get_frame_extents (gtk_widget_get_window (widget), &rect);
+  window = gtk_widget_get_window (widget);
+  if (window == NULL)
+    return;
+
+  gdk_window_get_frame_extents (window, &rect);
 
   *width = rect.width;
   *height = rect.height;
@@ -451,8 +344,7 @@ gtk_window_accessible_get_extents (AtkComponent  *component,
   *y = rect.y;
   if (coord_type == ATK_XY_WINDOW)
     {
-      gdk_window_get_origin (gtk_widget_get_window (widget),
-                             &x_toplevel, &y_toplevel);
+      gdk_window_get_origin (window, &x_toplevel, &y_toplevel);
       *x -= x_toplevel;
       *y -= y_toplevel;
     }
@@ -464,6 +356,7 @@ gtk_window_accessible_get_size (AtkComponent *component,
                                 gint         *height)
 {
   GtkWidget *widget;
+  GdkWindow *window;
   GdkRectangle rect;
 
   widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component));
@@ -479,7 +372,11 @@ gtk_window_accessible_get_size (AtkComponent *component,
       return;
     }
 
-  gdk_window_get_frame_extents (gtk_widget_get_window (widget), &rect);
+  window = gtk_widget_get_window (widget);
+  if (window == NULL)
+    return;
+
+  gdk_window_get_frame_extents (window, &rect);
 
   *width = rect.width;
   *height = rect.height;
@@ -491,3 +388,9 @@ atk_component_interface_init (AtkComponentIface *iface)
   iface->get_extents = gtk_window_accessible_get_extents;
   iface->get_size = gtk_window_accessible_get_size;
 }
+
+static void
+atk_window_interface_init (AtkWindowIface *iface)
+{
+  /* At this moment AtkWindow is just about signals */
+}