Kaydet (Commit) 10077a06 authored tarafından Kohei Yoshida's avatar Kohei Yoshida Kaydeden (comit) Kohei Yoshida

Revert my fix for tdf#71409, to hopefully fix tdf#104381.

This reverts commit 87e040fd.
This reverts commit a0ef7474.

Conflicts:
	vcl/unx/gtk/a11y/atkutil.cxx

Change-Id: Ib3a799e27b2495ebd1e7723f1cb5babf0dfbc702
Reviewed-on: https://gerrit.libreoffice.org/34730Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarKohei Yoshida <libreoffice@kohei.us>
üst 4f762202
...@@ -49,11 +49,14 @@ static css::uno::Reference<css::accessibility::XAccessibleAction> ...@@ -49,11 +49,14 @@ static css::uno::Reference<css::accessibility::XAccessibleAction>
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( action ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( action );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleAction> xAction( if( !pWrap->mpAction.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAction; pWrap->mpAction.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpAction;
} }
return css::uno::Reference<css::accessibility::XAccessibleAction>(); return css::uno::Reference<css::accessibility::XAccessibleAction>();
......
...@@ -28,11 +28,14 @@ static css::uno::Reference<css::accessibility::XAccessibleComponent> ...@@ -28,11 +28,14 @@ static css::uno::Reference<css::accessibility::XAccessibleComponent>
getComponent( AtkComponent *pComponent ) getComponent( AtkComponent *pComponent )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pComponent ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pComponent );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleComponent> xComp( if( !pWrap->mpComponent.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xComp; pWrap->mpComponent.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpComponent;
} }
return css::uno::Reference<css::accessibility::XAccessibleComponent>(); return css::uno::Reference<css::accessibility::XAccessibleComponent>();
......
...@@ -32,11 +32,14 @@ static css::uno::Reference<css::accessibility::XAccessibleEditableText> ...@@ -32,11 +32,14 @@ static css::uno::Reference<css::accessibility::XAccessibleEditableText>
getEditableText( AtkEditableText *pEditableText ) getEditableText( AtkEditableText *pEditableText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pEditableText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pEditableText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleEditableText> xET( if( !pWrap->mpEditableText.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xET; pWrap->mpEditableText.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpEditableText;
} }
return css::uno::Reference<css::accessibility::XAccessibleEditableText>(); return css::uno::Reference<css::accessibility::XAccessibleEditableText>();
......
...@@ -194,11 +194,14 @@ static css::uno::Reference<css::accessibility::XAccessibleHypertext> ...@@ -194,11 +194,14 @@ static css::uno::Reference<css::accessibility::XAccessibleHypertext>
getHypertext( AtkHypertext *pHypertext ) getHypertext( AtkHypertext *pHypertext )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pHypertext ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pHypertext );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleHypertext> xAH( if( !pWrap->mpHypertext.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAH; pWrap->mpHypertext.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpHypertext;
} }
return css::uno::Reference<css::accessibility::XAccessibleHypertext>(); return css::uno::Reference<css::accessibility::XAccessibleHypertext>();
......
...@@ -40,11 +40,14 @@ static css::uno::Reference<css::accessibility::XAccessibleImage> ...@@ -40,11 +40,14 @@ static css::uno::Reference<css::accessibility::XAccessibleImage>
getImage( AtkImage *pImage ) getImage( AtkImage *pImage )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pImage ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pImage );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleImage> xAI( if( !pWrap->mpImage.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAI; pWrap->mpImage.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpImage;
} }
return css::uno::Reference<css::accessibility::XAccessibleImage>(); return css::uno::Reference<css::accessibility::XAccessibleImage>();
......
...@@ -129,9 +129,6 @@ void AtkListener::updateChildList( ...@@ -129,9 +129,6 @@ void AtkListener::updateChildList(
css::uno::Reference<css::accessibility::XAccessibleContext> const & css::uno::Reference<css::accessibility::XAccessibleContext> const &
pContext) pContext)
{ {
if (!pContext.is())
return;
m_aChildList.clear(); m_aChildList.clear();
uno::Reference< accessibility::XAccessibleStateSet > xStateSet = pContext->getAccessibleStateSet(); uno::Reference< accessibility::XAccessibleStateSet > xStateSet = pContext->getAccessibleStateSet();
...@@ -266,19 +263,6 @@ void AtkListener::handleInvalidateChildren( ...@@ -266,19 +263,6 @@ void AtkListener::handleInvalidateChildren(
} }
} }
void AtkListener::stopListening()
{
uno::Reference<accessibility::XAccessibleEventBroadcaster> xBroadcaster(
mpWrapper->mpContext.get(), uno::UNO_QUERY);
if (xBroadcaster.is())
{
uno::Reference<accessibility::XAccessibleEventListener> xListener(this);
if (xListener.is())
xBroadcaster->removeAccessibleEventListener(xListener);
}
}
/*****************************************************************************/ /*****************************************************************************/
static uno::Reference< accessibility::XAccessibleContext > static uno::Reference< accessibility::XAccessibleContext >
...@@ -489,10 +473,6 @@ void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEven ...@@ -489,10 +473,6 @@ void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEven
gboolean bState = eNewState != ATK_STATE_INVALID; gboolean bState = eNewState != ATK_STATE_INVALID;
AtkStateType eRealState = bState ? eNewState : eOldState; AtkStateType eRealState = bState ? eNewState : eOldState;
if (eOldState == ATK_STATE_FOCUSED)
// Stop listening to object going out-of-focus.
stopListening();
atk_object_notify_state_change( atk_obj, eRealState, bState ); atk_object_notify_state_change( atk_obj, eRealState, bState );
break; break;
} }
......
...@@ -64,8 +64,6 @@ private: ...@@ -64,8 +64,6 @@ private:
// Process INVALIDATE_ALL_CHILDREN notification // Process INVALIDATE_ALL_CHILDREN notification
void handleInvalidateChildren( void handleInvalidateChildren(
const css::uno::Reference< css::accessibility::XAccessibleContext >& rxParent); const css::uno::Reference< css::accessibility::XAccessibleContext >& rxParent);
void stopListening();
}; };
#endif // INCLUDED_VCL_UNX_GTK_A11Y_ATKLISTENER_HXX #endif // INCLUDED_VCL_UNX_GTK_A11Y_ATKLISTENER_HXX
......
...@@ -28,11 +28,14 @@ static css::uno::Reference<css::accessibility::XAccessibleSelection> ...@@ -28,11 +28,14 @@ static css::uno::Reference<css::accessibility::XAccessibleSelection>
getSelection( AtkSelection *pSelection ) getSelection( AtkSelection *pSelection )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pSelection ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pSelection );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleSelection> xAS( if( !pWrap->mpSelection.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAS; pWrap->mpSelection.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpSelection;
} }
return css::uno::Reference<css::accessibility::XAccessibleSelection>(); return css::uno::Reference<css::accessibility::XAccessibleSelection>();
......
...@@ -53,11 +53,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTable> ...@@ -53,11 +53,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTable>
getTable( AtkTable *pTable ) getTable( AtkTable *pTable )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pTable ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pTable );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleTable> xAT( if( !pWrap->mpTable.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAT; pWrap->mpTable.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpTable;
} }
return css::uno::Reference<css::accessibility::XAccessibleTable>(); return css::uno::Reference<css::accessibility::XAccessibleTable>();
......
...@@ -138,11 +138,14 @@ static css::uno::Reference<css::accessibility::XAccessibleText> ...@@ -138,11 +138,14 @@ static css::uno::Reference<css::accessibility::XAccessibleText>
getText( AtkText *pText ) getText( AtkText *pText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleText> xAT( if( !pWrap->mpText.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAT; pWrap->mpText.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpText;
} }
return css::uno::Reference<css::accessibility::XAccessibleText>(); return css::uno::Reference<css::accessibility::XAccessibleText>();
...@@ -155,11 +158,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTextMarkup> ...@@ -155,11 +158,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTextMarkup>
getTextMarkup( AtkText *pText ) getTextMarkup( AtkText *pText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleTextMarkup> xATM( if( !pWrap->mpTextMarkup.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xATM; pWrap->mpTextMarkup.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpTextMarkup;
} }
return css::uno::Reference<css::accessibility::XAccessibleTextMarkup>(); return css::uno::Reference<css::accessibility::XAccessibleTextMarkup>();
...@@ -172,11 +178,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTextAttributes> ...@@ -172,11 +178,14 @@ static css::uno::Reference<css::accessibility::XAccessibleTextAttributes>
getTextAttributes( AtkText *pText ) getTextAttributes( AtkText *pText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleTextAttributes> xATA( if( !pWrap->mpTextAttributes.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xATA; pWrap->mpTextAttributes.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpTextAttributes;
} }
return css::uno::Reference<css::accessibility::XAccessibleTextAttributes>(); return css::uno::Reference<css::accessibility::XAccessibleTextAttributes>();
...@@ -189,11 +198,14 @@ static css::uno::Reference<css::accessibility::XAccessibleMultiLineText> ...@@ -189,11 +198,14 @@ static css::uno::Reference<css::accessibility::XAccessibleMultiLineText>
getMultiLineText( AtkText *pText ) getMultiLineText( AtkText *pText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleMultiLineText> xAML( if( !pWrap->mpMultiLineText.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAML; pWrap->mpMultiLineText.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpMultiLineText;
} }
return css::uno::Reference<css::accessibility::XAccessibleMultiLineText>(); return css::uno::Reference<css::accessibility::XAccessibleMultiLineText>();
......
...@@ -212,11 +212,14 @@ static css::uno::Reference<css::accessibility::XAccessibleComponent> ...@@ -212,11 +212,14 @@ static css::uno::Reference<css::accessibility::XAccessibleComponent>
getComponent( AtkText *pText ) getComponent( AtkText *pText )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleComponent> xAC( if( !pWrap->mpComponent.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAC; pWrap->mpComponent.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpComponent;
} }
return css::uno::Reference<css::accessibility::XAccessibleComponent>(); return css::uno::Reference<css::accessibility::XAccessibleComponent>();
......
...@@ -87,24 +87,17 @@ atk_wrapper_focus_idle_handler (gpointer data) ...@@ -87,24 +87,17 @@ atk_wrapper_focus_idle_handler (gpointer data)
// also emit state-changed:focused event under the same condition. // also emit state-changed:focused event under the same condition.
{ {
AtkObjectWrapper* wrapper_obj = ATK_OBJECT_WRAPPER (atk_obj); AtkObjectWrapper* wrapper_obj = ATK_OBJECT_WRAPPER (atk_obj);
if( wrapper_obj && !wrapper_obj->mpText.is() )
if (wrapper_obj)
{ {
uno::Reference<accessibility::XAccessibleText> xText( wrapper_obj->mpText.set(wrapper_obj->mpContext, css::uno::UNO_QUERY);
wrapper_obj->mpContext.get(), uno::UNO_QUERY); if ( wrapper_obj->mpText.is() )
if (xText.is())
{ {
try { gint caretPos = wrapper_obj->mpText->getCaretPosition();
gint caretPos = xText->getCaretPosition();
if ( caretPos != -1 )
if ( caretPos != -1 ) {
{ atk_object_notify_state_change( atk_obj, ATK_STATE_FOCUSED, TRUE );
atk_object_notify_state_change( atk_obj, ATK_STATE_FOCUSED, TRUE ); g_signal_emit_by_name( atk_obj, "text_caret_moved", caretPos );
g_signal_emit_by_name( atk_obj, "text_caret_moved", caretPos );
}
} catch (const uno::Exception& e) {
SAL_INFO("vcl.a11y", "exception: " << e.Message);
} }
} }
} }
......
...@@ -30,11 +30,14 @@ static css::uno::Reference<css::accessibility::XAccessibleValue> ...@@ -30,11 +30,14 @@ static css::uno::Reference<css::accessibility::XAccessibleValue>
getValue( AtkValue *pValue ) getValue( AtkValue *pValue )
{ {
AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pValue ); AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pValue );
if (pWrap) if( pWrap )
{ {
uno::Reference<accessibility::XAccessibleValue> xAV( if( !pWrap->mpValue.is() )
pWrap->mpContext.get(), uno::UNO_QUERY); {
return xAV; pWrap->mpValue.set(pWrap->mpContext, css::uno::UNO_QUERY);
}
return pWrap->mpValue;
} }
return css::uno::Reference<css::accessibility::XAccessibleValue>(); return css::uno::Reference<css::accessibility::XAccessibleValue>();
......
This diff is collapsed.
...@@ -22,19 +22,49 @@ ...@@ -22,19 +22,49 @@
#include <atk/atk.h> #include <atk/atk.h>
#include <com/sun/star/accessibility/XAccessible.hpp> #include <com/sun/star/accessibility/XAccessible.hpp>
#include <cppuhelper/weakref.hxx>
extern "C" { extern "C" {
namespace com { namespace sun { namespace star { namespace accessibility {
class XAccessibleAction;
class XAccessibleComponent;
class XAccessibleEditableText;
class XAccessibleHypertext;
class XAccessibleImage;
class XAccessibleMultiLineText;
class XAccessibleSelection;
class XAccessibleTable;
class XAccessibleText;
class XAccessibleTextMarkup;
class XAccessibleTextAttributes;
class XAccessibleValue;
} } } }
struct AtkObjectWrapper struct AtkObjectWrapper
{ {
AtkObject aParent; AtkObject aParent;
css::uno::Reference<css::accessibility::XAccessible> mpAccessible; css::uno::Reference<css::accessibility::XAccessible> mpAccessible;
css::uno::WeakReference<css::accessibility::XAccessibleContext> mpContext; css::uno::Reference<css::accessibility::XAccessibleContext> mpContext;
css::uno::Reference<css::accessibility::XAccessibleAction> mpAction;
css::uno::Reference<css::accessibility::XAccessibleComponent> mpComponent;
css::uno::Reference<css::accessibility::XAccessibleEditableText>
mpEditableText;
css::uno::Reference<css::accessibility::XAccessibleHypertext> mpHypertext;
css::uno::Reference<css::accessibility::XAccessibleImage> mpImage;
css::uno::Reference<css::accessibility::XAccessibleMultiLineText>
mpMultiLineText;
css::uno::Reference<css::accessibility::XAccessibleSelection> mpSelection;
css::uno::Reference<css::accessibility::XAccessibleTable> mpTable;
css::uno::Reference<css::accessibility::XAccessibleText> mpText;
css::uno::Reference<css::accessibility::XAccessibleTextMarkup> mpTextMarkup;
css::uno::Reference<css::accessibility::XAccessibleTextAttributes>
mpTextAttributes;
css::uno::Reference<css::accessibility::XAccessibleValue> mpValue;
AtkObject *child_about_to_be_removed; AtkObject *child_about_to_be_removed;
gint index_of_child_about_to_be_removed; gint index_of_child_about_to_be_removed;
// OString * m_pKeyBindings
}; };
struct AtkObjectWrapperClass struct AtkObjectWrapperClass
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment