[ooo-build-commit] Branch 'ooo/master' - 2 commits - extensions/source forms/source

Jan Holesovsky kendy at kemper.freedesktop.org
Tue Sep 15 17:33:37 PDT 2009


 extensions/source/abpilot/typeselectionpage.cxx  |    3 
 extensions/source/propctrlr/browserlistbox.cxx   |   71 +++++++++++++++++++++--
 extensions/source/propctrlr/browserlistbox.hxx   |    1 
 extensions/source/propctrlr/eventhandler.cxx     |   41 ++++++++++++-
 extensions/source/propctrlr/eventhandler.hxx     |    8 ++
 extensions/source/propctrlr/formbrowsertools.cxx |   15 ++++
 extensions/source/propctrlr/formbrowsertools.hxx |    1 
 extensions/source/propctrlr/propcontroller.cxx   |    7 ++
 extensions/source/propctrlr/propcontroller.hxx   |    1 
 extensions/source/propctrlr/standardcontrol.hxx  |   28 +++++++++
 forms/source/xforms/model_ui.cxx                 |   11 ++-
 11 files changed, 177 insertions(+), 10 deletions(-)

New commits:
commit 224fcc68c07039b6ec23bac19b65c2133e0595a1
Author: Kurt Zenker <kz at openoffice.org>
Date:   Tue Sep 15 09:19:52 2009 +0000

    #i10000# WaE fix

diff --git a/extensions/source/propctrlr/browserlistbox.cxx b/extensions/source/propctrlr/browserlistbox.cxx
index 0e44af9..40cdb90 100644
--- a/extensions/source/propctrlr/browserlistbox.cxx
+++ b/extensions/source/propctrlr/browserlistbox.cxx
@@ -1297,7 +1297,6 @@ namespace pcr
             // otherwise they would be used to scroll the document view, which does not sound like it is desired by
             // the user.
         }
-        break;
         }
         return Control::PreNotify( _rNEvt );
     }
commit 9ccc67e7bf69f182907f5c52ee9da351b503e157
Author: Kurt Zenker <kz at openoffice.org>
Date:   Mon Sep 14 11:18:01 2009 +0000

    CWS-TOOLING: integrate CWS dba32g
    2009-09-09 07:53:55 +0200 oj  r275964 : replace strlen with rtl_str_getLength
    2009-09-07 20:59:10 +0200 fs  r275913 : disable the CopyTableWizard test until issue 104869 is fixed
    2009-09-07 12:17:31 +0200 oj  r275885 : #i104810# remove de as lang
    2009-09-05 22:26:21 +0200 fs  r275857 : protect StateChanged against re-entrance
    2009-09-05 22:25:52 +0200 fs  r275856 : don't attempt to classify the parent of a form as control
    2009-09-05 22:25:29 +0200 fs  r275855 : protect against re-entrance
    2009-09-05 00:11:40 +0200 fs  r275835 : #i10000#
    2009-09-04 23:25:50 +0200 fs  r275834 : #i10000#
    2009-09-04 23:23:47 +0200 fs  r275833 : #i10000#
    2009-09-04 21:49:37 +0200 fs  r275830 : #i10000# correct wrong conflict resolution
    2009-09-04 20:59:51 +0200 fs  r275829 : CWS-TOOLING: rebase CWS dba32g to trunk at 275801 (milestone: DEV300:m57)
    2009-09-04 11:08:32 +0200 oj  r275791 : #i104780# new version 1.2.0
    2009-09-03 22:29:21 +0200 fs  r275775 : OSL_TRACE doesn't need \n anymore
    2009-09-03 08:33:21 +0200 fs  r275743 : CWS-TOOLING: rebase CWS dba32g to trunk at 275331 (milestone: DEV300:m56)
    2009-09-02 13:48:12 +0200 fs  r275708 : removed useless include
    2009-09-02 13:45:43 +0200 fs  r275707 : more since tags, which are used across offapi/udkapi
    2009-09-02 13:23:04 +0200 fs  r275705 : should *not* have the dtor, copy ctor, and assignment operator compiler-generated, else we run into trouble as soon as the compiler creates different versions of our singleton member's static data in different libraries
    2009-09-02 12:32:45 +0200 fs  r275704 : AutoIncrementIsPrimaryKey is a driver setting, not a data source setting
    2009-09-02 11:42:49 +0200 fs  r275701 : URL meta data are meta data which are valid for all connections of this type, not per-data-source properties. Settings them as data source properties is a hack.
    2009-09-02 08:43:34 +0200 fs  r275696 : 3.x.x is not a valid 'since' tag
    2009-09-01 16:05:24 +0200 fs  r275665 : #i104686# don't treat controls bound to read-only columns as required
    2009-09-01 13:10:22 +0200 fs  r275657 : #i104574# use PageUp/Down to scroll through the complete page
    2009-09-01 07:04:48 +0200 oj  r275641 : #i104104# correct line ends
    2009-08-31 15:52:34 +0200 fs  r275612 : #i104410#
    2009-08-31 12:29:05 +0200 fs  r275596 : #i104364#
    2009-08-31 12:28:56 +0200 fs  r275595 : #i104364#
    2009-08-31 11:43:09 +0200 fs  r275593 : #i104649# JavaDriverClassPath is also a known JDBC-bridge setting
    2009-08-31 11:41:37 +0200 fs  r275592 : #i104649#
    2009-08-28 21:48:27 +0200 fs  r275552 : during #i96862#: renamed the configuration data which controls availability of certain DBA-related UI
    2009-08-28 21:48:17 +0200 fs  r275551 : #i96862# do not show the 'Create a new database' option when a) no embedded/dBase driver is installed or b) the configuration requests to hide the option
    2009-08-28 21:47:19 +0200 fs  r275550 : during #i96862#: renamed the configuration data which controls availability of certain DBA-related UI
    2009-08-28 21:46:41 +0200 fs  r275549 : #i96862# renamed and extended the configuration data which controls availability of certain DBA-related UI
    2009-08-28 15:10:19 +0200 fs  r275535 : #i96862# if no embedded driver is installed, use dBase for creating new DBs. If no dBase driver is installed, too, do not offer the 'Create new database' option
    2009-08-28 14:03:04 +0200 fs  r275532 : #i104454# allow multiple fields to display the same column
    2009-08-28 13:14:00 +0200 fs  r275528 : #i104584# driver meta data do not belong into a data source's settings
    2009-08-28 13:09:57 +0200 fs  r275527 : properly chech the MySQL type buttons (else next/back in the wizard leads to state with two buttons checked)
    2009-08-28 13:09:17 +0200 fs  r275526 : #i104584# driver meta data do not belong into a data source's settings
    2009-08-28 13:07:18 +0200 fs  r275525 : BooleanComparisonMode is a property, or a feature - but not a driver meta data
    2009-08-28 11:00:31 +0200 fs  r275521 : #i104580#
    2009-08-28 10:40:05 +0200 fs  r275519 : #i104577# correct assertion: If the template node type is ANY, then any value type is allowed
    2009-08-28 10:09:30 +0200 fs  r275518 : #i104575# implement Named Pipe UI
    2009-08-28 10:09:07 +0200 fs  r275517 : pass the trigger-event to IWindowOperator::operateOn / work with VclWindowEvents, not VclSimpleEvents
    2009-08-27 14:27:36 +0200 fs  r275484 : ImplPosTabPage: respect mbEmptyViewMargin for WINDOWALIGN_LEFT
    2009-08-27 13:43:56 +0200 fs  r275480 : merging latest changes from CWS dba32f herein
    2009-08-27 13:23:07 +0200 fs  r275475 : #i103882#
    2009-08-27 11:56:55 +0200 fs  r275466 : #i104544# SetState: Do not call Update at the window which we just set text for. It should (sic\!) not be needed, but causes trouble
    2009-08-27 11:55:34 +0200 fs  r275465 : #i104544#
    do not allow re-entrance for impl_ensureControl_nothrow
    Actually, this is part of the fix only. I also removed the code which triggered this re-entrance (from
    the grid control implementation), but to ensure it won't happen, again, I added some safety herein.
    2009-08-27 10:14:11 +0200 fs  r275459 : preparations for supporting a 'NamedPipe' parameter for the MySQL Connector/OOo
    2009-08-27 10:13:21 +0200 fs  r275458 : preparations for supporting a 'NamedPipe' setting for the MySQL Connector/OOo
    2009-08-27 10:11:14 +0200 fs  r275456 : outsourced the MySQLNative settings into a dedicated class, to not duplicate all the code in two tab page implementations
    2009-08-26 14:18:13 +0200 fs  r275422 : #i10000#
    2009-08-26 13:26:36 +0200 fs  r275419 : ignore output paths
    2009-08-26 13:23:38 +0200 fs  r275417 : support the LocalSocket property for the MySQL native driver
    2009-08-26 13:17:05 +0200 fs  r275416 : some re-factoring, to outsource the tab page for setting up the MySQLNative connection, into a dedicated class (needed later)
    2009-08-26 13:15:15 +0200 fs  r275415 : support a NoThousandSep property for NumericFormatters - I'm tired of correcting this at runtime, instead of controlling it in the resource
    2009-08-26 11:45:08 +0200 fs  r275410 : oops, 'flat' shouldn't have got lost
    2009-08-26 09:38:57 +0200 fs  r275398 : #i102631# when saving the document fails, ensure that the interaction handler really can handle/display the error
    2009-08-26 09:37:05 +0200 fs  r275397 : #i102631# don't let non-IO/RuntimeExceptions escape from DatabaseDocument::store*, wrap them into an IOException
    2009-08-26 09:35:39 +0200 fs  r275395 : let the default interaction handler implement XInteractionHandler2
    2009-08-25 13:51:34 +0200 fs  r275352 : #i102631# createTempFile: pass URL through FileHelper.getOOoCompatibleFileURL
    2009-08-25 13:49:23 +0200 fs  r275351 : #i102631# createTempFileURL: immediately delete the file implicitly created by createTempFile, we really only need the URL
    2009-08-24 14:49:07 +0200 fs  r275318 : #i10000#
    2009-08-24 14:36:03 +0200 fs  r275315 : properly terminate message with 0 character
    2009-08-24 14:35:45 +0200 fs  r275314 : trace method concepts in non-pro, if special flag is enabled
    2009-08-24 14:24:17 +0200 fs  r275312 : #i98973# filter some more events for grid control columns
    2009-08-24 14:15:23 +0200 fs  r275311 : #i98973# implement XComboBox for combo box cells
    2009-08-24 13:39:24 +0200 fs  r275308 : #i98973# do not display the 'actionPerformed' event for grid combo box columns
    2009-08-24 12:52:03 +0200 fs  r275303 : #i98973# implement XCheckBox and XButton for check box cells
    2009-08-24 11:56:05 +0200 oj  r275300 : #i104447# wrong default for orientation
    2009-08-24 10:51:21 +0200 fs  r275296 : in the script selector dialog, interpret a double click onto a function as OK
    2009-08-24 10:50:56 +0200 fs  r275295 : localize some to-be-displayed names, consolidate some code regarding form/control naming
    2009-08-21 14:28:05 +0200 fs  r275255 : #i98973# implement KeyListeners
    2009-08-21 14:27:20 +0200 fs  r275254 : #i98973# move the conversion VCL[Mouse|Key]Event->Awt[Mouse|Key]Event from vclxwindow.cxx to VCLUnoHelper
    2009-08-21 14:08:50 +0200 fs  r275248 : #i98973# implement Mouse- and MouseMotion-broadcasting
    2009-08-21 13:31:08 +0200 fs  r275244 : #i98973# implement text and change listeners at text cells
    2009-08-21 12:47:38 +0200 fs  r275234 : #i104399# some refactoring:
    If the MySQL Connector/OOo is installed, it registers for the sdbc:mysqlc: protocol (now known as DST_MYSQL_NATIVE_DIRECT).
    However, we do not want to display this in the UI, instead we display "MySQL" only, which collects DST_MYSQL_ODBC, DST_MYSQL_JDBC, and DST_MYSQL_NATIVE.
    2009-08-21 12:45:18 +0200 fs  r275232 : #i104399# also register for the sdbc:mysql:mysqlc protocol, decide at runtime (depending on the availability of sdbc:mysqlc:), whether it is really accepted. This prevents that the C/OOo extension needs to register *our* implementation name for the sdbc:mysql:mysqlc: protocol, which would be somewhat weird
    2009-08-20 16:18:48 +0200 fs  r275190 : merging the latest changes from CWS dba32f (which this CWS was created from)
    2009-08-19 20:19:59 +0200 fs  r275160 : add some spacing between the radios
    2009-08-19 14:50:15 +0200 fs  r275150 : #i98973# slightly refactoring the grid cell implementations, to prepare for proper events being fired. Implement focus events for the moment, more to come.
    2009-08-19 10:53:38 +0200 fs  r275142 : #i99936# initialize newly created models
    2009-08-18 23:03:48 +0200 fs  r275132 : merging latest changes from CWS dba32f
    2009-08-18 15:14:08 +0200 fs  r275110 : #i102819# SetColumnPos: SCROLL_CLIP is deadly here

diff --git a/extensions/source/abpilot/typeselectionpage.cxx b/extensions/source/abpilot/typeselectionpage.cxx
index 6aed571..b6d9e00 100644
--- a/extensions/source/abpilot/typeselectionpage.cxx
+++ b/extensions/source/abpilot/typeselectionpage.cxx
@@ -116,6 +116,7 @@ namespace abp
 
         bool bFirstVisible = true;
         Link aTypeSelectionHandler = LINK(this, TypeSelectionPage, OnTypeSelected );
+        const Size aSpacing( LogicToPixel( Size( 0, 3 ), MAP_APPFONT ) );
         for ( ::std::vector< ButtonItem >::const_iterator loop = m_aAllTypes.begin();
               loop != m_aAllTypes.end(); ++loop )
         {
@@ -125,7 +126,7 @@ namespace abp
             else
             {
                 aItem.m_pItem->SetPosPixel( aTopLeft );
-                aTopLeft.Y() += aItemSize.Height();
+                aTopLeft.Y() += aItemSize.Height() + aSpacing.Height();
                 aItem.m_pItem->SetClickHdl( aTypeSelectionHandler );
                 aItem.m_pItem->Show();
 
diff --git a/extensions/source/propctrlr/browserlistbox.cxx b/extensions/source/propctrlr/browserlistbox.cxx
index 5739d3f..0e44af9 100644
--- a/extensions/source/propctrlr/browserlistbox.cxx
+++ b/extensions/source/propctrlr/browserlistbox.cxx
@@ -1244,14 +1244,75 @@ namespace pcr
     }
 
     //------------------------------------------------------------------
+    long OBrowserListBox::PreNotify( NotifyEvent& _rNEvt )
+    {
+        switch ( _rNEvt.GetType() )
+        {
+        case EVENT_KEYINPUT:
+        {
+            const KeyEvent* pKeyEvent = _rNEvt.GetKeyEvent();
+            if  (   ( pKeyEvent->GetKeyCode().GetModifier() != 0 )
+                ||  (   ( pKeyEvent->GetKeyCode().GetCode() != KEY_PAGEUP )
+                    &&  ( pKeyEvent->GetKeyCode().GetCode() != KEY_PAGEDOWN )
+                    )
+                )
+                break;
+
+            long nScrollOffset = 0;
+            if ( m_aVScroll.IsVisible() )
+            {
+                if ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEUP )
+                    nScrollOffset = -m_aVScroll.GetPageSize();
+                else if ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEDOWN )
+                    nScrollOffset = m_aVScroll.GetPageSize();
+            }
+
+            if ( nScrollOffset )
+            {
+                long nNewThumbPos = m_aVScroll.GetThumbPos() + nScrollOffset;
+                nNewThumbPos = ::std::max( nNewThumbPos, m_aVScroll.GetRangeMin() );
+                nNewThumbPos = ::std::min( nNewThumbPos, m_aVScroll.GetRangeMax() );
+                m_aVScroll.DoScroll( nNewThumbPos );
+                nNewThumbPos = m_aVScroll.GetThumbPos();
+
+                sal_uInt16 nFocusControlPos = 0;
+                sal_uInt16 nActiveControlPos = impl_getControlPos( m_xActiveControl );
+                if ( nActiveControlPos < nNewThumbPos )
+                    nFocusControlPos = (sal_uInt16)nNewThumbPos;
+                else if ( nActiveControlPos >= nNewThumbPos + CalcVisibleLines() )
+                    nFocusControlPos = (sal_uInt16)nNewThumbPos + CalcVisibleLines() - 1;
+                if ( nFocusControlPos )
+                {
+                    if ( nFocusControlPos < m_aOrderedLines.size() )
+                    {
+                        m_aOrderedLines[ nFocusControlPos ]->second.pLine->GrabFocus();
+                    }
+                    else
+                        OSL_ENSURE( false, "OBrowserListBox::PreNotify: internal error, invalid focus control position!" );
+                }
+            }
+
+            return 1L; 
+            // handled this. In particular, we also consume PageUp/Down events if we do not use them for scrolling,
+            // otherwise they would be used to scroll the document view, which does not sound like it is desired by
+            // the user.
+        }
+        break;
+        }
+        return Control::PreNotify( _rNEvt );
+    }
+
+    //------------------------------------------------------------------
     long OBrowserListBox::Notify( NotifyEvent& _rNEvt )
     {
-        if ( EVENT_COMMAND == _rNEvt.GetType() )
+        switch ( _rNEvt.GetType() )
+        {
+        case EVENT_COMMAND:
         {
             const CommandEvent* pCommand = _rNEvt.GetCommandEvent();
-            if	(	( COMMAND_WHEEL == pCommand->GetCommand() )
-                    ||	( COMMAND_STARTAUTOSCROLL == pCommand->GetCommand() )
-                    ||	( COMMAND_AUTOSCROLL == pCommand->GetCommand() )
+            if	(   ( COMMAND_WHEEL == pCommand->GetCommand() )
+                ||	( COMMAND_STARTAUTOSCROLL == pCommand->GetCommand() )
+                ||	( COMMAND_AUTOSCROLL == pCommand->GetCommand() )
                 )
             {
                 // interested in scroll events if we have a scrollbar
@@ -1261,6 +1322,9 @@ namespace pcr
                 }
             }
         }
+        break;
+        }
+
         return Control::Notify( _rNEvt );
     }
 
diff --git a/extensions/source/propctrlr/browserlistbox.hxx b/extensions/source/propctrlr/browserlistbox.hxx
index 0b4e3f1..d5f905e 100644
--- a/extensions/source/propctrlr/browserlistbox.hxx
+++ b/extensions/source/propctrlr/browserlistbox.hxx
@@ -149,6 +149,7 @@ namespace pcr
         void                        EnableUpdate();
         void                        DisableUpdate();
         long                        Notify( NotifyEvent& _rNEvt );
+        long                        PreNotify( NotifyEvent& _rNEvt );
 
         void                        SetListener( IPropertyLineListener* _pListener );
         void                        SetObserver( IPropertyControlObserver* _pObserver );
diff --git a/extensions/source/propctrlr/eventhandler.cxx b/extensions/source/propctrlr/eventhandler.cxx
index 7d5ec9a..8a4bac7 100644
--- a/extensions/source/propctrlr/eventhandler.cxx
+++ b/extensions/source/propctrlr/eventhandler.cxx
@@ -53,6 +53,7 @@
 #include <com/sun/star/container/XIndexAccess.hpp>
 #include <com/sun/star/container/XNameContainer.hpp>
 #include <com/sun/star/container/XNameReplace.hpp>
+#include <com/sun/star/form/FormComponentType.hpp>
 #include <com/sun/star/form/XForm.hpp>
 #include <com/sun/star/form/XFormController.hpp>
 #include <com/sun/star/inspection/PropertyControlType.hpp>
@@ -146,6 +147,7 @@ namespace pcr
     /** === end UNO using === **/
     namespace PropertyControlType = ::com::sun::star::inspection::PropertyControlType;
     namespace PropertyAttribute = ::com::sun::star::beans::PropertyAttribute;
+    namespace FormComponentType = ::com::sun::star::form::FormComponentType;
 
     //====================================================================
     //= EventDescription
@@ -538,6 +540,7 @@ namespace pcr
         ,m_aPropertyListeners( m_aMutex )
         ,m_bEventsMapInitialized( false )
         ,m_bIsDialogElement( false )
+        ,m_nGridColumnType( -1 )
     {
         DBG_CTOR( EventHandler, NULL );
     }
@@ -602,6 +605,7 @@ namespace pcr
         m_aEvents.swap( aEmpty );
 
         m_bIsDialogElement = false;
+        m_nGridColumnType = -1;
         try
         {
             Reference< XPropertySetInfo > xPSI( m_xComponent->getPropertySetInfo() );
@@ -610,6 +614,15 @@ namespace pcr
                               && xPSI->hasPropertyByName( PROPERTY_HEIGHT )
                               && xPSI->hasPropertyByName( PROPERTY_POSITIONX )
                               && xPSI->hasPropertyByName( PROPERTY_POSITIONY );
+
+            Reference< XChild > xAsChild( _rxIntrospectee, UNO_QUERY );
+            if ( xAsChild.is() && !Reference< XForm >( _rxIntrospectee, UNO_QUERY ).is() )
+            {
+                if ( FormComponentType::GRIDCONTROL == classifyComponent( xAsChild->getParent() ) )
+                {
+                    m_nGridColumnType = classifyComponent( _rxIntrospectee );
+                }
+            }
         }
         catch( const Exception& )
         {
@@ -827,12 +840,15 @@ namespace pcr
                     const ::rtl::OUString* pMethods = aMethods.getConstArray();
                     sal_uInt32 methodCount = aMethods.getLength();
 
-                    for (sal_uInt32 method = 0 ; method < methodCount ; method++,++pMethods )
+                    for (sal_uInt32 method = 0 ; method < methodCount ; ++method, ++pMethods )
                     {
                         EventDescription aEvent;
                         if ( !lcl_getEventDescriptionForMethod( *pMethods, aEvent ) )
                             continue;
 
+                        if ( !impl_filterMethod_nothrow( aEvent ) )
+                            continue;
+
                         const_cast< EventHandler* >( this )->m_aEvents.insert( EventMap::value_type(
                             lcl_getEventPropertyName( sListenerClassName, *pMethods ), aEvent ) );
                     }
@@ -1272,6 +1288,29 @@ namespace pcr
         }
     }
 
+    //--------------------------------------------------------------------
+    bool EventHandler::impl_filterMethod_nothrow( const EventDescription& _rEvent ) const
+    {
+        // some (control-triggered) events do not make sense for certain grid control columns. However,
+        // our mechnism to retrieve control-triggered events does not know about this, so we do some
+        // late filtering here.
+        switch ( m_nGridColumnType )
+        {
+        case FormComponentType::COMBOBOX:
+            if ( UID_BRWEVT_ACTIONPERFORMED == _rEvent.nUniqueBrowseId )
+                return false;
+            break;
+        case FormComponentType::LISTBOX:
+            if  (   ( UID_BRWEVT_CHANGED == _rEvent.nUniqueBrowseId )
+                ||  ( UID_BRWEVT_ACTIONPERFORMED == _rEvent.nUniqueBrowseId )
+                )
+                return false;
+            break;
+        }
+
+        return true;
+    }
+
 //........................................................................
 } // namespace pcr
 //........................................................................
diff --git a/extensions/source/propctrlr/eventhandler.hxx b/extensions/source/propctrlr/eventhandler.hxx
index 41446e1..c1e3fea 100644
--- a/extensions/source/propctrlr/eventhandler.hxx
+++ b/extensions/source/propctrlr/eventhandler.hxx
@@ -107,6 +107,8 @@ namespace pcr
         /// is our introspectee a dialog element?
         bool                                                                        m_bIsDialogElement;
             // TODO: move different handling into different derived classes?
+        /// (FormComponent) type of the grid column being inspected, or -1 if we're not inspecting a grid column
+        sal_Int16                                                                   m_nGridColumnType;
 
     public:
         // XServiceInfo - static versions
@@ -248,6 +250,12 @@ namespace pcr
         ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >
                 impl_getContextFrame_nothrow() const;
 
+        /** approves or denies a certain method to be included in the UI
+            @return
+                <TRUE/> if and only if the given method is allowed.
+        */
+        bool    impl_filterMethod_nothrow( const EventDescription& _rEvent ) const;
+
     private:
         EventHandler();                                 // never implemented
         EventHandler( const EventHandler& );            // never implemented
diff --git a/extensions/source/propctrlr/formbrowsertools.cxx b/extensions/source/propctrlr/formbrowsertools.cxx
index c3cecda..01a2941 100644
--- a/extensions/source/propctrlr/formbrowsertools.cxx
+++ b/extensions/source/propctrlr/formbrowsertools.cxx
@@ -53,6 +53,7 @@ namespace pcr
     using namespace ::com::sun::star::lang;
     using namespace ::com::sun::star::beans;
 
+    //------------------------------------------------------------------------
     ::rtl::OUString GetUIHeadlineName(sal_Int16 nClassId, const Any& aUnoObj)
     {
         PcrClient aResourceAccess;
@@ -130,6 +131,20 @@ namespace pcr
         return sClassName;
     }
 
+    //------------------------------------------------------------------------
+    sal_Int16 classifyComponent( const Reference< XInterface >& _rxComponent )
+    {
+        Reference< XPropertySet > xComponentProps( _rxComponent, UNO_QUERY_THROW );
+        Reference< XPropertySetInfo > xPSI( xComponentProps->getPropertySetInfo(), UNO_SET_THROW );
+
+        sal_Int16 nControlType( FormComponentType::CONTROL );
+        if ( xPSI->hasPropertyByName( PROPERTY_CLASSID ) )
+        {
+            OSL_VERIFY( xComponentProps->getPropertyValue( PROPERTY_CLASSID ) >>= nControlType );
+        }
+        return nControlType;
+    }
+
 //............................................................................
 } // namespace pcr
 //............................................................................
diff --git a/extensions/source/propctrlr/formbrowsertools.hxx b/extensions/source/propctrlr/formbrowsertools.hxx
index 43dfd9a..90d5da1 100644
--- a/extensions/source/propctrlr/formbrowsertools.hxx
+++ b/extensions/source/propctrlr/formbrowsertools.hxx
@@ -44,6 +44,7 @@ namespace pcr
 //............................................................................
 
     ::rtl::OUString GetUIHeadlineName(sal_Int16 _nClassId, const ::com::sun::star::uno::Any& _rUnoObject);
+    sal_Int16 classifyComponent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent );
 
     //========================================================================
     struct FindPropertyByHandle : public ::std::unary_function< ::com::sun::star::beans::Property, bool >
diff --git a/extensions/source/propctrlr/propcontroller.cxx b/extensions/source/propctrlr/propcontroller.cxx
index fc1ea4c..587879c 100644
--- a/extensions/source/propctrlr/propcontroller.cxx
+++ b/extensions/source/propctrlr/propcontroller.cxx
@@ -114,6 +114,7 @@ namespace pcr
             ,m_bContainerFocusListening( false )
             ,m_bSuspendingPropertyHandlers( false )
             ,m_bConstructed( false )
+            ,m_bBindingIntrospectee( false )
     {
         DBG_CTOR(OPropertyBrowserController,NULL);
     }
@@ -300,7 +301,13 @@ namespace pcr
             // it in order to inspect another object.
             throw VetoException();
         }
+        if ( m_bBindingIntrospectee )
+            throw VetoException();
+
+        m_bBindingIntrospectee = true;
         impl_rebindToInspectee_nothrow( InterfaceArray( _rObjects.getConstArray(), _rObjects.getConstArray() + _rObjects.getLength() ) );
+        m_bBindingIntrospectee = false;
+
     }
 
     //--------------------------------------------------------------------
diff --git a/extensions/source/propctrlr/propcontroller.hxx b/extensions/source/propctrlr/propcontroller.hxx
index c7e0521..2c74b38 100644
--- a/extensions/source/propctrlr/propcontroller.hxx
+++ b/extensions/source/propctrlr/propcontroller.hxx
@@ -168,6 +168,7 @@ namespace pcr
         bool        m_bContainerFocusListening;
         bool        m_bSuspendingPropertyHandlers;
         bool        m_bConstructed;
+        bool        m_bBindingIntrospectee;
 
     protected:
         DECLARE_XINTERFACE()
diff --git a/extensions/source/propctrlr/standardcontrol.hxx b/extensions/source/propctrlr/standardcontrol.hxx
index e64da12..848762d 100644
--- a/extensions/source/propctrlr/standardcontrol.hxx
+++ b/extensions/source/propctrlr/standardcontrol.hxx
@@ -69,6 +69,7 @@ namespace pcr
     {
     protected:
         typedef ControlWindow< LISTBOX_WINDOW >  ListBoxType;
+
     public:
         ListLikeControlWithModifyHandler( Window* _pParent, WinBits _nStyle )
             :ListBoxType( _pParent, _nStyle )
@@ -76,8 +77,35 @@ namespace pcr
         }
 
         void SetModifyHdl( const Link& _rLink ) { ListBoxType::SetSelectHdl( _rLink ); }
+
+    protected:
+        long    PreNotify( NotifyEvent& _rNEvt );
     };
 
+    //------------------------------------------------------------------------
+    template< class LISTBOX_WINDOW >
+    long ListLikeControlWithModifyHandler< LISTBOX_WINDOW >::PreNotify( NotifyEvent& _rNEvt )
+    {
+        if ( _rNEvt.GetType() == EVENT_KEYINPUT )
+        {
+            const ::KeyEvent* pKeyEvent = _rNEvt.GetKeyEvent();
+            if  (   ( pKeyEvent->GetKeyCode().GetModifier() == 0 )
+                &&  (   ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEUP )
+                    ||  ( pKeyEvent->GetKeyCode().GetCode() == KEY_PAGEDOWN )
+                    )
+                )
+            {
+                if ( !ListBoxType::IsInDropDown() )
+                {
+                    // don't give the base class a chance to consume the event, in the property browser, it is
+                    // intended to scroll the complete property page
+                    return ListBoxType::GetParent()->PreNotify( _rNEvt );
+                }
+            }
+        }
+        return ListBoxType::PreNotify( _rNEvt );
+    }
+
     //========================================================================
     //= OTimeControl
     //========================================================================
diff --git a/forms/source/xforms/model_ui.cxx b/forms/source/xforms/model_ui.cxx
index d2f6bc6..9b7765e 100644
--- a/forms/source/xforms/model_ui.cxx
+++ b/forms/source/xforms/model_ui.cxx
@@ -539,18 +539,21 @@ Model::XModel_t Model::newModel( const Reference<com::sun::star::frame::XModel>&
                                  const OUString& sName )
     throw( RuntimeException )
 {
-    Model* pModel = NULL;
+    Model::XModel_t xModel;
     Reference<XNameContainer> xModels = lcl_getModels( xCmp );
     if( xModels.is()
         && ! xModels->hasByName( sName ) )
     {
-        pModel = new Model();
+        Model* pModel = new Model();
+        xModel.set( pModel );
+
         pModel->setID( sName );
         pModel->newInstance( OUString(), OUString(), sal_False );
-        xModels->insertByName( sName, makeAny( Reference<XModel>( pModel ) ) );
+        pModel->initialize();
+        xModels->insertByName( sName, makeAny( xModel ) );
     }
 
-    return pModel;
+    return xModel;
 }
 
 void Model::renameModel( const Reference<com::sun::star::frame::XModel>& xCmp,


More information about the ooo-build-commit mailing list