summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-30 16:26:40 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-31 10:12:32 +0200
commite547b1a36061f3ece12baa348bdd3814aa745ae4 (patch)
treefe40495486cf9a49875e952d76a011ca2de065ac
parentd96e30a157230d9ad60cddab47dc9b727849f7de (diff)
tdf#117859 crash in Tab Color a11y
Change-Id: I935f0b1a28b483fad70caf7af96742dee74916ad Reviewed-on: https://gerrit.libreoffice.org/55089 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.hxx8
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx25
2 files changed, 31 insertions, 2 deletions
diff --git a/vcl/unx/gtk/a11y/atkwrapper.hxx b/vcl/unx/gtk/a11y/atkwrapper.hxx
index c45f0f9c839b..381f3c074fdf 100644
--- a/vcl/unx/gtk/a11y/atkwrapper.hxx
+++ b/vcl/unx/gtk/a11y/atkwrapper.hxx
@@ -21,6 +21,10 @@
#define INCLUDED_VCL_UNX_GTK_A11Y_ATKWRAPPER_HXX
#include <atk/atk.h>
+#include <gtk/gtk.h>
+#if GTK_CHECK_VERSION(3,0,0)
+#include <gtk/gtk-a11y.h>
+#endif
#include <com/sun/star/accessibility/XAccessible.hpp>
extern "C" {
@@ -70,7 +74,11 @@ struct AtkObjectWrapper
struct AtkObjectWrapperClass
{
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidgetAccessibleClass aParentClass;
+#else
AtkObjectClass aParentClass;
+#endif
};
GType atk_object_wrapper_get_type() G_GNUC_CONST;
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 577d5e1d2744..54444d801c5c 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3653,6 +3653,14 @@ static MouseEventModifiers ImplGetMouseMoveMode(sal_uInt16 nCode)
return nMode;
}
+namespace
+{
+
+AtkObject* (*default_drawing_area_get_accessible)(GtkWidget *widget);
+
+}
+
+
class GtkInstanceDrawingArea : public GtkInstanceWidget, public virtual weld::DrawingArea
{
private:
@@ -3928,6 +3936,21 @@ public:
return uno::Reference<css::accessibility::XAccessibleRelationSet>();
}
+ virtual void set_accessible_name(const OUString& rName) override
+ {
+ AtkObject* pAtkObject = default_drawing_area_get_accessible(m_pWidget);
+ if (!pAtkObject)
+ return;
+ atk_object_set_name(pAtkObject, OUStringToOString(rName, RTL_TEXTENCODING_UTF8).getStr());
+ }
+
+ virtual OUString get_accessible_name() const override
+ {
+ AtkObject* pAtkObject = default_drawing_area_get_accessible(m_pWidget);
+ const char* pStr = pAtkObject ? atk_object_get_name(pAtkObject) : nullptr;
+ return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
+ }
+
virtual ~GtkInstanceDrawingArea() override
{
g_object_steal_data(G_OBJECT(m_pDrawingArea), "g-lo-GtkInstanceDrawingArea");
@@ -4411,8 +4434,6 @@ namespace
namespace
{
-AtkObject* (*default_drawing_area_get_accessible)(GtkWidget *widget);
-
AtkObject* drawing_area_get_accessibity(GtkWidget *pWidget)
{
AtkObject* pDefaultAccessible = default_drawing_area_get_accessible(pWidget);