https://bugs.freedesktop.org/show_bug.cgi?id=63398

Lionel Elie Mamane <lio...@mamane.lu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |sberg...@redhat.com,
                   |                            |tbehr...@suse.com

--- Comment #6 from Lionel Elie Mamane <lio...@mamane.lu> ---
Thorsten? This bug originates from this commit:

commit 90eac3e69749a9227c4b6902b1f3cef1e338c6d1
Author: Thorsten Behrens <tbehr...@suse.com>
Date:   Thu Nov 29 21:27:57 2012 +0100

    API CHANGE remove [oneway] method attributes


I don't know what oneway was supposed to achieve, but it had at least one
working effect, that is that the
com.sun.star.reflection.theTypeDescriptionManager service gave a type
description whose isOneway() member returned true.

This in turn is used by
svxform::FormScriptListener::impl_allowAsynchonousCall_nothrow in file
svx/source/form/fmscriptingenv.cxx to return true. What is the link between
oneway and "allow asynchronous call"? You tell me, I don't know.

This brings us to this bug, namely that the event fires "too soon". That's
because of this code in svxform::FormScriptListener::firing:

  if ( !impl_allowAsynchronousCall_nothrow( _rEvent.ListenerType.getTypeName(),
_rEvent.MethodName ) )
  {
      impl_doFireScriptEvent_nothrow( aGuard, _rEvent, NULL );
         return;
  }

  acquire();
  Application::PostUserEvent( LINK( this, FormScriptListener,
OnAsyncScriptEvent ), new ScriptEvent( _rEvent ) );

So, in 3.x, this was taking the "Application::PostUserEvent" route, which means
the event triggered after (about 20 frames up in the stacktrace)
frm::ODatabaseForm::load is finished, and in particular the controls of the
form are fully initialised.

But in 4.0, this takes the "impl_doFireScriptEvent_nothrow" route and the
controls are not fully initialised yet.

We went even further down this road in master (4.1 alpha)... Since commit by
Stephan, a *different* object is returned by
 ::comphelper::getProcessServiceFactory().getSingleton(
"com.sun.star.reflection.theTypeDescriptionManager" )
namely a cppuhelper::TypeManager and not anymore a stoc_tdmgr::ManagerImpl.
Its getByHierarchicalName method returns a "(anonymous
namespace)::MethodDescription", whose isOneway() method just harcodes "return
false"...


FYI, in this specific case:
 _rListenerType == "com.sun.star.sdbc.XRowSetListener"
 _rMethodName   == "cursorMoved"

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
Libreoffice-bugs mailing list
Libreoffice-bugs@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs

Reply via email to