[Libreoffice-commits] core.git: Branch 'feature/gsoc15-open-remote-files-dialog' - 197 commits - accessibility/inc accessibility/source animations/source avmedia/source basctl/Library_basctl.mk basctl/source basegfx/source basic/inc basic/qa basic/source bin/gbuild-to-ide chart2/inc chart2/Library_chartcontroller.mk chart2/source chart2/uiconfig chart2/UIConfig_chart2.mk chart2/workbench comphelper/inc comphelper/qa comphelper/source compilerplugins/clang connectivity/source connectivity/workben cppcanvas/source cpputools/source cui/source cui/uiconfig dbaccess/source desktop/inc desktop/source distro-configs/LibreOfficeLinux.conf distro-configs/LibreOfficeWin32.conf distro-configs/LibreOfficeWin64.conf editeng/source embeddedobj/test extensions/source extras/source filter/qa filter/source forms/source formula/source fpicker/source fpicker/uiconfig framework/inc framework/source helpcontent2 hwpfilter/source i18npool/inc icon-themes/breeze icon-themes/galaxy icon-themes/hicontrast icon-themes/hum an icon-themes/tango include/animations include/avmedia include/basic include/comphelper include/connectivity include/dbaccess include/editeng include/filter include/formula include/oox include/osl include/salhelper include/sax include/sfx2 include/svl include/svtools include/svx include/unotools include/vbahelper include/vcl include/xmloff jurt/com lingucomponent/source lotuswordpro/source odk/examples officecfg/registry oox/inc oox/source pyuno/source qadevOOo/runner qadevOOo/tests readlicense_oo/docs reportdesign/inc reportdesign/source rsc/inc sal/inc sal/Library_sal.mk sal/osl sal/rtl sax/source scaddins/source sc/inc sc/qa sc/source sc/uiconfig sdext/source sd/inc sd/Library_sd.mk sd/sdi sd/source sd/uiconfig sfx2/Library_sfx.mk sfx2/sdi sfx2/source shell/source slideshow/source solenv/bin starmath/inc starmath/source svl/source svtools/source svx/sdi svx/source svx/workben sw/inc sw/qa sw/source sw/uiconfig toolkit/source tools/source ucb/source udkapi/com unotools/source vba helper/source vcl/inc vcl/source vcl/unx winaccessibility/source wizards/com writerfilter/inc writerfilter/source writerperfect/source xmloff/source xmlsecurity/inc xmlsecurity/source

Szymon Kłos eszkadev at gmail.com
Wed Jul 22 08:29:10 PDT 2015


Rebased ref, commits from common ancestor:
commit 7452219d0042114381b0b3adbe0272686a77004a
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Wed Jul 22 17:20:26 2015 +0200

    show error when directory doesn't exist
    
    Change-Id: I1c8ca1a509c9187687079d86f0e637b26490a7a3

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index bd35802..4e69c9d 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -462,7 +462,7 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
 
     if( m_pFileView )
     {
-        if( ContentIsFolder( sURL ) )
+        if( !sURL.isEmpty() && ContentIsFolder( sURL ) )
         {
             OUString sFilter = FILEDIALOG_FILTER_ALL;
 
@@ -496,6 +496,9 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
         else
         {
             // content doesn't exist
+            m_pTreeView->EndSelection();
+            ErrorHandler::HandleError( ERRCODE_IO_NOTEXISTS );
+            return eFailure;
         }
     }
 
@@ -689,13 +692,13 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, DoubleClickHdl )
     {
         OUString sURL = m_pFileView->GetCurrentURL();
 
-        if( ContentIsFolder( sURL ) )
+        if( ContentIsDocument( sURL ) )
         {
-            OpenURL( sURL );
+            EndDialog( RET_OK );
         }
         else
         {
-            EndDialog( RET_OK );
+            OpenURL( sURL );
         }
     }
 
@@ -1043,6 +1046,26 @@ bool RemoteFilesDialog::ContentIsFolder( const OUString& rURL )
     return false;
 }
 
+bool RemoteFilesDialog::ContentIsDocument( const OUString& rURL )
+{
+    try
+    {
+        Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
+        Reference< XInteractionHandler > xInteractionHandler(
+                        InteractionHandler::createWithParent( xContext, 0 ), UNO_QUERY_THROW );
+        Reference< XCommandEnvironment > xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
+        ::ucbhelper::Content aContent( rURL, xEnv, xContext );
+
+        return aContent.isDocument();
+    }
+    catch( const Exception& )
+    {
+        // a content doesn't exist
+    }
+
+    return false;
+}
+
 sal_Int32 RemoteFilesDialog::getTargetColorDepth()
 {
     // This dialog doesn't contain preview
diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx
index ede30c7..b0f151e 100644
--- a/fpicker/source/office/RemoteFilesDialog.hxx
+++ b/fpicker/source/office/RemoteFilesDialog.hxx
@@ -16,6 +16,7 @@
 #include <svtools/breadcrumb.hxx>
 #include <svtools/fileview.hxx>
 
+#include <tools/errinf.hxx>
 #include <tools/resid.hxx>
 
 #include <vcl/button.hxx>
@@ -81,6 +82,7 @@ public:
     virtual const OUString& GetPath() SAL_OVERRIDE;
     virtual std::vector<OUString> GetPathList() const SAL_OVERRIDE;
     virtual bool ContentIsFolder( const OUString& rURL ) SAL_OVERRIDE;
+    virtual bool ContentIsDocument( const OUString& rURL );
 
     virtual void AddFilter( const OUString& rFilter, const OUString& rType ) SAL_OVERRIDE;
     virtual void AddFilterGroup( const OUString& _rFilter,
commit 81d20fe15bc9e20e86bd2ea36d59b7c8f19d0b5e
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Wed Jul 22 16:42:47 2015 +0200

    reload content while expanding node
    
    Change-Id: I7ce281ea4e2d5c5c9fc0b2b3f315defc14364df3

diff --git a/svtools/source/contnr/foldertree.cxx b/svtools/source/contnr/foldertree.cxx
index 63cc7e0..d597168 100644
--- a/svtools/source/contnr/foldertree.cxx
+++ b/svtools/source/contnr/foldertree.cxx
@@ -32,9 +32,14 @@ void FolderTree::RequestingChildren( SvTreeListEntry* pEntry )
 
 void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
 {
-    // fill only empty entries
-    if( pEntry && GetChildCount( pEntry ) == 0 )
+    if( pEntry )
     {
+        while( GetChildCount( pEntry ) > 0 )
+        {
+            SvTreeListEntry* pChild = FirstChild( pEntry );
+            GetModel()->Remove( pChild );
+        }
+
         ::std::vector< SortingData_Impl* > aContent;
 
         ::rtl::Reference< ::svt::FileViewContentEnumerator >
commit bda20aacb34eac82d0297ffbcb8a34c2744c556c
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Wed Jul 22 15:19:37 2015 +0200

    check if path exist before init of the fileview
    
    Change-Id: I0c9384644cf5aabf83512c341d3ffff5d4847f36

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 75615d1..bd35802 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -462,34 +462,41 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
 
     if( m_pFileView )
     {
-        OUString sFilter = FILEDIALOG_FILTER_ALL;
-
-        if( m_nCurrentFilter != LISTBOX_ENTRY_NOTFOUND )
+        if( ContentIsFolder( sURL ) )
         {
-            sFilter = m_aFilters[m_nCurrentFilter].second;
-        }
+            OUString sFilter = FILEDIALOG_FILTER_ALL;
 
-        m_pFileView->EndInplaceEditing( false );
+            if( m_nCurrentFilter != LISTBOX_ENTRY_NOTFOUND )
+            {
+                sFilter = m_aFilters[m_nCurrentFilter].second;
+            }
 
-        EnableChildPointerOverwrite( true );
-        SetPointer( PointerStyle::Wait );
+            m_pFileView->EndInplaceEditing( false );
 
-        eResult = m_pFileView->Initialize( sURL, sFilter, NULL, GetBlackList() );
+            EnableChildPointerOverwrite( true );
+            SetPointer( PointerStyle::Wait );
 
-        if( eResult == eSuccess )
-        {
-            m_pPath->SetURL( sURL );
+            eResult = m_pFileView->Initialize( sURL, sFilter, NULL, GetBlackList() );
 
-            m_pTreeView->SetSelectHdl( Link<>() );
-            m_pTreeView->SetTreePath( sURL );
-            m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
+            if( eResult == eSuccess )
+            {
+                m_pPath->SetURL( sURL );
 
-            m_bIsConnected = true;
-            EnableControls();
-        }
+                m_pTreeView->SetSelectHdl( Link<>() );
+                m_pTreeView->SetTreePath( sURL );
+                m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
+
+                m_bIsConnected = true;
+                EnableControls();
+            }
 
-        SetPointer( PointerStyle::Arrow );
-        EnableChildPointerOverwrite( false );
+            SetPointer( PointerStyle::Arrow );
+            EnableChildPointerOverwrite( false );
+        }
+        else
+        {
+            // content doesn't exist
+        }
     }
 
     return eResult;
commit b5f0393bc9fb07b70c5bb33ca375a32d9030cbff
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Wed Jul 22 14:06:52 2015 +0200

    Breadcrumb: clear all fields after changing root
    
    Change-Id: I8cefc8f755234cb4b63ca3a414402469df0394e1

diff --git a/svtools/source/control/breadcrumb.cxx b/svtools/source/control/breadcrumb.cxx
index 564c968..f1725e9 100644
--- a/svtools/source/control/breadcrumb.cxx
+++ b/svtools/source/control/breadcrumb.cxx
@@ -45,6 +45,16 @@ OUString Breadcrumb::GetHdlURL()
 void Breadcrumb::SetRootName( const OUString& rURL )
 {
     m_sRootName = rURL;
+
+    // we changed root - clear all fields
+    for( std::vector<VclPtr<FixedHyperlink>>::size_type i = 1; i < m_aLinks.size(); i++ )
+    {
+        m_aLinks[i]->SetText( "" );
+
+        m_aLinks[i]->Hide();
+        m_aSeparators[i]->Hide();
+        m_aLinks[i]->Enable( true );
+    }
 }
 
 void Breadcrumb::SetURL( const OUString& rURL )
commit 7ad15611b5dd0d4be7728438f5c46af8c071a08a
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 17:21:57 2015 +0200

    Open/Save Remote File in Impress/Draw toolbars and menu
    
    Change-Id: I9503f5beaa8b5a6afc213747a691265acd5903f7

diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx
index fe9e58a5..1564f37 100644
--- a/sd/source/ui/app/sddll.cxx
+++ b/sd/source/ui/app/sddll.cxx
@@ -243,6 +243,8 @@ void SdDLL::RegisterControllers()
     SvxFrameLineStyleToolBoxControl::RegisterControl(SID_FRAME_LINESTYLE, pMod );
     SvxColorToolBoxControl::RegisterControl(SID_FRAME_LINECOLOR, pMod );
     SvxFrameToolBoxControl::RegisterControl(SID_ATTR_BORDER, pMod );
+
+    SfxSaveAsToolBoxControl::RegisterControl(SID_SAVEASDOC, pMod );
 }
 
 void SdDLL::Init()
diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml
index bc8cfee..c1a9be9 100644
--- a/sd/uiconfig/sdraw/menubar/menubar.xml
+++ b/sd/uiconfig/sdraw/menubar/menubar.xml
@@ -21,6 +21,7 @@
     <menu:menupopup>
       <menu:menuitem menu:id=".uno:AddDirect"/>
       <menu:menuitem menu:id=".uno:Open"/>
+      <menu:menuitem menu:id=".uno:OpenRemote"/>
       <menu:menuitem menu:id=".uno:RecentFileList"/>
       <menu:menuseparator/>
       <menu:menuitem menu:id=".uno:AutoPilotMenu"/>
@@ -36,6 +37,7 @@
       <menu:menuitem menu:id=".uno:Save"/>
       <menu:menuitem menu:id=".uno:SaveAs"/>
       <menu:menuitem menu:id=".uno:SaveACopy"/>
+      <menu:menuitem menu:id=".uno:SaveAsRemote"/>
       <menu:menuitem menu:id=".uno:SaveAll"/>
       <menu:menuitem menu:id=".uno:CheckOut"/>
       <menu:menuitem menu:id=".uno:CancelCheckOut"/>
diff --git a/sd/uiconfig/sdraw/toolbar/standardbar.xml b/sd/uiconfig/sdraw/toolbar/standardbar.xml
index 06c7d5d..6e2d1fa 100644
--- a/sd/uiconfig/sdraw/toolbar/standardbar.xml
+++ b/sd/uiconfig/sdraw/toolbar/standardbar.xml
@@ -22,8 +22,9 @@
  <toolbar:toolbaritem xlink:href=".uno:AddDirect" toolbar:helpid="5537"/>
  <toolbar:toolbaritem xlink:href=".uno:NewDoc" toolbar:visible="false" toolbar:helpid="5500"/>
  <toolbar:toolbaritem xlink:href=".uno:Open" toolbar:style="dropdown"/>
+ <toolbar:toolbaritem xlink:href=".uno:OpenRemote"/>
  <toolbar:toolbaritem xlink:href=".uno:Save" toolbar:helpid="5505"/>
- <toolbar:toolbaritem xlink:href=".uno:SaveAs" toolbar:helpid="5502"/>
+ <toolbar:toolbaritem xlink:href=".uno:SaveAs" toolbar:style="dropdown" toolbar:helpid="5502"/>
  <toolbar:toolbaritem xlink:href=".uno:SendMail" toolbar:visible="false" toolbar:helpid="5331"/>
  <toolbar:toolbarseparator/>
  <toolbar:toolbaritem xlink:href=".uno:EditDoc" toolbar:helpid="6312" toolbar:visible="false"/>
diff --git a/sd/uiconfig/simpress/menubar/menubar.xml b/sd/uiconfig/simpress/menubar/menubar.xml
index 3eb5156..71146c2 100644
--- a/sd/uiconfig/simpress/menubar/menubar.xml
+++ b/sd/uiconfig/simpress/menubar/menubar.xml
@@ -21,6 +21,7 @@
         <menu:menupopup>
             <menu:menuitem menu:id=".uno:AddDirect"/>
             <menu:menuitem menu:id=".uno:Open"/>
+            <menu:menuitem menu:id=".uno:OpenRemote"/>
             <menu:menuitem menu:id=".uno:RecentFileList"/>
             <menu:menuitem menu:id=".uno:CloseDoc"/>
             <menu:menuseparator/>
@@ -38,6 +39,7 @@
             <menu:menuitem menu:id=".uno:Save"/>
             <menu:menuitem menu:id=".uno:SaveAs"/>
             <menu:menuitem menu:id=".uno:SaveACopy"/>
+            <menu:menuitem menu:id=".uno:SaveAsRemote"/>
             <menu:menuitem menu:id=".uno:SaveAll"/>
             <menu:menuitem menu:id=".uno:CheckOut"/>
             <menu:menuitem menu:id=".uno:CancelCheckOut"/>
diff --git a/sd/uiconfig/simpress/toolbar/standardbar.xml b/sd/uiconfig/simpress/toolbar/standardbar.xml
index c82ad6a..a83b414 100644
--- a/sd/uiconfig/simpress/toolbar/standardbar.xml
+++ b/sd/uiconfig/simpress/toolbar/standardbar.xml
@@ -22,8 +22,9 @@
  <toolbar:toolbaritem xlink:href=".uno:AddDirect" toolbar:style="dropdown"/>
  <toolbar:toolbaritem xlink:href=".uno:NewDoc" toolbar:visible="false"/>
  <toolbar:toolbaritem xlink:href=".uno:Open" toolbar:style="dropdown"/>
+ <toolbar:toolbaritem xlink:href=".uno:OpenRemote"/>
  <toolbar:toolbaritem xlink:href=".uno:Save"/>
- <toolbar:toolbaritem xlink:href=".uno:SaveAs"/>
+ <toolbar:toolbaritem xlink:href=".uno:SaveAs" toolbar:style="dropdown"/>
  <toolbar:toolbaritem xlink:href=".uno:SendMail" toolbar:visible="false"/>
  <toolbar:toolbarseparator/>
  <toolbar:toolbaritem xlink:href=".uno:EditDoc" toolbar:visible="false"/>
commit a6551d422c56eae47e98359618939d12e58b4e98
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 16:45:00 2015 +0200

    set pointer to Wait while reading url
    
    Change-Id: I3c0786f8fb20df368cc7c03e35deba51d7ebbecd

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index f618965..75615d1 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -470,6 +470,10 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
         }
 
         m_pFileView->EndInplaceEditing( false );
+
+        EnableChildPointerOverwrite( true );
+        SetPointer( PointerStyle::Wait );
+
         eResult = m_pFileView->Initialize( sURL, sFilter, NULL, GetBlackList() );
 
         if( eResult == eSuccess )
@@ -483,6 +487,9 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
             m_bIsConnected = true;
             EnableControls();
         }
+
+        SetPointer( PointerStyle::Arrow );
+        EnableChildPointerOverwrite( false );
     }
 
     return eResult;
commit 4ff61e68bca781606a640f023356780bdcb09f07
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 15:50:09 2015 +0200

    select recently added service
    
    Change-Id: I55a32eef4a5eb3b9f57cf6d1b8f3cba5a9a14c55

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 47d2ddf..f618965 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -551,6 +551,7 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, AddServiceHdl )
 
             m_pServices_lb->InsertEntry( sPrefix + newService->GetName() );
             m_pServices_lb->SelectEntryPos( m_pServices_lb->GetEntryCount() - 1 );
+            SelectServiceHdl( NULL );
 
             m_bIsUpdated = true;
 
commit 36abf90bab27bb16340bcfd1cf792ee6a4484117
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 15:39:08 2015 +0200

    automatically select last used service
    
    Change-Id: Ic66517cd65c28bd7e62e38796cf8580ed31305f7

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index d2e3cc5..47d2ddf 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -325,6 +325,11 @@ short RemoteFilesDialog::Execute()
         Show();
         AddServiceHdl( NULL );
     }
+    if( m_pServices_lb->GetEntryCount() > 0 )
+    {
+        Show();
+        SelectServiceHdl( NULL );
+    }
 
     short nRet = SvtFileDialog_Base::Execute();
 
commit e9be2af3b937e7ec8d48eacaec8f075d7b45a60d
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 13:28:46 2015 +0200

    avoid multiple recursive opening the same url, cleaning
    
    Change-Id: I8a3ae75a64ffcc4879af3e3591b3b433cee1678d

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 7f0447a..d2e3cc5 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -470,7 +470,10 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL )
         if( eResult == eSuccess )
         {
             m_pPath->SetURL( sURL );
+
+            m_pTreeView->SetSelectHdl( Link<>() );
             m_pTreeView->SetTreePath( sURL );
+            m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) );
 
             m_bIsConnected = true;
             EnableControls();
@@ -662,24 +665,17 @@ IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton,
 
 IMPL_LINK_NOARG ( RemoteFilesDialog, DoubleClickHdl )
 {
-    SvTreeListEntry* pEntry = m_pFileView->FirstSelected();
-
-    if( pEntry )
+    if( m_pFileView->GetSelectionCount() )
     {
-        SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
+        OUString sURL = m_pFileView->GetCurrentURL();
 
-        if( pData )
+        if( ContentIsFolder( sURL ) )
         {
-            if( pData->mbIsFolder )
-            {
-                OUString sURL = m_pFileView->GetCurrentURL();
-
-                OpenURL( sURL );
-            }
-            else
-            {
-                EndDialog( RET_OK );
-            }
+            OpenURL( sURL );
+        }
+        else
+        {
+            EndDialog( RET_OK );
         }
     }
 
commit af1e55eec31437224a871bdf291d4fbd9a3f9a30
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 12:35:19 2015 +0200

    don't take full email address as a username
    
    Change-Id: Ibc8f951dc3281b0b1d0f4b6783af0dbe2fb75da0

diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx b/svtools/source/dialogs/PlaceEditDialog.cxx
index cb90be7..125a817 100644
--- a/svtools/source/dialogs/PlaceEditDialog.cxx
+++ b/svtools/source/dialogs/PlaceEditDialog.cxx
@@ -198,7 +198,13 @@ void PlaceEditDialog::UpdateLabel( )
         if( !m_pEDUsername->GetText().isEmpty( ) )
         {
             OUString sLabel = SvtResId( STR_SVT_DEFAULT_SERVICE_LABEL );
-            sLabel = sLabel.replaceFirst( "$user$", m_pEDUsername->GetText() );
+            OUString sUser = m_pEDUsername->GetText();
+
+            int nLength = sUser.indexOf( '@' );
+            if( nLength < 0 )
+                nLength = sUser.getLength();
+
+            sLabel = sLabel.replaceFirst( "$user$", sUser.copy( 0, nLength ) );
             sLabel = sLabel.replaceFirst( "$service$", m_pLBServerType->GetSelectEntry() );
 
             m_pEDServerName->SetText( sLabel );
commit 95fc311241e77207d870fea178badce94ffc6138
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 11:59:45 2015 +0200

    FolderTree: expanded folder icon
    
    Change-Id: If5956b61dec2f00f9233e8f4906bdb9b6f22571d

diff --git a/icon-themes/breeze/links.txt b/icon-themes/breeze/links.txt
index 7ba9f85..9475368 100644
--- a/icon-themes/breeze/links.txt
+++ b/icon-themes/breeze/links.txt
@@ -126,3 +126,6 @@ cmd/sc_showgraphics.png cmd/sc_graphic.png
 # split cells duplicates
 svx/res/zetlhor2.png /sw/res/zetlhor2.png
 svx/res/zetlver2.png /sw/res/zetlver2.png
+
+# FolderTree expanded icon
+svtools/res/folderop.png formula/res/fapopen.png
diff --git a/icon-themes/galaxy/links.txt b/icon-themes/galaxy/links.txt
index 2e42f11..6a68faf 100644
--- a/icon-themes/galaxy/links.txt
+++ b/icon-themes/galaxy/links.txt
@@ -81,3 +81,6 @@ cmd/lc_charbackcolor.png cmd/lc_backcolor.png
 
 # Toggle graphics visibility in Writer
 cmd/sc_showgraphics.png cmd/sc_graphic.png
+
+# FolderTree expanded icon
+svtools/res/folderop.png formula/res/fapopen.png
diff --git a/icon-themes/hicontrast/links.txt b/icon-themes/hicontrast/links.txt
index 3c9fd17..ea11b2a 100644
--- a/icon-themes/hicontrast/links.txt
+++ b/icon-themes/hicontrast/links.txt
@@ -5,3 +5,7 @@ cmd/sc_linespacing.png cmd/sc_spacepara15.png
 # text background colour Impress/Draw
 cmd/sc_charbackcolor.png cmd/sc_backcolor.png
 cmd/lc_charbackcolor.png cmd/lc_backcolor.png
+
+# FolderTree icons
+svtools/res/folder.png formula/res/fapclose.png
+svtools/res/folderop.png formula/res/fapopen.png
diff --git a/icon-themes/human/links.txt b/icon-themes/human/links.txt
index 3e7c8a7..5b1aca0 100644
--- a/icon-themes/human/links.txt
+++ b/icon-themes/human/links.txt
@@ -8,3 +8,6 @@ cmd/sc_linespacing.png cmd/sc_spacepara15.png
 # text background colour Impress/Draw
 cmd/sc_charbackcolor.png cmd/sc_backcolor.png
 cmd/lc_charbackcolor.png cmd/lc_backcolor.png
+
+# FolderTree expanded icon
+svtools/res/folderop.png formula/res/fapopen.png
diff --git a/icon-themes/tango/links.txt b/icon-themes/tango/links.txt
index 2fc1b96..672e153 100644
--- a/icon-themes/tango/links.txt
+++ b/icon-themes/tango/links.txt
@@ -383,6 +383,7 @@ res/sc10712.png cmd/sc_sortdescending.png
 res/reload.png cmd/sc_reload.png
 res/sc05501.png cmd/sc_open.png
 svtools/res/folder.png formula/res/fapclose.png
+svtools/res/folderop.png formula/res/fapopen.png
 fpicker/res/fp011.png res/sc06303.png
 sfx2/res/styfam1.png sw/imglst/sf01.png
 sfx2/res/styfam2.png sw/imglst/sf02.png
diff --git a/include/svtools/foldertree.hxx b/include/svtools/foldertree.hxx
index e430072..4be22b9 100644
--- a/include/svtools/foldertree.hxx
+++ b/include/svtools/foldertree.hxx
@@ -40,6 +40,7 @@ private:
     ::osl::Mutex m_aMutex;
     Sequence< OUString > m_aBlackList;
     Image m_aFolderImage;
+    Image m_aFolderExpandedImage;
 
 public:
     FolderTree( vcl::Window* pParent, WinBits nBits );
diff --git a/include/svtools/svtools.hrc b/include/svtools/svtools.hrc
index 5ddb4dd..570809b 100644
--- a/include/svtools/svtools.hrc
+++ b/include/svtools/svtools.hrc
@@ -263,6 +263,7 @@
 #define IMG_TRIANGLE_DOWN               (RID_SVTOOLS_START + 20)
 
 #define IMG_SVT_FOLDER                  (RID_SVTOOLS_START + 42)
+#define IMG_SVT_FOLDER_OPEN             (RID_SVTOOLS_START + 43)
 
 #define RID_IMG_PRNDLG_NOCOLLATE            (STR_SVT_PRNDLG_START + 30)
 
diff --git a/svtools/source/contnr/fileview.src b/svtools/source/contnr/fileview.src
index c645737..54119f3 100644
--- a/svtools/source/contnr/fileview.src
+++ b/svtools/source/contnr/fileview.src
@@ -76,6 +76,12 @@ Image IMG_SVT_FOLDER
     MaskColor = Color { Red = 0xFFFF ; Green = 0x0000 ; Blue = 0xFFFF ; };
 };
 
+Image IMG_SVT_FOLDER_OPEN
+{
+    ImageBitmap = Bitmap { File = "folderop.png" ; };
+    MaskColor = Color { Red = 0xFFFF ; Green = 0x0000 ; Blue = 0xFFFF ; };
+};
+
 // Menus -----------------------------------------------------------------
 
 Menu RID_FILEVIEW_CONTEXTMENU
diff --git a/svtools/source/contnr/foldertree.cxx b/svtools/source/contnr/foldertree.cxx
index 50df76b..63cc7e0 100644
--- a/svtools/source/contnr/foldertree.cxx
+++ b/svtools/source/contnr/foldertree.cxx
@@ -14,6 +14,7 @@
 FolderTree::FolderTree( vcl::Window* pParent, WinBits nBits )
     : SvTreeListBox( pParent, nBits | WB_SORT | WB_TABSTOP )
     , m_aFolderImage( SvtResId( IMG_SVT_FOLDER ) )
+    , m_aFolderExpandedImage( SvtResId( IMG_SVT_FOLDER_OPEN ) )
 {
     Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
     Reference< XInteractionHandler > xInteractionHandler(
@@ -21,7 +22,7 @@ FolderTree::FolderTree( vcl::Window* pParent, WinBits nBits )
     m_xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
 
     SetDefaultCollapsedEntryBmp( m_aFolderImage );
-    SetDefaultExpandedEntryBmp( m_aFolderImage );
+    SetDefaultExpandedEntryBmp( m_aFolderExpandedImage );
 }
 
 void FolderTree::RequestingChildren( SvTreeListEntry* pEntry )
commit 33e06ade061d86447b0307c400a4d5d22e3bd695
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Jul 21 09:40:49 2015 +0200

    check pointers
    
    Change-Id: Iacf9213d833a0a3c2d951c667108a5e2538f4215

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 1662758..7f0447a 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -689,30 +689,35 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, DoubleClickHdl )
 IMPL_LINK_NOARG ( RemoteFilesDialog, SelectHdl )
 {
     SvTreeListEntry* pEntry = m_pFileView->FirstSelected();
-    if (!pEntry)
-        return 1;
-    SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
 
-    if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
-       || ( !pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_FILEDLG ) ) )
+    if( pEntry )
     {
-        // url must contain user info, because we need this info in recent files entry
-        // (to fill user field in login box by default)
-        INetURLObject aURL( pData->maURL );
-        INetURLObject aCurrentURL( m_sLastServiceUrl );
-        aURL.SetUser( aCurrentURL.GetUser() );
+        SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
 
-        m_sPath = aURL.GetMainURL( INetURLObject::NO_DECODE );
+        if( pData )
+        {
+            if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
+                || ( !pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_FILEDLG ) ) )
+            {
+                // url must contain user info, because we need this info in recent files entry
+                // (to fill user field in login box by default)
+                INetURLObject aURL( pData->maURL );
+                INetURLObject aCurrentURL( m_sLastServiceUrl );
+                aURL.SetUser( aCurrentURL.GetUser() );
 
-        m_pName_ed->SetText( INetURLObject::decode( aURL.GetLastName(), INetURLObject::DECODE_WITH_CHARSET ) );
-    }
-    else
-    {
-        m_sPath.clear();
-        m_pName_ed->SetText( "" );
-    }
+                m_sPath = aURL.GetMainURL( INetURLObject::NO_DECODE );
 
-    EnableControls();
+                m_pName_ed->SetText( INetURLObject::decode( aURL.GetLastName(), INetURLObject::DECODE_WITH_CHARSET ) );
+            }
+            else
+            {
+                m_sPath.clear();
+                m_pName_ed->SetText( "" );
+            }
+
+            EnableControls();
+        }
+    }
 
     return 1;
 }
commit d3926757a92a06e0a6a8f986fdc84f22a064ca32
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Mon Jul 20 16:01:09 2015 +0200

    default label for service
    
    Change-Id: Iad4ad161765c943a035dcc15232c4dcbef1cc68c

diff --git a/include/svtools/PlaceEditDialog.hxx b/include/svtools/PlaceEditDialog.hxx
index b601b9b..e492978 100644
--- a/include/svtools/PlaceEditDialog.hxx
+++ b/include/svtools/PlaceEditDialog.hxx
@@ -53,7 +53,9 @@ private:
 
     unsigned int m_nCurrentType;
 
-public:
+    bool bLabelChanged;
+
+public :
 
      PlaceEditDialog( vcl::Window* pParent);
      PlaceEditDialog(vcl::Window* pParent, const std::shared_ptr<Place> &rPlace );
@@ -69,11 +71,13 @@ public:
 private:
 
     void InitDetails( );
+    void UpdateLabel( );
 
     DECL_LINK ( OKHdl, Button * );
     DECL_LINK ( DelHdl, Button * );
     DECL_LINK ( EditHdl, void * );
     DECL_LINK ( SelectTypeHdl, void * );
+    DECL_LINK ( EditLabelHdl, void * );
     DECL_LINK ( EditUsernameHdl, void * );
 
 };
diff --git a/include/svtools/svtools.hrc b/include/svtools/svtools.hrc
index 23cf007..5ddb4dd 100644
--- a/include/svtools/svtools.hrc
+++ b/include/svtools/svtools.hrc
@@ -51,6 +51,9 @@
 #define STR_SVT_ESTIMATED_SIZE_VEC      (RID_SVTOOLS_START + 41)
 
 // FREE
+
+#define STR_SVT_DEFAULT_SERVICE_LABEL   (RID_SVTOOLS_START+57)
+
 #define STRARY_SVT_DOCINFO              (RID_SVTOOLS_START+58)
 
 #define STR_BASICKEY_FORMAT_ON          (RID_SVTOOLS_START+103)
diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx b/svtools/source/dialogs/PlaceEditDialog.cxx
index 15034dd..cb90be7 100644
--- a/svtools/source/dialogs/PlaceEditDialog.cxx
+++ b/svtools/source/dialogs/PlaceEditDialog.cxx
@@ -13,6 +13,7 @@
 #include <com/sun/star/uno/Sequence.hxx>
 #include <officecfg/Office/Common.hxx>
 #include <svtools/svtresid.hxx>
+#include <svtools/svtools.hrc>
 #include <vcl/msgbox.hxx>
 
 using namespace com::sun::star::uno;
@@ -21,6 +22,7 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent)
     : ModalDialog(pParent, "PlaceEditDialog", "svt/ui/placeedit.ui")
     , m_xCurrentDetails()
     , m_nCurrentType( 0 )
+    , bLabelChanged( false )
 {
     get( m_pEDServerName, "name" );
     get( m_pLBServerType, "type" );
@@ -33,7 +35,7 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent)
     m_pBTOk->SetClickHdl( LINK( this, PlaceEditDialog, OKHdl) );
     m_pBTOk->Enable( false );
 
-    m_pEDServerName->SetModifyHdl( LINK( this, PlaceEditDialog, EditHdl) );
+    m_pEDServerName->SetModifyHdl( LINK( this, PlaceEditDialog, EditLabelHdl) );
 
     // This constructor is called when user request a place creation, so
     // delete button is hidden.
@@ -48,6 +50,7 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent)
 PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent, const std::shared_ptr<Place>& rPlace)
     : ModalDialog(pParent, "PlaceEditDialog", "svt/ui/placeedit.ui")
     , m_xCurrentDetails( )
+    , bLabelChanged( true )
 {
     get( m_pEDServerName, "name" );
     get( m_pLBServerType, "type" );
@@ -188,6 +191,26 @@ void PlaceEditDialog::InitDetails( )
     SelectTypeHdl( m_pLBServerType );
 }
 
+void PlaceEditDialog::UpdateLabel( )
+{
+    if( !bLabelChanged )
+    {
+        if( !m_pEDUsername->GetText().isEmpty( ) )
+        {
+            OUString sLabel = SvtResId( STR_SVT_DEFAULT_SERVICE_LABEL );
+            sLabel = sLabel.replaceFirst( "$user$", m_pEDUsername->GetText() );
+            sLabel = sLabel.replaceFirst( "$service$", m_pLBServerType->GetSelectEntry() );
+
+            m_pEDServerName->SetText( sLabel );
+            bLabelChanged = false;
+        }
+        else
+        {
+            m_pEDServerName->SetText( m_pLBServerType->GetSelectEntry( ) );
+        }
+    }
+}
+
 IMPL_LINK ( PlaceEditDialog,  OKHdl, Button *, )
 {
     if ( m_xCurrentDetails.get() )
@@ -234,12 +257,22 @@ IMPL_LINK ( PlaceEditDialog, DelHdl, Button *, )
 
 IMPL_LINK_NOARG( PlaceEditDialog, EditHdl )
 {
+    UpdateLabel( );
+
     OUString sUrl = GetServerUrl( );
     OUString sName = OUString( m_pEDServerName->GetText() ).trim( );
     m_pBTOk->Enable( !sName.isEmpty( ) && !sUrl.isEmpty( ) );
     return 1;
 }
 
+IMPL_LINK_NOARG( PlaceEditDialog, EditLabelHdl )
+{
+    bLabelChanged = true;
+    EditHdl(NULL);
+
+    return 1;
+}
+
 IMPL_LINK_NOARG( PlaceEditDialog, EditUsernameHdl )
 {
     for ( std::vector< std::shared_ptr< DetailsContainer > >::iterator it = m_aDetailsContainers.begin( );
@@ -247,7 +280,9 @@ IMPL_LINK_NOARG( PlaceEditDialog, EditUsernameHdl )
     {
         ( *it )->setUsername( OUString( m_pEDUsername->GetText() ) );
     }
+
     EditHdl(NULL);
+
     return 1;
 }
 
diff --git a/svtools/source/dialogs/filedlg2.src b/svtools/source/dialogs/filedlg2.src
index 6e68db0..795da0e 100644
--- a/svtools/source/dialogs/filedlg2.src
+++ b/svtools/source/dialogs/filedlg2.src
@@ -18,6 +18,7 @@
  */
 
 #include <svtools/filedlg2.hrc>
+#include <svtools/svtools.hrc>
 
 String STR_FILEDLG_OPEN
 {
@@ -32,4 +33,9 @@ String STR_FILEDLG_SAVE
     Text [ en-US ] = "Save" ;
 };
 
+String STR_SVT_DEFAULT_SERVICE_LABEL
+{
+    Text [ en-US ] = "$user$'s $service$" ;
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 445aace2f39634b7f5551dac68b6dda87afb0113
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Mon Jul 20 14:26:41 2015 +0200

    string: 'Remote File' -> 'Save Remote File...'
    
    Change-Id: I30e664e6fa16cdcbdffa97c57905b73224d42636

diff --git a/framework/source/classes/resource.src b/framework/source/classes/resource.src
index 4f8ce0e..44e0c70 100644
--- a/framework/source/classes/resource.src
+++ b/framework/source/classes/resource.src
@@ -121,7 +121,7 @@ String STR_OPEN_REMOTE
 
 String STR_REMOTE_FILE
 {
-    Text [ en-US ] = "Remote file";
+    Text [ en-US ] = "Save Remote File...";
 };
 
 String STR_TOOLBAR_TITLE_ADDON
commit 42384801ee3b07af46eb39ed781886a375f3902d
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Mon Jul 20 14:19:54 2015 +0200

    remember user name in recent files
    
    Change-Id: I55b340e90d51b614b8f46c06e3dc1961b3bac2ba

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 28200bb..1662758 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -696,8 +696,13 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, SelectHdl )
     if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
        || ( !pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_FILEDLG ) ) )
     {
+        // url must contain user info, because we need this info in recent files entry
+        // (to fill user field in login box by default)
         INetURLObject aURL( pData->maURL );
-        m_sPath = pData->maURL;
+        INetURLObject aCurrentURL( m_sLastServiceUrl );
+        aURL.SetUser( aCurrentURL.GetUser() );
+
+        m_sPath = aURL.GetMainURL( INetURLObject::NO_DECODE );
 
         m_pName_ed->SetText( INetURLObject::decode( aURL.GetLastName(), INetURLObject::DECODE_WITH_CHARSET ) );
     }
@@ -815,6 +820,14 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, OkHdl )
             m_sPath = sCurrentPath;
         else
             m_sPath = sSelectedItem;
+
+        // url must contain user info, because we need this info in recent files entry
+        // (to fill user field in login box by default)
+        INetURLObject aURL( m_sPath );
+        INetURLObject aCurrentURL( m_sLastServiceUrl );
+        aURL.SetUser( aCurrentURL.GetUser() );
+
+        m_sPath = aURL.GetMainURL( INetURLObject::NO_DECODE );
     }
 
     bool bExists = false;
@@ -973,7 +986,13 @@ std::vector<OUString> RemoteFilesDialog::GetPathList() const
 
     while( pEntry )
     {
-        aList.push_back( SvtFileView::GetURL( pEntry ) );
+        // url must contain user info, because we need this info in recent files entry
+        // (to fill user field in login box by default)
+        INetURLObject aURL( SvtFileView::GetURL( pEntry ) );
+        INetURLObject aCurrentURL( m_sLastServiceUrl );
+        aURL.SetUser( aCurrentURL.GetUser() );
+
+        aList.push_back( aURL.GetMainURL( INetURLObject::NO_DECODE ) );
         pEntry = m_pFileView->NextSelected( pEntry );
     }
 
commit ccd7fc6edd3d5f19edc62fb8f9d90c35755b2ac9
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Mon Jul 20 11:30:49 2015 +0200

    Show 'Add service' dialog when there is no service added yet
    
    Change-Id: I72d294e9c09b0d02b829b91fb188c1c7965d1d45

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index bb2587d..28200bb 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -318,6 +318,19 @@ void RemoteFilesDialog::Resize()
     }
 }
 
+short RemoteFilesDialog::Execute()
+{
+    if( m_pServices_lb->GetEntryCount() == 0 )
+    {
+        Show();
+        AddServiceHdl( NULL );
+    }
+
+    short nRet = SvtFileDialog_Base::Execute();
+
+    return nRet;
+}
+
 OUString lcl_GetServiceType( ServicePtr pService )
 {
     INetProtocol aProtocol = pService->GetUrlObject().GetProtocol();
diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx
index ba48b8e..ede30c7 100644
--- a/fpicker/source/office/RemoteFilesDialog.hxx
+++ b/fpicker/source/office/RemoteFilesDialog.hxx
@@ -64,6 +64,7 @@ public:
 
     virtual void dispose() SAL_OVERRIDE;
     virtual void Resize() SAL_OVERRIDE;
+    virtual short Execute() SAL_OVERRIDE;
 
     OUString GetPath() const;
 
commit d605ccbd5075a8bb57c6e767b91b2782623c0d2d
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Mon Jul 20 10:04:09 2015 +0200

    accessibility: correct tab-order
    
    Change-Id: Ib554e8bb73367d5f85253f0deb083fbc5a5d454b

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 86be522..bb2587d 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -11,13 +11,22 @@
 
 class FileViewContainer : public vcl::Window
 {
+    enum FocusState
+    {
+        Prev = 0,
+        TreeView,
+        FileView,
+        Next,
+        FocusCount
+    };
+
     private:
     VclPtr< SvtFileView > m_pFileView;
     VclPtr< FolderTree > m_pTreeView;
     VclPtr< Splitter > m_pSplitter;
 
     int m_nCurrentFocus;
-    VclPtr<vcl::Window> m_pFocusWidgets[4];
+    VclPtr<vcl::Window> m_pFocusWidgets[FocusState::FocusCount];
 
     public:
     FileViewContainer( vcl::Window *pParent )
@@ -51,10 +60,10 @@ class FileViewContainer : public vcl::Window
         m_pFileView = pFileView;
         m_pTreeView = pTreeView;
         m_pSplitter = pSplitter;
-        m_pFocusWidgets[0] = pPrevSibling;
-        m_pFocusWidgets[1] = pTreeView;
-        m_pFocusWidgets[2] = pFileView;
-        m_pFocusWidgets[3] = pNextSibling;
+        m_pFocusWidgets[FocusState::Prev] = pPrevSibling;
+        m_pFocusWidgets[FocusState::TreeView] = pTreeView;
+        m_pFocusWidgets[FocusState::FileView] = pFileView;
+        m_pFocusWidgets[FocusState::Next] = pNextSibling;
     }
 
     virtual void Resize() SAL_OVERRIDE
@@ -89,14 +98,20 @@ class FileViewContainer : public vcl::Window
         if( !m_pFileView || !m_pTreeView )
             return;
 
-        if( !bReverse && m_nCurrentFocus < 3 )
+        if( bReverse && m_nCurrentFocus > FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
         {
-            m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true );
+            m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
+            m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
+
+            m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus( true );
             m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
         }
-        else if( m_nCurrentFocus > 0 )
+        else if( !bReverse && m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus < FocusState::Next )
         {
-            m_pFocusWidgets[--m_nCurrentFocus]->SetFakeFocus( true );
+            m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus(false);
+            m_pFocusWidgets[m_nCurrentFocus]->LoseFocus();
+
+            m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true );
             m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
         }
     }
@@ -106,13 +121,38 @@ class FileViewContainer : public vcl::Window
         if( !m_pFileView || !m_pTreeView )
             return;
 
-        m_nCurrentFocus = 1;
-        m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus( true );
-        m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
+        GetFocusFlags aFlags = GetGetFocusFlags();
+
+        if( aFlags & GetFocusFlags::Forward )
+            m_nCurrentFocus = FocusState::TreeView;
+        else if( aFlags & GetFocusFlags::Backward )
+            m_nCurrentFocus = FocusState::FileView;
+
+        if( m_nCurrentFocus >= FocusState::Prev && m_nCurrentFocus <= FocusState::Next )
+        {
+            m_pFocusWidgets[m_nCurrentFocus]->SetFakeFocus( true );
+            m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
+        }
     }
 
     virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE
     {
+        if( rNEvt.GetType() == MouseNotifyEvent::GETFOCUS )
+        {
+            // we must also update counter when user change focus using mouse
+            for(int i = FocusState::Prev; i <= FocusState::Next; i++)
+            {
+                if( rNEvt.GetWindow() == m_pFocusWidgets[i] )
+                {
+                    m_nCurrentFocus = i;
+                    return true;
+                }
+            }
+
+            // GETFOCUS for one of FileView's subcontrols
+            m_nCurrentFocus = FocusState::FileView;
+            return true;
+        }
         if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
         {
             const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
commit 66a935de34c528cd40d348fe3184d5b4f91e68f5
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Fri Jul 17 10:12:06 2015 +0300

    Don't show open remote entry in the recent doc menu
    
    We use the same menu controller for both the Open toolbar
    button and the Recent Documents menu. While it's
    reasonable to put the open remote file command under the
    open button, it has nothing to do with recent documents,
    so it shouldn't appear there.
    
    Also don't add the "No Document" entry in case the open
    remote entry is visible. The whole point of the "No
    Document" entry is that we can't leave the menu empty,
    but if there is another visible entry, it's not needed.
    
    Change-Id: Ibefbdc6dc7d1d49f555d8ee23f67b47eba19b445
    
    Signed-off-by: Szymon Kłos <eszkadev at gmail.com>

diff --git a/framework/source/uielement/recentfilesmenucontroller.cxx b/framework/source/uielement/recentfilesmenucontroller.cxx
index a2c3432..61d2f02 100644
--- a/framework/source/uielement/recentfilesmenucontroller.cxx
+++ b/framework/source/uielement/recentfilesmenucontroller.cxx
@@ -60,7 +60,8 @@ class RecentFilesMenuController :  public svt::PopupMenuControllerBase
     using svt::PopupMenuControllerBase::disposing;
 
 public:
-    RecentFilesMenuController( const uno::Reference< uno::XComponentContext >& xContext );
+    RecentFilesMenuController( const uno::Reference< uno::XComponentContext >& xContext,
+                               const uno::Sequence< uno::Any >& args );
     virtual ~RecentFilesMenuController();
 
     // XServiceInfo
@@ -115,12 +116,25 @@ private:
 
     std::vector< RecentFile > m_aRecentFilesItems;
     bool                  m_bDisabled : 1;
+    bool m_bShowRemote;
 };
 
-RecentFilesMenuController::RecentFilesMenuController( const uno::Reference< uno::XComponentContext >& xContext ) :
+RecentFilesMenuController::RecentFilesMenuController( const uno::Reference< uno::XComponentContext >& xContext,
+                                                      const uno::Sequence< uno::Any >& args ) :
     svt::PopupMenuControllerBase( xContext ),
-    m_bDisabled( false )
+    m_bDisabled( false ),
+    m_bShowRemote( false )
 {
+    css::beans::PropertyValue aPropValue;
+    for ( sal_Int32 i = 0; i < args.getLength(); ++i )
+    {
+        args[i] >>= aPropValue;
+        if ( aPropValue.Name == "ShowRemote" )
+        {
+            aPropValue.Value >>= m_bShowRemote;
+            break;
+        }
+    }
 }
 
 RecentFilesMenuController::~RecentFilesMenuController()
@@ -227,26 +241,30 @@ void RecentFilesMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu >
                                         FWK_RESSTR(STR_CLEAR_RECENT_FILES_HELP) );
 
             // Open remote menu entry
-            pVCLPopupMenu->InsertItem( sal_uInt16( nCount + 2 ),
-                                       FWK_RESSTR(STR_OPEN_REMOTE) );
-            pVCLPopupMenu->SetItemCommand( sal_uInt16( nCount + 2 ),
-                                           OUString( CMD_OPEN_REMOTE ) );
+            if ( m_bShowRemote )
+            {
+                pVCLPopupMenu->InsertItem( sal_uInt16( nCount + 2 ),
+                                           FWK_RESSTR(STR_OPEN_REMOTE) );
+                pVCLPopupMenu->SetItemCommand( sal_uInt16( nCount + 2 ),
+                                               OUString( CMD_OPEN_REMOTE ) );
+            }
         }
         else
         {
-            // No recent documents => insert "no document" string
-            pVCLPopupMenu->InsertItem( 1, FWK_RESSTR(STR_NODOCUMENT) );
-            // Do not disable it, otherwise the Toolbar controller and MenuButton
-            // will display SV_RESID_STRING_NOSELECTIONPOSSIBLE instead of STR_NODOCUMENT
-            pVCLPopupMenu->SetItemBits( 1, pVCLPopupMenu->GetItemBits( 1 ) | MenuItemBits::NOSELECT );
-
-            pVCLPopupMenu->InsertSeparator();
-
-            // Open remote menu entry
-            pVCLPopupMenu->InsertItem( sal_uInt16( 2 ),
-                                       FWK_RESSTR(STR_OPEN_REMOTE) );
-            pVCLPopupMenu->SetItemCommand( sal_uInt16( 2 ),
-                                           OUString( CMD_OPEN_REMOTE ) );
+            if ( m_bShowRemote )
+            {
+                // Open remote menu entry
+                pVCLPopupMenu->InsertItem( 1, FWK_RESSTR(STR_OPEN_REMOTE) );
+                pVCLPopupMenu->SetItemCommand( 1, CMD_OPEN_REMOTE );
+            }
+            else
+            {
+                // No recent documents => insert "no document" string
+                pVCLPopupMenu->InsertItem( 1, FWK_RESSTR(STR_NODOCUMENT) );
+                // Do not disable it, otherwise the Toolbar controller and MenuButton
+                // will display SV_RESID_STRING_NOSELECTIONPOSSIBLE instead of STR_NODOCUMENT
+                pVCLPopupMenu->SetItemBits( 1, pVCLPopupMenu->GetItemBits( 1 ) | MenuItemBits::NOSELECT );
+            }
         }
     }
 }
@@ -444,9 +462,9 @@ IMPL_STATIC_LINK( RecentFilesMenuController, ExecuteHdl_Impl, LoadRecentFile*, p
 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
 com_sun_star_comp_framework_RecentFilesMenuController_get_implementation(
     css::uno::XComponentContext *context,
-    css::uno::Sequence<css::uno::Any> const &)
+    css::uno::Sequence<css::uno::Any> const &args)
 {
-    return cppu::acquire(new RecentFilesMenuController(context));
+    return cppu::acquire(new RecentFilesMenuController(context, args));
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/toolbox/tbxitem.cxx b/sfx2/source/toolbox/tbxitem.cxx
index ed53d96..2906100 100644
--- a/sfx2/source/toolbox/tbxitem.cxx
+++ b/sfx2/source/toolbox/tbxitem.cxx
@@ -1153,6 +1153,10 @@ VclPtr<SfxPopupWindow> SfxRecentFilesToolBoxControl::CreatePopupWindow()
     aPropValue.Value <<= m_xFrame;
     aArgs[1] <<= aPropValue;
 
+    aPropValue.Name = "ShowRemote";
+    aPropValue.Value <<= true;
+    aArgs[2] <<= aPropValue;
+
     uno::Reference< frame::XPopupMenuController > xPopupController( m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
                 "com.sun.star.comp.framework.RecentFilesMenuController", aArgs, m_xContext ), UNO_QUERY );
 
@@ -1191,7 +1195,7 @@ VclPtr<SfxPopupWindow> SfxSaveAsToolBoxControl::CreatePopupWindow()
     sal_uInt16 nItemId = GetId();
     ::Rectangle aRect( rBox.GetItemRect( nItemId ) );
 
-    Sequence< Any > aArgs( 2 );
+    Sequence< Any > aArgs( 3 );
     PropertyValue aPropValue;
 
     aPropValue.Name = "CommandURL";
commit cc6bc8e570fd7fa6c7eaceafdfcc7c476725522c
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Fri Jul 17 12:09:05 2015 +0200

    File > Save As Remote - Calc and Writer
    
    Change-Id: I03dc6592015dea4b4c5e77650ec8378ee0853a63

diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index a8d5d1f..3ee4ec3 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -1972,6 +1972,14 @@
           <value>1</value>
         </prop>
       </node>
+      <node oor:name=".uno:SaveAsRemote" oor:op="replace">
+        <prop oor:name="Label" oor:type="xs:string">
+          <value xml:lang="en-US">~Save As Remote File...</value>
+        </prop>
+        <prop oor:name="Properties" oor:type="xs:int">
+          <value>1</value>
+        </prop>
+      </node>
       <node oor:name=".uno:CircleCut" oor:op="replace">
         <prop oor:name="Label" oor:type="xs:string">
           <value xml:lang="en-US">Circle Segment</value>
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index 8369c10..43d6392 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -40,6 +40,7 @@
             <menu:menuitem menu:id=".uno:Save"/>
             <menu:menuitem menu:id=".uno:SaveAs"/>
             <menu:menuitem menu:id=".uno:SaveACopy"/>
+            <menu:menuitem menu:id=".uno:SaveAsRemote"/>
             <menu:menuitem menu:id=".uno:SaveAll"/>
             <menu:menuitem menu:id=".uno:CheckOut"/>
             <menu:menuitem menu:id=".uno:CancelCheckOut"/>
diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index fd233cf..8300196 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -39,6 +39,7 @@
       <menu:menuitem menu:id=".uno:Save"/>
       <menu:menuitem menu:id=".uno:SaveAs"/>
       <menu:menuitem menu:id=".uno:SaveACopy"/>
+      <menu:menuitem menu:id=".uno:SaveAsRemote"/>
       <menu:menuitem menu:id=".uno:SaveAll"/>
       <menu:menuitem menu:id=".uno:CheckOut"/>
       <menu:menuitem menu:id=".uno:CancelCheckOut"/>
commit 2396a3af410147df645145e7116c298627be98e9
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Fri Jul 17 10:42:31 2015 +0200

    Open Remote file in Calc's menubar
    
    Change-Id: Ie0e98768724edca02cfe7dc9fda682ce125e1a9e

diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index a474f98..8369c10 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -21,6 +21,7 @@
         <menu:menupopup>
             <menu:menuitem menu:id=".uno:AddDirect"/>
             <menu:menuitem menu:id=".uno:OpenFromCalc"/>
+            <menu:menuitem menu:id=".uno:OpenRemote"/>
             <menu:menuitem menu:id=".uno:RecentFileList"/>
             <menu:menuitem menu:id=".uno:CloseDoc"/>
             <menu:menuseparator/>
commit 45ee8d2aae7102b84bf2787cc9c37f1447da47f6
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Fri Jul 17 10:01:19 2015 +0200

    Open Remote file in Writer's menubar
    
    Change-Id: I5cda8661a44e4c33fab3263c17c1a7900241e70b

diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index 7ae2617..fd233cf 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -21,6 +21,7 @@
     <menu:menupopup>
       <menu:menuitem menu:id=".uno:AddDirect"/>
       <menu:menuitem menu:id=".uno:OpenFromWriter"/>
+      <menu:menuitem menu:id=".uno:OpenRemote"/>
       <menu:menuitem menu:id=".uno:RecentFileList"/>
       <menu:menuitem menu:id=".uno:CloseDoc"/>
       <menu:menuseparator/>
commit bd8d62c0dacd6cebaf78d2522d37595114864628
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Fri Jul 17 09:34:06 2015 +0200

    Separator should not be the default selection
    
    Change-Id: Id879e795d3b6722ca0d86f8f6a8a32b0ef6f12bd

diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx b/svtools/source/dialogs/PlaceEditDialog.cxx
index 482b763..15034dd 100644
--- a/svtools/source/dialogs/PlaceEditDialog.cxx
+++ b/svtools/source/dialogs/PlaceEditDialog.cxx
@@ -140,7 +140,6 @@ void PlaceEditDialog::InitDetails( )
     bool bSkipOneDrive= OUString( ONEDRIVE_CLIENT_ID ).isEmpty() ||
                        OUString( ONEDRIVE_CLIENT_SECRET ).isEmpty();
 
-
     Sequence< OUString > aTypesUrlsList( officecfg::Office::Common::Misc::CmisServersUrls::get( xContext ) );
     Sequence< OUString > aTypesNamesList( officecfg::Office::Common::Misc::CmisServersNames::get( xContext ) );
 
@@ -182,6 +181,10 @@ void PlaceEditDialog::InitDetails( )
 
     // Set default to first value
     m_pLBServerType->SelectEntryPos( 0 );
+
+    if ( m_pLBServerType->GetSelectEntry() == "--------------------" )
+        m_pLBServerType->SelectEntryPos( 1 );
+
     SelectTypeHdl( m_pLBServerType );
 }
 
commit 0aa1e24c6b5fe1f788b53807f08a9bd011b6efc1
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Fri Jul 17 08:46:31 2015 +0200

    question if delete the service
    
    Change-Id: I49e5a93ba1d58b898ec1c7b9a4682c9e86302bd0

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 2fabadc..86be522 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -581,21 +581,26 @@ IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton,
 
         if( nPos >= 0 )
         {
-            // TODO: Confirm dialog
-
-            m_aServices.erase( m_aServices.begin() + nPos );
-            m_pServices_lb->RemoveEntry( nSelected );
+            OUString sMsg = ResId( STR_SVT_DELETESERVICE, *ResMgrHolder::getOrCreate() );
+            sMsg = sMsg.replaceFirst( "$servicename$", m_pServices_lb->GetSelectEntry() );
+            ScopedVclPtrInstance< MessageDialog > aBox( this, sMsg, VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO );
 
-            if( m_pServices_lb->GetEntryCount() > 0 )
+            if( aBox->Execute() == RET_YES )
             {
-                m_pServices_lb->SelectEntryPos( 0 );
-            }
-            else
-            {
-                m_pServices_lb->SetNoSelection();
-            }
+                m_aServices.erase( m_aServices.begin() + nPos );
+                m_pServices_lb->RemoveEntry( nSelected );
 
-            m_bIsUpdated = true;
+                if( m_pServices_lb->GetEntryCount() > 0 )
+                {
+                    m_pServices_lb->SelectEntryPos( 0 );
+                }
+                else
+                {
+                    m_pServices_lb->SetNoSelection();
+                }
+
+                m_bIsUpdated = true;
+            }
         }
     }
 
diff --git a/fpicker/source/office/iodlg.src b/fpicker/source/office/iodlg.src
index e09fe0b..bc43b98 100644
--- a/fpicker/source/office/iodlg.src
+++ b/fpicker/source/office/iodlg.src
@@ -105,6 +105,11 @@ String STR_SVT_ALREADYEXISTOVERWRITE
     Text [ en-US ] = "A file named \"$filename$\" already exists.\n\nDo you want to replace it?" ;
 };
 
+String STR_SVT_DELETESERVICE
+{
+    Text [ en-US ] = "Are you sure you want to delete the service?\n\"$servicename$\"" ;
+};
+
 String STR_SVT_NEW_FOLDER
 {
     Text [ en-US ] = "Folder" ;
diff --git a/include/vcl/fpicker.hrc b/include/vcl/fpicker.hrc
index 387b389..7d4bd16 100644
--- a/include/vcl/fpicker.hrc
+++ b/include/vcl/fpicker.hrc
@@ -27,6 +27,7 @@
 #define STR_SVT_FOLDERPICKER_DEFAULT_TITLE          (STR_SVT_FILEPICKER_START+12)
 #define STR_SVT_FOLDERPICKER_DEFAULT_DESCRIPTION    (STR_SVT_FILEPICKER_START+13)
 #define STR_SVT_ALREADYEXISTOVERWRITE               (STR_SVT_FILEPICKER_START+14)
+#define STR_SVT_DELETESERVICE                       (STR_SVT_FILEPICKER_START+15)
 
 #endif
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit bb7c3821208feef6cf713591a9805e4118dd7554
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Jul 21 16:36:26 2015 +0200

    unit test for MATCH ReferenceOrForceArray parameter
    
    Change-Id: I534480411d6c164f9f0955933b612c1a219402fd

diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 0e562d7..8610c54 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -4263,6 +4263,25 @@ void Test::testFuncMATCH()
         CPPUNIT_ASSERT_EQUAL(OUString("6"), m_pDoc->GetString(ScAddress(1,0,0)));
     }
 
+    {
+        // Test the ReferenceOrForceArray parameter.
+
+        clearRange(m_pDoc, ScRange(0,0,0,1,7,0));
+
+        // B1:B5 contain numeric values.
+        m_pDoc->SetValue(ScAddress(1,0,0), 1.0);
+        m_pDoc->SetValue(ScAddress(1,1,0), 2.0);
+        m_pDoc->SetValue(ScAddress(1,2,0), 3.0);
+        m_pDoc->SetValue(ScAddress(1,3,0), 4.0);
+        m_pDoc->SetValue(ScAddress(1,4,0), 5.0);
+
+        // Find string value "33" in concatenated array, no implicit
+        // intersection is involved, array is forced.
+        m_pDoc->SetString(ScAddress(0,5,0), "=MATCH(\"33\";B1:B5&B1:B5)");
+        m_pDoc->CalcAll();
+        CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc->GetValue(ScAddress(0,5,0)));
+    }
+
     m_pDoc->DeleteTab(0);
 }
 
commit 74cc3fbc17235f5c0010c363342a9a9adaf85c4e
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Tue Jul 21 10:58:39 2015 +0300

    tdf#36796 Status updates for custom shapes buttons
    
    We're dealing here with 2 bugs:
    
    1. Single shape buttons (like rectangle, ellipse etc.) don't get
       the pressed state when active. The cause is that all commands of
       the same kind (Basic Shapes, Symbol Shapes etc.) are handled as
       one internally, allowing only one type of status updates. It used
       to transport the current active shape, but it was changed to a
       boolean value in the fix for i#41753, and since then used for
       the pressed state of the group buttons.
    
    2. The pressed state of a group button shows always, even when a
       user activates a shape from a place other than the drop-down
       of that button. But in this case the image of the group button
       doesn't update with the current shape, thus confusing the user on
       what is currently active. The cause here is that we use (since
       i#41753) the XSubToolbarController interface to update the last
       selected function (instead of the old-style status based update),
       and ToolBarManager notifies a controller about a new selection
       only if it was made from a particular toolbar that the controller
       claimed to use in the getSubToolbarName method.
    
       Since 7352a7c17875e5adcc4226c45f4a03e11c44ff49 there is a similar
       regression for other group buttons in sd (like lines, 3D Objects
       and other), with the same cause. This is also fixed now.
    
    Change-Id: Ida074a001ff78bf5bd5bcb8151516daa6e27cbce

diff --git a/framework/source/uielement/subtoolbarcontroller.cxx b/framework/source/uielement/subtoolbarcontroller.cxx
index 63a0984..3a06a10 100644
--- a/framework/source/uielement/subtoolbarcontroller.cxx
+++ b/framework/source/uielement/subtoolbarcontroller.cxx
@@ -102,6 +102,8 @@ SubToolBarController::SubToolBarController( const css::uno::Sequence< css::uno::
             break;
         }
     }
+    if ( !m_aLastCommand.isEmpty() )
+        addStatusListener( m_aLastCommand );
 }
 
 SubToolBarController::~SubToolBarController()
@@ -131,32 +133,41 @@ void SubToolBarController::statusChanged( const css::frame::FeatureStateEvent& E
     sal_uInt16 nId = 0;
     if ( getToolboxId( nId, &pToolBox ) )
     {
-        pToolBox->EnableItem( nId, Event.IsEnabled );
         ToolBoxItemBits nItemBits = pToolBox->GetItemBits( nId );
         nItemBits &= ~ToolBoxItemBits::CHECKABLE;
         TriState eTri = TRISTATE_FALSE;
 
-        bool bValue;
-        css::frame::status::ItemStatus aItemState;
-        css::frame::status::Visibility aItemVisibility;
-
-        if ( Event.State >>= bValue )
-        {
-            // Boolean, treat it as checked/unchecked
-            pToolBox->SetItemBits( nId, nItemBits );
-            pToolBox->CheckItem( nId, bValue );
-            if ( bValue )
-                eTri = TRISTATE_TRUE;
-            nItemBits |= ToolBoxItemBits::CHECKABLE;
-        }
-        else if ( Event.State >>= aItemState )
+        if ( Event.FeatureURL.Complete == m_aCommandURL )
         {
-            eTri = TRISTATE_INDET;
-            nItemBits |= ToolBoxItemBits::CHECKABLE;
+            pToolBox->EnableItem( nId, Event.IsEnabled );
+
+            OUString aStrValue;
+            css::frame::status::Visibility aItemVisibility;
+            if ( Event.State >>= aStrValue )
+            {
+                // Enum command, such as the current custom shape,
+                // toggle checked state.
+                if ( m_aLastCommand == OUString( m_aCommandURL + "." + aStrValue ) )
+                {
+                    eTri = TRISTATE_TRUE;
+                    nItemBits |= ToolBoxItemBits::CHECKABLE;
+                }
+            }
+            else if ( Event.State >>= aItemVisibility )
+            {
+                pToolBox->ShowItem( nId, aItemVisibility.bVisible );
+            }
         }
-        else if ( Event.State >>= aItemVisibility )
+        else
         {
-            pToolBox->ShowItem( nId, aItemVisibility.bVisible );
+            bool bValue;
+            if ( Event.State >>= bValue )
+            {
+                // Boolean, treat it as checked/unchecked
+                if ( bValue )
+                    eTri = TRISTATE_TRUE;
+                nItemBits |= ToolBoxItemBits::CHECKABLE;
+            }
         }
 
         pToolBox->SetItemState( nId, eTri );
@@ -261,9 +272,11 @@ OUString SubToolBarController::getSubToolbarName()
 void SubToolBarController::functionSelected( const OUString& rCommand )
     throw ( css::uno::RuntimeException, std::exception )
 {
-    if ( !m_aLastCommand.isEmpty() )
+    if ( !m_aLastCommand.isEmpty() && m_aLastCommand != rCommand )
     {
+        removeStatusListener( m_aLastCommand );
         m_aLastCommand = rCommand;
+        addStatusListener( m_aLastCommand );
         updateImage();
     }
 }
diff --git a/sc/source/ui/view/tabvwsh2.cxx b/sc/source/ui/view/tabvwsh2.cxx
index 6bf6439..6e22952 100644
--- a/sc/source/ui/view/tabvwsh2.cxx
+++ b/sc/source/ui/view/tabvwsh2.cxx
@@ -440,7 +440,7 @@ void ScTabViewShell::GetDrawState(SfxItemSet &rSet)
             case SID_DRAWTBX_CS_FLOWCHART:
             case SID_DRAWTBX_CS_CALLOUT:
             case SID_DRAWTBX_CS_STAR:
-                rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == nWhich ) );
+                rSet.Put( SfxStringItem( nWhich, nDrawSfxId == nWhich ? sDrawCustom : OUString() ) );
             break;
         }
         nWhich = aIter.NextWhich();
diff --git a/sd/sdi/sdraw.sdi b/sd/sdi/sdraw.sdi
index 4a02435..d91e21b 100644
--- a/sd/sdi/sdraw.sdi
+++ b/sd/sdi/sdraw.sdi
@@ -16,7 +16,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-SfxBoolItem AdvancedMode SID_OBJECT_CHOOSE_MODE
+SfxVoidItem AdvancedMode SID_OBJECT_CHOOSE_MODE
 
 [
     /* flags: */
@@ -196,7 +196,7 @@ SfxUInt16Item AnimatorState SID_ANIMATOR_STATE
     GroupId = GID_OPTIONS;
 ]
 
-SfxBoolItem ArrowsToolbox SID_DRAWTBX_ARROWS
+SfxVoidItem ArrowsToolbox SID_DRAWTBX_ARROWS
 
 [
     /* flags: */
@@ -250,7 +250,7 @@ SfxVoidItem BeforeObject SID_BEFORE_OBJ
 ()
 [
     /* flags: */
-    AutoUpdate = FALSE,
+    AutoUpdate = TRUE,
     Cachable = Cachable,
     FastCall = FALSE,
     HasCoreId = FALSE,
@@ -274,7 +274,7 @@ SfxVoidItem BehindObject SID_BEHIND_OBJ
 ()
 [
     /* flags: */
-    AutoUpdate = FALSE,
+    AutoUpdate = TRUE,
     Cachable = Cachable,
     FastCall = FALSE,
     HasCoreId = FALSE,
@@ -1292,7 +1292,7 @@ SfxBoolItem ConnectorLinesCircleStart SID_CONNECTOR_LINES_CIRCLE_START
     GroupId = GID_CONNECTOR;
 ]
 
-SfxBoolItem ConnectorToolbox SID_DRAWTBX_CONNECTORS
+SfxVoidItem ConnectorToolbox SID_DRAWTBX_CONNECTORS
 
 [
     /* flags: */
@@ -2157,7 +2157,7 @@ SfxBoolItem CustomAnimationSchemes SID_CUSTOM_ANIMATION_SCHEMES_PANEL
     GroupId = GID_OPTIONS;
 ]
 
-SfxBoolItem EllipseToolbox SID_DRAWTBX_ELLIPSES
+SfxVoidItem EllipseToolbox SID_DRAWTBX_ELLIPSES
 
 [
     /* flags: */
@@ -3889,7 +3889,7 @@ SfxVoidItem LineTo SID_LINETO
     GroupId = GID_DRAWING;
 ]
 
-SfxBoolItem LineToolbox SID_DRAWTBX_LINES
+SfxVoidItem LineToolbox SID_DRAWTBX_LINES
 
 [
     /* flags: */
@@ -4516,7 +4516,7 @@ SfxBoolItem NotesMode SID_NOTESMODE
     GroupId = GID_VIEW;
 ]
 
-SfxBoolItem ObjectPosition SID_POSITION
+SfxVoidItem ObjectPosition SID_POSITION
 
 [
     /* flags: */
@@ -4542,7 +4542,7 @@ SfxBoolItem ObjectPosition SID_POSITION
     GroupId = GID_MODIFY;
 ]
 
-SfxBoolItem Objects3DToolbox SID_DRAWTBX_3D_OBJECTS
+SfxVoidItem Objects3DToolbox SID_DRAWTBX_3D_OBJECTS
 
 [
     /* flags: */
@@ -5195,7 +5195,7 @@ SfxBoolItem QuickEdit SID_QUICKEDIT
     GroupId = GID_OPTIONS;
 ]
 
-SfxBoolItem RectangleToolbox SID_DRAWTBX_RECTANGLES
+SfxVoidItem RectangleToolbox SID_DRAWTBX_RECTANGLES
 
 [
     /* flags: */
@@ -5994,7 +5994,7 @@ SfxBoolItem TextAutoFitToSize SID_OUTLINE_TEXT_AUTOFIT
     GroupId = GID_FORMAT;
 ]
 
-SfxBoolItem TextToolbox SID_DRAWTBX_TEXT
+SfxVoidItem TextToolbox SID_DRAWTBX_TEXT
 
 [
     /* flags: */
diff --git a/sd/source/ui/func/fuconcs.cxx b/sd/source/ui/func/fuconcs.cxx
index af30ec2..53a31f8 100644
--- a/sd/source/ui/func/fuconcs.cxx
+++ b/sd/source/ui/func/fuconcs.cxx
@@ -258,6 +258,11 @@ void FuConstructCustomShape::SetAttributes( SdrObject* pObj )
     }
 }
 
+OUString FuConstructCustomShape::GetShapeType() const
+{
+    return aCustomShape;
+}
+
 SdrObject* FuConstructCustomShape::CreateDefaultObject(const sal_uInt16, const Rectangle& rRectangle)
 {
     SdrObject* pObj = SdrObjFactory::MakeNewObject(
diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx
index b2d2d10..b3eefc1 100644
--- a/sd/source/ui/inc/DrawViewShell.hxx
+++ b/sd/source/ui/inc/DrawViewShell.hxx
@@ -420,7 +420,6 @@ protected:
     void            SetupPage( Size &rSize, long nLeft, long nRight, long nUpper, long nLower,
                                bool bSize, bool bMargin, bool bScaleAll );
 
-    static sal_uInt16 GetIdBySubId( sal_uInt16 nSId );
     void            GetMenuStateSel(SfxItemSet& rSet);
 
 private:
diff --git a/sd/source/ui/inc/fuconcs.hxx b/sd/source/ui/inc/fuconcs.hxx
index 63c6b71..5e253a2 100644
--- a/sd/source/ui/inc/fuconcs.hxx
+++ b/sd/source/ui/inc/fuconcs.hxx
@@ -46,6 +46,7 @@ public:
     virtual void Activate() SAL_OVERRIDE;
 
     void SetAttributes( SdrObject* pObj );
+    OUString GetShapeType() const;
 
     virtual SdrObject* CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle) SAL_OVERRIDE;
 
diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx
index 291cff7..15731f7 100644
--- a/sd/source/ui/table/tablefunction.cxx
+++ b/sd/source/ui/table/tablefunction.cxx
@@ -190,7 +190,6 @@ void DrawViewShell::FuTable(SfxRequest& rReq)
         else
             mpView->InsertObjectAtView(pObj, *pPV, SdrInsertFlags::SETDEFLAYER);
 
-        Invalidate(SID_DRAWTBX_INSERT);
         rReq.Ignore();
         SfxViewShell* pViewShell = GetViewShell();
         OSL_ASSERT (pViewShell!=NULL);
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index 7108b35..9999d01 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -1111,7 +1111,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
             SetCurrentFunction( FuInsertGraphic::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
             Cancel();
             rReq.Ignore ();
-            Invalidate(SID_DRAWTBX_INSERT);
         }
         break;
 
@@ -1121,8 +1120,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
 
             Cancel();
             rReq.Ignore ();
-
-            Invalidate(SID_DRAWTBX_INSERT);
         }
         break;
 
@@ -1142,8 +1139,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
             SetOldFunction( FuSelection::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
             Cancel();
             rReq.Ignore ();
-
-            Invalidate(SID_DRAWTBX_INSERT);
         }
         break;
 #if HAVE_FEATURE_GLTF
@@ -1153,8 +1148,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
 
             Cancel();
             rReq.Ignore ();
-
-            Invalidate(SID_DRAWTBX_INSERT);
         }
         break;
 #endif
@@ -1187,8 +1180,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
             Broadcast (ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END));
             Cancel();
             rReq.Done ();
-
-            Invalidate(SID_DRAWTBX_INSERT);
         }
         break;
 
@@ -1205,8 +1196,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         case SID_BEHIND_OBJ:
         {
             SetCurrentFunction( FuDisplayOrder::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
-            Invalidate( SID_POSITION );
-            rReq.Ignore ();
+            rReq.Done();
             // finishes itself, no Cancel() needed!
         }
         break;
@@ -1214,7 +1204,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         case SID_REVERSE_ORDER:   // BASIC
         {
             mpDrawView->ReverseOrderOfMarked();
-            Invalidate( SID_POSITION );
             Cancel();
             rReq.Done ();
         }
@@ -2421,7 +2410,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         {
             mpDrawView->PutMarkedToTop();
             Cancel();
-            Invalidate( SID_POSITION );
             rReq.Done ();
         }
         break;
@@ -2430,7 +2418,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         {
             mpDrawView->MovMarkedToTop();
             Cancel();
-            Invalidate( SID_POSITION );
             rReq.Done ();
         }
         break;
@@ -2439,7 +2426,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         {
             mpDrawView->MovMarkedToBtm();
             Cancel();
-            Invalidate( SID_POSITION );
             rReq.Done ();
         }
         break;
@@ -2448,7 +2434,6 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
         {
             mpDrawView->PutMarkedToBtm();
             Cancel();
-            Invalidate( SID_POSITION );
             rReq.Done ();
         }
         break;
diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx
index ca5023b..b773cff 100644
--- a/sd/source/ui/view/drviews7.cxx
+++ b/sd/source/ui/view/drviews7.cxx
@@ -82,6 +82,7 @@
 #include "Window.hxx"
 #include "fuediglu.hxx"
 #include "fubullet.hxx"
+#include "fuconcs.hxx"
 #include "fuformatpaintbrush.hxx"
 
 #include <config_features.h>
@@ -278,11 +279,7 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet )
     if(HasCurrentFunction())
     {
         sal_uInt16 nSId = GetCurrentFunction()->GetSlotID();
-        sal_uInt16 nMainId = GetIdBySubId( nSId );
-
         rSet.Put( SfxBoolItem( nSId, true ) );
-        if ( nMainId != 0 )
-            rSet.Put( SfxBoolItem( nMainId, true ) );
     }
 
     SdrPageView* pPageView = mpDrawView->GetSdrPageView();
@@ -1047,7 +1044,6 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet )
             nCurrentSId = SID_ATTR_CHAR;
 
         rSet.Put( SfxBoolItem( nCurrentSId, true ) );
-        rSet.Put( SfxBoolItem( SID_DRAWTBX_TEXT, true ) );
     }
 
     if ( GetDocSh()->IsReadOnly() )
@@ -1334,20 +1330,8 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet )
 
         if( xSlideshow.is() && xSlideshow->isRunning() )
         {
-            rSet.ClearItem(SID_ZOOM_TOOLBOX);
-            rSet.ClearItem(SID_OBJECT_CHOOSE_MODE);
-            rSet.ClearItem(SID_DRAWTBX_TEXT);
-            rSet.ClearItem(SID_DRAWTBX_RECTANGLES);
-            rSet.ClearItem(SID_DRAWTBX_ELLIPSES);
-            rSet.ClearItem(SID_DRAWTBX_LINES);
-            rSet.ClearItem(SID_DRAWTBX_ARROWS);
-            rSet.ClearItem(SID_DRAWTBX_3D_OBJECTS);
-            rSet.ClearItem(SID_DRAWTBX_CONNECTORS);
-            rSet.ClearItem(SID_OBJECT_CHOOSE_MODE );
-            rSet.ClearItem(SID_DRAWTBX_INSERT);
             rSet.ClearItem(SID_INSERTFILE);
             rSet.ClearItem(SID_OBJECT_ROTATE);
-            rSet.ClearItem(SID_POSITION);
             rSet.ClearItem(SID_FM_CONFIG);
             rSet.ClearItem(SID_ANIMATION_EFFECTS);
             rSet.ClearItem(SID_ANIMATION_OBJECTS);
@@ -1538,22 +1522,23 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet )
 
     //highlight selected custom shape
     {
-        sal_uInt16 nCurrentSId = 0;
         if(HasCurrentFunction())
-            nCurrentSId = GetCurrentFunction()->GetSlotID();
+        {
+            rtl::Reference< FuPoor > xFunc( GetCurrentFunction() );
+            FuConstructCustomShape* pShapeFunc = dynamic_cast< FuConstructCustomShape* >( xFunc.get() );
+
+            static const sal_uInt16 nCSTbArray[] = { SID_DRAWTBX_CS_BASIC, SID_DRAWTBX_CS_SYMBOL,
+                                                     SID_DRAWTBX_CS_ARROW, SID_DRAWTBX_CS_FLOWCHART,
+                                                     SID_DRAWTBX_CS_CALLOUT, SID_DRAWTBX_CS_STAR };
 
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_BASIC ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_BASIC, SID_DRAWTBX_CS_BASIC == nCurrentSId ));
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_SYMBOL ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_SYMBOL, SID_DRAWTBX_CS_SYMBOL == nCurrentSId ));
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_ARROW ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_ARROW, SID_DRAWTBX_CS_ARROW == nCurrentSId ));
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_FLOWCHART ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_FLOWCHART, SID_DRAWTBX_CS_FLOWCHART == nCurrentSId ));
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_CALLOUT ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_CALLOUT,SID_DRAWTBX_CS_CALLOUT == nCurrentSId ));
-        if ( SfxItemState::DEFAULT == rSet.GetItemState( SID_DRAWTBX_CS_STAR ) )
-            rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_STAR, SID_DRAWTBX_CS_STAR == nCurrentSId ));
+            const sal_uInt16 nCurrentSId = GetCurrentFunction()->GetSlotID();
+            for ( size_t i = 0; i < SAL_N_ELEMENTS( nCSTbArray ); ++i )
+            {
+                rSet.ClearItem( nCSTbArray[i] ); // Why is this necessary?
+                rSet.Put( SfxStringItem( nCSTbArray[i], nCurrentSId == nCSTbArray[i] && pShapeFunc
+                                         ? pShapeFunc->GetShapeType() : OUString() ) );
+            }
+        }
     }
 
     if ( bDisableEditHyperlink || GetDocSh()->IsReadOnly() )
diff --git a/sd/source/ui/view/drviewsc.cxx b/sd/source/ui/view/drviewsc.cxx
index 78afdcf..6195735 100644
--- a/sd/source/ui/view/drviewsc.cxx
+++ b/sd/source/ui/view/drviewsc.cxx
@@ -51,161 +51,6 @@
 #include "sdabstdlg.hxx"
 namespace sd {
 
-/**
- * Returns the ID of the group button, if it should be toggled.
- */
-sal_uInt16 DrawViewShell::GetIdBySubId( sal_uInt16 nSId )
-{
-    sal_uInt16 nMappedSId = 0;
-    switch( nSId )
-    {
-        case SID_OBJECT_ROTATE:
-        case SID_OBJECT_MIRROR:
-        case SID_OBJECT_TRANSPARENCE:
-        case SID_OBJECT_GRADIENT:
-        case SID_OBJECT_SHEAR:
-        case SID_OBJECT_CROOK_ROTATE:
-        case SID_OBJECT_CROOK_SLANT:
-        case SID_OBJECT_CROOK_STRETCH:
-        case SID_CONVERT_TO_3D_LATHE:
-        {
-            nMappedSId = SID_OBJECT_CHOOSE_MODE;
-        }
-        break;
-
-        case SID_BEFORE_OBJ:
-        case SID_BEHIND_OBJ:
-        {
-            nMappedSId = SID_POSITION;
-        }
-        break;
-
-        case SID_ZOOM_PANNING:
-        case SID_ZOOM_MODE:
-        {
-            nMappedSId = SID_ZOOM_TOOLBOX;
-        }
-        break;
-
-        case SID_ATTR_CHAR:
-        case SID_TEXT_FITTOSIZE:
-        case SID_DRAW_CAPTION:
-        case SID_DRAW_FONTWORK:
-        case SID_DRAW_FONTWORK_VERTICAL:
-        {
-            nMappedSId = SID_DRAWTBX_TEXT;
-        }
-        break;
-
-        case SID_DRAW_RECT:
-        case SID_DRAW_SQUARE:
-        case SID_DRAW_RECT_ROUND:
-        case SID_DRAW_SQUARE_ROUND:
-        case SID_DRAW_RECT_NOFILL:
-        case SID_DRAW_SQUARE_NOFILL:
-        case SID_DRAW_RECT_ROUND_NOFILL:
-        case SID_DRAW_SQUARE_ROUND_NOFILL:
-        {
-            nMappedSId = SID_DRAWTBX_RECTANGLES;
-        }
-        break;
-
-        case SID_DRAW_ELLIPSE:
-        case SID_DRAW_CIRCLE:
-        case SID_DRAW_PIE:
-        case SID_DRAW_CIRCLEPIE:
-        case SID_DRAW_ELLIPSECUT:
-        case SID_DRAW_CIRCLECUT:
-        case SID_DRAW_ARC:
-        case SID_DRAW_CIRCLEARC:
-        case SID_DRAW_ELLIPSE_NOFILL:
-        case SID_DRAW_CIRCLE_NOFILL:
-        case SID_DRAW_PIE_NOFILL:
-        case SID_DRAW_CIRCLEPIE_NOFILL:
-        case SID_DRAW_ELLIPSECUT_NOFILL:
-        case SID_DRAW_CIRCLECUT_NOFILL:
-        {
-            nMappedSId = SID_DRAWTBX_ELLIPSES;
-        }
-        break;
-
-        case SID_DRAW_BEZIER_NOFILL:
-        case SID_DRAW_POLYGON_NOFILL:
-        case SID_DRAW_XPOLYGON_NOFILL:
-        case SID_DRAW_FREELINE_NOFILL:
-        case SID_DRAW_BEZIER_FILL:
-        case SID_DRAW_POLYGON:
-        case SID_DRAW_XPOLYGON:
-        case SID_DRAW_FREELINE:
-        {
-            nMappedSId = SID_DRAWTBX_LINES;
-        }
-        break;
-
-        case SID_DRAW_LINE:
-        case SID_DRAW_XLINE:
-        case SID_DRAW_MEASURELINE:
-        case SID_LINE_ARROW_START:
-        case SID_LINE_ARROW_END:
-        case SID_LINE_ARROWS:
-        case SID_LINE_ARROW_CIRCLE:
-        case SID_LINE_CIRCLE_ARROW:
-        case SID_LINE_ARROW_SQUARE:
-        case SID_LINE_SQUARE_ARROW:
-        {
-            nMappedSId = SID_DRAWTBX_ARROWS;
-        }
-        break;
-
-        case SID_3D_CUBE:
-        case SID_3D_TORUS:
-        case SID_3D_SPHERE:
-        case SID_3D_SHELL:
-        case SID_3D_HALF_SPHERE:
-        case SID_3D_CYLINDER:
-        case SID_3D_CONE:
-        case SID_3D_PYRAMID:
-        {
-            nMappedSId = SID_DRAWTBX_3D_OBJECTS;
-        }
-        break;
-
-        case SID_TOOL_CONNECTOR:
-        case SID_CONNECTOR_ARROW_START:
-        case SID_CONNECTOR_ARROW_END:
-        case SID_CONNECTOR_ARROWS:
-        case SID_CONNECTOR_CIRCLE_START:
-        case SID_CONNECTOR_CIRCLE_END:
-        case SID_CONNECTOR_CIRCLES:
-        case SID_CONNECTOR_LINE:
-        case SID_CONNECTOR_LINE_ARROW_START:
-        case SID_CONNECTOR_LINE_ARROW_END:
-        case SID_CONNECTOR_LINE_ARROWS:
-        case SID_CONNECTOR_LINE_CIRCLE_START:
-        case SID_CONNECTOR_LINE_CIRCLE_END:
-        case SID_CONNECTOR_LINE_CIRCLES:
-        case SID_CONNECTOR_CURVE:
-        case SID_CONNECTOR_CURVE_ARROW_START:
-        case SID_CONNECTOR_CURVE_ARROW_END:
-        case SID_CONNECTOR_CURVE_ARROWS:
-        case SID_CONNECTOR_CURVE_CIRCLE_START:
-        case SID_CONNECTOR_CURVE_CIRCLE_END:
-        case SID_CONNECTOR_CURVE_CIRCLES:
-        case SID_CONNECTOR_LINES:
-        case SID_CONNECTOR_LINES_ARROW_START:
-        case SID_CONNECTOR_LINES_ARROW_END:
-        case SID_CONNECTOR_LINES_ARROWS:
-        case SID_CONNECTOR_LINES_CIRCLE_START:
-        case SID_CONNECTOR_LINES_CIRCLE_END:
-        case SID_CONNECTOR_LINES_CIRCLES:
-        {
-            nMappedSId = SID_DRAWTBX_CONNECTORS;
-        }
-    }
-    return nMappedSId;
-}
-
-
 void DrawViewShell::UpdateIMapDlg( SdrObject* pObj )
 {
     if( ( pObj->ISA( SdrGrafObj ) || pObj->ISA( SdrOle2Obj ) ) && !mpDrawView->IsTextEdit() &&
diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx
index 70cd2f6..0eb9f29 100644
--- a/sd/source/ui/view/drviewse.cxx
+++ b/sd/source/ui/view/drviewse.cxx
@@ -1133,7 +1133,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
             Invalidate( SID_ZOOM_IN );
             Invalidate( SID_ZOOM_OUT );
             Invalidate( SID_ZOOM_PANNING );
-            Invalidate( SID_ZOOM_TOOLBOX );
             rReq.Done ();
         }
         break;
@@ -1148,7 +1147,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
             Invalidate( SID_ZOOM_IN );
             Invalidate( SID_ZOOM_OUT );
             Invalidate( SID_ZOOM_PANNING );
-            Invalidate( SID_ZOOM_TOOLBOX );
             rReq.Done ();
         }
         break;
@@ -1163,7 +1161,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
             Invalidate( SID_ZOOM_IN );
             Invalidate( SID_ZOOM_OUT );
             Invalidate( SID_ZOOM_PANNING );
-            Invalidate( SID_ZOOM_TOOLBOX );
             rReq.Done ();
         }
         break;
@@ -1177,7 +1174,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
             mpZoomList->InsertZoomRect(aVisAreaWin);
             Invalidate( SID_ZOOM_IN );
             Invalidate( SID_ZOOM_PANNING );
-            Invalidate( SID_ZOOM_TOOLBOX );
             rReq.Done ();
         }
         break;
@@ -1194,7 +1190,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
                 Invalidate( SID_ZOOM_IN );
                 Invalidate( SID_ZOOM_OUT );
                 Invalidate( SID_ZOOM_PANNING );
-                Invalidate( SID_ZOOM_TOOLBOX );
             }
             rReq.Done ();
         }
@@ -1225,7 +1220,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
             Invalidate( SID_ZOOM_IN );
             Invalidate( SID_ZOOM_OUT );
             Invalidate( SID_ZOOM_PANNING );
-            Invalidate( SID_ZOOM_TOOLBOX );
             rReq.Done ();
         }
         break;
@@ -1258,7 +1252,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
                 Invalidate( SID_ZOOM_IN );
                 Invalidate( SID_ZOOM_OUT );
                 Invalidate( SID_ZOOM_PANNING );
-                Invalidate( SID_ZOOM_TOOLBOX );
             }
             rReq.Done ();
         }
@@ -1277,7 +1270,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
                 SetZoomRect(mpZoomList->GetPreviousZoomRect());
             }
             rReq.Done ();
-            Invalidate( SID_ZOOM_TOOLBOX );
         }
         break;
 
@@ -1294,7 +1286,6 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
                 SetZoomRect(mpZoomList->GetNextZoomRect());
             }
             rReq.Done ();
-            Invalidate( SID_ZOOM_TOOLBOX );
         }
         break;
 
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 04f61b7..e207e8b 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -6668,7 +6668,7 @@ SfxVoidItem ZoomPrevious SID_ZOOM_PREV
 ]
 
 
-SfxBoolItem ZoomToolBox SID_ZOOM_TOOLBOX
+SfxVoidItem ZoomToolBox SID_ZOOM_TOOLBOX
 
 [
     /* flags: */
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index fe52a8c..91a7662 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -14174,7 +14174,7 @@ SfxBoolItem BasicShapes SID_DRAWTBX_CS_BASIC
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
@@ -14202,7 +14202,7 @@ SfxBoolItem SymbolShapes SID_DRAWTBX_CS_SYMBOL
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
@@ -14230,7 +14230,7 @@ SfxBoolItem ArrowShapes SID_DRAWTBX_CS_ARROW
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
@@ -14258,7 +14258,7 @@ SfxBoolItem FlowChartShapes SID_DRAWTBX_CS_FLOWCHART
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
@@ -14286,7 +14286,7 @@ SfxBoolItem CalloutShapes SID_DRAWTBX_CS_CALLOUT
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
@@ -14314,7 +14314,7 @@ SfxBoolItem StarShapes SID_DRAWTBX_CS_STAR
     Synchron;
 
     /* status: */
-    SlotType = SfxBoolItem
+    SlotType = SfxStringItem
 
     /* config: */
     AccelConfig = TRUE,
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index 43b0c0f..be077fd 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -520,7 +520,7 @@ void SwView::GetDrawState(SfxItemSet &rSet)
             if ( bWeb )
                 rSet.DisableItem( nWhich );
             else
-                rSet.Put( SfxBoolItem( nWhich, m_nDrawSfxId == nWhich ) );
+                rSet.Put( SfxStringItem( nWhich, m_nDrawSfxId == nWhich ? m_sDrawCustom : OUString() ) );
         }
         break;
 
commit 3c7a7b538e8ca8b310ae9778ae9ace5ae937a4f1
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Mon Jul 20 20:34:31 2015 +0300

    Simplify
    
    Change-Id: I6fff5af5d623bff6f8adedf6f3d42d849ea4d24b

diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx
index 3a2536d..ce3c4a5 100644
--- a/sc/source/ui/inc/tabvwsh.hxx
+++ b/sc/source/ui/inc/tabvwsh.hxx
@@ -168,9 +168,6 @@ private:
 
     SfxBroadcaster*         pAccessibilityBroadcaster;
 
-    static const int        MASTERENUMCOMMANDS = 6;
-    OUString                aCurrShapeEnumCommand[ MASTERENUMCOMMANDS ];
-
     // ugly hack for Add button in ScNameDlg
     boost::ptr_map<OUString, ScRangeName> maRangeMap;
     bool    mbInSwitch;
diff --git a/sc/source/ui/view/tabvwsh2.cxx b/sc/source/ui/view/tabvwsh2.cxx
index fefe124..6bf6439 100644
--- a/sc/source/ui/view/tabvwsh2.cxx
+++ b/sc/source/ui/view/tabvwsh2.cxx
@@ -310,7 +310,6 @@ void ScTabViewShell::ExecDraw(SfxRequest& rReq)
                 SFX_REQUEST_ARG( rReq, pEnumCommand, SfxStringItem, nNewId, false );
                 if ( pEnumCommand )
                 {
-                    aCurrShapeEnumCommand[ nNewId - SID_DRAWTBX_CS_BASIC ] = pEnumCommand->GetValue();
                     SfxBindings& rBind = GetViewFrame()->GetBindings();
                     rBind.Invalidate( nNewId );
                     rBind.Update( nNewId );
@@ -441,10 +440,7 @@ void ScTabViewShell::GetDrawState(SfxItemSet &rSet)
             case SID_DRAWTBX_CS_FLOWCHART:
             case SID_DRAWTBX_CS_CALLOUT:
             case SID_DRAWTBX_CS_STAR:
-            {
-                bool bCurrentActive = (nDrawSfxId == nWhich) && (aCurrShapeEnumCommand[ nWhich - SID_DRAWTBX_CS_BASIC ] == sDrawCustom);
-                rSet.Put( SfxBoolItem( nWhich, bCurrentActive ) );
-            }
+                rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == nWhich ) );
             break;
         }
         nWhich = aIter.NextWhich();
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index cd7114f..1c09a8b 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -218,11 +218,6 @@ class SW_DLLPUBLIC SwView: public SfxViewShell
 
     int                 m_nSelectionType;
     VclPtr<FloatingWindow> m_pFieldPopup;
-
-    static const int m_nMASTERENUMCOMMANDS = 6;
-
-    OUString            m_aCurrShapeEnumCommand[ m_nMASTERENUMCOMMANDS ];
-
     sal_uInt16          m_nPageCnt;
 
     // current draw mode
diff --git a/sw/source/uibase/uiview/viewdraw.cxx b/sw/source/uibase/uiview/viewdraw.cxx
index b81cf88..d342512 100644
--- a/sw/source/uibase/uiview/viewdraw.cxx
+++ b/sw/source/uibase/uiview/viewdraw.cxx
@@ -320,7 +320,6 @@ void SwView::ExecDraw(SfxRequest& rReq)
                 if ( pStringItem )
                 {
                     m_sDrawCustom = pStringItem->GetValue();
-                    m_aCurrShapeEnumCommand[ nSlotId - SID_DRAWTBX_CS_BASIC ] = m_sDrawCustom;
                     SfxBindings& rBind = GetViewFrame()->GetBindings();
                     rBind.Invalidate( nSlotId );
                     rBind.Update( nSlotId );
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index a7d2c16..43b0c0f 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -520,10 +520,7 @@ void SwView::GetDrawState(SfxItemSet &rSet)
             if ( bWeb )
                 rSet.DisableItem( nWhich );
             else
-            {
-                bool bCurrentActive = (m_nDrawSfxId == nWhich) && (m_aCurrShapeEnumCommand[ nWhich - SID_DRAWTBX_CS_BASIC ] == m_sDrawCustom);
-                rSet.Put( SfxBoolItem( nWhich, bCurrentActive ) );
-            }
+                rSet.Put( SfxBoolItem( nWhich, m_nDrawSfxId == nWhich ) );
         }
         break;
 
commit 01eea7fe40c939311bf1920b6e8b4391a93c2e82
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Jul 21 16:09:34 2015 +0200

    MATCH, HLOOKUP and VLOOKUP have a ReferenceOrForceArray parameter
    
    tdf#91278 related
    
    Change-Id: Iab4728b07649bcbb1beb372e68369f3762b13a5c

diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index 40e1d3f..bb19244 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -113,7 +113,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
     { ocGreaterEqual,    {{ Array, Array                                         }, 0 }},
     { ocGrowth,          {{ Reference, Reference, Reference, Value               }, 0 }},
     { ocHarMean,         {{ Reference                                            }, 1 }},
-    { ocHLookup,         {{ Value, Reference, Value, Value                       }, 0 }},
+    { ocHLookup,         {{ Value, ReferenceOrForceArray, Value, Value           }, 0 }},
     { ocIRR,             {{ Reference, Value                                     }, 0 }},
     { ocIndex,           {{ Reference, Value, Value, Value                       }, 0 }},
     { ocIntercept,       {{ ForceArray, ForceArray                               }, 0 }},
@@ -125,7 +125,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
     { ocLess,            {{ Array, Array                                         }, 0 }},
     { ocLessEqual,       {{ Array, Array                                         }, 0 }},
     { ocLookup,          {{ Value, ReferenceOrForceArray, ReferenceOrForceArray  }, 0 }},
-    { ocMatch,           {{ Value, Reference, Reference                          }, 0 }},
+    { ocMatch,           {{ Value, ReferenceOrForceArray, Value                  }, 0 }},
     { ocMatDet,          {{ ForceArray                                           }, 0 }},
     { ocMatInv,          {{ ForceArray                                           }, 0 }},
     { ocMatMult,         {{ ForceArray, ForceArray                               }, 0 }},
@@ -203,7 +203,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
     { ocVarPA,           {{ Reference                                            }, 1 }},
     { ocVarP_MS,         {{ Reference                                            }, 1 }},
     { ocVarS,            {{ Reference                                            }, 1 }},
-    { ocVLookup,         {{ Value, Reference, Value, Value                       }, 0 }},
+    { ocVLookup,         {{ Value, ReferenceOrForceArray, Value, Value           }, 0 }},
     { ocXor,             {{ Reference                                            }, 1 }},
     { ocZTest,           {{ Reference, Value, Value                              }, 0 }},
     { ocZTest_MS,        {{ Reference, Value, Value                              }, 0 }},
commit dda78fb69cda3901b1da40de206c491a871b1854
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 21 15:07:13 2015 +0100

    coverity#1312086 Out-of-bounds read
    
    Change-Id: I7885f8ba5ec4c6e60d88f6caab0c25cb760529ef

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index fb24a25..2fabadc 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -89,7 +89,7 @@ class FileViewContainer : public vcl::Window
         if( !m_pFileView || !m_pTreeView )
             return;
 
-        if( !bReverse && m_nCurrentFocus < 4 )
+        if( !bReverse && m_nCurrentFocus < 3 )
         {
             m_pFocusWidgets[++m_nCurrentFocus]->SetFakeFocus( true );
             m_pFocusWidgets[m_nCurrentFocus]->GrabFocus();
commit 5c938857c4bf69eb65b77ff3a862f50ab4a04af7
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 21 15:03:03 2015 +0100

    coverity#1312084 Unchecked return value
    
    Change-Id: I4b4b263f4448c4d3b83cea57635624b31f757576

diff --git a/connectivity/source/drivers/file/FResultSet.cxx b/connectivity/source/drivers/file/FResultSet.cxx
index 9433b1e..9f61747 100644
--- a/connectivity/source/drivers/file/FResultSet.cxx
+++ b/connectivity/source/drivers/file/FResultSet.cxx
@@ -539,7 +539,7 @@ void SAL_CALL OResultSet::insertRow(  ) throw(SQLException, RuntimeException, st
 
     // we know that we append new rows at the end
     // so we have to know where the end is
-    m_aSkipDeletedSet.skipDeleted(IResultSetHelper::LAST,1,false);
+    (void)m_aSkipDeletedSet.skipDeleted(IResultSetHelper::LAST,1,false);
     m_bRowInserted = m_pTable->InsertRow(*m_aInsertRow, true, m_xColsIdx);
     if(m_bRowInserted && m_pFileSet.is())
     {
commit 7b00ec7bb7bbf5206e7db4c566d1e681fb9f9607
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 21 15:00:53 2015 +0100

    coverity#1312085 Dereference null return value
    
    Change-Id: Ia770e7a6a7ebcc875f3cf94471dcc032aeadc2d7

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index f7316d4..fb24a25 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -631,6 +631,8 @@ IMPL_LINK_NOARG ( RemoteFilesDialog, DoubleClickHdl )
 IMPL_LINK_NOARG ( RemoteFilesDialog, SelectHdl )
 {
     SvTreeListEntry* pEntry = m_pFileView->FirstSelected();
+    if (!pEntry)
+        return 1;
     SvtContentEntry* pData = static_cast< SvtContentEntry* >( pEntry->GetUserData() );
 
     if( ( pData->mbIsFolder && ( m_eType == REMOTEDLG_TYPE_PATHDLG ) )
commit 0d312afe2d31c19dbd2388d17ddbb372d1197c1f
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 21 14:53:27 2015 +0100

    coverity#1312087 Resource leak
    
    Change-Id: I6d526440bd652dcd1745b8d84ff69855691d7e48

diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index 10fa19fa..c85b1dd 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -421,10 +421,10 @@ protected:
     Link<>                      m_aSelectHandler;
 
     ::rtl::Reference< ::svt::FileViewContentEnumerator >
-                                        m_pContentEnumerator;
+                                        m_xContentEnumerator;
     Link<>                              m_aCurrentAsyncActionHandler;
     ::osl::Condition                    m_aAsyncActionFinished;
-    ::rtl::Reference< ::salhelper::Timer > m_pCancelAsyncTimer;
+    ::rtl::Reference< ::salhelper::Timer > m_xCancelAsyncTimer;
     ::svt::EnumerationResult            m_eAsyncActionResult;
     bool                                m_bRunningAsyncAction;
     bool                                m_bAsyncActionCancelled;
@@ -1639,21 +1639,21 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
     DBG_TESTSOLARMUTEX();
     ::osl::ClearableMutexGuard aGuard( maMutex );
 
-    OSL_ENSURE( !m_pContentEnumerator.is(), "SvtFileView_Impl::GetFolderContent_Impl: still running another enumeration!" );
-    m_pContentEnumerator = new ::svt::FileViewContentEnumerator(
-        mpView->GetCommandEnvironment(), maContent, maMutex, mbReplaceNames ? mpNameTrans : NULL );
+    OSL_ENSURE( !m_xContentEnumerator.is(), "SvtFileView_Impl::GetFolderContent_Impl: still running another enumeration!" );
+    m_xContentEnumerator.set(new ::svt::FileViewContentEnumerator(
+        mpView->GetCommandEnvironment(), maContent, maMutex, mbReplaceNames ? mpNameTrans : NULL));
         // TODO: should we cache and re-use this thread?
 
     if ( !pAsyncDescriptor )
     {
-        ::svt::EnumerationResult eResult = m_pContentEnumerator->enumerateFolderContentSync( _rFolder, rBlackList );
+        ::svt::EnumerationResult eResult = m_xContentEnumerator->enumerateFolderContentSync( _rFolder, rBlackList );
         if ( ::svt::SUCCESS == eResult )
         {
             implEnumerationSuccess();
-            m_pContentEnumerator.clear();
+            m_xContentEnumerator.clear();
             return eSuccess;
         }
-        m_pContentEnumerator.clear();
+        m_xContentEnumerator.clear();
         return eFailure;
     }
 
@@ -1676,7 +1676,7 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
     pTimeout->Seconds = nMinTimeout / 1000L;
     pTimeout->Nanosec = ( nMinTimeout % 1000L ) * 1000000L;
 
-    m_pContentEnumerator->enumerateFolderContent( _rFolder, this );
+    m_xContentEnumerator->enumerateFolderContent( _rFolder, this );
 
     // wait until the enumeration is finished
     // for this, release our own mutex (which is used by the enumerator thread)
@@ -1697,16 +1697,16 @@ FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
     if ( ::osl::Condition::result_timeout == eResult )
     {
         // maximum time to wait
-        OSL_ENSURE( !m_pCancelAsyncTimer.get(), "SvtFileView_Impl::GetFolderContent_Impl: there's still a previous timer!" );
-        m_pCancelAsyncTimer = new CallbackTimer( this );
+        OSL_ENSURE( !m_xCancelAsyncTimer.get(), "SvtFileView_Impl::GetFolderContent_Impl: there's still a previous timer!" );
+        m_xCancelAsyncTimer.set(new CallbackTimer(this));
         sal_Int32 nMaxTimeout = pAsyncDescriptor->nMaxTimeout;
         OSL_ENSURE( nMaxTimeout > nMinTimeout,
             "SvtFileView_Impl::GetFolderContent_Impl: invalid maximum timeout!" );
         if ( nMaxTimeout <= nMinTimeout )
             nMaxTimeout = nMinTimeout + 5000;
-        m_pCancelAsyncTimer->setRemainingTime( salhelper::TTimeValue( nMaxTimeout - nMinTimeout ) );
+        m_xCancelAsyncTimer->setRemainingTime( salhelper::TTimeValue( nMaxTimeout - nMinTimeout ) );
             // we already waited for nMinTimeout milliseconds, so take this into account
-        m_pCancelAsyncTimer->start();
+        m_xCancelAsyncTimer->start();
 
         m_aCurrentAsyncActionHandler = pAsyncDescriptor->aFinishHandler;
         DBG_ASSERT( m_aCurrentAsyncActionHandler.IsSet(), "SvtFileView_Impl::GetFolderContent_Impl: nobody interested when it's finished?" );
@@ -1897,17 +1897,17 @@ void SvtFileView_Impl::CancelRunningAsyncAction()
 {
     DBG_TESTSOLARMUTEX();
     ::osl::MutexGuard aGuard( maMutex );
-    if ( !m_pContentEnumerator.is() )
+    if ( !m_xContentEnumerator.is() )
         return;
 
     m_bAsyncActionCancelled = true;
-    m_pContentEnumerator->cancel();
+    m_xContentEnumerator->cancel();
     m_bRunningAsyncAction = false;
 
-    m_pContentEnumerator.clear();
-    if ( m_pCancelAsyncTimer.is() && m_pCancelAsyncTimer->isTicking() )
-        m_pCancelAsyncTimer->stop();
-    m_pCancelAsyncTimer = NULL;
+    m_xContentEnumerator.clear();
+    if ( m_xCancelAsyncTimer.is() && m_xCancelAsyncTimer->isTicking() )
+        m_xCancelAsyncTimer->stop();
+    m_xCancelAsyncTimer.clear();
 }
 
 
@@ -1934,10 +1934,10 @@ void SvtFileView_Impl::enumerationDone( ::svt::EnumerationResult eResult )
     SolarMutexGuard aSolarGuard;
     ::osl::MutexGuard aGuard( maMutex );
 
-    m_pContentEnumerator.clear();
-    if ( m_pCancelAsyncTimer.is() && m_pCancelAsyncTimer->isTicking() )
-        m_pCancelAsyncTimer->stop();
-    m_pCancelAsyncTimer = NULL;
+    m_xContentEnumerator.clear();
+    if ( m_xCancelAsyncTimer.is() && m_xCancelAsyncTimer->isTicking() )
+        m_xCancelAsyncTimer->stop();
+    m_xCancelAsyncTimer.clear();
 
     if ( m_bAsyncActionCancelled )
         // this is to prevent race conditions
diff --git a/svtools/source/contnr/foldertree.cxx b/svtools/source/contnr/foldertree.cxx
index 5c8ee46..50df76b 100644
--- a/svtools/source/contnr/foldertree.cxx
+++ b/svtools/source/contnr/foldertree.cxx
@@ -36,8 +36,9 @@ void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
     {
         ::std::vector< SortingData_Impl* > aContent;
 
-        FileViewContentEnumerator* pContentEnumerator = new FileViewContentEnumerator(
-            m_xEnv, aContent, m_aMutex, NULL );
+        ::rtl::Reference< ::svt::FileViewContentEnumerator >
+            xContentEnumerator(new FileViewContentEnumerator(
+            m_xEnv, aContent, m_aMutex, NULL));
 
         OUString* pURL = static_cast< OUString* >( pEntry->GetUserData() );
 
@@ -46,7 +47,7 @@ void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
             FolderDescriptor aFolder( *pURL );
 
             EnumerationResult eResult =
-                pContentEnumerator->enumerateFolderContentSync( aFolder, m_aBlackList );
+                xContentEnumerator->enumerateFolderContentSync( aFolder, m_aBlackList );
 
             if ( SUCCESS == eResult )
             {
commit 289e5dbbab58410dac59534c79ebe831a7712129
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 21 14:51:48 2015 +0100

    coverity#1312088 Uninitialized scalar field
    
    Change-Id: Id04343aa5de0caa5b066d7fbd2fa97b670f5cf54

diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx
index 47bc859..f7316d4 100644
--- a/fpicker/source/office/RemoteFilesDialog.cxx
+++ b/fpicker/source/office/RemoteFilesDialog.cxx
@@ -25,6 +25,7 @@ class FileViewContainer : public vcl::Window
         , m_pFileView( NULL )

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list