diff options
-rwxr-xr-x[-rw-r--r--] | shell/inc/internal/propsheets.hxx | 0 | ||||
-rwxr-xr-x | shell/inc/internal/utilities.hxx | 6 | ||||
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/columninfo/columninfo.cxx | 5 | ||||
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/infotips/infotips.cxx | 2 | ||||
-rwxr-xr-x | shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx | 3 | ||||
-rwxr-xr-x | shell/source/win32/shlxthandler/propsheets/propsheets.cxx | 93 | ||||
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/util/fileextensions.cxx | 9 | ||||
-rwxr-xr-x[-rw-r--r--] | shell/source/win32/shlxthandler/util/utilities.cxx | 22 |
9 files changed, 102 insertions, 41 deletions
diff --git a/shell/inc/internal/propsheets.hxx b/shell/inc/internal/propsheets.hxx index 0159379e3127..0159379e3127 100644..100755 --- a/shell/inc/internal/propsheets.hxx +++ b/shell/inc/internal/propsheets.hxx diff --git a/shell/inc/internal/utilities.hxx b/shell/inc/internal/utilities.hxx index 4701a2682446..c67787c5cb9d 100755 --- a/shell/inc/internal/utilities.hxx +++ b/shell/inc/internal/utilities.hxx @@ -84,6 +84,12 @@ bool HasOnlySpaces(const std::wstring& String); Windows Locale Identifier corresponding to input LocaleSet. */ +//--------------------------------- +/** Convert a long path name using Windows api call GetShortPathName +*/ +std::wstring getShortPathName( const std::wstring& aLongName ); + + #ifndef OS2 LCID LocaleSetToLCID( const LocaleSet_t & Locale ); #endif diff --git a/shell/source/win32/shlxthandler/columninfo/columninfo.cxx b/shell/source/win32/shlxthandler/columninfo/columninfo.cxx index f8816668f8ab..ab6c8bae2922 100644..100755 --- a/shell/source/win32/shlxthandler/columninfo/columninfo.cxx +++ b/shell/source/win32/shlxthandler/columninfo/columninfo.cxx @@ -152,14 +152,15 @@ HRESULT STDMETHODCALLTYPE CColumnInfo::GetColumnInfo(DWORD dwIndex, SHCOLUMNINFO // //----------------------------- - HRESULT STDMETHODCALLTYPE CColumnInfo::GetItemData(LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VARIANT *pvarData) +HRESULT STDMETHODCALLTYPE CColumnInfo::GetItemData(LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VARIANT *pvarData) { if (IsOOFileExtension(pscd->pwszExt)) { try { + std::wstring fname = getShortPathName( std::wstring( pscd->wszFile ) ); - CMetaInfoReader meta_info_accessor(WStringToString(pscd->wszFile)); + CMetaInfoReader meta_info_accessor(WStringToString(fname)); VariantClear(pvarData); diff --git a/shell/source/win32/shlxthandler/infotips/infotips.cxx b/shell/source/win32/shlxthandler/infotips/infotips.cxx index 72da8c9e7060..c6bf925ac6a9 100644..100755 --- a/shell/source/win32/shlxthandler/infotips/infotips.cxx +++ b/shell/source/win32/shlxthandler/infotips/infotips.cxx @@ -353,6 +353,8 @@ HRESULT STDMETHODCALLTYPE CInfoTip::Load(LPCOLESTR pszFileName, DWORD /*dwMode*/ m_FileNameOnly = std::wstring(begin, end); + fname = getShortPathName( fname ); + std::string fnameA = WStringToString(fname); // #115531# diff --git a/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx b/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx index adcf2b2f8ddf..30151fc5dd75 100755 --- a/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx +++ b/shell/source/win32/shlxthandler/ooofilt/ooofilt.cxx @@ -657,7 +657,8 @@ SCODE STDMETHODCALLTYPE COooFilter::IsDirty() SCODE STDMETHODCALLTYPE COooFilter::Load(LPCWSTR pszFileName, DWORD /*dwMode*/) { // Load just sets the filename for GetChunk to read and ignores the mode - m_pwszFileName = pszFileName; + m_pwszFileName = getShortPathName( pszFileName ); + // Open the file previously specified in call to IPersistFile::Load and get content. try { diff --git a/shell/source/win32/shlxthandler/propsheets/propsheets.cxx b/shell/source/win32/shlxthandler/propsheets/propsheets.cxx index a45c7967f233..d668479d5ff5 100755 --- a/shell/source/win32/shlxthandler/propsheets/propsheets.cxx +++ b/shell/source/win32/shlxthandler/propsheets/propsheets.cxx @@ -157,13 +157,26 @@ HRESULT STDMETHODCALLTYPE CPropertySheet::Initialize( NULL, 0))) { - DragQueryFileA( - reinterpret_cast<HDROP>(medium.hGlobal), - 0, - m_szFileName, - sizeof(m_szFileName)); - - hr = S_OK; + UINT size = DragQueryFile( reinterpret_cast<HDROP>(medium.hGlobal), 0, 0, 0 ); + if ( size != 0 ) + { + TCHAR * buffer = new TCHAR[ size + 1 ]; + UINT result_size = DragQueryFile( reinterpret_cast<HDROP>(medium.hGlobal), + 0, buffer, size + 1 ); + if ( result_size != 0 ) + { + std::wstring fname = getShortPathName( buffer ); + std::string fnameA = WStringToString( fname ); + ZeroMemory( m_szFileName, sizeof( m_szFileName ) ); + strncpy( m_szFileName, fnameA.c_str(), ( sizeof( m_szFileName ) - 1 ) ); + hr = S_OK; + } + else + hr = E_INVALIDARG; + delete [] buffer; + } + else + hr = E_INVALIDARG; } else hr = E_INVALIDARG; @@ -320,24 +333,29 @@ BOOL CALLBACK CPropertySheet::PropPageStatisticsProc(HWND hwnd, UINT uiMsg, WPAR //################################## void CPropertySheet::InitPropPageSummary(HWND hwnd, LPPROPSHEETPAGE /*lppsp*/) { - CMetaInfoReader metaInfo(m_szFileName); - - SetWindowText(GetDlgItem(hwnd,IDC_TITLE), metaInfo.getTagData( META_INFO_TITLE ).c_str() ); - SetWindowText(GetDlgItem(hwnd,IDC_AUTHOR), metaInfo.getTagData( META_INFO_AUTHOR ).c_str() ); - SetWindowText(GetDlgItem(hwnd,IDC_SUBJECT), metaInfo.getTagData( META_INFO_SUBJECT ).c_str() ); - SetWindowText(GetDlgItem(hwnd,IDC_KEYWORDS), metaInfo.getTagData( META_INFO_KEYWORDS ).c_str() ); - - // comments read from meta.xml use "\n" for return, but this will not displayable in Edit control, add - // "\r" before "\n" to form "\r\n" in order to display return in Edit control. - std::wstring tempStr = metaInfo.getTagData( META_INFO_DESCRIPTION ).c_str(); - std::wstring::size_type itor = tempStr.find ( L"\n" , 0 ); - while (itor != std::wstring::npos) + try + { + CMetaInfoReader metaInfo(m_szFileName); + + SetWindowText(GetDlgItem(hwnd,IDC_TITLE), metaInfo.getTagData( META_INFO_TITLE ).c_str() ); + SetWindowText(GetDlgItem(hwnd,IDC_AUTHOR), metaInfo.getTagData( META_INFO_AUTHOR ).c_str() ); + SetWindowText(GetDlgItem(hwnd,IDC_SUBJECT), metaInfo.getTagData( META_INFO_SUBJECT ).c_str() ); + SetWindowText(GetDlgItem(hwnd,IDC_KEYWORDS), metaInfo.getTagData( META_INFO_KEYWORDS ).c_str() ); + + // comments read from meta.xml use "\n" for return, but this will not displayable in Edit control, add + // "\r" before "\n" to form "\r\n" in order to display return in Edit control. + std::wstring tempStr = metaInfo.getTagData( META_INFO_DESCRIPTION ).c_str(); + std::wstring::size_type itor = tempStr.find ( L"\n" , 0 ); + while (itor != std::wstring::npos) + { + tempStr.insert(itor, L"\r"); + itor = tempStr.find(L"\n", itor + 2); + } + SetWindowText(GetDlgItem(hwnd,IDC_COMMENTS), tempStr.c_str()); + } + catch (const std::exception&) { - tempStr.insert(itor, L"\r"); - itor = tempStr.find(L"\n", itor + 2); } - SetWindowText(GetDlgItem(hwnd,IDC_COMMENTS), tempStr.c_str()); - } //--------------------------------- @@ -345,22 +363,23 @@ void CPropertySheet::InitPropPageSummary(HWND hwnd, LPPROPSHEETPAGE /*lppsp*/) */ void CPropertySheet::InitPropPageStatistics(HWND hwnd, LPPROPSHEETPAGE /*lppsp*/) { - CMetaInfoReader metaInfo(m_szFileName); - - document_statistic_reader_ptr doc_stat_reader = create_document_statistic_reader(m_szFileName, &metaInfo); + try + { + CMetaInfoReader metaInfo(m_szFileName); - statistic_group_list_t sgl; - doc_stat_reader->read(&sgl); + document_statistic_reader_ptr doc_stat_reader = create_document_statistic_reader(m_szFileName, &metaInfo); - list_view_builder_ptr lv_builder = create_list_view_builder( - GetDlgItem(hwnd, IDC_STATISTICSLIST), - GetResString(IDS_PROPERTY), - GetResString(IDS_PROPERTY_VALUE)); + statistic_group_list_t sgl; + doc_stat_reader->read(&sgl); - lv_builder->build(sgl); + list_view_builder_ptr lv_builder = create_list_view_builder( + GetDlgItem(hwnd, IDC_STATISTICSLIST), + GetResString(IDS_PROPERTY), + GetResString(IDS_PROPERTY_VALUE)); + lv_builder->build(sgl); + } + catch (const std::exception&) + { + } } - - - - diff --git a/shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx b/shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx index 13f49c8a2efd..62fd306317be 100644..100755 --- a/shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx +++ b/shell/source/win32/shlxthandler/thumbviewer/thumbviewer.cxx @@ -367,7 +367,8 @@ HRESULT STDMETHODCALLTYPE CThumbviewer::Extract(HBITMAP *phBmpImage) try { - std::auto_ptr<ZipFile> zipfile(new ZipFile(WStringToString(filename_))); + std::wstring fname = getShortPathName( filename_ ); + std::auto_ptr<ZipFile> zipfile( new ZipFile( WStringToString( fname ) ) ); if (zipfile->HasContent(THUMBNAIL_CONTENT)) { diff --git a/shell/source/win32/shlxthandler/util/fileextensions.cxx b/shell/source/win32/shlxthandler/util/fileextensions.cxx index b8de490a5c47..13e3535c7aa7 100644..100755 --- a/shell/source/win32/shlxthandler/util/fileextensions.cxx +++ b/shell/source/win32/shlxthandler/util/fileextensions.cxx @@ -27,6 +27,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_shell.hxx" +#include "algorithm" #include "internal/fileextensions.hxx" //------------------------------------ @@ -87,9 +88,17 @@ std::string get_file_name_extension(const std::string& file_name) /** Return the type of a file */ +char easytolower( char in ) +{ + if( in<='Z' && in>='A' ) + return in-('Z'-'z'); + return in; +} + File_Type_t get_file_type(const std::string& file_name) { std::string fext = get_file_name_extension(file_name); + std::transform(fext.begin(), fext.end(), fext.begin(), easytolower); if (std::string::npos != WRITER_FILE_EXTENSIONS.find(fext)) return WRITER; diff --git a/shell/source/win32/shlxthandler/util/utilities.cxx b/shell/source/win32/shlxthandler/util/utilities.cxx index f721c4113aa8..005e4689cdce 100644..100755 --- a/shell/source/win32/shlxthandler/util/utilities.cxx +++ b/shell/source/win32/shlxthandler/util/utilities.cxx @@ -148,6 +148,28 @@ bool HasOnlySpaces(const std::wstring& String) return true; } +//--------------------------------- +/** helper function to convert windows pathes to short form. + @returns + shortend path. +*/ + +std::wstring getShortPathName( const std::wstring& aLongName ) +{ + std::wstring shortName = aLongName; + long length = GetShortPathName( aLongName.c_str(), NULL, 0 ); + + if ( length != 0 ) + { + TCHAR* buffer = new TCHAR[ length+1 ]; + length = GetShortPathName( aLongName.c_str(), buffer, length ); + if ( length != 0 ) + shortName = std::wstring( buffer ); + delete [] buffer; + } + return shortName; +} + /** convert LocaleSet pair into Microsoft List of Locale ID (LCID) according to ISO-639 and ISO-3166. http://etext.lib.virginia.edu/tei/iso639.html |