# *************************************************************
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
# *************************************************************
* How do very basic vcl widgets get peers:

    + toolkit/awt/ VCLXToolkit::ImplCreateWindow
	+ calls GetComponentInterface (sal_True) - if no comp. iface.

    + vcl's Window:
    virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > GetComponentInterface( BOOL bCreate = TRUE );

    + vcl/inc/vcl/unowrap.hxx:
	// Window
	virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer> GetWindowInterface( Window* pWindow, sal_Bool bCreate ) = 0;
	virtual void				SetWindowInterface( Window* pWindow, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xIFace ) = 0;

    + from svapp.cxx Application::SetUnoWrapper
	-> toolkit/awt 'ToolkitWorkerFunction' ( extern C / dlopen linkage )

    + from toolkit/source/helper/unowrapper.cxx:
	-> CreateXWindow -> 'return new VCLXWindow' 
	    ** FIXME: we need love in here too:
		+ METRICBOX eg.
