#include "config.h"
#include <string.h>
+
+#undef GTK_DISABLE_DEPRECATED
+
#include <gtk/gtk.h>
#ifdef GDK_WINDOWING_X11
#include <gdk/x11/gdkx.h>
gpointer data);
static GtkWidget* gail_widget_find_viewport (GtkWidget *widget);
static gboolean gail_widget_on_screen (GtkWidget *widget);
+static gboolean gail_widget_all_parents_visible(GtkWidget *widget);
G_DEFINE_TYPE_WITH_CODE (GailWidget, gail_widget, GTK_TYPE_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init))
{
/* Get the tooltip from the widget */
GtkAccessible *obj = GTK_ACCESSIBLE (accessible);
- GtkTooltipsData *data;
gail_return_val_if_fail (obj, NULL);
return NULL;
gail_return_val_if_fail (GTK_WIDGET (obj->widget), NULL);
-
- data = gtk_tooltips_data_get (obj->widget);
- if (data == NULL)
- return NULL;
- return data->tip_text;
+ return gtk_widget_get_tooltip_text (obj->widget);
}
}
if (GTK_WIDGET_VISIBLE (widget))
{
atk_state_set_add_state (state_set, ATK_STATE_VISIBLE);
- if (gail_widget_on_screen (widget) &&
- GTK_WIDGET_MAPPED (widget))
+ if (gail_widget_on_screen (widget) && GTK_WIDGET_MAPPED (widget) &&
+ gail_widget_all_parents_visible (widget))
{
atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
}
{
gtk_widget_grab_focus (widget);
toplevel = gtk_widget_get_toplevel (widget);
- if (GTK_WIDGET_TOPLEVEL (toplevel))
+ if (gtk_widget_is_toplevel (toplevel))
{
#ifdef GDK_WINDOWING_X11
gtk_window_present_with_time (GTK_WINDOW (toplevel), gdk_x11_get_server_time (widget->window));
return FALSE;
gail_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- if (GTK_WIDGET_TOPLEVEL (widget))
+ if (gtk_widget_is_toplevel (widget))
{
if (coord_type == ATK_XY_WINDOW)
{
else
{
gtk_widget_set_uposition (widget, x_current, y_current);
- gtk_widget_set_usize (widget, width, height);
+ gtk_widget_set_size_request (widget, width, height);
return TRUE;
}
}
else if (coord_type == ATK_XY_SCREEN)
{
gtk_widget_set_uposition (widget, x, y);
- gtk_widget_set_usize (widget, width, height);
+ gtk_widget_set_size_request (widget, width, height);
return TRUE;
}
}
return FALSE;
gail_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- if (GTK_WIDGET_TOPLEVEL (widget))
+ if (gtk_widget_is_toplevel (widget))
{
if (coord_type == ATK_XY_WINDOW)
{
return FALSE;
gail_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- if (GTK_WIDGET_TOPLEVEL (widget))
+ if (gtk_widget_is_toplevel (widget))
{
- gtk_widget_set_usize (widget, width, height);
+ gtk_widget_set_size_request (widget, width, height);
return TRUE;
}
else
return return_value;
}
+
+/**
+ * gail_widget_all_parents_visible:
+ * @widget: a #GtkWidget
+ *
+ * Checks if all the predecesors (the parent widget, his parent, etc) are visible
+ * Used to check properly the SHOWING state.
+ *
+ * Return value: TRUE if all the parent hierarchy is visible, FALSE otherwise
+ **/
+static gboolean gail_widget_all_parents_visible (GtkWidget *widget)
+{
+ GtkWidget *iter_parent = NULL;
+ gboolean result = TRUE;
+
+ for (iter_parent = gtk_widget_get_parent (widget); iter_parent;
+ iter_parent = gtk_widget_get_parent (iter_parent))
+ {
+ if (!GTK_WIDGET_VISIBLE (iter_parent))
+ {
+ result = FALSE;
+ break;
+ }
+ }
+
+ return result;
+}