shiny uno version, Desktop IDL

Michael Meeks michael.meeks at suse.com
Thu Jun 14 02:22:44 PDT 2012


Hi Stephan & Noel,

On Wed, 2012-06-13 at 15:22 +0200, Stephan Bergmann wrote:
> I wouldn't introduce the extra noise of an additional Desktop2 service. 
>   While technically it would be an incompatibility to change the 
> existing, old-style Desktop service (implementing multiple interfaces) 
> into a new-style one implementing a single new XDesktop2, practically it 
> should have little consequences.  (As old-style service definitions are, 
> after all, little more than "glorious documentation."  I hope I don't 
> miss any obvious blocker here.  Anyway, one would need to try this out 
> to be sure.)

	I was amused to read the Desktop service and see:

    /** @deprecated This interface is a documentation error. It was never thought to be supported
                    by this service. Please use the service <type cope="com::sun::star::frame">GlobalEventBroadcaster</type>
                    instead of this interface.
     */
    interface com::sun::star::document::XEventBroadcaster;

	:-)

	What new methods did we want on XDesktop2 out of interest ?

> But thinking about it, that approach might just be a good one:  We start
> to do changes incrementally now, based on status quo, improve them over time, 
> and by the time of an all-incompatible LO 4 have something new (but 
> already time-tested) and we can remove any stuff that has become 
> obsolete (and potentially clean up the new stuff, like renaming 
> XDesktop2 back to XDesktop or some such).

	So - to get this clear; we would have a 'Desktop' service that is
instantiated all over the show:

m_xMSFactory->createInstance( ::rtl::OUString( "com.sun.star.frame.Desktop"  ) )

	That wraps a load of global state; but of course, we don't really have
a 'Desktop' anymore ;-) so any chance of a more friendly & helpful
variable name ? say "Application"

> The only problem is with publishing:  Ideally, the new XDesktop2 should 
> remain unpublished for now.  However, the existing (published) Desktop 
> service could then not be rewritten to use XDesktop2.  Solutions would 
> be to either:

	Would the XDesktop2 re-implement same methods as XDesktop - if so, I
guess scripting bindings would have some sort of nightmare trying to
disambiguate them.

	If we are creating a monster, easily accessible top-level instance; it
might be rather good to fatten / widen our API to make it easier to use
for scripters. What do I mean by that ?

	We currently rely on a lot of service activation by string to get
global state, which is fragile, and non-completing for many languages /
IDEs but I would -love- to have a lot of this stuff tied into a nice big
top-level 'Application' API.

	So - as an example; I would love a:

	any  getConfigKey([in] string path);
	void setConfigKey([in] string path, [in] any value);

	Cheesy, incomplete - if you want more you have to go to the real source
- but, at the end of the day it would cover 99% of the simple, extension
use-cases I think. IMHO there are a set of objects and features that are
rather unpleasant to use & find that we could make much easier in this
way. Another example might be opening a stream via the ucb - which could
be wrapped with a single, simple 'fopen' style method.

	Similarly focusing on scripting bindings we have:

    com::sun::star::lang::XComponent getCurrentComponent();

	I would prefer that to be:

    [property] com::sun::star::lang::XComponent activeDocument;

	or somesuch - and preferably with a wider / fatter interface than
XComponent :-) Perhaps with a getActiveDocument() method for the long
suffering C++ users who don't want an any in the way.

	Of course any purists lurking here will immediately want to fragment
what I just wrote into a dozen separate, one method interfaces ;-)  but
my thesis is that queryInterface destroys usability - particularly from
scripting languages wrt. autocompletion, and also makes documentation
rather unpleasant.

	ie. put another way - I'd like to re-focus our UNO interfaces from the
bottom up (of which XDesktop is a great starting point) to be -far- more
useful, and usable for scripting - IMHO -the- primary use-case for UNO
and where it can excel. The VBA compatibility interfaces may provide
some useful inspiration here I suspect, and more than that I imagine
that going and reading a small number of StarOffice basic macros (and
the somewhat shameful VBA migration guide ;-), and working out how we
can make scripting more succinct and efficient would be wonderful.

> C  Temporarily remove the codemaker check that prevents a published 
> new-style service from using an unpublished interface.
>
> I could envision going down route C.  What do others think, overall?

	Sounds sensible to me; we might want a hard-to-tweak black-list of such
interfaces hard-coded in some horrible way (in the tool? :-) to
discourage too much of this ? ;-)

	Is that too radical ? :-) good bike-shedding fodder anyhow.

	Thanks for bringing it to the list,

	Regards,

		Michael.

-- 
michael.meeks at suse.com  <><, Pseudo Engineer, itinerant idiot



More information about the LibreOffice mailing list