summaryrefslogtreecommitdiffstats
path: root/vcl/unx/gtk3/gtk3gtkinst.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-02 12:39:43 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-03 21:55:24 +0200
commit7e64aaebce8667f7ab173ea3807c62f81138b4af (patch)
tree0fe1c975221f32b742a8a09aa05ed431b55f8d9a /vcl/unx/gtk3/gtk3gtkinst.cxx
parentTunnel verbose=t into external/libnumbertext (diff)
downloadcore-7e64aaebce8667f7ab173ea3807c62f81138b4af.tar.gz
core-7e64aaebce8667f7ab173ea3807c62f81138b4af.zip
weld SvxTextAttrPage
with a a11y rework to be more like the insert special char a11y also, route a11y questions about a custom widgets parent to the gtk toolkits underlying default implementation, keeping only questions about ourself to be handled by the XAccessible focus rectangles in RectCtl work again, seems that got lost somewhere along the way Change-Id: I62237d45668f4438aec6031cc5a48c38de21bf98 Reviewed-on: https://gerrit.libreoffice.org/53767 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3/gtk3gtkinst.cxx')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx30
1 files changed, 26 insertions, 4 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 250f5e845a99..b33013916a85 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3485,6 +3485,7 @@ private:
gulong m_nButtonReleaseSignalId;
gulong m_nKeyPressSignalId;
gulong m_nKeyReleaseSignalId;
+ gulong m_nStyleUpdatedSignalId;
static gboolean signalDraw(GtkWidget*, cairo_t* cr, gpointer widget)
{
@@ -3529,6 +3530,16 @@ private:
#endif
m_aSizeAllocateHdl.Call(Size(nWidth, nHeight));
}
+ static void signalStyleUpdated(GtkWidget*, gpointer widget)
+ {
+ GtkInstanceDrawingArea* pThis = static_cast<GtkInstanceDrawingArea*>(widget);
+ SolarMutexGuard aGuard;
+ return pThis->signal_style_updated();
+ }
+ void signal_style_updated()
+ {
+ m_aStyleUpdatedHdl.Call(*this);
+ }
static gboolean signalButton(GtkWidget*, GdkEventButton* pEvent, gpointer widget)
{
GtkInstanceDrawingArea* pThis = static_cast<GtkInstanceDrawingArea*>(widget);
@@ -3655,16 +3666,17 @@ public:
, m_nButtonReleaseSignalId(g_signal_connect(m_pDrawingArea, "button-release-event", G_CALLBACK(signalButton), this))
, m_nKeyPressSignalId(g_signal_connect(m_pDrawingArea, "key-press-event", G_CALLBACK(signalKey), this))
, m_nKeyReleaseSignalId(g_signal_connect(m_pDrawingArea,"key-release-event", G_CALLBACK(signalKey), this))
+ , m_nStyleUpdatedSignalId(g_signal_connect(m_pDrawingArea,"style-updated", G_CALLBACK(signalStyleUpdated), this))
{
g_object_set_data(G_OBJECT(m_pDrawingArea), "g-lo-GtkInstanceDrawingArea", this);
}
- AtkObject* GetAtkObject()
+ AtkObject* GetAtkObject(AtkObject* pDefaultAccessible)
{
if (!m_pAccessible && m_xAccessible.is())
{
GtkWidget* pParent = gtk_widget_get_parent(m_pWidget);
- m_pAccessible = atk_object_wrapper_new(m_xAccessible, gtk_widget_get_accessible(pParent));
+ m_pAccessible = atk_object_wrapper_new(m_xAccessible, gtk_widget_get_accessible(pParent), pDefaultAccessible);
}
return m_pAccessible;
}
@@ -3689,6 +3701,14 @@ public:
return uno::Reference<css::accessibility::XAccessible>();
}
+ virtual a11yrelationset get_accessible_relation_set() override
+ {
+ //get_accessible_relation_set should only be needed for the vcl implementation,
+ //in the gtk impl the native equivalent should negate the need.
+ assert(false && "get_accessible_parent should only be called on a vcl impl");
+ return uno::Reference<css::accessibility::XAccessibleRelationSet>();
+ }
+
virtual ~GtkInstanceDrawingArea() override
{
g_object_steal_data(G_OBJECT(m_pDrawingArea), "g-lo-GtkInstanceDrawingArea");
@@ -3696,6 +3716,7 @@ public:
g_object_unref(m_pAccessible);
if (m_pSurface)
cairo_surface_destroy(m_pSurface);
+ g_signal_handler_disconnect(m_pDrawingArea, m_nStyleUpdatedSignalId);
g_signal_handler_disconnect(m_pDrawingArea, m_nKeyPressSignalId);
g_signal_handler_disconnect(m_pDrawingArea, m_nKeyReleaseSignalId);
g_signal_handler_disconnect(m_pDrawingArea, m_nButtonPressSignalId);
@@ -4167,12 +4188,13 @@ AtkObject* (*default_drawing_area_get_accessible)(GtkWidget *widget);
AtkObject* drawing_area_get_accessibity(GtkWidget *pWidget)
{
+ AtkObject* pDefaultAccessible = default_drawing_area_get_accessible(pWidget);
void* pData = g_object_get_data(G_OBJECT(pWidget), "g-lo-GtkInstanceDrawingArea");
GtkInstanceDrawingArea* pDrawingArea = static_cast<GtkInstanceDrawingArea*>(pData);
- AtkObject *pAtkObj = pDrawingArea ? pDrawingArea->GetAtkObject() : nullptr;
+ AtkObject *pAtkObj = pDrawingArea ? pDrawingArea->GetAtkObject(pDefaultAccessible) : nullptr;
if (pAtkObj)
return pAtkObj;
- return default_drawing_area_get_accessible(pWidget);
+ return pDefaultAccessible;
}
void ensure_intercept_drawing_area_accessibility()