tdf#91043 - vcl: gtk file picker should tolerate empty filter list.

Apparently LibreLex creates a dialog through UNO and sets no filters.

Change-Id: I518beef6f9c6ebab0d2e49bda78a33a283ad93d3
Reviewed-on: https://gerrit.libreoffice.org/29238
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
diff --git a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
index 543195f..26d6c74 100644
--- a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
+++ b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
@@ -570,13 +570,16 @@ void SAL_CALL SalGtkFilePicker::setCurrentFilter( const OUString& aTitle )
void SalGtkFilePicker::updateCurrentFilterFromName(const gchar* filtername)
{
    OUString aFilterName(filtername, strlen(filtername), RTL_TEXTENCODING_UTF8);
    FilterList::iterator aEnd = m_pFilterList->end();
    for (FilterList::iterator aIter = m_pFilterList->begin(); aIter != aEnd; ++aIter)
    if (m_pFilterList)
    {
        if (aFilterName == shrinkFilterName( aIter->getTitle()))
        FilterList::iterator aEnd = m_pFilterList->end();
        for (FilterList::iterator aIter = m_pFilterList->begin(); aIter != aEnd; ++aIter)
        {
            m_aCurrentFilter = aIter->getTitle();
            break;
            if (aFilterName == shrinkFilterName( aIter->getTitle()))
            {
                m_aCurrentFilter = aIter->getTitle();
                break;
            }
        }
    }
}
@@ -788,10 +791,11 @@ uno::Sequence<OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw( uno
                        OUString aNewFilter;
                        OUString aOldFilter = getCurrentFilter();
                        bool bChangeFilter = true;
                        for ( FilterList::iterator aListIter = m_pFilterList->begin();
                              aListIter != m_pFilterList->end();
                              ++aListIter
                        )
                        if ( m_pFilterList )
                            for ( FilterList::iterator aListIter = m_pFilterList->begin();
                                  aListIter != m_pFilterList->end();
                                  ++aListIter
                                )
                        {
                            if( lcl_matchFilter( aListIter->getFilter(), aStarDot+sExtension ) )
                            {
@@ -825,47 +829,49 @@ uno::Sequence<OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw( uno
            OSL_TRACE( "2: current filter is %s\n",
                OUStringToOString( sFilterName, RTL_TEXTENCODING_UTF8 ).getStr() );

            FilterList::iterator aListIter = ::std::find_if(
                m_pFilterList->begin(), m_pFilterList->end(), FilterTitleMatch(sFilterName) );

            OUString aFilter;
            if (aListIter != m_pFilterList->end())
                aFilter = aListIter->getFilter();

            OSL_TRACE( "turned into %s\n",
                OUStringToOString( aFilter, RTL_TEXTENCODING_UTF8 ).getStr() );

            nTokenIndex = 0;
            OUString sToken;
            //   OUString strExt;
            do
            if (m_pFilterList)
            {
                sToken = aFilter.getToken( 0, '.', nTokenIndex );
                FilterList::iterator aListIter = ::std::find_if(
                    m_pFilterList->begin(), m_pFilterList->end(), FilterTitleMatch(sFilterName) );

                if ( sToken.lastIndexOf( ';' ) != -1 )
                OUString aFilter;
                if (aListIter != m_pFilterList->end())
                    aFilter = aListIter->getFilter();

                OSL_TRACE( "turned into %s\n",
                           OUStringToOString( aFilter, RTL_TEXTENCODING_UTF8 ).getStr() );

                nTokenIndex = 0;
                OUString sToken;
                do
                {
                    sal_Int32 nZero = 0;
                    OUString aCurrentToken = sToken.getToken( 0, ';', nZero);
                    sToken = aFilter.getToken( 0, '.', nTokenIndex );

                    sToken = aCurrentToken;
                    break;
                    if ( sToken.lastIndexOf( ';' ) != -1 )
                    {
                        sal_Int32 nZero = 0;
                        OUString aCurrentToken = sToken.getToken( 0, ';', nZero);

                        sToken = aCurrentToken;
                        break;
                    }
                }
            }
            while( nTokenIndex >= 0 );
                while( nTokenIndex >= 0 );

            if( !bExtensionTypedIn && ( sToken != "*" ) )
            {
                //if the filename does not already have the auto extension, stick it on
                OUString sExtension = "." + sToken;
                OUString &rBase = aSelectedFiles[nIndex];
                sal_Int32 nExtensionIdx = rBase.getLength() - sExtension.getLength();
                SAL_INFO(
                    "vcl.gtk",
                    "idx are " << rBase.lastIndexOf(sExtension) << " "
                if( !bExtensionTypedIn && ( sToken != "*" ) )
                {
                    //if the filename does not already have the auto extension, stick it on
                    OUString sExtension = "." + sToken;
                    OUString &rBase = aSelectedFiles[nIndex];
                    sal_Int32 nExtensionIdx = rBase.getLength() - sExtension.getLength();
                    SAL_INFO(
                        "vcl.gtk",
                        "idx are " << rBase.lastIndexOf(sExtension) << " "
                        << nExtensionIdx);

                if( rBase.lastIndexOf( sExtension ) != nExtensionIdx )
                    rBase += sExtension;
                    if( rBase.lastIndexOf( sExtension ) != nExtensionIdx )
                        rBase += sExtension;
                }
            }

        }