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 | 15 +++++++++++++++ 6 files changed, 35 insertions(+), 4 deletions(-)
New commits: commit aff0d4b29681ee8008ff438885c8cc2b461f4dd5 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 diff --git a/vcl/unx/gtk/a11y/atkbridge.cxx b/vcl/unx/gtk/a11y/atkbridge.cxx index 4bfe5b2..42cd704 100644 --- a/vcl/unx/gtk/a11y/atkbridge.cxx +++ b/vcl/unx/gtk/a11y/atkbridge.cxx @@ -26,6 +26,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; @@ -55,13 +58,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 cc2fe84..2ad3124 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 093d7b8142d0cb224fcf23506f3b36f7a3a10d2c Author: Caolán McNamara <caol...@redhat.com> Date: Fri Jun 26 13:24:19 2015 +0100 Resolves: tdf#92293 gtk3: get a11y working Change-Id: I89cfde9b4c97852d36817b716ac08bd32096915b diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index f759bf6..5086d14 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 9f14e08..4bfe5b2 100644 --- a/vcl/unx/gtk/a11y/atkbridge.cxx +++ b/vcl/unx/gtk/a11y/atkbridge.cxx @@ -26,7 +26,6 @@ bool InitAtkBridge() { -#if !GTK_CHECK_VERSION(3,0,0) const char* pVersion = atk_get_toolkit_version(); if( ! pVersion ) return false; @@ -56,16 +55,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 581f4d0..b6beda5 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 94bdbce..d9d57af 100644 --- a/vcl/unx/gtk/window/gtksalframe.cxx +++ b/vcl/unx/gtk/window/gtksalframe.cxx @@ -970,6 +970,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. @@ -987,7 +998,11 @@ ooo_fixed_get_type() sizeof (GtkFixedClass), 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 */
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits