vcl/inc/unx/gtk/gtkframe.hxx | 1 + vcl/unx/gtk/a11y/atkbridge.cxx | 5 +++-- vcl/unx/gtk/a11y/atkfactory.cxx | 5 +++++ vcl/unx/gtk/a11y/atkutil.cxx | 12 ++++++++++-- vcl/unx/gtk/a11y/atkutil.hxx | 1 + vcl/unx/gtk/window/gtksalframe.cxx | 23 +++++++++++++++++++---- 6 files changed, 39 insertions(+), 8 deletions(-)
New commits: commit dbba5f026cd94002fc76dc94a0d131d494bc4301 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Jun 26 13:50:28 2015 +0100 Related: tdf#92293 gtk3 a11y: I suspect that all of this is redundant in favor of hooking in via get_accessible Change-Id: I8c265e0d9a5f8bdf02b7ba4be71fc58194cf5aa4 (cherry picked from commit aff0d4b29681ee8008ff438885c8cc2b461f4dd5) diff --git a/vcl/unx/gtk/a11y/atkbridge.cxx b/vcl/unx/gtk/a11y/atkbridge.cxx index 9a89a8f..c649c25 100644 --- a/vcl/unx/gtk/a11y/atkbridge.cxx +++ b/vcl/unx/gtk/a11y/atkbridge.cxx @@ -27,6 +27,9 @@ bool InitAtkBridge() { +#if GTK_CHECK_VERSION(3,0,0) + ooo_atk_util_ensure_event_listener(); +#else const char* pVersion = atk_get_toolkit_version(); if( ! pVersion ) return false; @@ -56,13 +59,15 @@ bool InitAtkBridge() AtkRegistry * registry = atk_get_default_registry(); if( registry ) atk_registry_set_factory_type( registry, OOO_TYPE_FIXED, OOO_TYPE_WRAPPER_FACTORY ); - +#endif return true; } void DeInitAtkBridge() { +#if !GTK_CHECK_VERSION(3,0,0) restore_gail_window_vtable(); +#endif } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk/a11y/atkutil.cxx b/vcl/unx/gtk/a11y/atkutil.cxx index 03f08e4..bb0a238 100644 --- a/vcl/unx/gtk/a11y/atkutil.cxx +++ b/vcl/unx/gtk/a11y/atkutil.cxx @@ -714,12 +714,20 @@ ooo_atk_util_class_init (AtkUtilClass *) atk_class->get_toolkit_name = ooo_atk_util_get_toolkit_name; atk_class->get_toolkit_version = ooo_atk_util_get_toolkit_version; - Application::AddEventListener( g_aEventListenerLink ); + ooo_atk_util_ensure_event_listener(); } } // extern "C" -/*****************************************************************************/ +void ooo_atk_util_ensure_event_listener() +{ + static bool bInited; + if (!bInited) + { + Application::AddEventListener( g_aEventListenerLink ); + bInited = true; + } +} GType ooo_atk_util_get_type() diff --git a/vcl/unx/gtk/a11y/atkutil.hxx b/vcl/unx/gtk/a11y/atkutil.hxx index 89cb61a..9524188 100644 --- a/vcl/unx/gtk/a11y/atkutil.hxx +++ b/vcl/unx/gtk/a11y/atkutil.hxx @@ -25,6 +25,7 @@ #define OOO_TYPE_ATK_UTIL ooo_atk_util_get_type() GType ooo_atk_util_get_type(); +void ooo_atk_util_ensure_event_listener(); #endif commit cfcae6481a9180d057a34e3a4a157dbc2f96918e Author: Caolán McNamara <caol...@redhat.com> Date: Fri Jun 26 13:24:19 2015 +0100 Resolves: tdf#92293 gtk3: get a11y working (cherry picked from commit 093d7b8142d0cb224fcf23506f3b36f7a3a10d2c) Change-Id: I89cfde9b4c97852d36817b716ac08bd32096915b diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index e0547ed..0adeecd 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -471,6 +471,7 @@ public: extern "C" { GType ooo_fixed_get_type(); +AtkObject* ooo_fixed_get_accessible(GtkWidget *obj); } // extern "C" diff --git a/vcl/unx/gtk/a11y/atkbridge.cxx b/vcl/unx/gtk/a11y/atkbridge.cxx index e3ffdc6..9a89a8f 100644 --- a/vcl/unx/gtk/a11y/atkbridge.cxx +++ b/vcl/unx/gtk/a11y/atkbridge.cxx @@ -27,7 +27,6 @@ bool InitAtkBridge() { -#if !GTK_CHECK_VERSION(3,0,0) const char* pVersion = atk_get_toolkit_version(); if( ! pVersion ) return false; @@ -57,16 +56,13 @@ bool InitAtkBridge() AtkRegistry * registry = atk_get_default_registry(); if( registry ) atk_registry_set_factory_type( registry, OOO_TYPE_FIXED, OOO_TYPE_WRAPPER_FACTORY ); -#endif return true; } void DeInitAtkBridge() { -#if !GTK_CHECK_VERSION(3,0,0) restore_gail_window_vtable(); -#endif } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk/a11y/atkfactory.cxx b/vcl/unx/gtk/a11y/atkfactory.cxx index fb0cc77..99ed750 100644 --- a/vcl/unx/gtk/a11y/atkfactory.cxx +++ b/vcl/unx/gtk/a11y/atkfactory.cxx @@ -140,6 +140,11 @@ wrapper_factory_create_accessible( GObject *obj ) return NULL; } +AtkObject* ooo_fixed_get_accessible(GtkWidget *obj) +{ + return wrapper_factory_create_accessible(G_OBJECT(obj)); +} + static void wrapper_factory_class_init( AtkObjectFactoryClass *klass ) { diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx index a7b9b88..55fce4d 100644 --- a/vcl/unx/gtk/window/gtksalframe.cxx +++ b/vcl/unx/gtk/window/gtksalframe.cxx @@ -971,6 +971,17 @@ void GtkSalFrame::resizeWindow( long nWidth, long nHeight ) window_resize(nWidth, nHeight); } +#if GTK_CHECK_VERSION(3,2,0) + +static void +ooo_fixed_class_init(GtkFixedClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + widget_class->get_accessible = ooo_fixed_get_accessible; +} + +#endif + /* * Always use a sub-class of GtkFixed we can tag for a11y. This allows us to * utilize GAIL for the toplevel window and toolkit implementation incl. @@ -986,10 +997,14 @@ ooo_fixed_get_type() static const GTypeInfo tinfo = { sizeof (GtkFixedClass), - (GBaseInitFunc) NULL, /* base init */ - (GBaseFinalizeFunc) NULL, /* base finalize */ - (GClassInitFunc) NULL, /* class init */ - (GClassFinalizeFunc) NULL, /* class finalize */ + nullptr, /* base init */ + nullptr, /* base finalize */ +#if GTK_CHECK_VERSION(3,2,0) + reinterpret_cast<GClassInitFunc>(ooo_fixed_class_init), /* class init */ +#else + nullptr, /* class init */ +#endif + nullptr, /* class finalize */ NULL, /* class data */ sizeof (GtkFixed), /* instance size */ 0, /* nb preallocs */
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits