]> Pileus Git - ~andy/gtk/blobdiff - gtk/a11y/gail.c
iconview: Bring back per-row contexts
[~andy/gtk] / gtk / a11y / gail.c
index 6b4ed4c512c1612f57e1aab15e3290ac1e32f4c1..ae9f79e9f6e30d50ba19865b5517b527a79503a0 100644 (file)
@@ -12,9 +12,7 @@
  * 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 <stdio.h>
 #include <stdlib.h>
 
+#include <gdk/gdk.h>
 #include <gtk/gtkx.h>
-#include "gailbooleancell.h"
-#include "gailbutton.h"
-#include "gailcell.h"
-#include "gailcheckmenuitem.h"
-#include "gailcombobox.h"
-#include "gailcontainer.h"
-#include "gailcontainercell.h"
-#include "gailexpander.h"
-#include "gailimagecell.h"
-#include "gailmenu.h"
-#include "gailmenushell.h"
-#include "gailmenuitem.h"
-#include "gailnotebook.h"
-#include "gailradiomenuitem.h"
-#include "gailrenderercell.h"
-#include "gailstatusbar.h"
-#include "gailtextcell.h"
-#include "gailtoplevel.h"
-#include "gailtreeview.h"
+#include <gtk/gtkentry.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenubar.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkaccessible.h>
 #include "gailutil.h"
-#include "gailwidget.h"
-#include "gailwindow.h"
+#include "gailmisc.h"
 
-#include "gailfactory.h"
-
-#define GNOME_ACCESSIBILITY_ENV "GNOME_ACCESSIBILITY"
 
 static gboolean gail_focus_watcher      (GSignalInvocationHint *ihint,
                                          guint                  n_param_values,
@@ -66,8 +50,6 @@ static gboolean gail_switch_page_watcher(GSignalInvocationHint *ihint,
                                          guint                  n_param_values,
                                          const GValue          *param_values,
                                          gpointer               data);
-static AtkObject* gail_get_accessible_for_widget (GtkWidget    *widget,
-                                                  gboolean     *transient);
 static void     gail_finish_select       (GtkWidget            *widget);
 static void     gail_map_cb              (GtkWidget            *widget);
 static void     gail_map_submenu_cb      (GtkWidget            *widget);
@@ -83,7 +65,7 @@ static void     gail_set_focus_widget (GtkWidget *focus_widget,
 static void     gail_set_focus_object (AtkObject *focus_obj,
                                        AtkObject *obj);
 
-GtkWidget* focus_widget = NULL;
+GtkWidget* _focus_widget = NULL;
 static GtkWidget* next_focus_widget = NULL;
 static gboolean was_deselect = FALSE;
 static GtkWidget* subsequent_focus_widget = NULL;
@@ -92,25 +74,6 @@ static guint focus_notify_handler = 0;
 static guint focus_tracker_id = 0;
 static GQuark quark_focus_object = 0;
 
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_WIDGET, GailWidget, gail_widget, GTK_TYPE_WIDGET)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_CONTAINER, GailContainer, gail_container, GTK_TYPE_CONTAINER)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_BUTTON, GailButton, gail_button, GTK_TYPE_BUTTON)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_MENU_ITEM, GailMenuItem, gail_menu_item, gail_menu_item_new)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_COMBO_BOX, GailComboBox, gail_combo_box, GTK_TYPE_COMBO_BOX)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU_SHELL, GailMenuShell, gail_menu_shell, GTK_TYPE_MENU_SHELL)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU, GailMenu, gail_menu, GTK_TYPE_MENU)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_WINDOW, GailWindow, gail_window, GTK_TYPE_BIN)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_STATUSBAR, GailStatusbar, gail_statusbar, GTK_TYPE_STATUSBAR)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_NOTEBOOK, GailNotebook, gail_notebook, GTK_TYPE_NOTEBOOK)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_TREE_VIEW, GailTreeView, gail_tree_view, GTK_TYPE_TREE_VIEW)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_CHECK_MENU_ITEM, GailCheckMenuItem, gail_check_menu_item, gail_check_menu_item_new)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_RADIO_MENU_ITEM, GailRadioMenuItem, gail_radio_menu_item, gail_radio_menu_item_new)
-GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_EXPANDER, GailExpander, gail_expander, GTK_TYPE_EXPANDER)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_RENDERER_CELL, GailRendererCell, gail_renderer_cell, GTK_TYPE_CELL_RENDERER, gail_renderer_cell_new)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_BOOLEAN_CELL, GailBooleanCell, gail_boolean_cell, GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell_new)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_IMAGE_CELL, GailImageCell, gail_image_cell, GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell_new)
-GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_TEXT_CELL, GailTextCell, gail_text_cell, GTK_TYPE_CELL_RENDERER_TEXT, gail_text_cell_new)
-
 static AtkObject*
 gail_get_accessible_for_widget (GtkWidget *widget,
                                 gboolean  *transient)
@@ -272,7 +235,7 @@ gail_focus_watcher (GSignalInvocationHint *ihint,
     {
       if (event->type == GDK_MOTION_NOTIFY && gtk_widget_has_focus (widget))
         {
-          if (widget == focus_widget)
+          if (widget == _focus_widget)
             {
               return TRUE;
             }
@@ -382,12 +345,12 @@ gail_finish_select (GtkWidget *widget)
    * If previously focused widget is not a GtkMenuItem or a GtkMenu,
    * keep track of it so we can return to it after menubar is deactivated
    */
-  if (focus_widget && 
-      !GTK_IS_MENU_ITEM (focus_widget) && 
-      !GTK_IS_MENU (focus_widget))
+  if (_focus_widget && 
+      !GTK_IS_MENU_ITEM (_focus_widget) && 
+      !GTK_IS_MENU (_focus_widget))
     {
       void *vp_focus_before_menu = &focus_before_menu;
-      focus_before_menu = focus_widget;
+      focus_before_menu = _focus_widget;
       g_object_add_weak_pointer (G_OBJECT (focus_before_menu), vp_focus_before_menu);
 
     } 
@@ -519,35 +482,35 @@ gail_focus_notify (GtkWidget *widget)
   AtkObject *atk_obj;
   gboolean transient;
 
-  if (widget != focus_widget)
+  if (widget != _focus_widget)
     {
-      if (focus_widget)
+      if (_focus_widget)
         {
-          void *vp_focus_widget = &focus_widget;
-          g_object_remove_weak_pointer (G_OBJECT (focus_widget), vp_focus_widget);
+          void *vp_focus_widget = &_focus_widget;
+          g_object_remove_weak_pointer (G_OBJECT (_focus_widget), vp_focus_widget);
         }
-      focus_widget = widget;
-      if (focus_widget)
+      _focus_widget = widget;
+      if (_focus_widget)
         {
-          void *vp_focus_widget = &focus_widget;
-          g_object_add_weak_pointer (G_OBJECT (focus_widget), vp_focus_widget);
+          void *vp_focus_widget = &_focus_widget;
+          g_object_add_weak_pointer (G_OBJECT (_focus_widget), vp_focus_widget);
           /*
            * The UI may not have been updated yet; e.g. in gtkhtml2
            * html_view_layout() is called in a idle handler
            */
-          if (focus_widget == focus_before_menu)
+          if (_focus_widget == focus_before_menu)
             {
               void *vp_focus_before_menu = &focus_before_menu;
               g_object_remove_weak_pointer (G_OBJECT (focus_before_menu), vp_focus_before_menu);
               focus_before_menu = NULL;
             }
         }
-      gail_focus_notify_when_idle (focus_widget);
+      gail_focus_notify_when_idle (_focus_widget);
     }
   else
     {
-      if (focus_widget)
-        atk_obj  = gail_get_accessible_for_widget (focus_widget, &transient);
+      if (_focus_widget)
+        atk_obj  = gail_get_accessible_for_widget (_focus_widget, &transient);
       else
         atk_obj = NULL;
       /*
@@ -828,51 +791,21 @@ gail_set_focus_object (AtkObject *focus_obj,
     }
 }
 
-static int gail_initialized = FALSE;
-
 void
-gail_accessibility_module_init (void)
+_gtk_accessibility_init (void)
 {
-  const char *env_a_t_support;
-  gboolean a_t_support = FALSE;
+  static int initialized = FALSE;
 
-  if (gail_initialized)
-    {
-      return;
-    }
-  gail_initialized = TRUE;
-  quark_focus_object = g_quark_from_static_string ("gail-focus-object");
+  if (initialized)
+    return;
 
-  env_a_t_support = g_getenv (GNOME_ACCESSIBILITY_ENV);
-
-  if (env_a_t_support)
-    a_t_support = atoi (env_a_t_support);
-  if (a_t_support)
-    fprintf (stderr, "GTK Accessibility Module initialized\n");
-
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_WIDGET, gail_widget);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CONTAINER, gail_container);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_BUTTON, gail_button);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU_ITEM, gail_menu_item);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_COMBO_BOX, gail_combo_box);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU_BAR, gail_menu_shell);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_MENU, gail_menu);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_WINDOW, gail_window);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_STATUSBAR, gail_statusbar);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_NOTEBOOK, gail_notebook);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_TREE_VIEW, gail_tree_view);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_TEXT, gail_text_cell);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER, gail_renderer_cell);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CHECK_MENU_ITEM, gail_check_menu_item);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_RADIO_MENU_ITEM, gail_radio_menu_item);
-  GAIL_WIDGET_SET_FACTORY (GTK_TYPE_EXPANDER, gail_expander);
+  initialized = TRUE;
+  quark_focus_object = g_quark_from_static_string ("gail-focus-object");
 
   atk_focus_tracker_init (gail_focus_tracker_init);
   focus_tracker_id = atk_add_focus_tracker (gail_focus_tracker);
 
-  /* Initialize the GailUtility class */
-  g_type_class_unref (g_type_class_ref (GAIL_TYPE_UTIL));
-  g_type_class_unref (g_type_class_ref (GAIL_TYPE_MISC));
+  _gail_util_install ();
+
+  atk_misc_instance = g_object_new (GAIL_TYPE_MISC, NULL);
 }