|
Packit Service |
ef73c4 |
/* ATK - Accessibility Toolkit
|
|
Packit Service |
ef73c4 |
* Copyright 2001 Sun Microsystems Inc.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
ef73c4 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
ef73c4 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
ef73c4 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
ef73c4 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
ef73c4 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
ef73c4 |
* Lesser General Public License for more details.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
ef73c4 |
* License along with this library; if not, write to the
|
|
Packit Service |
ef73c4 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Packit Service |
ef73c4 |
* Boston, MA 02111-1307, USA.
|
|
Packit Service |
ef73c4 |
*/
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
#include "config.h"
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
#include "atkutil.h"
|
|
Packit Service |
ef73c4 |
#include "atkmarshal.h"
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* SECTION:atkutil
|
|
Packit Service |
ef73c4 |
* @Short_description: A set of ATK utility functions for event and toolkit support.
|
|
Packit Service |
ef73c4 |
* @Title:AtkUtil
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* A set of ATK utility functions which are used to support event
|
|
Packit Service |
ef73c4 |
* registration of various types, and obtaining the 'root' accessible
|
|
Packit Service |
ef73c4 |
* of a process and information about the current ATK implementation
|
|
Packit Service |
ef73c4 |
* and toolkit version.
|
|
Packit Service |
ef73c4 |
*/
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static void atk_util_class_init (AtkUtilClass *klass);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static AtkObject *previous_focus_object = NULL;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
typedef struct _AtkUtilListenerInfo AtkUtilListenerInfo;
|
|
Packit Service |
ef73c4 |
struct _AtkUtilListenerInfo
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
gint key;
|
|
Packit Service |
ef73c4 |
guint signal_id;
|
|
Packit Service |
ef73c4 |
gulong hook_id;
|
|
Packit Service |
ef73c4 |
};
|
|
Packit Service |
ef73c4 |
static GHashTable *listener_list = NULL;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
GType
|
|
Packit Service |
ef73c4 |
atk_util_get_type (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
static GType type = 0;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (!type)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
static const GTypeInfo typeInfo =
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
sizeof (AtkUtilClass),
|
|
Packit Service |
ef73c4 |
(GBaseInitFunc) NULL,
|
|
Packit Service |
ef73c4 |
(GBaseFinalizeFunc) NULL,
|
|
Packit Service |
ef73c4 |
(GClassInitFunc) atk_util_class_init,
|
|
Packit Service |
ef73c4 |
(GClassFinalizeFunc) NULL,
|
|
Packit Service |
ef73c4 |
NULL,
|
|
Packit Service |
ef73c4 |
sizeof (AtkUtil),
|
|
Packit Service |
ef73c4 |
0,
|
|
Packit Service |
ef73c4 |
(GInstanceInitFunc) NULL,
|
|
Packit Service |
ef73c4 |
} ;
|
|
Packit Service |
ef73c4 |
type = g_type_register_static (G_TYPE_OBJECT, "AtkUtil", &typeInfo, 0) ;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
return type;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/*
|
|
Packit Service |
ef73c4 |
* This file supports the addition and removal of multiple focus handlers
|
|
Packit Service |
ef73c4 |
* as long as they are all called in the same thread.
|
|
Packit Service |
ef73c4 |
*/
|
|
Packit Service |
ef73c4 |
static AtkEventListenerInit focus_tracker_init = (AtkEventListenerInit) NULL;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static gboolean init_done = FALSE;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/*
|
|
Packit Service |
ef73c4 |
* Array of FocusTracker structs
|
|
Packit Service |
ef73c4 |
*/
|
|
Packit Service |
ef73c4 |
static GArray *trackers = NULL;
|
|
Packit Service |
ef73c4 |
static guint global_index = 0;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
typedef struct _FocusTracker FocusTracker;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
struct _FocusTracker {
|
|
Packit Service |
ef73c4 |
guint index;
|
|
Packit Service |
ef73c4 |
AtkEventListener func;
|
|
Packit Service |
ef73c4 |
};
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_focus_tracker_init: (skip)
|
|
Packit Service |
ef73c4 |
* @init: Function to be called for focus tracker initialization
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Specifies the function to be called for focus tracker initialization.
|
|
Packit Service |
ef73c4 |
* This function should be called by an implementation of the
|
|
Packit Service |
ef73c4 |
* ATK interface if any specific work needs to be done to enable
|
|
Packit Service |
ef73c4 |
* focus tracking.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Deprecated: 2.9.4: Focus tracking has been dropped as a feature
|
|
Packit Service |
ef73c4 |
* to be implemented by ATK itself.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
void
|
|
Packit Service |
ef73c4 |
atk_focus_tracker_init (AtkEventListenerInit init)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
if (!focus_tracker_init)
|
|
Packit Service |
ef73c4 |
focus_tracker_init = init;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_add_focus_tracker: (skip)
|
|
Packit Service |
ef73c4 |
* @focus_tracker: Function to be added to the list of functions to be called
|
|
Packit Service |
ef73c4 |
* when an object receives focus.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Adds the specified function to the list of functions to be called
|
|
Packit Service |
ef73c4 |
* when an object receives focus.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Deprecated: 2.9.4: Focus tracking has been dropped as a feature
|
|
Packit Service |
ef73c4 |
* to be implemented by ATK itself. If you need focus tracking on your
|
|
Packit Service |
ef73c4 |
* implementation, subscribe to the #AtkObject::state-change "focused" signal.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: added focus tracker id, or 0 on failure.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
guint
|
|
Packit Service |
ef73c4 |
atk_add_focus_tracker (AtkEventListener focus_tracker)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_return_val_if_fail (focus_tracker, 0);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (!init_done)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
if (focus_tracker_init)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
focus_tracker_init ();
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
trackers = g_array_sized_new (FALSE, TRUE, sizeof (FocusTracker), 0);
|
|
Packit Service |
ef73c4 |
init_done = TRUE;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
if (init_done)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
FocusTracker item;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
item.index = ++global_index;
|
|
Packit Service |
ef73c4 |
item.func = focus_tracker;
|
|
Packit Service |
ef73c4 |
trackers = g_array_append_val (trackers, item);
|
|
Packit Service |
ef73c4 |
return global_index;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
return 0;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_remove_focus_tracker:
|
|
Packit Service |
ef73c4 |
* @tracker_id: the id of the focus tracker to remove
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Deprecated: 2.9.4: Focus tracking has been dropped as a feature
|
|
Packit Service |
ef73c4 |
* to be implemented by ATK itself. If you need focus tracking on your
|
|
Packit Service |
ef73c4 |
* implementation, subscribe to the #AtkObject::state-change "focused" signal.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Removes the specified focus tracker from the list of functions
|
|
Packit Service |
ef73c4 |
* to be called when any object receives focus.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
void
|
|
Packit Service |
ef73c4 |
atk_remove_focus_tracker (guint tracker_id)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
FocusTracker *item;
|
|
Packit Service |
ef73c4 |
guint i;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (trackers == NULL)
|
|
Packit Service |
ef73c4 |
return;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (tracker_id == 0)
|
|
Packit Service |
ef73c4 |
return;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
for (i = 0; i < trackers->len; i++)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
item = &g_array_index (trackers, FocusTracker, i);
|
|
Packit Service |
ef73c4 |
if (item->index == tracker_id)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
trackers = g_array_remove_index (trackers, i);
|
|
Packit Service |
ef73c4 |
break;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_focus_tracker_notify:
|
|
Packit Service |
ef73c4 |
* @object: an #AtkObject
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Cause the focus tracker functions which have been specified to be
|
|
Packit Service |
ef73c4 |
* executed for the object.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Deprecated: 2.9.4: Focus tracking has been dropped as a feature
|
|
Packit Service |
ef73c4 |
* to be implemented by ATK itself. As #AtkObject::focus-event was
|
|
Packit Service |
ef73c4 |
* deprecated in favor of a #AtkObject::state-change signal, in order
|
|
Packit Service |
ef73c4 |
* to notify a focus change on your implementation, you can use
|
|
Packit Service |
ef73c4 |
* atk_object_notify_state_change() instead.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
void
|
|
Packit Service |
ef73c4 |
atk_focus_tracker_notify (AtkObject *object)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
FocusTracker *item;
|
|
Packit Service |
ef73c4 |
guint i;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (trackers == NULL)
|
|
Packit Service |
ef73c4 |
return;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (object == previous_focus_object)
|
|
Packit Service |
ef73c4 |
return;
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
if (previous_focus_object)
|
|
Packit Service |
ef73c4 |
g_object_unref (previous_focus_object);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
previous_focus_object = object;
|
|
Packit Service |
ef73c4 |
if (object)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_object_ref (object);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
for (i = 0; i < trackers->len; i++)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
item = &g_array_index (trackers, FocusTracker, i);
|
|
Packit Service |
ef73c4 |
g_return_if_fail (item != NULL);
|
|
Packit Service |
ef73c4 |
item->func (object);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static guint
|
|
Packit Service |
ef73c4 |
add_listener (GSignalEmissionHook listener,
|
|
Packit Service |
ef73c4 |
const gchar *object_type,
|
|
Packit Service |
ef73c4 |
const gchar *signal_name,
|
|
Packit Service |
ef73c4 |
const gchar *detail_string,
|
|
Packit Service |
ef73c4 |
const gchar *hook_data)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
GType type;
|
|
Packit Service |
ef73c4 |
guint signal_id;
|
|
Packit Service |
ef73c4 |
gint rc = 0;
|
|
Packit Service |
ef73c4 |
static gint listener_idx = 1;
|
|
Packit Service |
ef73c4 |
GQuark detail_quark = 0;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
type = g_type_from_name (object_type);
|
|
Packit Service |
ef73c4 |
if (type)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
signal_id = g_signal_lookup (signal_name, type);
|
|
Packit Service |
ef73c4 |
detail_quark = g_quark_from_string (detail_string);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (signal_id > 0)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
AtkUtilListenerInfo *listener_info;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
rc = listener_idx;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
listener_info = g_new (AtkUtilListenerInfo, 1);
|
|
Packit Service |
ef73c4 |
listener_info->key = listener_idx;
|
|
Packit Service |
ef73c4 |
listener_info->hook_id =
|
|
Packit Service |
ef73c4 |
g_signal_add_emission_hook (signal_id, detail_quark, listener,
|
|
Packit Service |
ef73c4 |
g_strdup (hook_data),
|
|
Packit Service |
ef73c4 |
(GDestroyNotify) g_free);
|
|
Packit Service |
ef73c4 |
listener_info->signal_id = signal_id;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
g_hash_table_insert(listener_list, &(listener_info->key), listener_info);
|
|
Packit Service |
ef73c4 |
listener_idx++;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_debug ("Signal type %s not supported\n", signal_name);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_warning("Invalid object type %s\n", object_type);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
return rc;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static guint
|
|
Packit Service |
ef73c4 |
atk_util_real_add_global_event_listener (GSignalEmissionHook listener,
|
|
Packit Service |
ef73c4 |
const gchar *event_type)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
guint rc = 0;
|
|
Packit Service |
ef73c4 |
gchar **split_string;
|
|
Packit Service |
ef73c4 |
guint length;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
split_string = g_strsplit (event_type, ":", 0);
|
|
Packit Service |
ef73c4 |
length = g_strv_length (split_string);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if ((length == 3) || (length == 4))
|
|
Packit Service |
ef73c4 |
rc = add_listener (listener, split_string[1], split_string[2],
|
|
Packit Service |
ef73c4 |
split_string[3], event_type);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
g_strfreev (split_string);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return rc;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static void
|
|
Packit Service |
ef73c4 |
atk_util_real_remove_global_event_listener (guint remove_listener)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
if (remove_listener > 0)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
AtkUtilListenerInfo *listener_info;
|
|
Packit Service |
ef73c4 |
gint tmp_idx = remove_listener;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
listener_info = (AtkUtilListenerInfo *)
|
|
Packit Service |
ef73c4 |
g_hash_table_lookup(listener_list, &tmp_idx);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (listener_info != NULL)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
/* Hook id of 0 and signal id of 0 are invalid */
|
|
Packit Service |
ef73c4 |
if (listener_info->hook_id != 0 && listener_info->signal_id != 0)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
/* Remove the emission hook */
|
|
Packit Service |
ef73c4 |
g_signal_remove_emission_hook(listener_info->signal_id,
|
|
Packit Service |
ef73c4 |
listener_info->hook_id);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/* Remove the element from the hash */
|
|
Packit Service |
ef73c4 |
g_hash_table_remove(listener_list, &tmp_idx);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_warning("Invalid listener hook_id %ld or signal_id %d\n",
|
|
Packit Service |
ef73c4 |
listener_info->hook_id, listener_info->signal_id);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_warning("No listener with the specified listener id %d",
|
|
Packit Service |
ef73c4 |
remove_listener);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
g_warning("Invalid listener_id %d", remove_listener);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_add_global_event_listener: (skip)
|
|
Packit Service |
ef73c4 |
* @listener: the listener to notify
|
|
Packit Service |
ef73c4 |
* @event_type: the type of event for which notification is requested
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Adds the specified function to the list of functions to be called
|
|
Packit Service |
ef73c4 |
* when an ATK event of type event_type occurs.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* The format of event_type is the following:
|
|
Packit Service |
ef73c4 |
* "ATK:<atk_type>:<atk_event>:<atk_event_detail>
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Where "ATK" works as the namespace, <atk_interface> is the name of
|
|
Packit Service |
ef73c4 |
* the ATK type (interface or object), <atk_event> is the name of the
|
|
Packit Service |
ef73c4 |
* signal defined on that interface and <atk_event_detail> is the
|
|
Packit Service |
ef73c4 |
* gsignal detail of that signal. You can find more info about gsignal
|
|
Packit Service |
ef73c4 |
* details here:
|
|
Packit Service |
ef73c4 |
* http://developer.gnome.org/gobject/stable/gobject-Signals.html
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* The first three parameters are mandatory. The last one is optional.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* For example:
|
|
Packit Service |
ef73c4 |
* ATK:AtkObject:state-change
|
|
Packit Service |
ef73c4 |
* ATK:AtkText:text-selection-changed
|
|
Packit Service |
ef73c4 |
* ATK:AtkText:text-insert:system
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Toolkit implementor note: ATK provides a default implementation for
|
|
Packit Service |
ef73c4 |
* this virtual method. ATK implementors are discouraged from
|
|
Packit Service |
ef73c4 |
* reimplementing this method.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Toolkit implementor note: this method is not intended to be used by
|
|
Packit Service |
ef73c4 |
* ATK implementors but by ATK consumers.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* ATK consumers note: as this method adds a listener for a given ATK
|
|
Packit Service |
ef73c4 |
* type, that type should be already registered on the GType system
|
|
Packit Service |
ef73c4 |
* before calling this method. A simple way to do that is creating an
|
|
Packit Service |
ef73c4 |
* instance of #AtkNoOpObject. This class implements all ATK
|
|
Packit Service |
ef73c4 |
* interfaces, so creating the instance will register all ATK types as
|
|
Packit Service |
ef73c4 |
* a collateral effect.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: added event listener id, or 0 on failure.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
guint
|
|
Packit Service |
ef73c4 |
atk_add_global_event_listener (GSignalEmissionHook listener,
|
|
Packit Service |
ef73c4 |
const gchar *event_type)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
guint retval;
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_ref (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (klass->add_global_event_listener)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = klass->add_global_event_listener (listener, event_type);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = 0;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
g_type_class_unref (klass);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return retval;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_remove_global_event_listener:
|
|
Packit Service |
ef73c4 |
* @listener_id: the id of the event listener to remove
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* @listener_id is the value returned by #atk_add_global_event_listener
|
|
Packit Service |
ef73c4 |
* when you registered that event listener.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Toolkit implementor note: ATK provides a default implementation for
|
|
Packit Service |
ef73c4 |
* this virtual method. ATK implementors are discouraged from
|
|
Packit Service |
ef73c4 |
* reimplementing this method.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Toolkit implementor note: this method is not intended to be used by
|
|
Packit Service |
ef73c4 |
* ATK implementors but by ATK consumers.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Removes the specified event listener
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
void
|
|
Packit Service |
ef73c4 |
atk_remove_global_event_listener (guint listener_id)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_peek (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (klass && klass->remove_global_event_listener)
|
|
Packit Service |
ef73c4 |
klass->remove_global_event_listener (listener_id);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_add_key_event_listener: (skip)
|
|
Packit Service |
ef73c4 |
* @listener: the listener to notify
|
|
Packit Service |
ef73c4 |
* @data: a #gpointer that points to a block of data that should be sent to the registered listeners,
|
|
Packit Service |
ef73c4 |
* along with the event notification, when it occurs.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Adds the specified function to the list of functions to be called
|
|
Packit Service |
ef73c4 |
* when a key event occurs. The @data element will be passed to the
|
|
Packit Service |
ef73c4 |
* #AtkKeySnoopFunc (@listener) as the @func_data param, on notification.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: added event listener id, or 0 on failure.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
guint
|
|
Packit Service |
ef73c4 |
atk_add_key_event_listener (AtkKeySnoopFunc listener, gpointer data)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
guint retval;
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_peek (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
if (klass && klass->add_key_event_listener)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = klass->add_key_event_listener (listener, data);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = 0;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return retval;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_remove_key_event_listener:
|
|
Packit Service |
ef73c4 |
* @listener_id: the id of the event listener to remove
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* @listener_id is the value returned by #atk_add_key_event_listener
|
|
Packit Service |
ef73c4 |
* when you registered that event listener.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Removes the specified event listener.
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
void
|
|
Packit Service |
ef73c4 |
atk_remove_key_event_listener (guint listener_id)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_peek (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
if (klass->remove_key_event_listener)
|
|
Packit Service |
ef73c4 |
klass->remove_key_event_listener (listener_id);
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_get_root:
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Gets the root accessible container for the current application.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: (transfer none): the root accessible container for the current
|
|
Packit Service |
ef73c4 |
* application
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
AtkObject*
|
|
Packit Service |
ef73c4 |
atk_get_root (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_ref (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
AtkObject *retval;
|
|
Packit Service |
ef73c4 |
if (klass->get_root)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = klass->get_root ();
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = NULL;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
g_type_class_unref (klass);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return retval;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_get_focus_object:
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Gets the currently focused object.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Since: 1.6
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: (transfer none): the currently focused object for the current
|
|
Packit Service |
ef73c4 |
* application
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
AtkObject*
|
|
Packit Service |
ef73c4 |
atk_get_focus_object (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
return previous_focus_object;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_get_toolkit_name:
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Gets name string for the GUI toolkit implementing ATK for this application.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: name string for the GUI toolkit implementing ATK for this application
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
const gchar*
|
|
Packit Service |
ef73c4 |
atk_get_toolkit_name (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
const gchar *retval;
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_ref (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
if (klass->get_toolkit_name)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = klass->get_toolkit_name ();
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = NULL;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
g_type_class_unref (klass);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return retval;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_get_toolkit_version:
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Gets version string for the GUI toolkit implementing ATK for this application.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: version string for the GUI toolkit implementing ATK for this application
|
|
Packit Service |
ef73c4 |
**/
|
|
Packit Service |
ef73c4 |
const gchar*
|
|
Packit Service |
ef73c4 |
atk_get_toolkit_version (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
const gchar *retval;
|
|
Packit Service |
ef73c4 |
AtkUtilClass *klass = g_type_class_ref (ATK_TYPE_UTIL);
|
|
Packit Service |
ef73c4 |
if (klass->get_toolkit_version)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = klass->get_toolkit_version ();
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
else
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
retval = NULL;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
g_type_class_unref (klass);
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
return retval;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
/**
|
|
Packit Service |
ef73c4 |
* atk_get_version:
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Gets the current version for ATK.
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Returns: version string for ATK
|
|
Packit Service |
ef73c4 |
*
|
|
Packit Service |
ef73c4 |
* Since: 1.20
|
|
Packit Service |
ef73c4 |
*/
|
|
Packit Service |
ef73c4 |
const gchar *
|
|
Packit Service |
ef73c4 |
atk_get_version (void)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
return VERSION;
|
|
Packit Service |
ef73c4 |
}
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
static void
|
|
Packit Service |
ef73c4 |
atk_util_class_init (AtkUtilClass *klass)
|
|
Packit Service |
ef73c4 |
{
|
|
Packit Service |
ef73c4 |
klass->add_global_event_listener = atk_util_real_add_global_event_listener;
|
|
Packit Service |
ef73c4 |
klass->remove_global_event_listener = atk_util_real_remove_global_event_listener;
|
|
Packit Service |
ef73c4 |
klass->get_root = NULL;
|
|
Packit Service |
ef73c4 |
klass->get_toolkit_name = NULL;
|
|
Packit Service |
ef73c4 |
klass->get_toolkit_version = NULL;
|
|
Packit Service |
ef73c4 |
|
|
Packit Service |
ef73c4 |
listener_list = g_hash_table_new_full (g_int_hash, g_int_equal, NULL,
|
|
Packit Service |
ef73c4 |
g_free);
|
|
Packit Service |
ef73c4 |
}
|