Rebased ref, commits from common ancestor: commit 51c3a6421ecdb3443121c26e3bdeb21b07bd1fd8 Author: Szymon KÅos <eszka...@gmail.com> Date: Wed Aug 26 13:48:59 2015 +0200
remember password for all types of service Change-Id: I8620332ac5228eee1d7c16d0b0ff7920031be331 diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index 4d1cc15..c8ffde0 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -687,11 +687,16 @@ void RemoteFilesDialog::DisableControls() m_pCancel_btn->Enable( true ); } -void RemoteFilesDialog::SavePassword( const OUString& rURL, const OUString& rUser, const OUString& rPassword ) +void RemoteFilesDialog::SavePassword( const OUString& rURL, const OUString& rUser + , const OUString& rPassword, bool bPersistent ) { + if( rURL.isEmpty() || rUser.isEmpty() || rPassword.isEmpty() ) + return; + try { - if( m_xMasterPasswd->isPersistentStoringAllowed() && m_xMasterPasswd->authorizateWithMasterPassword( Reference< XInteractionHandler>() ) ) + if( m_xMasterPasswd->isPersistentStoringAllowed() && + ( !bPersistent || m_xMasterPasswd->authorizateWithMasterPassword( Reference< XInteractionHandler>() ) ) ) { Reference< XInteractionHandler > xInteractionHandler( InteractionHandler::createWithParent( m_xContext, 0 ), @@ -700,8 +705,11 @@ void RemoteFilesDialog::SavePassword( const OUString& rURL, const OUString& rUse Sequence< OUString > aPasswd( 1 ); aPasswd[0] = rPassword; - m_xMasterPasswd->addPersistent( - rURL, rUser, aPasswd, xInteractionHandler ); + if( bPersistent ) + m_xMasterPasswd->addPersistent( + rURL, rUser, aPasswd, xInteractionHandler ); + else + m_xMasterPasswd->add( rURL, rUser, aPasswd, xInteractionHandler ); } } catch( const Exception& ) @@ -725,7 +733,8 @@ IMPL_LINK_NOARG_TYPED ( RemoteFilesDialog, AddServiceHdl, Button*, void ) OUString sUser = aDlg->GetUser(); if( !sUser.isEmpty() && !sPassword.isEmpty() ) { - SavePassword( newService->GetUrl(), sUser, sPassword ); + bool bPersistent = aDlg->IsRememberChecked(); + SavePassword( newService->GetUrl(), sUser, sPassword, bPersistent ); } OUString sPrefix = lcl_GetServiceType( newService ); diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx index 65ce6c2..a1ce0de 100644 --- a/fpicker/source/office/RemoteFilesDialog.hxx +++ b/fpicker/source/office/RemoteFilesDialog.hxx @@ -182,7 +182,8 @@ private: void EnableControls(); void DisableControls(); - void SavePassword( const OUString& rURL, const OUString& rUser, const OUString& rPassword ); + void SavePassword( const OUString& rURL, const OUString& rUser + , const OUString& rPassword, bool bPersistent ); DECL_LINK_TYPED ( AddServiceHdl, Button*, void ); DECL_LINK ( SelectServiceHdl, void * ); diff --git a/include/svtools/PlaceEditDialog.hxx b/include/svtools/PlaceEditDialog.hxx index 992c5e8..6acbf78 100644 --- a/include/svtools/PlaceEditDialog.hxx +++ b/include/svtools/PlaceEditDialog.hxx @@ -73,6 +73,7 @@ public : OUString GetServerUrl(); OUString GetPassword() { return m_pEDPassword->GetText(); }; OUString GetUser() { return m_pEDUsername->GetText(); }; + bool IsRememberChecked() { return m_pCBPassword->IsChecked(); } void ShowPasswordControl( bool bShow = true ) { m_bShowPassword = bShow; } @@ -88,7 +89,6 @@ private: DECL_LINK ( SelectTypeHdl, void * ); DECL_LINK ( EditLabelHdl, void * ); DECL_LINK ( EditUsernameHdl, void * ); - DECL_LINK ( ToggledPassHdl, CheckBox * ); }; diff --git a/include/svtools/ServerDetailsControls.hxx b/include/svtools/ServerDetailsControls.hxx index 6fe3363..334778b 100644 --- a/include/svtools/ServerDetailsControls.hxx +++ b/include/svtools/ServerDetailsControls.hxx @@ -12,6 +12,8 @@ #include <map> #include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/task/PasswordContainer.hpp> +#include <com/sun/star/task/XPasswordContainer2.hpp> #include <tools/urlobj.hxx> #include <vcl/builder.hxx> @@ -53,11 +55,10 @@ class DetailsContainer virtual bool setUrl( const INetURLObject& rUrl ); virtual void setUsername( const OUString& /*rUsername*/ ) { }; + virtual void setPassword( const OUString& ) { }; virtual void setActive( bool bActive = true ); - virtual bool hasPassEntry() { return true; } - protected: void notifyChange( ); DECL_LINK ( ValueChangeHdl, void * ); @@ -124,6 +125,7 @@ class CmisDetailsContainer : public DetailsContainer { private: OUString m_sUsername; + OUString m_sPassword; com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > m_xCmdEnv; std::vector< OUString > m_aRepoIds; OUString m_sRepoId; @@ -142,7 +144,7 @@ class CmisDetailsContainer : public DetailsContainer virtual INetURLObject getUrl( ) SAL_OVERRIDE; virtual bool setUrl( const INetURLObject& rUrl ) SAL_OVERRIDE; virtual void setUsername( const OUString& rUsername ) SAL_OVERRIDE; - virtual bool hasPassEntry() SAL_OVERRIDE { return false; } + virtual void setPassword( const OUString& rPass ) SAL_OVERRIDE; private: void selectRepository( ); diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx b/svtools/source/dialogs/PlaceEditDialog.cxx index b244494..68e5741b 100644 --- a/svtools/source/dialogs/PlaceEditDialog.cxx +++ b/svtools/source/dialogs/PlaceEditDialog.cxx @@ -23,7 +23,7 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent) , m_xCurrentDetails() , m_nCurrentType( 0 ) , bLabelChanged( false ) - , m_bShowPassword( false ) + , m_bShowPassword( true ) { get( m_pEDServerName, "name" ); get( m_pLBServerType, "type" ); @@ -36,11 +36,6 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent) get( m_pEDPassword, "password" ); get( m_pFTPasswordLabel, "passwordLabel" ); - m_pEDPassword->Hide(); - m_pFTPasswordLabel->Hide(); - m_pCBPassword->Hide(); - m_pCBPassword->SetToggleHdl( LINK( this, PlaceEditDialog, ToggledPassHdl ) ); - m_pBTOk->SetClickHdl( LINK( this, PlaceEditDialog, OKHdl) ); m_pBTOk->Enable( false ); @@ -52,6 +47,7 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent) m_pLBServerType->SetSelectHdl( LINK( this, PlaceEditDialog, SelectTypeHdl ) ); m_pEDUsername->SetModifyHdl( LINK( this, PlaceEditDialog, EditUsernameHdl ) ); + m_pEDPassword->SetModifyHdl( LINK( this, PlaceEditDialog, EditUsernameHdl ) ); InitDetails( ); } @@ -76,7 +72,6 @@ PlaceEditDialog::PlaceEditDialog(vcl::Window* pParent, const std::shared_ptr<Pla m_pEDPassword->Hide(); m_pFTPasswordLabel->Hide(); m_pCBPassword->Hide(); - m_pCBPassword->SetToggleHdl( LINK( this, PlaceEditDialog, ToggledPassHdl ) ); m_pBTOk->SetClickHdl( LINK( this, PlaceEditDialog, OKHdl) ); m_pBTDelete->SetClickHdl ( LINK( this, PlaceEditDialog, DelHdl) ); @@ -149,19 +144,6 @@ std::shared_ptr<Place> PlaceEditDialog::GetPlace() return std::make_shared<Place>(m_pEDServerName->GetText(), GetServerUrl(), true); } -IMPL_LINK( PlaceEditDialog, ToggledPassHdl, CheckBox*, pCheckBox ) -{ - bool bChecked = pCheckBox->IsEnabled() && pCheckBox->IsChecked(); - - m_pEDPassword->Enable( bChecked ); - m_pFTPasswordLabel->Enable( bChecked ); - - if ( !bChecked ) - m_pEDPassword->SetText( "" ); - - return 0; -} - void PlaceEditDialog::InitDetails( ) { // Create CMIS controls for each server type @@ -322,6 +304,7 @@ IMPL_LINK_NOARG( PlaceEditDialog, EditUsernameHdl ) it != m_aDetailsContainers.end( ); ++it ) { ( *it )->setUsername( OUString( m_pEDUsername->GetText() ) ); + ( *it )->setPassword( m_pEDPassword->GetText() ); } EditHdl(NULL); @@ -350,12 +333,9 @@ IMPL_LINK_NOARG( PlaceEditDialog, SelectTypeHdl ) m_xCurrentDetails->show(); - bool bShowPass = m_xCurrentDetails->hasPassEntry(); - m_pCBPassword->Show( bShowPass ); - m_pEDPassword->Show( bShowPass ); - m_pFTPasswordLabel->Show( bShowPass ); - - ToggledPassHdl( m_pCBPassword ); + m_pCBPassword->Show( m_bShowPassword ); + m_pEDPassword->Show( m_bShowPassword ); + m_pFTPasswordLabel->Show( m_bShowPassword ); SetSizePixel(GetOptimalSize()); diff --git a/svtools/source/dialogs/ServerDetailsControls.cxx b/svtools/source/dialogs/ServerDetailsControls.cxx index 96da591..5b5f083 100644 --- a/svtools/source/dialogs/ServerDetailsControls.cxx +++ b/svtools/source/dialogs/ServerDetailsControls.cxx @@ -382,6 +382,11 @@ void CmisDetailsContainer::setUsername( const OUString& rUsername ) m_sUsername = rUsername; } +void CmisDetailsContainer::setPassword( const OUString& rPass ) +{ + m_sPassword = rPass; +} + void CmisDetailsContainer::selectRepository( ) { // Get the repo ID and call the Change listener @@ -395,6 +400,10 @@ void CmisDetailsContainer::selectRepository( ) IMPL_LINK_NOARG_TYPED( CmisDetailsContainer, RefreshReposHdl, Button*, void ) { + Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext(); + Reference< XPasswordContainer2 > xMasterPasswd = PasswordContainer::create( xContext ); + + OUString sBindingUrl = m_pEDHost->GetText().trim( ); OUString sEncodedUsername = ""; @@ -424,6 +433,25 @@ IMPL_LINK_NOARG_TYPED( CmisDetailsContainer, RefreshReposHdl, Button*, void ) sUrl = "vnd.libreoffice.cmis://" + sEncodedUsername + sEncodedBinding; } + // temporary remember the password + try + { + if( xMasterPasswd->isPersistentStoringAllowed() && !sUrl.isEmpty() && !m_sUsername.isEmpty() && !m_sPassword.isEmpty() ) + { + Reference< XInteractionHandler > xInteractionHandler( + InteractionHandler::createWithParent( xContext, 0 ), + UNO_QUERY ); + + Sequence< OUString > aPasswd( 1 ); + aPasswd[0] = m_sPassword; + + xMasterPasswd->add( + sUrl, m_sUsername, aPasswd, xInteractionHandler ); + } + } + catch( const Exception& ) + {} + // Get the Content ::ucbhelper::Content aCnt( sUrl, m_xCmdEnv, comphelper::getProcessComponentContext() ); Sequence< OUString > aProps( 1 ); @@ -456,6 +484,14 @@ IMPL_LINK_NOARG_TYPED( CmisDetailsContainer, RefreshReposHdl, Button*, void ) m_pLBRepository->SelectEntryPos( 0 ); selectRepository( ); } + + // remove temporary password + try + { + xMasterPasswd->remove( sUrl, m_sUsername ); + } + catch( const Exception& ) + {} } IMPL_LINK_NOARG( CmisDetailsContainer, SelectRepoHdl ) diff --git a/svtools/uiconfig/ui/placeedit.ui b/svtools/uiconfig/ui/placeedit.ui index 8f4e0e5..e3c0d3c 100644 --- a/svtools/uiconfig/ui/placeedit.ui +++ b/svtools/uiconfig/ui/placeedit.ui @@ -416,7 +416,7 @@ </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">5</property> + <property name="top_attach">4</property> </packing> </child> <child> @@ -428,7 +428,7 @@ </object> <packing> <property name="left_attach">1</property> - <property name="top_attach">5</property> + <property name="top_attach">4</property> </packing> </child> <child> @@ -442,7 +442,7 @@ </object> <packing> <property name="left_attach">1</property> - <property name="top_attach">4</property> + <property name="top_attach">5</property> </packing> </child> <child> commit c879fa8e5fd7779ca242fe368cbdd70084df049b Author: Szymon KÅos <eszka...@gmail.com> Date: Wed Aug 26 11:52:42 2015 +0200 Date modified column - no seconds Change-Id: I443d0dd691d8030ab6a0bf5e4eeded5ad73750a5 diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx index 1ce95e8..6f7b8c4 100644 --- a/svtools/source/contnr/fileview.cxx +++ b/svtools/source/contnr/fileview.cxx @@ -1945,7 +1945,7 @@ void SvtFileView_Impl::CreateDisplayText_Impl() const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData(); aValue += rLocaleData.getDate( (*aIt)->maModDate ); aValue += aDateSep; - aValue += rLocaleData.getTime( (*aIt)->maModDate ); + aValue += rLocaleData.getTime( (*aIt)->maModDate, false ); } (*aIt)->maDisplayText = aValue; commit 808f14886c08b7140ecff06c4d65d2db8286f0b1 Author: Szymon KÅos <eszka...@gmail.com> Date: Tue Aug 25 11:51:11 2015 +0200 Remove stored password if service is deleted Change-Id: I500a8ee2874f7a9577e37fe25f5813e5821e9719 diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index 1b541ba..4d1cc15 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -822,6 +822,30 @@ IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, if( aBox->Execute() == RET_YES ) { + // remove password + try + { + if( m_xMasterPasswd->isPersistentStoringAllowed() ) + { + OUString sUrl( m_aServices[nPos]->GetUrl() ); + + Reference< XInteractionHandler > xInteractionHandler( + InteractionHandler::createWithParent( m_xContext, 0 ), + UNO_QUERY ); + + UrlRecord aURLEntries = m_xMasterPasswd->find( sUrl, xInteractionHandler ); + + if( aURLEntries.Url == sUrl && aURLEntries.UserList.getLength() ) + { + OUString sUserName = aURLEntries.UserList[0].UserName; + + m_xMasterPasswd->removePersistent( sUrl, sUserName ); + } + } + } + catch( const Exception& ) + {} + m_aServices.erase( m_aServices.begin() + nPos ); m_pServices_lb->RemoveEntry( nSelected ); commit 6bf5bc98739c89537f7f3f1247f703943f907818 Author: Szymon KÅos <eszka...@gmail.com> Date: Mon Aug 24 12:51:21 2015 +0200 Remember window size Change-Id: I4e9bd5e2516b66f47b560a388237b75059a7f142 diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index b00f0db2..1b541ba 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -6,7 +6,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - #include "RemoteFilesDialog.hxx" class FileViewContainer : public vcl::Window @@ -172,6 +171,8 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ) : SvtFileDialog_Base( pParent, "RemoteFilesDialog", "fps/ui/remotefilesdialog.ui" ) , m_xContext( comphelper::getProcessComponentContext() ) , m_xMasterPasswd( PasswordContainer::create( m_xContext ) ) + , m_nWidth( 0 ) + , m_nHeight( 0 ) , m_pCurrentAsyncAction( NULL ) , m_pFileNotifier( NULL ) , m_pSplitter( NULL ) @@ -297,9 +298,15 @@ void RemoteFilesDialog::dispose() { SvtViewOptions aDlgOpt( E_DIALOG, m_sIniKey ); aDlgOpt.SetWindowState( OStringToOUString( GetWindowState(), osl_getThreadTextEncoding() ) ); + + Size aSize( GetSizePixel() ); + + OUString sSize = OUString::number( aSize.Width() ) + "|"; + sSize = sSize + OUString::number( aSize.Height() ) + "|"; + OUString sUserData = m_pFileView->GetConfigString(); aDlgOpt.SetUserItem( OUString( "UserData" ), - makeAny( sUserData ) ); + makeAny( sSize + sUserData ) ); } // save services @@ -373,6 +380,17 @@ short RemoteFilesDialog::Execute() return nRet; } +void RemoteFilesDialog::Show() +{ + SvtFileDialog_Base::Show(); + + if( m_nWidth > 0 && m_nHeight > 0 ) + { + Size aSize( m_nWidth, m_nHeight ); + SetSizePixel( aSize ); + } +} + OUString lcl_GetServiceType( ServicePtr pService ) { INetProtocol aProtocol = pService->GetUrlObject().GetProtocol(); @@ -423,7 +441,21 @@ void RemoteFilesDialog::InitSize() Any aUserData = aDlgOpt.GetUserItem( OUString( "UserData" ) ); OUString sCfgStr; if( aUserData >>= sCfgStr ) - m_pFileView->SetConfigString( sCfgStr ); + { + int nPos = sCfgStr.indexOf( "|" ); + if( nPos != -1 ) + { + nPos = sCfgStr.indexOf( "|", nPos + 1 ); + if( nPos != -1 ) + { + sal_Int32 nIdx = 0; + m_nWidth = sCfgStr.getToken( 0, '|', nIdx ).toInt32(); + m_nHeight = sCfgStr.getToken( 0, '|', nIdx ).toInt32(); + + m_pFileView->SetConfigString( sCfgStr.copy( nPos + 1) ); + } + } + } } } diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx index ad1323c..65ce6c2 100644 --- a/fpicker/source/office/RemoteFilesDialog.hxx +++ b/fpicker/source/office/RemoteFilesDialog.hxx @@ -77,6 +77,7 @@ public: virtual void dispose() SAL_OVERRIDE; virtual void Resize() SAL_OVERRIDE; virtual short Execute() SAL_OVERRIDE; + virtual void Show(); // SvtFileDialog_Base @@ -134,6 +135,8 @@ private: bool m_bServiceChanged; OUString m_sIniKey; + int m_nWidth; + int m_nHeight; OUString m_sPath; OUString m_sStdDir; commit 470d6ab5d35045902c2d07815314df9b03b6326e Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 12:10:07 2015 +0200 wider dialog Change-Id: Ie90920c6fcd797b49cc16487cf4754822f771cf0 diff --git a/fpicker/uiconfig/ui/remotefilesdialog.ui b/fpicker/uiconfig/ui/remotefilesdialog.ui index 7859348..00e14da 100644 --- a/fpicker/uiconfig/ui/remotefilesdialog.ui +++ b/fpicker/uiconfig/ui/remotefilesdialog.ui @@ -186,7 +186,7 @@ </child> <child> <object class="GtkBox" id="container"> - <property name="width_request">500</property> + <property name="width_request">555</property> <property name="height_request">200</property> <property name="visible">True</property> <property name="can_focus">False</property> commit 16304077dcb1e7f50b25d147d59c4fa5c4b415ca Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 12:04:27 2015 +0200 disable interface after service delete Change-Id: Ia6706ba12154bab9b36da8582190db7ca6af1072 diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index b29bd2b..b00f0db2 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -797,6 +797,9 @@ IMPL_LINK_TYPED ( RemoteFilesDialog, EditServiceMenuHdl, MenuButton *, pButton, m_pAddService_btn->SetPopupMenu( NULL ); m_bIsUpdated = true; + + m_bIsConnected = false; + EnableControls(); } } } commit 1d5f0716bf233bd468b8f271c2f45597dfc63bd2 Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 11:47:52 2015 +0200 focus for the file list after opening folder using a tree Change-Id: I7cf75e3fb734b4bf0be9135c200130b8e86bf54f diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index 1b2ec72..b29bd2b 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -975,7 +975,10 @@ IMPL_LINK ( RemoteFilesDialog, TreeSelectHdl, FolderTree *, pBox ) OUString* sURL = static_cast< OUString* >( pBox->GetHdlEntry()->GetUserData() ); if( sURL ) + { OpenURL( *sURL ); + m_pFileView->GrabFocus(); + } return 1; } commit 1f557470fd003a67d7d497d48094c33aea5d7e57 Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 10:51:08 2015 +0200 Autocompletion should be case insensitive Change-Id: I6f173590a94df6a04d5eee76653fa47ea8f71853 diff --git a/svtools/source/control/autocmpledit.cxx b/svtools/source/control/autocmpledit.cxx index 14cf58b..8032b6e 100644 --- a/svtools/source/control/autocmpledit.cxx +++ b/svtools/source/control/autocmpledit.cxx @@ -70,7 +70,7 @@ bool AutocompleteEdit::Match( const OUString& rText ) for( std::vector< OUString >::size_type i = 0; i < m_aEntries.size(); ++i ) { - if( m_aEntries[i].startsWith( rText ) ) + if( m_aEntries[i].startsWithIgnoreAsciiCase( rText ) ) { m_aMatching.push_back( m_aEntries[i] ); bRet = true; commit d6ebf7f5ee4aa0684a9f219dc8a5831013b7feb3 Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 10:42:37 2015 +0200 clear file name field while changing dir Change-Id: I46e9d9e7b56c09c65808fe231e5ba4eeddf90ad2 diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index ab6159a..1b2ec72 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -541,6 +541,9 @@ FileViewResult RemoteFilesDialog::OpenURL( OUString const & sURL ) // -1 timeout - sync m_pCurrentAsyncAction->execute( sURL, sFilter, -1, -1, GetBlackList() ); + + if( m_eMode != REMOTEDLG_MODE_SAVE ) + m_pName_ed->SetText( "" ); } else { commit 682c74f0dbb9bea3178e340c3f8cde69272829ad Author: Szymon KÅos <eszka...@gmail.com> Date: Fri Aug 21 10:29:49 2015 +0200 Breadcrumb: mouseover effect Change-Id: If38d799e0fa7506416082fb15f37b12267a9b5df diff --git a/include/svtools/breadcrumb.hxx b/include/svtools/breadcrumb.hxx index d749f27..d06e097 100644 --- a/include/svtools/breadcrumb.hxx +++ b/include/svtools/breadcrumb.hxx @@ -27,10 +27,12 @@ enum SvtBreadcrumbMode ALL_VISITED = 1 }; +class CustomLink; + class SVT_DLLPUBLIC Breadcrumb : public VclHBox { private: - std::vector< VclPtr< FixedHyperlink > > m_aLinks; + std::vector< VclPtr< CustomLink > > m_aLinks; std::vector< VclPtr< FixedText > > m_aSeparators; OUString m_sRootName; diff --git a/svtools/source/control/breadcrumb.cxx b/svtools/source/control/breadcrumb.cxx index 306d33f..8ccbd81 100644 --- a/svtools/source/control/breadcrumb.cxx +++ b/svtools/source/control/breadcrumb.cxx @@ -9,6 +9,38 @@ #include <svtools/breadcrumb.hxx> +class CustomLink : public FixedHyperlink +{ +public: + CustomLink( vcl::Window* pParent, WinBits nWinStyle ) + : FixedHyperlink( pParent, nWinStyle ) + { + vcl::Font aFont = GetControlFont( ); + aFont.SetUnderline( UNDERLINE_NONE ); + SetControlFont( aFont ); + } + +protected: + virtual void MouseMove( const MouseEvent& rMEvt ) SAL_OVERRIDE + { + // changes the style if the control is enabled + if ( !rMEvt.IsLeaveWindow() && IsEnabled() ) + { + vcl::Font aFont = GetControlFont( ); + aFont.SetUnderline( UNDERLINE_SINGLE ); + SetControlFont( aFont ); + } + else + { + vcl::Font aFont = GetControlFont( ); + aFont.SetUnderline( UNDERLINE_NONE ); + SetControlFont( aFont ); + } + + FixedHyperlink::MouseMove( rMEvt ); + } +}; + Breadcrumb::Breadcrumb( vcl::Window* pParent, WinBits nWinStyle ) : VclHBox( pParent, nWinStyle ) { m_eMode = SvtBreadcrumbMode::ONLY_CURRENT_PATH; @@ -112,6 +144,7 @@ void Breadcrumb::SetURL( const OUString& rURL ) m_aLinks[i]->SetURL( sRootPath + OUString( sPath.getStr(), nEnd ) ); m_aLinks[i]->Hide(); m_aLinks[i]->Enable( true ); + m_aSeparators[i]->Hide(); nPos = nEnd; @@ -208,7 +241,7 @@ void Breadcrumb::SetMode( SvtBreadcrumbMode eMode ) void Breadcrumb::appendField() { - m_aLinks.push_back( VclPtr< FixedHyperlink >::Create( this, WB_TABSTOP ) ); + m_aLinks.push_back( VclPtr< CustomLink >::Create( this, WB_TABSTOP ) ); m_aLinks[m_aLinks.size() - 1]->Hide(); m_aLinks[m_aLinks.size() - 1]->SetClickHdl( LINK( this, Breadcrumb, ClickLinkHdl ) ); commit 495285ee3a00d6c14e3d5a8df2e5715fb7edb233 Author: Szymon KÅos <eszka...@gmail.com> Date: Tue Aug 18 10:42:41 2015 +0200 RemoteFilesDialog: file name autocompletion Change-Id: Iab051ccaf075cc91acce67e01863e8d7ecac820c diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index e87f6cb..ab6159a 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -183,7 +183,6 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ) get( m_pAddService_btn, "add_service_btn" ); get( m_pServices_lb, "services_lb" ); get( m_pFilter_lb, "filter_lb" ); - get( m_pName_ed, "name_ed" ); get( m_pNewFolder, "new_folder" ); m_eMode = ( nBits & WB_SAVEAS ) ? REMOTEDLG_MODE_SAVE : REMOTEDLG_MODE_OPEN; @@ -194,6 +193,9 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ) m_bServiceChanged = false; m_nCurrentFilter = LISTBOX_ENTRY_NOTFOUND; + m_pName_ed = VclPtr< AutocompleteEdit >::Create( get< vcl::Window >( "filename_container" ) ); + m_pName_ed->Show(); + m_pFilter_lb->Enable( false ); m_pName_ed->Enable( false ); @@ -1252,8 +1254,31 @@ void RemoteFilesDialog::UpdateControls( const OUString& rURL ) m_pTreeView->SetSelectHdl( Link<>() ); // read cached data for this url and fill the tree - const ::std::vector< std::pair< OUString, OUString > >& rFolders = m_pFileView->GetSubFolders(); - m_pTreeView->FillTreeEntry( rURL, rFolders ); + const ::std::vector< SvtContentEntry >& rFolders = m_pFileView->GetContent(); + ::std::vector< std::pair< OUString, OUString > > aFolders; + + m_pName_ed->ClearEntries(); + + for( ::std::vector< SvtContentEntry >::size_type i = 0; i < rFolders.size(); i++ ) + { + int nTitleStart = rFolders[i].maURL.lastIndexOf( '/' ); + if( nTitleStart != -1 ) + { + OUString sTitle( INetURLObject::decode( + rFolders[i].maURL.copy( nTitleStart + 1 ), + INetURLObject::DECODE_WITH_CHARSET ) ); + + if( rFolders[i].mbIsFolder ) + { + aFolders.push_back( std::pair< OUString, OUString > ( sTitle, rFolders[i].maURL ) ); + } + + // add entries to the autocompletion mechanism + m_pName_ed->AddEntry( sTitle ); + } + } + + m_pTreeView->FillTreeEntry( rURL, aFolders ); m_pTreeView->SetSelectHdl( LINK( this, RemoteFilesDialog, TreeSelectHdl ) ); diff --git a/fpicker/source/office/RemoteFilesDialog.hxx b/fpicker/source/office/RemoteFilesDialog.hxx index 4fef385..ad1323c 100644 --- a/fpicker/source/office/RemoteFilesDialog.hxx +++ b/fpicker/source/office/RemoteFilesDialog.hxx @@ -12,6 +12,7 @@ #include <comphelper/docpasswordrequest.hxx> +#include <svtools/autocmpledit.hxx> #include <svtools/foldertree.hxx> #include <svtools/place.hxx> #include <svtools/PlaceEditDialog.hxx> @@ -156,7 +157,7 @@ private: VclPtr< SvtFileView > m_pFileView; VclPtr< FileViewContainer > m_pContainer; VclPtr< ListBox > m_pFilter_lb; - VclPtr< Edit > m_pName_ed; + VclPtr< AutocompleteEdit > m_pName_ed; PopupMenu* m_pAddMenu; ImageList m_aImages; diff --git a/fpicker/uiconfig/ui/remotefilesdialog.ui b/fpicker/uiconfig/ui/remotefilesdialog.ui index e0699a5..7859348 100644 --- a/fpicker/uiconfig/ui/remotefilesdialog.ui +++ b/fpicker/uiconfig/ui/remotefilesdialog.ui @@ -234,26 +234,29 @@ </packing> </child> <child> - <object class="GtkEntry" id="name_ed"> + <object class="GtkComboBox" id="filter_lb"> + <property name="width_request">200</property> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can_focus">False</property> <property name="hexpand">True</property> </object> <packing> <property name="left_attach">1</property> - <property name="top_attach">1</property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="filter_lb"> - <property name="width_request">200</property> + <object class="GtkBox" id="filename_container"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="hexpand">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> </object> <packing> <property name="left_attach">1</property> - <property name="top_attach">0</property> + <property name="top_attach">1</property> </packing> </child> </object> diff --git a/include/svtools/fileview.hxx b/include/svtools/fileview.hxx index db6d491..afc7dab 100644 --- a/include/svtools/fileview.hxx +++ b/include/svtools/fileview.hxx @@ -36,6 +36,7 @@ class ViewTabListBox_Impl; class SvtFileView_Impl; class SvTreeListEntry; class HeaderBar; +struct SvtContentEntry; /// the result of an action in the FileView enum FileViewResult @@ -173,7 +174,7 @@ public: void EndInplaceEditing( bool _bCancel ); - ::std::vector< std::pair< OUString, OUString > > GetSubFolders(); + ::std::vector< SvtContentEntry > GetContent(); protected: virtual void StateChanged( StateChangedType nStateChange ) SAL_OVERRIDE; diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx index 81e7f5e..1ce95e8 100644 --- a/svtools/source/contnr/fileview.cxx +++ b/svtools/source/contnr/fileview.cxx @@ -1393,17 +1393,14 @@ OUString SvtFileView::GetConfigString() const return sRet; } -::std::vector< std::pair< OUString, OUString > > SvtFileView::GetSubFolders() +::std::vector< SvtContentEntry > SvtFileView::GetContent() { - ::std::vector< std::pair< OUString, OUString > > aContent; + ::std::vector< SvtContentEntry > aContent; for( ::std::vector< SortingData_Impl* >::size_type i = 0; i < mpImp->maContent.size(); i++ ) { - if( mpImp->maContent[i]->mbIsFolder ) - { - std::pair< OUString, OUString > aEntry( mpImp->maContent[i]->GetTitle(), mpImp->maContent[i]->maTargetURL ); - aContent.push_back( aEntry ); - } + SvtContentEntry aEntry( mpImp->maContent[i]->maTargetURL, mpImp->maContent[i]->mbIsFolder ); + aContent.push_back( aEntry ); } return aContent; commit 5f2f8343927a447b5005ba7f49fb84603b92ea6c Author: Szymon KÅos <eszka...@gmail.com> Date: Mon Aug 17 23:01:53 2015 +0200 Edit control with autocompletion Change-Id: Id3aefbffa6b36b475ca78856c9e103cef433f88c diff --git a/include/svtools/autocmpledit.hxx b/include/svtools/autocmpledit.hxx new file mode 100644 index 0000000..49407d44 --- /dev/null +++ b/include/svtools/autocmpledit.hxx @@ -0,0 +1,39 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SVTOOLS_AUTOCMPLEDIT_HXX +#define INCLUDED_SVTOOLS_AUTOCMPLEDIT_HXX + +#include <svtools/svtdllapi.h> + +#include <vcl/edit.hxx> + +#include <vector> + +class SVT_DLLPUBLIC AutocompleteEdit : public Edit +{ +private: + std::vector< OUString > m_aEntries; + std::vector< OUString > m_aMatching; + std::vector< OUString >::size_type m_nCurrent; + + void AutoCompleteHandler( Edit* ); + bool Match( const OUString& rText ); + bool PreNotify( NotifyEvent& rNEvt ); + +public: + AutocompleteEdit( vcl::Window* pParent ); + + void AddEntry( const OUString& rEntry ); + void ClearEntries(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk index f6c834d..b877d46 100644 --- a/svtools/Library_svt.mk +++ b/svtools/Library_svt.mk @@ -107,6 +107,7 @@ $(eval $(call gb_Library_add_exception_objects,svt,\ svtools/source/contnr/viewdataentry \ svtools/source/control/accessibleruler \ svtools/source/control/asynclink \ + svtools/source/control/autocmpledit \ svtools/source/control/breadcrumb \ svtools/source/control/calendar \ svtools/source/control/collatorres \ diff --git a/svtools/source/control/autocmpledit.cxx b/svtools/source/control/autocmpledit.cxx new file mode 100644 index 0000000..14cf58b --- /dev/null +++ b/svtools/source/control/autocmpledit.cxx @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <svtools/autocmpledit.hxx> +#include <vcl/svapp.hxx> + +AutocompleteEdit::AutocompleteEdit( vcl::Window* pParent ) + : Edit( pParent ) + , m_nCurrent( 0 ) +{ + SignalConnectAutocomplete( nullptr, + [this] ( Edit *const pEdit ) { this->AutoCompleteHandler( pEdit ); } ); +} + +void AutocompleteEdit::AddEntry( const OUString& rEntry ) +{ + m_aEntries.push_back( rEntry ); +} + +void AutocompleteEdit::ClearEntries() +{ + m_aEntries.clear(); + m_aMatching.clear(); +} + +void AutocompleteEdit::AutoCompleteHandler( Edit* ) +{ + if( GetAutocompleteAction() != AUTOCOMPLETE_KEYINPUT ) + return; + + if( Application::AnyInput( VclInputFlags::KEYBOARD ) ) + return; + + OUString aCurText = GetText(); + Selection aSelection( GetSelection() ); + + if( aSelection.Max() != aCurText.getLength() ) + return; + + sal_uInt16 nLen = ( sal_uInt16 )aSelection.Min(); + aCurText = aCurText.copy( 0, nLen ); + if( !aCurText.isEmpty() ) + { + if( m_aEntries.size() ) + { + if( Match( aCurText ) ) + { + m_nCurrent = 0; + SetText( m_aMatching[0] ); + sal_uInt16 nNewLen = m_aMatching[0].getLength(); + + Selection aSel( nLen, nNewLen ); + SetSelection( aSel ); + } + } + } +} + +bool AutocompleteEdit::Match( const OUString& rText ) +{ + bool bRet = false; + + m_aMatching.clear(); + + for( std::vector< OUString >::size_type i = 0; i < m_aEntries.size(); ++i ) + { + if( m_aEntries[i].startsWith( rText ) ) + { + m_aMatching.push_back( m_aEntries[i] ); + bRet = true; + } + } + + return bRet; +} + +bool AutocompleteEdit::PreNotify( NotifyEvent& rNEvt ) +{ + if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT ) + { + const KeyEvent& rEvent = *rNEvt.GetKeyEvent(); + const vcl::KeyCode& rKey = rEvent.GetKeyCode(); + vcl::KeyCode aCode( rKey.GetCode() ); + + if( ( aCode == KEY_UP || aCode == KEY_DOWN ) && !rKey.IsMod2() ) + { + Selection aSelection( GetSelection() ); + sal_uInt16 nLen = ( sal_uInt16 )aSelection.Min(); + + if( m_aMatching.size() && + ( ( aCode == KEY_DOWN && m_nCurrent + 1 < m_aMatching.size() ) + || ( aCode == KEY_UP && m_nCurrent > 0 ) ) ) + { + SetText( m_aMatching[ aCode == KEY_DOWN ? ++m_nCurrent : --m_nCurrent ] ); + SetSelection( Selection( nLen, GetText().getLength() ) ); + return true; + } + } + } + + return Edit::PreNotify( rNEvt ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit fb82388b3c3bc7b2e1e4c2b51b9c3165c5ac14da Author: Szymon KÅos <eszka...@gmail.com> Date: Mon Aug 17 17:54:13 2015 +0200 don't show type column in the RemoteFilesDialog Change-Id: I103bf8dabe3a513da65c6d21b9c9199aefb0bebe diff --git a/fpicker/source/office/RemoteFilesDialog.cxx b/fpicker/source/office/RemoteFilesDialog.cxx index c0f3a49..e87f6cb 100644 --- a/fpicker/source/office/RemoteFilesDialog.cxx +++ b/fpicker/source/office/RemoteFilesDialog.cxx @@ -232,7 +232,7 @@ RemoteFilesDialog::RemoteFilesDialog( vcl::Window* pParent, WinBits nBits ) m_pFileView = VclPtr< SvtFileView >::Create( m_pContainer, WB_BORDER | WB_TABSTOP, REMOTEDLG_TYPE_PATHDLG == m_eType, - m_bMultiselection ); + m_bMultiselection, false ); m_pFileView->Show(); m_pFileView->EnableAutoResize(); diff --git a/include/svtools/fileview.hxx b/include/svtools/fileview.hxx index 0621dd77..db6d491 100644 --- a/include/svtools/fileview.hxx +++ b/include/svtools/fileview.hxx @@ -74,7 +74,7 @@ protected: virtual void GetFocus() SAL_OVERRIDE; public: - SvtFileView( vcl::Window* pParent, WinBits nBits, bool bOnlyFolder, bool bMultiSelection ); + SvtFileView( vcl::Window* pParent, WinBits nBits, bool bOnlyFolder, bool bMultiSelection, bool bShowType = true ); virtual ~SvtFileView(); virtual void dispose() SAL_OVERRIDE; diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx index 3c3f6d9..81e7f5e 100644 --- a/svtools/source/contnr/fileview.cxx +++ b/svtools/source/contnr/fileview.cxx @@ -101,6 +101,7 @@ enum class FileViewFlags NONE = 0x00, ONLYFOLDER = 0x01, MULTISELECTION = 0x02, + SHOW_TYPE = 0x04, SHOW_ONLYTITLE = 0x10, SHOW_NONE = 0x20, }; @@ -531,7 +532,10 @@ ViewTabListBox_Impl::ViewTabListBox_Impl( vcl::Window* pParentWin, SetTabJustify(2, AdjustRight); // column "Size" mpHeaderBar->InsertItem(COLUMN_TITLE, SVT_RESSTR(STR_SVT_FILEVIEW_COLUMN_TITLE), 180, nBits | HeaderBarItemBits::UPARROW); - mpHeaderBar->InsertItem(COLUMN_TYPE, SVT_RESSTR(STR_SVT_FILEVIEW_COLUMN_TYPE), 140, nBits); + if (nFlags & FileViewFlags::SHOW_TYPE) + { + mpHeaderBar->InsertItem(COLUMN_TYPE, SVT_RESSTR(STR_SVT_FILEVIEW_COLUMN_TYPE), 140, nBits); + } mpHeaderBar->InsertItem(COLUMN_SIZE, SVT_RESSTR(STR_SVT_FILEVIEW_COLUMN_SIZE), 80, nBits); mpHeaderBar->InsertItem(COLUMN_DATE, SVT_RESSTR(STR_SVT_FILEVIEW_COLUMN_DATE), 500, nBits); } @@ -998,7 +1002,7 @@ bool ViewTabListBox_Impl::Kill( const OUString& rContent ) // class SvtFileView ----------------------------------------------------- SvtFileView::SvtFileView( vcl::Window* pParent, WinBits nBits, - bool bOnlyFolder, bool bMultiSelection ) : + bool bOnlyFolder, bool bMultiSelection, bool bShowType ) : Control( pParent, nBits ) { @@ -1007,6 +1011,8 @@ SvtFileView::SvtFileView( vcl::Window* pParent, WinBits nBits, nFlags |= FileViewFlags::ONLYFOLDER; if ( bMultiSelection ) nFlags |= FileViewFlags::MULTISELECTION; + if ( bShowType ) + nFlags |= FileViewFlags::SHOW_TYPE; Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext(); Reference< XInteractionHandler > xInteractionHandler( commit 9a6cdce37e601b1406c71fef16ad9b315045c9da Author: David Ostrovsky <da...@ostrovsky.org> Date: Thu Aug 27 10:18:19 2015 +0200 Bump boost to 1.59 final release Change-Id: Id71e098dd2356043d2b5fee0736ebfedb5c8c1cd Reviewed-on: https://gerrit.libreoffice.org/18050 Reviewed-by: David Ostrovsky <da...@ostrovsky.org> Tested-by: David Ostrovsky <da...@ostrovsky.org> diff --git a/download.lst b/download.lst index 8b1d7d2..9382aef 100644 --- a/download.lst +++ b/download.lst @@ -15,7 +15,8 @@ export APR_MD5SUM := eff9d741b0999a9bbab96862dd2a2a3d export APR_TARBALL := apr-1.4.8.tar.gz export APR_UTIL_MD5SUM := 71a11d037240b292f824ba1eb537b4e3 export APR_UTIL_TARBALL := apr-util-1.5.3.tar.gz -export BOOST_TARBALL := 9804305aae0c9de9f8cfc02e3de75167-boost_1_59_0_b1_rc1.tar.bz2 +export BOOST_MD5SUM := 6aa9a5c6a4ca1016edd0ed1178e3cb87 +export BOOST_TARBALL := boost_1_59_0.tar.bz2 export BSH_TARBALL := ec1941a74d3ef513c4ce57a9092b74e1-bsh-2.0b5-src.zip export BZIP2_TARBALL := 00b516f4704d4a7cb50a1d97e6e8e15b-bzip2-1.0.6.tar.gz export CAIRO_TARBALL := f101a9e88b783337b20b2e26dfd26d5f-cairo-1.10.2.tar.gz diff --git a/external/boost/UnpackedTarball_boost.mk b/external/boost/UnpackedTarball_boost.mk index 732b564..54899c4 100644 --- a/external/boost/UnpackedTarball_boost.mk +++ b/external/boost/UnpackedTarball_boost.mk @@ -70,8 +70,6 @@ boost_patches += rtti.patch.0 # https://svn.boost.org/trac/boost/ticket/11505 boost_patches += boost_1_59_0.mpl.config.wundef.patch -# https://svn.boost.org/trac/boost/ticket/11503 -boost_patches += boost_1_59_0.type_index.wshadow.patch # https://svn.boost.org/trac/boost/ticket/11502 boost_patches += boost_1_59_0.property_tree.wtype-limits.patch # https://svn.boost.org/trac/boost/ticket/11507 @@ -82,19 +80,12 @@ boost_patches += boost_1_59_0.iostreams.wshadow.patch boost_patches += boost_1_59_0.iostreams.wunused.patch # https://svn.boost.org/trac/boost/ticket/11506 boost_patches += boost_1_59_0.rational.wshadow.patch -# https://svn.boost.org/trac/boost/ticket/11510 -boost_patches += boost_1_59_0.unique_ptr.wshadow.patch -# fixed upstream -# https://svn.boost.org/trac/boost/ticket/11500 -boost_patches += boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch # https://svn.boost.org/trac/boost/ticket/11511 boost_patches += boost_1_59_0.multi_array.wshadow.patch -# https://svn.boost.org/trac/boost/ticket/11512 -boost_patches += boost_1_59_0.signal2.wshadow.patch # https://svn.boost.org/trac/boost/ticket/11501 boost_patches += boost_1_59_0.property_tree.wreturn-type.patch -# fixed upstream by bdcd06c4cc1971d763e528b8cb1d0f16fcc5ecf4 -boost_patches += boost.concept_check.Wunused-local-typedefs.warnings.patch.1 +# https://svn.boost.org/trac/boost/ticket/11597 +boost_patches += boost_1_59_0.system.no.deprecated.patch $(eval $(call gb_UnpackedTarball_UnpackedTarball,boost)) diff --git a/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch.1 b/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch.1 deleted file mode 100644 index c85fc7e..0000000 --- a/external/boost/boost.concept_check.Wunused-local-typedefs.warnings.patch.1 +++ /dev/null @@ -1,13 +0,0 @@ -Fixed differently upstream by commit bdcd06c4cc1971d763e528b8cb1d0f16fcc5ecf4 - ---- boost/boost/concept/detail/general.hpp.orig 2015-07-31 14:03:08.184447736 +0200 -+++ boost/boost/concept/detail/general.hpp 2015-07-31 14:03:10.048447591 +0200 -@@ -67,7 +67,7 @@ - - // Version check from https://svn.boost.org/trac/boost/changeset/82886 - // (boost/static_assert.hpp) --#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))) -+#if defined(__GNUC__) && (((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))) || defined(__clang__)) - #define BOOST_CONCEPT_UNUSED_TYPEDEF __attribute__((unused)) - #else - #define BOOST_CONCEPT_UNUSED_TYPEDEF /**/ diff --git a/external/boost/boost.preprocessor.Wundef.warnings.patch b/external/boost/boost.preprocessor.Wundef.warnings.patch index 1dc9888..26d2845 100644 --- a/external/boost/boost.preprocessor.Wundef.warnings.patch +++ b/external/boost/boost.preprocessor.Wundef.warnings.patch @@ -1,15 +1,3 @@ -diff -ur boost.orig/boost/preprocessor/config/config.hpp boost/boost/preprocessor/config/config.hpp ---- foo/misc/boost.orig/boost/preprocessor/config/config.hpp 2015-03-28 09:19:20.000000000 +0100 -+++ foo/misc/boost/boost/preprocessor/config/config.hpp 2015-07-16 07:47:54.969987660 +0200 -@@ -79,7 +79,7 @@ - # define BOOST_PP_VARIADICS 1 - # define BOOST_PP_VARIADICS_MSVC 1 - # /* Wave (C/C++), GCC (C++) */ --# elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && __GXX_EXPERIMENTAL_CXX0X__ -+# elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__ - # define BOOST_PP_VARIADICS 1 - # /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */ - # elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L diff -ur boost.orig/boost/preprocessor/tuple/detail/is_single_return.hpp boost/boost/preprocessor/tuple/detail/is_single_return.hpp --- foo/misc/boost.orig/boost/preprocessor/tuple/detail/is_single_return.hpp 2015-03-28 09:19:20.000000000 +0100 +++ foo/misc/boost/boost/preprocessor/tuple/detail/is_single_return.hpp 2015-07-16 07:57:29.881981198 +0200 diff --git a/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch b/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch index 5551080..78a4cb0 100644 --- a/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch +++ b/external/boost/boost.spirit.Wunused-local-typedefs.warnings.patch @@ -15,17 +15,6 @@ diff -ru boost.orig/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp for (iterator_t i = helpers.rbegin(); i != helpers.rend(); ++i) (*i)->undefine(self); # else -diff -ru boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp boost/boost/spirit/home/classic/core/primitives/primitives.hpp ---- foo/misc/boost.orig/boost/spirit/home/classic/core/primitives/primitives.hpp 2015-07-18 21:46:45.775978491 +0200 -+++ foo/misc/boost/boost/spirit/home/classic/core/primitives/primitives.hpp 2015-07-18 22:03:35.695967140 +0200 -@@ -47,7 +47,6 @@ - typename parser_result<self_t, ScannerT>::type - parse(ScannerT const& scan) const - { -- typedef typename parser_result<self_t, ScannerT>::type result_t; - typedef typename ScannerT::value_t value_t; - typedef typename ScannerT::iterator_t iterator_t; - diff -ru boost.orig/boost/spirit/home/classic/error_handling/exceptions.hpp boost/boost/spirit/home/classic/error_handling/exceptions.hpp --- foo/misc/boost.orig/boost/spirit/home/classic/error_handling/exceptions.hpp 2015-07-18 21:46:45.768978491 +0200 +++ foo/misc/boost/boost/spirit/home/classic/error_handling/exceptions.hpp 2015-07-18 22:00:33.396969189 +0200 diff --git a/external/boost/boost_1_44_0-unused-parameters.patch b/external/boost/boost_1_44_0-unused-parameters.patch index d3341bf..174513b 100644 --- a/external/boost/boost_1_44_0-unused-parameters.patch +++ b/external/boost/boost_1_44_0-unused-parameters.patch @@ -671,44 +671,44 @@ diff -ru boost.orig/boost/foreach.hpp boost/boost/foreach.hpp typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type; typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator; diff -ru boost.orig/boost/function/function_template.hpp boost/boost/function/function_template.hpp ---- foo/misc/boost.orig/boost/function/function_template.hpp 2015-01-18 18:32:44.000000000 +0100 -+++ foo/misc/boost/boost/function/function_template.hpp 2015-07-16 22:03:43.157979869 +0200 +--- foo/misc/boost.orig/boost/function/function_template.hpp 2015-07-22 19:33:01.000000000 +0200 ++++ foo/misc/boost/boost/function/function_template.hpp 2015-08-27 10:14:49.023960640 +0200 @@ -717,7 +717,7 @@ template<typename Functor> BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f #ifndef BOOST_NO_SFINAE -- ,typename enable_if_c< -+ ,__attribute__ ((unused)) typename enable_if_c< - (boost::type_traits::ice_not< - (is_integral<Functor>::value)>::value), +- ,typename boost::enable_if_c< ++ ,__attribute__ ((unused)) typename boost::enable_if_c< + !(is_integral<Functor>::value), int>::type = 0 -@@ -730,7 +730,7 @@ + #endif // BOOST_NO_SFINAE +@@ -729,7 +729,7 @@ template<typename Functor,typename Allocator> BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a #ifndef BOOST_NO_SFINAE -- ,typename enable_if_c< -+ ,__attribute__ ((unused)) typename enable_if_c< - (boost::type_traits::ice_not< - (is_integral<Functor>::value)>::value), +- ,typename boost::enable_if_c< ++ ,__attribute__ ((unused)) typename boost::enable_if_c< + !(is_integral<Functor>::value), int>::type = 0 -@@ -1068,7 +1068,7 @@ + #endif // BOOST_NO_SFINAE +@@ -1065,7 +1065,7 @@ template<typename Functor> function(Functor f #ifndef BOOST_NO_SFINAE -- ,typename enable_if_c< -+ ,__attribute__ ((unused)) typename enable_if_c< - (boost::type_traits::ice_not< - (is_integral<Functor>::value)>::value), +- ,typename boost::enable_if_c< ++ ,__attribute__ ((unused)) typename boost::enable_if_c< + !(is_integral<Functor>::value), int>::type = 0 -@@ -1080,7 +1080,7 @@ + #endif +@@ -1076,7 +1076,7 @@ template<typename Functor,typename Allocator> function(Functor f, Allocator a #ifndef BOOST_NO_SFINAE -- ,typename enable_if_c< -+ ,__attribute__ ((unused)) typename enable_if_c< - (boost::type_traits::ice_not< - (is_integral<Functor>::value)>::value), +- ,typename boost::enable_if_c< ++ ,__attribute__ ((unused)) typename boost::enable_if_c< + !(is_integral<Functor>::value), int>::type = 0 + #endif diff -ru boost.orig/boost/iterator/reverse_iterator.hpp boost/boost/iterator/reverse_iterator.hpp --- foo/misc/boost.orig/boost/iterator/reverse_iterator.hpp 2014-09-06 19:18:28.000000000 +0200 +++ foo/misc/boost/boost/iterator/reverse_iterator.hpp 2015-07-16 22:04:18.012979478 +0200 diff --git a/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch b/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch deleted file mode 100644 index 4974127..0000000 --- a/external/boost/boost_1_59_0.move.Bool-type-collision.4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d.patch +++ /dev/null @@ -1,44 +0,0 @@ -This patch is needed to avoid type collision between Bool type -defined in XLib with non used non class template parameter -name introduced in this commit in move library: - - 4f9c2b62fbdcf5995ecf50a2ecf2494048a6696d. - -The obscure error message was issued on both Clang 3.8 and GCC 4.8.1: - - In file included from /home/davido/projects/libo/include/prex.h:32:0, - from /home/davido/projects/libo/include/vcl/opengl/OpenGLHelper.hxx:20, - from /home/davido/projects/libo/vcl/source/opengl/OpenGLHelper.cxx:11: -/home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/detail/meta_utils.hpp:350:15: error: two or more data types in declaration of âparameterâ - template<bool Bool, class B = true_, class C = true_, class D = true_> - ^ -In file included from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/utility_core.hpp:30:0, - from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/utility.hpp:28, - from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/optional/optional.hpp:50, - from /home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/optional.hpp:15, - from /home/davido/projects/libo/workdir/CustomTarget/officecfg/registry/officecfg/Office/Common.hxx:7, - from /home/davido/projects/libo/vcl/source/opengl/OpenGLHelper.cxx:22: -/home/davido/projects/libo/workdir/UnpackedTarball/boost/boost/move/detail/meta_utils.hpp:352:29: note: invalid template non-type parameter - : and_impl<B::value, C, D> - -diff -ru boost.orig/boost/move/detail/meta_utils.hpp boost/boost/move/detail/meta_utils.hpp ---- foo/misc/boost.orig/boost/move/detail/meta_utils.hpp 2015-07-19 14:16:13.764836630 +0200 -+++ foo/misc/boost/boost/move/detail/meta_utils.hpp 2015-07-19 21:04:15.960985030 +0200 -@@ -347,7 +347,7 @@ - // and_ - // - ////////////////////////////////////////////////////////////////////////////// --template<bool Bool, class B = true_, class C = true_, class D = true_> -+template<bool, class B = true_, class C = true_, class D = true_> - struct and_impl - : and_impl<B::value, C, D> - {}; -@@ -374,7 +374,7 @@ - // or_ - // - ////////////////////////////////////////////////////////////////////////////// --template<bool Bool, class B = false_, class C = false_, class D = false_> -+template<bool, class B = false_, class C = false_, class D = false_> - struct or_impl - : or_impl<B::value, C, D> - {}; diff --git a/external/boost/boost_1_59_0.signal2.wshadow.patch b/external/boost/boost_1_59_0.signal2.wshadow.patch deleted file mode 100644 index 1c13e94..0000000 --- a/external/boost/boost_1_59_0.signal2.wshadow.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff -ru boost.orig/boost/signals2/connection.hpp boost/boost/signals2/connection.hpp ---- foo/misc/boost.orig/boost/signals2/connection.hpp 2015-07-09 20:06:58.000000000 +0200 -+++ foo/misc/boost/boost/signals2/connection.hpp 2015-07-19 21:54:54.491994554 +0200 -@@ -68,12 +68,12 @@ - nolock_disconnect(local_lock); - } - template<typename Mutex> -- void nolock_disconnect(garbage_collecting_lock<Mutex> &lock) const -+ void nolock_disconnect(garbage_collecting_lock<Mutex> &lock_) const - { - if(_connected) - { - _connected = false; -- dec_slot_refcount(lock); -+ dec_slot_refcount(lock_); - } - } - virtual bool connected() const = 0; -@@ -118,12 +118,12 @@ - // shared_ptr to the slot in the garbage collecting lock, - // which will destroy the slot only after it unlocks. - template<typename Mutex> -- void dec_slot_refcount(garbage_collecting_lock<Mutex> &lock) const -+ void dec_slot_refcount(garbage_collecting_lock<Mutex> &lock_arg) const - { - BOOST_ASSERT(m_slot_refcount != 0); - if(--m_slot_refcount == 0) - { -- lock.add_trash(release_slot()); -+ lock_arg.add_trash(release_slot()); - } - } - -@@ -155,17 +155,17 @@ - const GroupKey& group_key() const {return _group_key;} - void set_group_key(const GroupKey &key) {_group_key = key;} - template<typename M> -- void disconnect_expired_slot(garbage_collecting_lock<M> &lock) -+ void disconnect_expired_slot(garbage_collecting_lock<M> &lock_arg) - { - if(!m_slot) return; - bool expired = slot().expired(); - if(expired == true) - { -- nolock_disconnect(lock); -+ nolock_disconnect(lock_arg); - } - } - template<typename M, typename OutputIterator> -- void nolock_grab_tracked_objects(garbage_collecting_lock<M> &lock, -+ void nolock_grab_tracked_objects(garbage_collecting_lock<M> &lock_arg, - OutputIterator inserter) const - { - if(!m_slot) return; -@@ -184,7 +184,7 @@ - ); - if(apply_visitor(detail::expired_weak_ptr_visitor(), *it)) - { -- nolock_disconnect(lock); -+ nolock_disconnect(lock_arg); - return; - } - *inserter++ = locked_object; diff --git a/external/boost/boost_1_59_0.system.no.deprecated.patch b/external/boost/boost_1_59_0.system.no.deprecated.patch new file mode 100644 index 0000000..867811f --- /dev/null +++ b/external/boost/boost_1_59_0.system.no.deprecated.patch @@ -0,0 +1,74 @@ +Starting from 1.59.0 final release, there are undefined generic_category() +errors in internal and external modules: [1]. + +Instead of defining the -DBOOST_SYSTEM_NO_DEPRECATED in internal and external +modules, patch the boost to not define the deprecated stuff per default. + +[1] http://paste.openstack.org/show/430509 + +diff -ru boost.orig/boost/system/detail/error_code.ipp boost/boost/system/detail/error_code.ipp +--- foo/misc/boost.orig/boost/system/detail/error_code.ipp 2015-01-06 17:08:27.000000000 +0100 ++++ foo/misc/boost/boost/system/detail/error_code.ipp 2015-08-28 21:47:00.941340365 +0200 +@@ -437,7 +437,7 @@ + } // unnamed namespace + + +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code; + // note that it doesn't matter if this + // isn't initialized before use since +diff -ru boost.orig/boost/system/error_code.hpp boost/boost/system/error_code.hpp +--- foo/misc/boost.orig/boost/system/error_code.hpp 2015-01-06 17:08:27.000000000 +0100 ++++ foo/misc/boost/boost/system/error_code.hpp 2015-08-28 21:47:58.318344217 +0200 +@@ -139,7 +139,7 @@ + + } // namespace errc + +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + namespace posix = errc; + namespace posix_error = errc; + # endif +@@ -214,7 +214,7 @@ + #endif + // deprecated synonyms --------------------------------------------------// + +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + inline const error_category & get_system_category() { return system_category(); } + inline const error_category & get_generic_category() { return generic_category(); } + inline const error_category & get_posix_category() { return generic_category(); } +@@ -394,7 +394,7 @@ + }; + + // predefined error_code object used as "throw on error" tag +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + BOOST_SYSTEM_DECL extern error_code throws; + # endif + +diff -ru boost.orig/boost/system/linux_error.hpp boost/boost/system/linux_error.hpp +--- foo/misc/boost.orig/boost/system/linux_error.hpp 2015-01-06 17:08:27.000000000 +0100 ++++ foo/misc/boost/boost/system/linux_error.hpp 2015-08-28 21:47:17.172341455 +0200 +@@ -89,7 +89,7 @@ + }; + } // namespace linux_error + +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + namespace Linux = linux_error; + # endif + +diff -ru boost.orig/boost/system/windows_error.hpp boost/boost/system/windows_error.hpp +--- foo/misc/boost.orig/boost/system/windows_error.hpp 2015-01-06 17:08:27.000000000 +0100 ++++ foo/misc/boost/boost/system/windows_error.hpp 2015-08-28 21:46:39.802338946 +0200 +@@ -105,7 +105,7 @@ + + } // namespace windows + +-# ifndef BOOST_SYSTEM_NO_DEPRECATED ++# ifdef BOOST_SYSTEM_DEPRECATED + namespace windows = windows_error; + # endif + diff --git a/external/boost/boost_1_59_0.type_index.wshadow.patch b/external/boost/boost_1_59_0.type_index.wshadow.patch deleted file mode 100644 index e9be940..0000000 --- a/external/boost/boost_1_59_0.type_index.wshadow.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -ru boost.orig/boost/type_index/type_index_facade.hpp boost/boost/type_index/type_index_facade.hpp ---- foo/misc/boost.orig/boost/type_index/type_index_facade.hpp 2015-07-19 11:39:38.476942225 +0200 -+++ foo/misc/boost/boost/type_index/type_index_facade.hpp 2015-07-19 11:41:13.032941163 +0200 -@@ -105,8 +105,8 @@ - /// \return Hash code of a type. By default hashes types by raw_name(). - /// \note <boost/functional/hash.hpp> has to be included if this function is used. - inline std::size_t hash_code() const BOOST_NOEXCEPT { -- const char* const name = derived().raw_name(); -- return boost::hash_range(name, name + std::strlen(name)); -+ const char* const name_ = derived().raw_name(); -+ return boost::hash_range(name_, name_ + std::strlen(name_)); - } - - #if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) - diff --git a/external/boost/boost_1_59_0.unique_ptr.wshadow.patch b/external/boost/boost_1_59_0.unique_ptr.wshadow.patch deleted file mode 100644 index 2121d0d..0000000 --- a/external/boost/boost_1_59_0.unique_ptr.wshadow.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -ru boost.orig/boost/move/unique_ptr.hpp boost/boost/move/unique_ptr.hpp ---- foo/misc/boost.orig/boost/move/unique_ptr.hpp 2015-07-19 13:02:01.788886667 +0200 -+++ foo/misc/boost/boost/move/unique_ptr.hpp 2015-07-19 13:02:34.385886300 +0200 -@@ -105,8 +105,8 @@ - {} - - template <class U> -- unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT -- : m_p(p), d(::boost::forward<U>(d)) -+ unique_ptr_data(P p, BOOST_FWD_REF(U) d_) BOOST_NOEXCEPT -+ : m_p(p), d(::boost::forward<U>(d_)) - {} - - del_ref deleter() { return d; } commit 0e59d6c337531a3cb51e0c5b8c43ae1fc3d927f0 Author: Tor Lillqvist <t...@collabora.com> Date: Sat Aug 29 09:18:44 2015 +0300 WaE: 'rChunk' : unreferenced formal parameter Change-Id: I1491ea35af3b8237a9b8f6357e6452b323139e99 diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx index 7bf8a8f..056c48a 100644 --- a/vcl/win/source/gdi/winlayout.cxx +++ b/vcl/win/source/gdi/winlayout.cxx @@ -119,7 +119,7 @@ char ColorFor(COLORREF aColor) return '0' + (10*(GetRValue(aColor) + GetGValue(aColor) + GetBValue(aColor))) / (0xFF*3); } -void DumpGlyphBitmap(OpenGLGlyphCacheChunk& rChunk, HDC hDC) +void DumpGlyphBitmap(HDC hDC) { HBITMAP hBitmap = static_cast<HBITMAP>(GetCurrentObject(hDC, OBJ_BITMAP)); if (hBitmap == NULL) @@ -430,7 +430,7 @@ bool ImplWinFontEntry::AddChunkOfGlyphs(int nGlyphIndex, const WinLayout& rLayou #ifdef SAL_DETAIL_ENABLE_LOG_INFO SAL_INFO("vcl.gdi.opengl", "this=" << this << " now: " << maOpenGLGlyphCache); - DumpGlyphBitmap(aChunk, aDC.getCompatibleHDC()); + DumpGlyphBitmap(aDC.getCompatibleHDC()); #endif return true; commit 15943416240e29a052e3a6e4d338932e8c1ffb06 Author: Tor Lillqvist <t...@collabora.com> Date: Sat Aug 29 09:02:31 2015 +0300 Avoid unintended unconditional std::cerr debug output Can't call a function that as a side effect prints to std::cerr in SAL_INFO. It will be called even if the log area doesn't match $SAL_LOG. Just use only SAL_INFO and no plain std::cerr output. It's fine to output a string with embedded newlines in SAL_INFO. Also drop the debug output line with the glyph start positions, it was less than useful. Change-Id: I9fb5ed068aae1b835e20cf1ec1097bcd55deb05d diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx index 8d5d8bd..7bf8a8f 100644 --- a/vcl/win/source/gdi/winlayout.cxx +++ b/vcl/win/source/gdi/winlayout.cxx @@ -105,6 +105,10 @@ public: const OpenGLGlyphCacheChunk& GetCachedGlyphChunkFor(int nGlyphIndex) const; }; +#ifdef SAL_DETAIL_ENABLE_LOG_INFO + +namespace { + char ColorFor(COLORREF aColor) { if (aColor == RGB(0xFF, 0xFF, 0xFF)) @@ -115,47 +119,39 @@ char ColorFor(COLORREF aColor) return '0' + (10*(GetRValue(aColor) + GetGValue(aColor) + GetBValue(aColor))) / (0xFF*3); } -OUString DumpGlyphBitmap(OpenGLGlyphCacheChunk& rChunk, HDC hDC) +void DumpGlyphBitmap(OpenGLGlyphCacheChunk& rChunk, HDC hDC) { HBITMAP hBitmap = static_cast<HBITMAP>(GetCurrentObject(hDC, OBJ_BITMAP)); if (hBitmap == NULL) { SAL_WARN("vcl.gdi", "GetCurrentObject failed: " << WindowsErrorString(GetLastError())); - return ""; + return; } BITMAP aBitmap; if (!GetObjectW(hBitmap, sizeof(aBitmap), &aBitmap)) { SAL_WARN("vcl.gdi", "GetObjectW failed: " << WindowsErrorString(GetLastError())); - return ""; + return; } - std::cerr << "Bitmap " << hBitmap << ": " << aBitmap.bmWidth << "x" << aBitmap.bmHeight << ":" << std::endl; - - // Print out start pos of each glyph only in the horizontal font case - int nPos = 0; - if (rChunk.mnGlyphCount > 1 && rChunk.maLocation[1].Left() > rChunk.maLocation[0].Left()) - { - for (int i = 1; i < rChunk.mnGlyphCount && nPos < 75; i++) - { - for (int j = nPos; j < rChunk.maLocation[i].Left(); j++) - std::cerr << " "; - std::cerr << "!"; - nPos = rChunk.maLocation[i].Left() + 1; - } - } - std::cerr << std::endl; + SAL_INFO("vcl.gdi.opengl", "Bitmap " << hBitmap << ": " << aBitmap.bmWidth << "x" << aBitmap.bmHeight << ":"); + std::ostringstream sLine("\n"); for (long y = 0; y < aBitmap.bmHeight; y++) { for (long x = 0; x < std::min(75l, aBitmap.bmWidth); x++) - std::cerr << ColorFor(GetPixel(hDC, x, y)); - std::cerr << std::endl; + sLine << ColorFor(GetPixel(hDC, x, y)); + if (y < aBitmap.bmHeight - 1) + sLine << "\n"; } - return ""; + SAL_INFO("vcl.gdi.opengl", sLine.str()); } +} // anonymous namespace + +#endif // SAL_DETAIL_ENABLE_LOG_INFO + template< typename charT, typename traits > inline std::basic_ostream<charT, traits> & operator <<( std::basic_ostream<charT, traits> & stream, const std::vector<OpenGLGlyphCacheChunk>& rCache ) @@ -432,7 +428,10 @@ bool ImplWinFontEntry::AddChunkOfGlyphs(int nGlyphIndex, const WinLayout& rLayou if (hNonAntialiasedFont != NULL) DeleteObject(hNonAntialiasedFont); - SAL_INFO("vcl.gdi.opengl", "this=" << this << " now: " << maOpenGLGlyphCache << DumpGlyphBitmap(aChunk, aDC.getCompatibleHDC())); +#ifdef SAL_DETAIL_ENABLE_LOG_INFO + SAL_INFO("vcl.gdi.opengl", "this=" << this << " now: " << maOpenGLGlyphCache); + DumpGlyphBitmap(aChunk, aDC.getCompatibleHDC()); +#endif return true; } commit 091fde623d33a21162658d9f2338ab0b23e82a90 Author: Tor Lillqvist <t...@collabora.com> Date: Sat Aug 29 08:02:57 2015 +0300 Bin include file with unused stuff Change-Id: I6c4b78a673183252604da0fe2deff6e4a2fa60d6 diff --git a/sw/source/filter/ww8/needed_cast.hxx b/sw/source/filter/ww8/needed_cast.hxx index 2280f77..a7a6a04 100644 --- a/sw/source/filter/ww8/needed_cast.hxx +++ b/sw/source/filter/ww8/needed_cast.hxx @@ -20,8 +20,6 @@ #ifndef INCLUDED_SW_SOURCE_FILTER_WW8_NEEDED_CAST_HXX #define INCLUDED_SW_SOURCE_FILTER_WW8_NEEDED_CAST_HXX -#include "staticassert.hxx" - namespace ww { template<typename Ret, typename Param> Ret checking_cast(Param in, Ret) diff --git a/sw/source/filter/ww8/staticassert.hxx b/sw/source/filter/ww8/staticassert.hxx deleted file mode 100644 index 274b5ee..0000000 --- a/sw/source/filter/ww8/staticassert.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SW_SOURCE_FILTER_WW8_STATICASSERT_HXX -#define INCLUDED_SW_SOURCE_FILTER_WW8_STATICASSERT_HXX - -/* - Lifted direct from: - Modern C++ Design: Generic Programming and Design Patterns Applied - Section 2.1 - by Andrei Alexandrescu -*/ -namespace ww -{ - template<bool> class compile_time_check - { - public: - compile_time_check(...) {} - }; - - template<> class compile_time_check<false> - { - }; -} - - /* - Similar to assert, StaticAssert is only in operation when NDEBUG is not - defined. It will test its first argument at compile time and on failure - report the error message of the second argument, which must be a valid c++ - classname. i.e. no spaces, punctuation or reserved keywords. - */ -#ifndef NDEBUG -# define StaticAssert(test, errormsg) \ - do { \ - struct ERROR_##errormsg {}; \ - typedef ww::compile_time_check< (test) != 0 > tmplimpl; \ - tmplimpl aTemp = tmplimpl(ERROR_##errormsg()); \ - sizeof(aTemp); \ - } while (0) -#else -# define StaticAssert(test, errormsg) \ - do {} while (0) -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/styles.cxx b/sw/source/filter/ww8/styles.cxx index 2297c1b..3f74cf5 100644 --- a/sw/source/filter/ww8/styles.cxx +++ b/sw/source/filter/ww8/styles.cxx @@ -23,7 +23,6 @@ #include <algorithm> #include <rtl/ustring.hxx> #include <osl/diagnose.h> -#include "staticassert.hxx" namespace { commit be662ff54c24b245baf7526ff13a06350679d0f5 Author: Tor Lillqvist <t...@collabora.com> Date: Sat Aug 29 07:55:29 2015 +0300 This is C++, we have booleans diff --git a/include/vcl/opengl/OpenGLHelper.hxx b/include/vcl/opengl/OpenGLHelper.hxx index fd9c2de..646a2d3 100644 --- a/include/vcl/opengl/OpenGLHelper.hxx +++ b/include/vcl/opengl/OpenGLHelper.hxx @@ -32,7 +32,7 @@ detail_stream << stream; \ OpenGLHelper::debugMsgStream((area),detail_stream); \ } \ - } while (0) + } while (false) class VCL_DLLPUBLIC OpenGLHelper { commit cec9e1176cf667bf8fafe1752c93e45176c92d42 Author: Norbert Thiebaud <nthieb...@gmail.com> Date: Fri Aug 28 20:32:53 2015 -0500 Add PerfSuite.conf Jenkins pseudo distro-config Change-Id: I0fecd634930629c7de65f11ce5190a9a95f98e52 diff --git a/distro-configs/Jenkins/PerfSuite_Linux.conf b/distro-configs/Jenkins/PerfSuite_Linux.conf new file mode 100644 index 0000000..fcb6009 --- /dev/null +++ b/distro-configs/Jenkins/PerfSuite_Linux.conf @@ -0,0 +1,8 @@ +--with-distro=LibreOfficeLinux +--without-help +--disable-epm +--disable-online-update +--without-junit +--disable-ccache +--enable-symbols +--enable-mergelibs commit dc1be62d75e654e17c2f4c02804b7fd48d5a2515 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Aug 28 16:14:07 2015 +0100 check stream status Change-Id: I609c8c4f4e843601361b61f55e0325ad99db3c23 diff --git a/sd/qa/unit/data/ppt/pass/hang-20.ppt b/sd/qa/unit/data/ppt/pass/hang-20.ppt new file mode 100644 index 0000000..7bfe75d Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-20.ppt differ diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 530be9c..76f331d 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -280,7 +280,6 @@ bool ImplSdPPTImport::Import() if ( nSlideCount && pSection->GetProperty( PID_HEADINGPAIR, aPropItem ) ) { sal_uInt32 nSlideTitleIndex = 0, nSlideTitleCount = 0; - sal_uInt32 i, nTemp; OUString aUString; @@ -291,13 +290,14 @@ bool ImplSdPPTImport::Import() { nVecCount >>= 1; sal_uInt32 nEntryCount = 0; - for ( i = 0; i < nVecCount; i++ ) + for (sal_uInt32 i = 0; i < nVecCount; ++i) { if ( !aPropItem.Read( aUString, VT_EMPTY, false ) ) break; aPropItem.ReadUInt32( nType ); if ( ( nType != VT_I4 ) && ( nType != VT_UI4 ) ) break; + sal_uInt32 nTemp(0); aPropItem.ReadUInt32( nTemp ); if ( aUString == "Slide Titles" || aUString == "Folientitel" ) { @@ -312,17 +312,33 @@ bool ImplSdPPTImport::Import() aPropItem.ReadUInt32( nType ) .ReadUInt32( nVecCount ); - if ( ( nVecCount >= ( nSlideTitleIndex + nSlideTitleCount ) ) - && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ) + bool bVecOk = ( ( nVecCount >= (nSlideTitleIndex + nSlideTitleCount) ) + && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ); + + if (bVecOk) { - for ( i = 0; i != nSlideTitleIndex; i++ ) + for (sal_uInt32 i = 0; i != nSlideTitleIndex; ++i) { - aPropItem.ReadUInt32( nTemp ); - aPropItem.SeekRel( nTemp ); + sal_uInt32 nTemp(0); + aPropItem.ReadUInt32(nTemp); + if (!aPropItem.good()) + { + bVecOk = false; + break; + } + auto nPos = aPropItem.Tell() + nTemp; + if (nPos != aPropItem.Seek(nPos)) + { + bVecOk = false; + break; + } } - for ( i = 0; i < nSlideTitleCount; i++ ) + } + if (bVecOk) + { + for (sal_uInt32 i = 0; i < nSlideTitleCount; ++i) { - if ( !aPropItem.Read( aUString, nType, false ) ) + if (!aPropItem.Read(aUString, nType, false)) break; OUString aString( aUString ); commit 078235028a8c4ea36b6b366348016e19759c456a Author: Caolán McNamara <caol...@redhat.com> Date: Fri Aug 28 15:33:44 2015 +0100 eof isn't a Error, so use good not GetError Change-Id: Ie1df87c7eb9d391d0fa4a579f744051a1f1b2ae1 diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 011624a..a7f1ec7 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -4170,17 +4170,17 @@ SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& r SEEK_FROM_BEGINNING ) ) { sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; - sal_uInt32 nUDData; - sal_uInt16 nPID; while( 5 < nBytesLeft ) { - rSt.ReadUInt16( nPID ); - if ( rSt.GetError() != 0 ) + sal_uInt16 nPID(0); + rSt.ReadUInt16(nPID); + if (!rSt.good()) break; - rSt.ReadUInt32( nUDData ); - if ( rSt.GetError() != 0 ) + sal_uInt32 nUDData(0); + rSt.ReadUInt32(nUDData); + if (!rSt.good()) break; - if ( nPID == 447 ) + if (nPID == 447) { mbRotateGranientFillWithAngle = nUDData & 0x20; break; @@ -5009,15 +5009,15 @@ SdrObject* SvxMSDffManager::ProcessObj(SvStream& rSt, && maShapeRecords.Current()->nRecLen ) { sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen; - sal_uInt32 nUDData; - sal_uInt16 nPID; while( 5 < nBytesLeft ) { - rSt.ReadUInt16( nPID ); - if ( rSt.GetError() != 0 ) + sal_uInt16 nPID(0); + rSt.ReadUInt16(nPID); + if (!rSt.good()) break; - rSt.ReadUInt32( nUDData ); - switch( nPID ) + sal_uInt32 nUDData(0); + rSt.ReadUInt32(nUDData); + switch (nPID) { case 0x038F: pImpRec->nXAlign = nUDData; break; case 0x0390: @@ -5045,7 +5045,7 @@ SdrObject* SvxMSDffManager::ProcessObj(SvStream& rSt, pImpRec->isHorizontalRule = true; break; } - if ( rSt.GetError() != 0 ) + if (!rSt.good()) break; nBytesLeft -= 6; } diff --git a/sd/qa/unit/data/ppt/pass/hang-19.ppt b/sd/qa/unit/data/ppt/pass/hang-19.ppt new file mode 100644 index 0000000..942a58a Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-19.ppt differ commit 8c2b2d63eed861e8cfe847c4b3757b307e9d389e Author: Caolán McNamara <caol...@redhat.com> Date: Fri Aug 28 15:13:41 2015 +0100 time stamp object selections and use newest as ref for equalization Change-Id: I1bf22ddbaf263b240288f70d03d6949611f86b69 diff --git a/include/svx/svdmark.hxx b/include/svx/svdmark.hxx index cba0a75..aee9dd7 100644 --- a/include/svx/svdmark.hxx +++ b/include/svx/svdmark.hxx @@ -42,7 +42,10 @@ typedef std::set<sal_uInt16> SdrUShortCont; */ class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser { +private: + void setTime(); protected: + sal_Int64 mnTimeStamp; SdrObject* mpSelectedSdrObject; // the selected object SdrPageView* mpPageView; SdrUShortCont* mpPoints; // Selected Points @@ -145,6 +148,11 @@ public: return mpGluePoints; } + + sal_Int64 getTimeStamp() const + { + return mnTimeStamp; + } }; class SVX_DLLPUBLIC SdrMarkList diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx index 719355d..090efa7 100644 --- a/svx/source/svdraw/svdedtv2.cxx +++ b/svx/source/svdraw/svdedtv2.cxx @@ -1181,7 +1181,19 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) if (nMarked < 2) return; - SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj(); + size_t nLastSelected = 0; + sal_Int64 nLastSelectedTime = rMarkList.GetMark(0)->getTimeStamp(); + for (size_t a = 1; a < nMarked; ++a) + { + sal_Int64 nCandidateTime = rMarkList.GetMark(a)->getTimeStamp(); + if (nCandidateTime > nLastSelectedTime) + { + nLastSelectedTime = nCandidateTime; + nLastSelected = a; + } + } + + SdrObject* pLastSelectedObj = rMarkList.GetMark(nLastSelected)->GetMarkedSdrObj(); Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize()); const bool bUndo = IsUndoEnabled(); @@ -1189,8 +1201,10 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) if (bUndo) BegUndo(); - for (size_t a = 0; a < nMarked-1; ++a) + for (size_t a = 0; a < nMarked; ++a) { + if (a == nLastSelected) + continue; SdrMark* pM = rMarkList.GetMark(a); SdrObject* pObj = pM->GetMarkedSdrObj(); Rectangle aLogicRect(pObj->GetLogicRect()); diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx index 7ddde61..8b7f3e09c 100644 --- a/svx/source/svdraw/svdmark.cxx +++ b/svx/source/svdraw/svdmark.cxx @@ -38,8 +38,12 @@ #include <svl/SfxBroadcaster.hxx> #include <svx/svdoedge.hxx> - - +void SdrMark::setTime() +{ + TimeValue aNow; + osl_getSystemTime(&aNow); + mnTimeStamp = sal_Int64(aNow.Seconds) * 1000000000L + aNow.Nanosec; +} SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) : mpSelectedSdrObject(pNewObj), @@ -55,10 +59,12 @@ SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) { mpSelectedSdrObject->AddObjectUser( *this ); } + setTime(); } SdrMark::SdrMark(const SdrMark& rMark) : ObjectUser(), + mnTimeStamp(0), mpSelectedSdrObject(0L), mpPageView(0L), mpPoints(0L), @@ -117,10 +123,10 @@ void SdrMark::SetMarkedSdrObj(SdrObject* pNewObj) } } - SdrMark& SdrMark::operator=(const SdrMark& rMark) { SetMarkedSdrObj(rMark.mpSelectedSdrObject); + mnTimeStamp = rMark.mnTimeStamp; mpPageView = rMark.mpPageView; mbCon1 = rMark.mbCon1; mbCon2 = rMark.mbCon2; commit 2aadad1e89e96cb80c15fe1069cb6365f0cade1d Author: Caolán McNamara <caol...@redhat.com> Date: Fri Aug 28 14:33:05 2015 +0100 guard against 0 item size Change-Id: I9c4c2f0fe2d892615b3c70e08da0cab6da13338a diff --git a/sd/qa/unit/data/ppt/pass/crash-2.ppt b/sd/qa/unit/data/ppt/pass/crash-2.ppt new file mode 100644 index 0000000..78a4da4 Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/crash-2.ppt differ diff --git a/sd/source/filter/ppt/propread.cxx b/sd/source/filter/ppt/propread.cxx index 286c61f..18f3450 100644 --- a/sd/source/filter/ppt/propread.cxx +++ b/sd/source/filter/ppt/propread.cxx @@ -93,7 +93,7 @@ bool PropItem::Read( OUString& rString, sal_uInt32 nStringType, bool bAlign ) { case VT_LPSTR : { - if ( nItemSize ) + if (nItemSize) { auto nMaxSizePossible = remainingSize(); if (nItemSize > nMaxSizePossible) @@ -101,6 +101,10 @@ bool PropItem::Read( OUString& rString, sal_uInt32 nStringType, bool bAlign ) SAL_WARN("sd.filter", "String of Len " << nItemSize << " claimed, only " << nMaxSizePossible << " possible"); nItemSize = nMaxSizePossible; } + } + + if (nItemSize) + { try { sal_Char* pString = new sal_Char[ nItemSize ]; @@ -144,7 +148,7 @@ bool PropItem::Read( OUString& rString, sal_uInt32 nStringType, bool bAlign ) case VT_LPWSTR : { - if ( nItemSize ) + if (nItemSize) { auto nMaxSizePossible = remainingSize() / sizeof(sal_Unicode); if (nItemSize > nMaxSizePossible) @@ -152,7 +156,10 @@ bool PropItem::Read( OUString& rString, sal_uInt32 nStringType, bool bAlign ) SAL_WARN("sd.filter", "String of Len " << nItemSize << " claimed, only " << nMaxSizePossible << " possible"); nItemSize = nMaxSizePossible; } + } + if (nItemSize) + { try { sal_Unicode* pString = new sal_Unicode[ nItemSize ]; commit 1847753ab135f522df6a293a8539155437f0129f Author: Caolán McNamara <caol...@redhat.com> Date: Fri Aug 28 08:28:51 2015 +0100 check seeks and reads Change-Id: I0c5c4784713376e0762bfbd197640f8d31b65562 diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index b025b79..ad20a86 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -786,7 +786,8 @@ SdrObject* SdrEscherImport::ProcessObj( SvStream& rSt, DffObjData& rObjData, voi } break; } - aClientDataHd.SeekToEndOfRecord( rSt ); + if (!aClientDataHd.SeekToEndOfRecord(rSt)) + break; } } if ( ( aPlaceholderAtom.nPlaceholderId == PptPlaceholder::NOTESSLIDEIMAGE ) && !rPersistEntry.bNotesMaster ) @@ -1810,7 +1811,10 @@ SdrObject* SdrPowerPointImport::ImportOLE( long nOLEId, break; } else - aPlaceHd.SeekToEndOfRecord( rStCtrl ); + { + if (!aPlaceHd.SeekToEndOfRecord(rStCtrl)) + break; + } } } @@ -2402,7 +2406,8 @@ bool SdrPowerPointImport::SeekToContentOfProgTag( sal_Int32 nVersion, SvStream& } } } - aProgTagBinaryDataHd.SeekToEndOfRecord( rSt ); + if (!aProgTagBinaryDataHd.SeekToEndOfRecord(rSt)) + break; } } if ( !bRetValue ) @@ -2703,7 +2708,8 @@ void ImportComment10( SvxMSDffManager& rMan, SvStream& rStCtrl, SdrPage* pPage, } break; } - aCommentHd.SeekToEndOfRecord( rStCtrl ); + if (!aCommentHd.SeekToEndOfRecord(rStCtrl)) + break; } Point aPosition( nPosX, nPosY ); rMan.Scale( aPosition ); @@ -2763,7 +2769,8 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry* while( ( rStCtrl.GetError() == 0 ) && SeekToRec( rStCtrl, PPT_PST_Comment10, aContentDataHd.GetRecEndFilePos(), &aComment10Hd ) ) { ImportComment10( *this, rStCtrl, pRet, aComment10Hd ); - aComment10Hd.SeekToEndOfRecord( rStCtrl ); + if (!aComment10Hd.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -2841,7 +2848,8 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry* } if ( aEscherObjListHd.nRecType == DFF_msofbtSpContainer ) break; - aEscherObjListHd.SeekToEndOfRecord( rStCtrl ); + if (!aEscherObjListHd.SeekToEndOfRecord(rStCtrl)) + break; } // now importing page @@ -2891,7 +2899,8 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry* } if ( aEscherObjListHd.nRecType == DFF_msofbtSpgrContainer ) break; - aEscherObjListHd.SeekToEndOfRecord( rStCtrl ); + if (!aEscherObjListHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( rSlidePersist.pBObj ) @@ -2907,7 +2916,8 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry* } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( rSlidePersist.pSolverContainer ) SolveSolver( *rSlidePersist.pSolverContainer ); @@ -3116,7 +3126,8 @@ void SdrEscherImport::ImportHeaderFooterContainer( DffRecordHeader& rHd, HeaderF } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } } @@ -3246,7 +3257,8 @@ PPTExtParaProv::PPTExtParaProv( SdrPowerPointImport& rMan, SvStream& rSt, const #ifdef DBG_UTIL else OSL_FAIL( "PPTExParaProv::PPTExParaProv - unknown atom interpreting the PPT_PST_ExtendedBuGraContainer (SJ)" ); #endif - aBuGraAtomHd.SeekToEndOfRecord( rSt ); + if (!aBuGraAtomHd.SeekToEndOfRecord(rSt)) + break; } if ( !aBuGraList.empty() ) bGraphics = true; @@ -3270,7 +3282,8 @@ PPTExtParaProv::PPTExtParaProv( SdrPowerPointImport& rMan, SvStream& rSt, const break; #endif } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } } @@ -3319,7 +3332,8 @@ PPTExtParaProv::PPTExtParaProv( SdrPowerPointImport& rMan, SvStream& rSt, const case 0xf144 : break; } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } } rSt.Seek( nOldPos ); @@ -4096,7 +4110,10 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd break; } else - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; + } } } @@ -4110,7 +4127,10 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd if ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) break; else - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; + } } while ( ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) && ( rIn.Tell() < nEndRecPos ) ) //TODO: aTxMasterStyleHd may be used without having been properly initialized { @@ -4212,7 +4232,8 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd } #endif } - aTxMasterStyleHd.SeekToEndOfRecord( rIn ); + if (!aTxMasterStyleHd.SeekToEndOfRecord(rIn)) + break; ReadDffRecordHeader( rIn, aTxMasterStyleHd ); } if ( !mpCharSheet[ TSS_TYPE_SUBTITLE ] ) @@ -4285,7 +4306,10 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd break; } else - aTxMasterStyleHd2.SeekToEndOfRecord( rIn ); + { + if (!aTxMasterStyleHd2.SeekToEndOfRecord(rIn)) + break; + } } } } @@ -6480,7 +6504,8 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport if ( ( nTmpSlideId == nSlideId ) && ( pHd->nRecInstance == nRefNum ) ) { - pHd->SeekToEndOfRecord( rIn ); + if (!pHd->SeekToEndOfRecord(rIn)) + break; ReadDffRecordHeader( rIn, aPresRuleHd ); if ( aPresRuleHd.nRecType == PPT_PST_ExtendedParagraphAtom ) { @@ -6810,7 +6835,8 @@ PPTTextObj::PPTTextObj( SvStream& rIn, SdrPowerPointImport& rSdrPowerPointImport } break; } - aTextHd.SeekToEndOfRecord( rIn ); + if (!aTextHd.SeekToEndOfRecord(rIn)) + break; if ( pEntry ) { // sorting fields ( hi >> lo ) diff --git a/sd/qa/unit/data/ppt/pass/hang-15.ppt b/sd/qa/unit/data/ppt/pass/hang-15.ppt new file mode 100644 index 0000000..b93255a Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-15.ppt differ diff --git a/sd/qa/unit/data/ppt/pass/hang-16.ppt b/sd/qa/unit/data/ppt/pass/hang-16.ppt new file mode 100644 index 0000000..c398d2b Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-16.ppt differ diff --git a/sd/qa/unit/data/ppt/pass/hang-17.ppt b/sd/qa/unit/data/ppt/pass/hang-17.ppt new file mode 100644 index 0000000..de876ff Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-17.ppt differ diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 31fe108..530be9c 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -521,7 +521,8 @@ bool ImplSdPPTImport::Import() break; rStCtrl.SeekRel( 8 ); rStCtrl.ReadUInt32( pPtr->nIndex ); - aHyperE.SeekToEndOfRecord( rStCtrl ); + if (!aHyperE.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -826,7 +827,8 @@ bool ImplSdPPTImport::Import() } break; } - aProgTagContentHd.SeekToEndOfRecord( rStCtrl ); + if (!aProgTagContentHd.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -953,7 +955,8 @@ bool ImplSdPPTImport::Import() case PPT_PST_SlideTime10Atom : // ??? don't know, this atom is always 8 bytes big break; // and is appearing in nearly every l10 progtag } - aProgTagContentHd.SeekToEndOfRecord( rStCtrl ); + if (!aProgTagContentHd.SeekToEndOfRecord(rStCtrl)) + break; } } } @@ -965,7 +968,8 @@ bool ImplSdPPTImport::Import() break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } ImportPageEffect( pPage, bNewAnimationsUsed ); } @@ -1786,7 +1790,8 @@ void ImplSdPPTImport::ImportPageEffect( SdPage* pPage, const bool bNewAnimations } } } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } if ( bTryTwice && !bSSSlideInfoAtom ) { @@ -1948,7 +1953,10 @@ OUString ImplSdPPTImport::ReadSound(sal_uInt32 nSoundRef) const } } if ( !bDone ) - aSoundRecHd.SeekToEndOfRecord( rStCtrl ); + { + if (!aSoundRecHd.SeekToEndOfRecord(rStCtrl)) + break; + } } } } @@ -2009,7 +2017,8 @@ OUString ImplSdPPTImport::ReadMedia( sal_uInt32 nMediaRef ) const } break; } - aHd.SeekToEndOfRecord( rStCtrl ); + if (!aHd.SeekToEndOfRecord(rStCtrl)) + break; } break; } @@ -2018,7 +2027,8 @@ OUString ImplSdPPTImport::ReadMedia( sal_uInt32 nMediaRef ) const } break; } - aHdMovie.SeekToEndOfRecord( rStCtrl ); + if (!aHdMovie.SeekToEndOfRecord(rStCtrl)) + break; } } return aRetVal; @@ -2676,7 +2686,8 @@ SdrObject* ImplSdPPTImport::ProcessObj( SvStream& rSt, DffObjData& rObjData, voi } break; } - aHd.SeekToEndOfRecord( rSt ); + if (!aHd.SeekToEndOfRecord(rSt)) + break; } while( ( rSt.GetError() == 0 ) && ( rSt.Tell() < nClientDataLen ) ); diff --git a/sd/source/filter/ppt/propread.cxx b/sd/source/filter/ppt/propread.cxx index 64e3725..286c61f 100644 --- a/sd/source/filter/ppt/propread.cxx +++ b/sd/source/filter/ppt/propread.cxx @@ -319,7 +319,7 @@ bool Section::GetDictionary( Dictionary& rDict ) void Section::Read( SotStorageStream *pStrm ) { - sal_uInt32 i, nSecOfs, nPropSize, nStrmSize; + sal_uInt32 nSecOfs, nPropSize, nStrmSize; nSecOfs = pStrm->Tell(); pStrm->Seek( STREAM_SEEK_TO_END ); @@ -357,7 +357,7 @@ void Section::Read( SotStorageStream *pStrm ) bool bVariant = ( nPropType == VT_VARIANT ); - for ( i = 0; nPropSize && ( i < nVectorCount ); i++ ) + for (sal_uInt32 i = 0; nPropSize && ( i < nVectorCount ); ++i) { if ( bVariant ) { @@ -453,7 +453,7 @@ void Section::Read( SotStorageStream *pStrm ) if( nPropSize > nSecSize - nSecOfs ) nPropSize = nSecSize - nSecOfs; sal_uInt8* pBuf = new sal_uInt8[ nPropSize ]; - pStrm->Read( pBuf, nPropSize ); + nPropSize = pStrm->Read(pBuf, nPropSize); AddProperty( nPropId, pBuf, nPropSize ); delete[] pBuf; } @@ -488,14 +488,17 @@ void Section::Read( SotStorageStream *pStrm ) ... etc. - the rest is truncated
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits