Related: tdf#145169 use INetURLObject::getName and removeSegment

to get the name and link for each part of the path

otherwise for sftp:// clicking on the "Root" doesn't work for me

Change-Id: If6f0ac8f105afd8be2d264b54f76a3d8f345ad75
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123735
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/fpicker/source/office/breadcrumb.cxx b/fpicker/source/office/breadcrumb.cxx
index d884d5b3f..0b27367 100644
--- a/fpicker/source/office/breadcrumb.cxx
+++ b/fpicker/source/office/breadcrumb.cxx
@@ -68,28 +68,42 @@ void Breadcrumb::SetRootName( const OUString& rURL )
void Breadcrumb::SetURL( const OUString& rURL )
{
    m_aCurrentURL = rURL;
    INetURLObject aURL( rURL );
    INetURLObject aURL(rURL);
    aURL.setFinalSlash();
    //prepare the Host port
    OUString sHostPort;

    if( aURL.HasPort() )
    {
        sHostPort += ":" + OUString::number( aURL.GetPort() );
    }

    OUString sUser = aURL.GetUser( INetURLObject::DecodeMechanism::NONE );
    OUString sPath = aURL.GetURLPath(INetURLObject::DecodeMechanism::WithCharset);
    OUString sRootPath = INetURLObject::GetScheme( aURL.GetProtocol() )
                        + sUser
                        + ( sUser.isEmpty() ? OUString() : "@" )
                        + aURL.GetHost()
                        + sHostPort;
    bool bClear = m_eMode == SvtBreadcrumbMode::ONLY_CURRENT_PATH;

    int nSegments = aURL.getSegmentCount();
    unsigned int nPos = 0;

    bool bClear = ( m_eMode == SvtBreadcrumbMode::ONLY_CURRENT_PATH );
    size_t nVecSizeRequired = nSegments + 1;

    while (m_aSegments.size() < nVecSizeRequired)
        appendField();

    // fill the fields under root
    for (int i = nSegments; i; --i)
    {
        OUString sLabel = aURL.getName(INetURLObject::LAST_SEGMENT, true, INetURLObject::DecodeMechanism::WithCharset);
        OUString sLink = aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);

        if (m_eMode == SvtBreadcrumbMode::ALL_VISITED)
        {
            if( m_aSegments[i]->m_xLink->get_label() != sLabel )
                bClear = true;
        }

        m_aSegments[i]->m_xLink->hide();
        m_aSegments[i]->m_xLink->set_label(sLabel);
        m_aSegments[i]->m_xLink->set_sensitive(true);
        m_aSegments[i]->m_xLink->set_uri(sLink);
        m_aUris[m_aSegments[i]->m_xLink.get()] = sLink;

        m_aSegments[i]->m_xSeparator->hide();

        aURL.removeSegment();
    }

    OUString sRootPath = aURL.GetMainURL(INetURLObject::DecodeMechanism::WithCharset);

    // root field
    m_aSegments[0]->m_xLink->set_label( m_sRootName );
@@ -97,32 +111,6 @@ void Breadcrumb::SetURL( const OUString& rURL )
    m_aSegments[0]->m_xLink->set_uri(sRootPath);
    m_aUris[m_aSegments[0]->m_xLink.get()] = sRootPath;

    // fill the other fields

    for( unsigned int i = 1; i < static_cast<unsigned int>(nSegments) + 1; i++ )
    {
        if( i >= m_aSegments.size() )
            appendField();

        unsigned int nEnd = sPath.indexOf( '/', nPos + 1 );
        OUString sLabel = sPath.copy( nPos + 1, nEnd - nPos - 1 );

        if( m_eMode == SvtBreadcrumbMode::ALL_VISITED )
        {
            if( m_aSegments[i]->m_xLink->get_label() != sLabel )
                bClear = true;
        }

        m_aSegments[i]->m_xLink->set_label( sLabel );
        m_aUris[m_aSegments[i]->m_xLink.get()] = sRootPath + sPath.subView(0, nEnd);
        m_aSegments[i]->m_xLink->hide();
        m_aSegments[i]->m_xLink->set_sensitive(true);

        m_aSegments[i]->m_xSeparator->hide();

        nPos = nEnd;
    }

    // clear unused fields
    for (size_t i = nSegments + 1; i < m_aSegments.size(); i++ )
    {