[gtk+] Drop the fake GailUtil subclass
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Drop the fake GailUtil subclass
- Date: Sat, 9 Jul 2011 20:04:43 +0000 (UTC)
commit 2aeb7042d008703a6c884eaa3133c82acde9b17a
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jul 8 23:42:01 2011 -0400
Drop the fake GailUtil subclass
Since it is not a subclass at all. Instead, just have a function
that overrides the vfuncs in AtkUtilClass.
gtk/a11y/gail.c | 3 +-
gtk/a11y/gailutil.c | 480 ++++++++++++++++++++++++---------------------------
gtk/a11y/gailutil.h | 23 +---
3 files changed, 225 insertions(+), 281 deletions(-)
---
diff --git a/gtk/a11y/gail.c b/gtk/a11y/gail.c
index 2146719..401dccc 100644
--- a/gtk/a11y/gail.c
+++ b/gtk/a11y/gail.c
@@ -798,8 +798,7 @@ gail_accessibility_module_init (void)
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));
+ gail_util_install ();
atk_misc_instance = g_object_new (GAIL_TYPE_MISC, NULL);
}
diff --git a/gtk/a11y/gailutil.c b/gtk/a11y/gailutil.c
index e19ba82..c59bc3f 100644
--- a/gtk/a11y/gailutil.c
+++ b/gtk/a11y/gailutil.c
@@ -27,30 +27,6 @@
#include "gtkwindowaccessible.h"
-static guint add_listener (GSignalEmissionHook listener,
- const gchar *object_type,
- const gchar *signal,
- const gchar *hook_data);
-static void do_window_event_initialization (void);
-static gboolean state_event_watcher (GSignalInvocationHint *hint,
- guint n_param_values,
- const GValue *param_values,
- gpointer data);
-static void window_added (AtkObject *atk_obj,
- guint index,
- AtkObject *child);
-static void window_removed (AtkObject *atk_obj,
- guint index,
- AtkObject *child);
-static gboolean window_focus (GtkWidget *widget,
- GdkEventFocus *event);
-static gboolean configure_event_watcher (GSignalInvocationHint *hint,
- guint n_param_values,
- const GValue *param_values,
- gpointer data);
-
-
-static AtkObject* root = NULL;
static GHashTable *listener_list = NULL;
static gint listener_idx = 1;
static GSList *key_listener_list = NULL;
@@ -72,8 +48,225 @@ struct _GailKeyEventInfo
gpointer func_data;
};
-G_DEFINE_TYPE (GailUtil, gail_util, ATK_TYPE_UTIL)
+static guint
+add_listener (GSignalEmissionHook listener,
+ const gchar *object_type,
+ const gchar *signal,
+ const gchar *hook_data)
+{
+ GType type;
+ guint signal_id;
+ gint rc = 0;
+
+ type = g_type_from_name (object_type);
+ if (type)
+ {
+ signal_id = g_signal_lookup (signal, type);
+ if (signal_id > 0)
+ {
+ GailUtilListenerInfo *listener_info;
+
+ rc = listener_idx;
+
+ listener_info = g_new (GailUtilListenerInfo, 1);
+ listener_info->key = listener_idx;
+ listener_info->hook_id =
+ g_signal_add_emission_hook (signal_id, 0, listener,
+ g_strdup (hook_data),
+ (GDestroyNotify) g_free);
+ listener_info->signal_id = signal_id;
+
+ g_hash_table_insert (listener_list, &(listener_info->key), listener_info);
+ listener_idx++;
+ }
+ else
+ {
+ g_warning("Invalid signal type %s\n", signal);
+ }
+ }
+ else
+ {
+ g_warning("Invalid object type %s\n", object_type);
+ }
+ return rc;
+}
+
+static gboolean
+state_event_watcher (GSignalInvocationHint *hint,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer data)
+{
+ GObject *object;
+ GtkWidget *widget;
+ AtkObject *atk_obj;
+ AtkObject *parent;
+ GdkEventWindowState *event;
+ gchar *signal_name;
+
+ object = g_value_get_object (param_values + 0);
+ if (!GTK_IS_WINDOW (object))
+ return FALSE;
+
+ event = g_value_get_boxed (param_values + 1);
+ if (event->type == GDK_WINDOW_STATE)
+ return FALSE;
+ widget = GTK_WIDGET (object);
+
+ if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
+ signal_name = "maximize";
+ else if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
+ signal_name = "minimize";
+ else if (event->new_window_state == 0)
+ signal_name = "restore";
+ else
+ return TRUE;
+
+ atk_obj = gtk_widget_get_accessible (widget);
+ if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
+ {
+ parent = atk_object_get_parent (atk_obj);
+ if (parent == atk_get_root ())
+ g_signal_emit_by_name (atk_obj, signal_name);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+configure_event_watcher (GSignalInvocationHint *hint,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer data)
+{
+ GtkAllocation allocation;
+ GObject *object;
+ GtkWidget *widget;
+ AtkObject *atk_obj;
+ AtkObject *parent;
+ GdkEvent *event;
+ gchar *signal_name;
+ object = g_value_get_object (param_values + 0);
+ if (!GTK_IS_WINDOW (object))
+ return FALSE;
+
+ event = g_value_get_boxed (param_values + 1);
+ if (event->type != GDK_CONFIGURE)
+ return FALSE;
+ widget = GTK_WIDGET (object);
+ gtk_widget_get_allocation (widget, &allocation);
+ if (allocation.x == ((GdkEventConfigure *)event)->x &&
+ allocation.y == ((GdkEventConfigure *)event)->y &&
+ allocation.width == ((GdkEventConfigure *)event)->width &&
+ allocation.height == ((GdkEventConfigure *)event)->height)
+ return TRUE;
+
+ if (allocation.width != ((GdkEventConfigure *)event)->width ||
+ allocation.height != ((GdkEventConfigure *)event)->height)
+ signal_name = "resize";
+ else
+ signal_name = "move";
+
+ atk_obj = gtk_widget_get_accessible (widget);
+ if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
+ {
+ parent = atk_object_get_parent (atk_obj);
+ if (parent == atk_get_root ())
+ g_signal_emit_by_name (atk_obj, signal_name);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+window_focus (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ AtkObject *atk_obj;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+ atk_obj = gtk_widget_get_accessible (widget);
+ g_signal_emit_by_name (atk_obj, event->in ? "activate" : "deactivate");
+
+ return FALSE;
+}
+
+static void
+window_added (AtkObject *atk_obj,
+ guint index,
+ AtkObject *child)
+{
+ GtkWidget *widget;
+
+ if (!GTK_IS_WINDOW_ACCESSIBLE (child))
+ return;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
+ if (!widget)
+ return;
+
+ g_signal_connect (widget, "focus-in-event", (GCallback) window_focus, NULL);
+ g_signal_connect (widget, "focus-out-event", (GCallback) window_focus, NULL);
+ g_signal_emit_by_name (child, "create");
+}
+
+
+static void
+window_removed (AtkObject *atk_obj,
+ guint index,
+ AtkObject *child)
+{
+ GtkWidget *widget;
+ GtkWindow *window;
+
+ if (!GTK_IS_WINDOW_ACCESSIBLE (child))
+ return;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
+ if (!widget)
+ return;
+
+ window = GTK_WINDOW (widget);
+ /*
+ * Deactivate window if it is still focused and we are removing it. This
+ * can happen when a dialog displayed by gok is removed.
+ */
+ if (gtk_window_is_active (window) &&
+ gtk_window_has_toplevel_focus (window))
+ {
+ AtkObject *atk_obj;
+
+ atk_obj = gtk_widget_get_accessible (widget);
+ g_signal_emit_by_name (atk_obj, "deactivate");
+ }
+
+ g_signal_handlers_disconnect_by_func (widget, (gpointer) window_focus, NULL);
+ g_signal_emit_by_name (child, "destroy");
+}
+
+static void
+do_window_event_initialization (void)
+{
+ AtkObject *root;
+
+ g_type_class_ref (GTK_TYPE_WINDOW_ACCESSIBLE);
+ g_signal_add_emission_hook (g_signal_lookup ("window-state-event", GTK_TYPE_WIDGET),
+ 0, state_event_watcher, NULL, (GDestroyNotify) NULL);
+ g_signal_add_emission_hook (g_signal_lookup ("configure-event", GTK_TYPE_WIDGET),
+ 0, configure_event_watcher, NULL, (GDestroyNotify) NULL);
+
+ root = atk_get_root ();
+ g_signal_connect (root, "children-changed::add",
+ (GCallback) window_added, NULL);
+ g_signal_connect (root, "children-changed::remove",
+ (GCallback) window_removed, NULL);
+}
static guint
gail_util_add_global_event_listener (GSignalEmissionHook listener,
const gchar *event_type)
@@ -270,6 +463,8 @@ gail_util_remove_key_event_listener (guint listener_key)
static AtkObject *
gail_util_get_root (void)
{
+ static AtkObject *root = NULL;
+
if (!root)
{
root = g_object_new (GTK_TYPE_TOPLEVEL_ACCESSIBLE, NULL);
@@ -291,234 +486,10 @@ gail_util_get_toolkit_version (void)
return GTK_VERSION;
}
-static guint
-add_listener (GSignalEmissionHook listener,
- const gchar *object_type,
- const gchar *signal,
- const gchar *hook_data)
-{
- GType type;
- guint signal_id;
- gint rc = 0;
-
- type = g_type_from_name (object_type);
- if (type)
- {
- signal_id = g_signal_lookup (signal, type);
- if (signal_id > 0)
- {
- GailUtilListenerInfo *listener_info;
-
- rc = listener_idx;
-
- listener_info = g_new (GailUtilListenerInfo, 1);
- listener_info->key = listener_idx;
- listener_info->hook_id =
- g_signal_add_emission_hook (signal_id, 0, listener,
- g_strdup (hook_data),
- (GDestroyNotify) g_free);
- listener_info->signal_id = signal_id;
-
- g_hash_table_insert (listener_list, &(listener_info->key), listener_info);
- listener_idx++;
- }
- else
- {
- g_warning("Invalid signal type %s\n", signal);
- }
- }
- else
- {
- g_warning("Invalid object type %s\n", object_type);
- }
- return rc;
-}
-
-static void
-do_window_event_initialization (void)
-{
- AtkObject *root;
-
- g_type_class_ref (GTK_TYPE_WINDOW_ACCESSIBLE);
- g_signal_add_emission_hook (g_signal_lookup ("window-state-event", GTK_TYPE_WIDGET),
- 0, state_event_watcher, NULL, (GDestroyNotify) NULL);
- g_signal_add_emission_hook (g_signal_lookup ("configure-event", GTK_TYPE_WIDGET),
- 0, configure_event_watcher, NULL, (GDestroyNotify) NULL);
-
- root = atk_get_root ();
- g_signal_connect (root, "children-changed::add",
- (GCallback) window_added, NULL);
- g_signal_connect (root, "children-changed::remove",
- (GCallback) window_removed, NULL);
-}
-
-static gboolean
-state_event_watcher (GSignalInvocationHint *hint,
- guint n_param_values,
- const GValue *param_values,
- gpointer data)
-{
- GObject *object;
- GtkWidget *widget;
- AtkObject *atk_obj;
- AtkObject *parent;
- GdkEventWindowState *event;
- gchar *signal_name;
-
- object = g_value_get_object (param_values + 0);
- if (!GTK_IS_WINDOW (object))
- return FALSE;
-
- event = g_value_get_boxed (param_values + 1);
- if (event->type == GDK_WINDOW_STATE)
- return FALSE;
- widget = GTK_WIDGET (object);
-
- if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
- signal_name = "maximize";
- else if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
- signal_name = "minimize";
- else if (event->new_window_state == 0)
- signal_name = "restore";
- else
- return TRUE;
-
- atk_obj = gtk_widget_get_accessible (widget);
- if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
- {
- parent = atk_object_get_parent (atk_obj);
- if (parent == atk_get_root ())
- g_signal_emit_by_name (atk_obj, signal_name);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-window_added (AtkObject *atk_obj,
- guint index,
- AtkObject *child)
-{
- GtkWidget *widget;
-
- if (!GTK_IS_WINDOW_ACCESSIBLE (child))
- return;
-
- widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
- if (!widget)
- return;
-
- g_signal_connect (widget, "focus-in-event", (GCallback) window_focus, NULL);
- g_signal_connect (widget, "focus-out-event", (GCallback) window_focus, NULL);
- g_signal_emit_by_name (child, "create");
-}
-
-
-static void
-window_removed (AtkObject *atk_obj,
- guint index,
- AtkObject *child)
-{
- GtkWidget *widget;
- GtkWindow *window;
-
- if (!GTK_IS_WINDOW_ACCESSIBLE (child))
- return;
-
- widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
- if (!widget)
- return;
-
- window = GTK_WINDOW (widget);
- /*
- * Deactivate window if it is still focused and we are removing it. This
- * can happen when a dialog displayed by gok is removed.
- */
- if (gtk_window_is_active (window) &&
- gtk_window_has_toplevel_focus (window))
- {
- AtkObject *atk_obj;
-
- atk_obj = gtk_widget_get_accessible (widget);
- g_signal_emit_by_name (atk_obj, "deactivate");
- }
-
- g_signal_handlers_disconnect_by_func (widget, (gpointer) window_focus, NULL);
- g_signal_emit_by_name (child, "destroy");
-}
-
-static gboolean
-window_focus (GtkWidget *widget,
- GdkEventFocus *event)
+void
+gail_util_install (void)
{
- AtkObject *atk_obj;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-
- atk_obj = gtk_widget_get_accessible (widget);
- g_signal_emit_by_name (atk_obj, event->in ? "activate" : "deactivate");
-
- return FALSE;
-}
-
-static gboolean
-configure_event_watcher (GSignalInvocationHint *hint,
- guint n_param_values,
- const GValue *param_values,
- gpointer data)
-{
- GtkAllocation allocation;
- GObject *object;
- GtkWidget *widget;
- AtkObject *atk_obj;
- AtkObject *parent;
- GdkEvent *event;
- gchar *signal_name;
-
- object = g_value_get_object (param_values + 0);
- if (!GTK_IS_WINDOW (object))
- return FALSE;
-
- event = g_value_get_boxed (param_values + 1);
- if (event->type != GDK_CONFIGURE)
- return FALSE;
- widget = GTK_WIDGET (object);
- gtk_widget_get_allocation (widget, &allocation);
- if (allocation.x == ((GdkEventConfigure *)event)->x &&
- allocation.y == ((GdkEventConfigure *)event)->y &&
- allocation.width == ((GdkEventConfigure *)event)->width &&
- allocation.height == ((GdkEventConfigure *)event)->height)
- return TRUE;
-
- if (allocation.width != ((GdkEventConfigure *)event)->width ||
- allocation.height != ((GdkEventConfigure *)event)->height)
- signal_name = "resize";
- else
- signal_name = "move";
-
- atk_obj = gtk_widget_get_accessible (widget);
- if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
- {
- parent = atk_object_get_parent (atk_obj);
- if (parent == atk_get_root ())
- g_signal_emit_by_name (atk_obj, signal_name);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-gail_util_class_init (GailUtilClass *klass)
-{
- AtkUtilClass *atk_class;
- gpointer data;
-
- data = g_type_class_peek (ATK_TYPE_UTIL);
- atk_class = ATK_UTIL_CLASS (data);
+ AtkUtilClass *atk_class = ATK_UTIL_CLASS (g_type_class_ref (ATK_TYPE_UTIL));
atk_class->add_global_event_listener = gail_util_add_global_event_listener;
atk_class->remove_global_event_listener = gail_util_remove_global_event_listener;
@@ -530,8 +501,3 @@ gail_util_class_init (GailUtilClass *klass)
listener_list = g_hash_table_new_full (g_int_hash, g_int_equal, NULL, g_free);
}
-
-static void
-gail_util_init (GailUtil *utils)
-{
-}
diff --git a/gtk/a11y/gailutil.h b/gtk/a11y/gailutil.h
index 0e533c2..4aa8c8d 100644
--- a/gtk/a11y/gailutil.h
+++ b/gtk/a11y/gailutil.h
@@ -24,28 +24,7 @@
G_BEGIN_DECLS
-#define GAIL_TYPE_UTIL (gail_util_get_type ())
-#define GAIL_UTIL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_UTIL, GailUtil))
-#define GAIL_UTIL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_UTIL, GailUtilClass))
-#define GAIL_IS_UTIL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_UTIL))
-#define GAIL_IS_UTIL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_UTIL))
-#define GAIL_UTIL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_UTIL, GailUtilClass))
-
-typedef struct _GailUtil GailUtil;
-typedef struct _GailUtilClass GailUtilClass;
-
-struct _GailUtil
-{
- AtkUtil parent;
- GList *listener_list;
-};
-
-struct _GailUtilClass
-{
- AtkUtilClass parent_class;
-};
-
-GType gail_util_get_type (void);
+void gail_util_install (void);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]