sd/inc/glob.hrc                                        |    2 
 sd/source/core/glob.src                                |    5 
 sd/source/ui/dlg/RemoteDialog.cxx                      |   14 -
 sd/source/ui/dlg/RemoteDialogClientBox.cxx             |  196 ++++++++++-------
 sd/source/ui/dlg/RemoteDialogClientBox.hxx             |   16 -
 sd/source/ui/inc/RemoteServer.hxx                      |   20 +
 sd/source/ui/remotecontrol/Server.cxx                  |   77 +++++-
 sd/source/ui/slidesorter/controller/SlsSlotManager.cxx |   13 +
 sd/source/ui/view/outlnvs2.cxx                         |   11 
 9 files changed, 240 insertions(+), 114 deletions(-)

New commits:
commit a4decedeb6dc15e2bbd26217ed9f49903847fa3c
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Mon Jun 30 07:42:21 2014 +0200

    Impress Remote Dialog: avoid flickering when device selected.
    
    Changing visibility of items (i.e. the pin box / deauthorise button)
    whilst painting the ClientBox can cause extra Paint request to be fired,
    essentially resulting in an infinite loop (although slightly slowed
    down by going through a VCL timer). These repeated paints (and repeated
    hide/showing) of items resulted in a rather ugly flickering, which
    is now gone.
    
    Change-Id: Ib6b22dd1b08f3be5d1f543cfbb27a1ed782b5720

diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index f651457..f59347b 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -84,7 +84,6 @@ ClientBox::ClientBox( Window* pParent, WinBits nStyle ) :
     m_aDeauthoriseButton.SetText( SD_RESSTR(STR_DEAUTHORISE_CLIENT) );
     m_aDeauthoriseButton.SetClickHdl( LINK( this, ClientBox, DeauthoriseHdl ) 
);
 
-    SetPaintTransparent( true );
     SetPosPixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, 
RSC_SP_DLG_INNERBORDER_TOP ) );
     long nIconHeight = 2*TOP_OFFSET + SMALL_ICON_SIZE;
     long nTitleHeight = 2*TOP_OFFSET + GetTextHeight();
@@ -245,15 +244,30 @@ void ClientBox::selectEntry( const long nPos )
         }
     }
 
+    // We empty the pin box now too, just in case the user previously
+    // entered a pin, but then changed their selected device.
+    m_aPinBox.SetText( "" );
+    if ( m_bHasActive )
+    {
+        bool bAlreadyAuthorised =
+            m_vEntries[ m_nActive ]->m_pClientInfo->mbIsAlreadyAuthorised;
+
+        if ( bAlreadyAuthorised )
+        {
+            m_aDeauthoriseButton.GetFocus();
+        }
+        else
+        {
+            m_aPinBox.GetFocus();
+        }
+    }
+
     if ( IsReallyVisible() )
     {
         m_bNeedsRecalc = true;
         Invalidate();
     }
 
-    // We empty the pin box now too, just in case the user previously
-    // entered a pin, but then changed their selected device.
-    m_aPinBox.SetText( "" );
     guard.clear();
 }
 
@@ -317,43 +331,9 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
     aPos.Y() += aTextHeight;
     if ( pEntry->m_bActive )
     {
-        Size aSize = LogicToPixel( Size( RSC_CD_PUSHBUTTON_WIDTH, 
RSC_CD_PUSHBUTTON_HEIGHT ),
-                               MapMode( MAP_APPFONT ) );
-        m_aPinBox.SetSizePixel( aSize );
-        m_aDeauthoriseButton.SetSizePixel( 
m_aDeauthoriseButton.GetOptimalSize() );
-        const Rectangle aRect( GetEntryRect( m_nActive ) );
-        Size  aBtnSize( m_aPinBox.GetSizePixel() );
-        Point aBtnPos( aRect.Left(),
-                   aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
-
-        bool bAlreadyAuthorised = pEntry->m_pClientInfo->mbIsAlreadyAuthorised;
-
-        if ( !bAlreadyAuthorised )
-        {
-            OUString sPinText(SD_RESSTR(STR_ENTER_PIN));
-            DrawText( Rectangle( aBtnPos.X(), aBtnPos.Y(), rRect.Right(), 
rRect.Bottom() - TOP_OFFSET),
-                      sPinText, 0 );
-
-            aBtnPos = Point( aRect.Left() + GetTextWidth( sPinText ),
-                             aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
-        }
-        m_aPinBox.SetPosPixel( aBtnPos );
-        m_aPinBox.Show( !bAlreadyAuthorised );
-
-        aBtnPos.Move( 20, 0 );
-        m_aDeauthoriseButton.SetPosPixel( aBtnPos );
-        m_aDeauthoriseButton.Show( bAlreadyAuthorised );
-        if ( bAlreadyAuthorised )
-        {
-            m_aDeauthoriseButton.GetFocus();
-        }
-        else
-        {
-            m_aPinBox.GetFocus();
-        }
-    }
-    else
-    {
+      OUString sPinText(SD_RESSTR(STR_ENTER_PIN));
+      DrawText( m_sPinTextRect,
+                sPinText, 0 );
     }
 
     SetLineColor( Color( COL_LIGHTGRAY ) );
@@ -367,10 +347,48 @@ void ClientBox::RecalcAll()
 
     SetupScrollBar();
 
-    if ( m_bHasActive )
+    Size aPBSize = LogicToPixel(
+                      Size( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT 
),
+                      MapMode( MAP_APPFONT ) );
+    m_aPinBox.SetSizePixel( aPBSize );
+    m_aDeauthoriseButton.SetSizePixel( m_aDeauthoriseButton.GetOptimalSize() );
+
+    if ( !m_bHasActive )
+    {
+        m_aPinBox.Show( false );
+        m_aDeauthoriseButton.Show( false );
+    }
+    else
     {
         Rectangle aEntryRect = GetEntryRect( m_nActive );
 
+        Size  aPinBoxSize( m_aPinBox.GetSizePixel() );
+        Point aPos( aEntryRect.Left(),
+                    aEntryRect.Bottom() - TOP_OFFSET - aPinBoxSize.Height() );
+
+        bool bAlreadyAuthorised = m_vEntries[ m_nActive 
]->m_pClientInfo->mbIsAlreadyAuthorised;
+
+        if ( !bAlreadyAuthorised )
+        {
+            m_sPinTextRect = Rectangle( aPos.X(), aPos.Y(),
+                                        aEntryRect.Right(),
+                                        aEntryRect.Bottom() - TOP_OFFSET);
+
+            OUString sPinText(SD_RESSTR(STR_ENTER_PIN));
+
+            aPos = Point( aEntryRect.Left() + GetTextWidth( sPinText ),
+                          aEntryRect.Bottom() - TOP_OFFSET - 
aPinBoxSize.Height() );
+            m_aPinBox.SetPosPixel( aPos );
+        }
+        else
+        {
+            aPos += Point( 20, 0 );
+            m_aDeauthoriseButton.SetPosPixel( aPos );
+        }
+
+        m_aPinBox.Show( !bAlreadyAuthorised );
+        m_aDeauthoriseButton.Show( bAlreadyAuthorised );
+
         if ( m_bAdjustActive )
         {
             m_bAdjustActive = false;
@@ -475,15 +493,6 @@ void ClientBox::Paint( const Rectangle &/*rPaintRect*/ )
 
     const ::osl::MutexGuard aGuard( m_entriesMutex );
 
-    // It's easiest to disbale these and only reenable as appropriate in 
DrawRow
-    // -- both are shown in only certain situations, and e.g. if we've removed
-    // the last entry then the visibility of the deauthorise button won't be
-    // changed in the loop below, or when we select 0 entries then we
-    // won't run through the appropriate conditions which would otherwise
-    // set the visibility of the pin-box.
-    m_aDeauthoriseButton.Show( false );
-    m_aPinBox.Show( false );
-
     typedef std::vector< TClientBoxEntry >::iterator ITER;
     for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); 
++iIndex )
     {
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.hxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
index 1d07cbd..bcbf621 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.hxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
@@ -103,6 +103,7 @@ class ClientBox:
 
     NumericBox      m_aPinBox;
     PushButton      m_aDeauthoriseButton;
+    Rectangle       m_sPinTextRect;
 
     ScrollBar       m_aScrollBar;
 
commit 580b1890d8985d4248b1d5d783ad379d64e82259
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Sat Jun 28 14:45:09 2014 +0200

    Allow removal of remotes even if Server not running.
    
    This is purely config manipulation so shouldn't rely on having
    the Server actually running (e.g. if disabled, and/or if network
    setup failed).
    
    Change-Id: Ifc6e5639ba6842a18eb0be99387a5f8dd871da06

diff --git a/sd/source/ui/remotecontrol/Server.cxx 
b/sd/source/ui/remotecontrol/Server.cxx
index 8133537..d80b846 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -239,16 +239,16 @@ std::vector< ::boost::shared_ptr< ClientInfo > > 
RemoteServer::getClients()
 {
     SAL_INFO( "sdremote", "RemoteServer::getClients() called" );
     std::vector< ::boost::shared_ptr< ClientInfo > > aClients;
-    if ( !spServer )
+    if ( spServer )
     {
-        SAL_INFO( "sdremote", "No remote server instance => no clients" );
-        return aClients;
+        MutexGuard aGuard( sDataMutex );
+        aClients.assign( spServer->mAvailableClients.begin(),
+                         spServer->mAvailableClients.end() );
+    }
+    else
+    {
+        SAL_INFO( "sdremote", "No remote server instance => no remote clients" 
);
     }
-
-    MutexGuard aGuard( sDataMutex );
-    aClients.assign( spServer->mAvailableClients.begin(),
-                     spServer->mAvailableClients.end() );
-
     // We also need to provide authorised clients (no matter whether or not
     // they are actually available), so that they can be de-authorised if
     // necessary. We specifically want these to be at the end of the list
@@ -342,8 +342,6 @@ void RemoteServer::deauthoriseClient( ::boost::shared_ptr< 
ClientInfo > pClient
     // the UI.
 
     SAL_INFO( "sdremote", "RemoteServer::deauthoriseClient called" );
-    if ( !spServer )
-        return;
 
     if ( !pClient->mbIsAlreadyAuthorised )
     // We can't remove unauthorised clients from the authorised list...
commit d61468314bbfd2a79929b48e62d7e5ed354ab79b
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 18:20:14 2014 +0200

    fdo#63378 Enable Impress Remote Dialog menu item for all view shells.
    
    Change-Id: I47f040c1463b4be648d411c2f7f0070b8aed3e9c

diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx 
b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
index 5194360..9bf97ee 100644
--- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
@@ -276,6 +276,19 @@ void SlotManager::FuTemporary (SfxRequest& rRequest)
         }
         break;
 
+        case SID_REMOTE_DLG:
+        {
+#ifdef ENABLE_SDREMOTE
+             SdAbstractDialogFactory* pFact = 
SdAbstractDialogFactory::Create();
+             VclAbstractDialog* pDlg = pFact ?
+                 pFact->CreateRemoteDialog( 
mrSlideSorter.GetContentWindow().get() ) :
+                 0;
+             if (pDlg)
+                 pDlg->Execute();
+#endif
+        }
+        break;
+
         default:
             break;
     }
diff --git a/sd/source/ui/view/outlnvs2.cxx b/sd/source/ui/view/outlnvs2.cxx
index f916b8f..7ad626c 100644
--- a/sd/source/ui/view/outlnvs2.cxx
+++ b/sd/source/ui/view/outlnvs2.cxx
@@ -285,6 +285,17 @@ void OutlineViewShell::FuTemporary(SfxRequest &rReq)
         }
         break;
 
+        case SID_REMOTE_DLG:
+        {
+#ifdef ENABLE_SDREMOTE
+             SdAbstractDialogFactory* pFact = 
SdAbstractDialogFactory::Create();
+             VclAbstractDialog* pDlg = pFact ? 
pFact->CreateRemoteDialog(GetActiveWindow()) : 0;
+             if (pDlg)
+                 pDlg->Execute();
+#endif
+        }
+        break;
+
         case SID_CUSTOMSHOW_DLG:
         {
             SetCurrentFunction( FuCustomShowDlg::Create( this, 
GetActiveWindow(), pOlView, GetDoc(), rReq ) );
commit eba630ca1689d65d6f58c0e6bd7658cc6eac8dcc
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 17:53:07 2014 +0200

    Remote Dialog: give focus to pin entry when item selected.
    
    Change-Id: I5718a5b881a32ecf4cebdbd6a682097119c26837

diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 69c0b0c..f651457 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -343,6 +343,14 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
         aBtnPos.Move( 20, 0 );
         m_aDeauthoriseButton.SetPosPixel( aBtnPos );
         m_aDeauthoriseButton.Show( bAlreadyAuthorised );
+        if ( bAlreadyAuthorised )
+        {
+            m_aDeauthoriseButton.GetFocus();
+        }
+        else
+        {
+            m_aPinBox.GetFocus();
+        }
     }
     else
     {
commit a17737ef45af66b1f86759c02005c28d5585d534
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 17:53:02 2014 +0200

    Remote Dialog: make sure pin box is empty.
    
    The only way to do this seems to be setting an empty string --
    using clear, or setting 0, results in a 0 being shown, which is
    rather ugly and unintuitive.
    
    Change-Id: Ic641c4fcecd634b7fff397989ee0b079239ea44c

diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 47769d2..69c0b0c 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -251,6 +251,9 @@ void ClientBox::selectEntry( const long nPos )
         Invalidate();
     }
 
+    // We empty the pin box now too, just in case the user previously
+    // entered a pin, but then changed their selected device.
+    m_aPinBox.SetText( "" );
     guard.clear();
 }
 
@@ -333,7 +336,6 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
 
             aBtnPos = Point( aRect.Left() + GetTextWidth( sPinText ),
                              aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
-
         }
         m_aPinBox.SetPosPixel( aBtnPos );
         m_aPinBox.Show( !bAlreadyAuthorised );
commit 3c5223b232992b7c49c4827d69bc54366c7a3f48
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 17:46:41 2014 +0200

    Make sure pin box and deauth button hidden when no items selected.
    
    Change-Id: I650191b9b092a3562c7bfcdfe40ac4968d18ae36

diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index c8e0f99..47769d2 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -465,14 +465,14 @@ void ClientBox::Paint( const Rectangle &/*rPaintRect*/ )
 
     const ::osl::MutexGuard aGuard( m_entriesMutex );
 
-    // If we have just removed the last entry (via deauthorise)
-    // then we need to make sure we hide the button (usually
-    // this would all be dealt with in in DrawRow, but that
-    // won't be called for 0 items).
-    if ( m_vEntries.size() == 0 )
-    {
-        m_aDeauthoriseButton.Show( false );
-    }
+    // It's easiest to disbale these and only reenable as appropriate in 
DrawRow
+    // -- both are shown in only certain situations, and e.g. if we've removed
+    // the last entry then the visibility of the deauthorise button won't be
+    // changed in the loop below, or when we select 0 entries then we
+    // won't run through the appropriate conditions which would otherwise
+    // set the visibility of the pin-box.
+    m_aDeauthoriseButton.Show( false );
+    m_aPinBox.Show( false );
 
     typedef std::vector< TClientBoxEntry >::iterator ITER;
     for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); 
++iIndex )
commit a4620e23cec01169995ec7bc056c51295a4f9907
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 15:32:57 2014 +0200

    Kill some unused/commented code.
    
    These are various remainders of the extension dialog that this
    dialog was originall based on.
    
    Change-Id: I564dd371b7d58322cc3ef03c7401151f3098f333

diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 43ee394..c8e0f99 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -49,8 +49,6 @@ ClientBoxEntry::ClientBoxEntry( 
::boost::shared_ptr<ClientInfo> pClientInfo ) :
 ClientBoxEntry::~ClientBoxEntry()
 {}
 
-// ClientRemovedListener
-
 void ClientRemovedListener::disposing( lang::EventObject const & rEvt )
     throw ( uno::RuntimeException, std::exception )
 {
@@ -96,10 +94,6 @@ ClientBox::ClientBox( Window* pParent, WinBits nStyle ) :
         m_nStdHeight = nIconHeight;
     m_nStdHeight += GetTextHeight() + TOP_OFFSET;
 
-//     nIconHeight = ICON_HEIGHT + 2*TOP_OFFSET + 1;
-//     if ( m_nStdHeight < nIconHeight )
-//         m_nStdHeight = nIconHeight;
-
     m_nActiveHeight = m_nStdHeight;
 
     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
@@ -136,13 +130,6 @@ ClientBox::~ClientBox()
 
     m_bInDelete = true;
 
-    typedef std::vector< TClientBoxEntry >::iterator ITER;
-
-    for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); 
++iIndex )
-    {
-//         (*iIndex)->m_xPackage->removeEventListener( uno::Reference< 
lang::XEventListener > ( m_xRemoveListener, uno::UNO_QUERY ) );
-    }
-
     m_vEntries.clear();
 
     m_xRemoveListener.clear();
@@ -295,17 +282,6 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
 
     // FIXME: draw bluetooth or wifi icon
      Point aPos( rRect.TopLeft() );
-//     aPos += Point( TOP_OFFSET, TOP_OFFSET );
-//     Image aImage;
-//     if ( ! pEntry->m_aIcon )
-//         aImage = m_aDefaultImage;
-//     else
-//         aImage = pEntry->m_aIcon;
-//     Size aImageSize = aImage.GetSizePixel();
-//     if ( ( aImageSize.Width() <= ICON_WIDTH ) && ( aImageSize.Height() <= 
ICON_HEIGHT ) )
-//         DrawImage( Point( aPos.X()+((ICON_WIDTH-aImageSize.Width())/2), 
aPos.Y()+((ICON_HEIGHT-aImageSize.Height())/2) ), aImage );
-//     else
-//         DrawImage( aPos, Size( ICON_WIDTH, ICON_HEIGHT ), aImage );
 
     // Setup fonts
     Font aStdFont( GetFont() );
@@ -365,14 +341,6 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
         aBtnPos.Move( 20, 0 );
         m_aDeauthoriseButton.SetPosPixel( aBtnPos );
         m_aDeauthoriseButton.Show( bAlreadyAuthorised );
-
-//         long nExtraHeight = 0;
-
-//         if ( pEntry->m_bHasButtons )
-//             nExtraHeight = m_nExtraHeight;
-
-//         DrawText( Rectangle( aPos.X(), aPos.Y(), rRect.Right(), 
rRect.Bottom() - nExtraHeight ),
-//                   sDescription, TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK );
     }
     else
     {
@@ -644,8 +612,6 @@ bool ClientBox::Notify( NotifyEvent& rNEvt )
 long ClientBox::addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo )
 {
     long         nPos = 0;
-//     PackageState eState = m_pManager->getPackageState( xPackage );
-//     bool         bLocked = m_pManager->isReadOnly( xPackage );
 
     TClientBoxEntry pEntry( new ClientBoxEntry( pClientInfo ) );
 
@@ -670,23 +636,6 @@ long ClientBox::addEntry( ::boost::shared_ptr<ClientInfo> 
pClientInfo )
 //         }
     }
 
-    //Related: rhbz#702833 Only add a Listener if we're adding a new entry, to
-    //keep in sync with removeEventListener logic
-    if (bNewEntryInserted)
-    {
-
-        //         pEntry->m_xPackage->addEventListener(uno::Reference< 
lang::XEventListener > ( m_xRemoveListener, uno::UNO_QUERY ) );
-    }
-
-//     pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
-//     pEntry->m_bUser       = xPackage->getRepositoryName().equals( 
USER_PACKAGE_MANAGER );
-//     pEntry->m_bShared     = xPackage->getRepositoryName().equals( 
SHARED_PACKAGE_MANAGER );
-//     pEntry->m_bNew        = m_bInCheckMode;
-//     pEntry->m_bMissingLic = bLicenseMissing;
-
-//     if ( bLicenseMissing )
-//         pEntry->m_sErrorText = DialogHelper::getResourceString( 
RID_STR_ERROR_MISSING_LICENSE );
-
     //access to m_nActive must be guarded
     if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) )
         m_nActive += 1;
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.hxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
index 0be1606..1d07cbd 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.hxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
@@ -159,8 +159,6 @@ public:
 
     void    selectEntry( const long nPos );
     long            addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
-    void            updateEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
-    void            removeEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
     void            clearEntries();
 
     void            prepareChecking();
commit 6216eee4b94cace7984eb12dbad26fa91a5de94f
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 15:25:31 2014 +0200

    Impress Remote: allow removal of authorised remotes.
    
    Previously authorising a device meant that it would have access
    forever -- we now list previously authorised remotes in the remote
    dialog, along with controls to allow removal of such remotes.
    
    Change-Id: I4179739f3a2ba0a8fe19c2a0cd0cbbece9cb4352

diff --git a/sd/inc/glob.hrc b/sd/inc/glob.hrc
index 3e2d4a4..f9fc89e 100644
--- a/sd/inc/glob.hrc
+++ b/sd/inc/glob.hrc
@@ -148,7 +148,7 @@
 #define STR_SLIDE_TRANSITION_PANE               RID_GLOB_START+228
 
 #define RID_SLIDESORTER_ICONS                   RID_GLOB_START+227
-
+#define STR_DEAUTHORISE_CLIENT                  RID_GLOB_START+229
 #endif // _SDGLOB_HRC
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/core/glob.src b/sd/source/core/glob.src
index bebd5d6..8bdd59e 100644
--- a/sd/source/core/glob.src
+++ b/sd/source/core/glob.src
@@ -453,4 +453,9 @@ String STR_ENTER_PIN
     Text [ en-US ] = "Enter PIN:";
 };
 
+String STR_DEAUTHORISE_CLIENT
+{
+    Text [ en-US ] = "Remove client authorisation";
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/dlg/RemoteDialog.cxx 
b/sd/source/ui/dlg/RemoteDialog.cxx
index 4265bac..63edf44 100644
--- a/sd/source/ui/dlg/RemoteDialog.cxx
+++ b/sd/source/ui/dlg/RemoteDialog.cxx
@@ -25,20 +25,6 @@ RemoteDialog::RemoteDialog( Window *pWindow )
     get(m_pButtonClose, "close");
     get(m_pClientBox, "tree");
 
-#ifdef ENABLE_SDREMOTE
-    RemoteServer::ensureDiscoverable();
-
-    vector<::boost::shared_ptr<ClientInfo>> aClients( 
RemoteServer::getClients() );
-
-    const vector<::boost::shared_ptr<ClientInfo>>::const_iterator aEnd( 
aClients.end() );
-
-    for ( vector<::boost::shared_ptr<ClientInfo>>::const_iterator aIt( 
aClients.begin() );
-        aIt != aEnd; ++aIt )
-    {
-        m_pClientBox->addEntry( *aIt );
-    }
-#endif
-
     m_pButtonConnect->SetClickHdl( LINK( this, RemoteDialog, 
HandleConnectButton ) );
     SetCloseHdl( LINK( this, RemoteDialog, CloseHdl ) );
     m_pButtonClose->SetClickHdl( LINK( this, RemoteDialog, CloseHdl ) );
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 22affdb..43ee394 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -17,6 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <vector>
+
 #include "svtools/controldims.hrc"
 
 #include "RemoteDialogClientBox.hxx"
@@ -30,6 +32,8 @@
 
 #include "glob.hrc"
 
+using namespace std;
+
 using namespace ::com::sun::star;
 
 namespace sd {
@@ -72,12 +76,15 @@ ClientBox::ClientBox( Window* pParent, WinBits nStyle ) :
     m_nActiveHeight( 0 ),
     m_nExtraHeight( 2 ),
     m_aPinBox( this, 0 ),
+    m_aDeauthoriseButton( this ),
     m_aScrollBar( this, WB_VERT )
 {
     m_aScrollBar.SetScrollHdl( LINK( this, ClientBox, ScrollHdl ) );
     m_aScrollBar.EnableDrag();
 
     m_aPinBox.SetUseThousandSep(false);
+    m_aDeauthoriseButton.SetText( SD_RESSTR(STR_DEAUTHORISE_CLIENT) );
+    m_aDeauthoriseButton.SetClickHdl( LINK( this, ClientBox, DeauthoriseHdl ) 
);
 
     SetPaintTransparent( true );
     SetPosPixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, 
RSC_SP_DLG_INNERBORDER_TOP ) );
@@ -103,6 +110,8 @@ ClientBox::ClientBox( Window* pParent, WinBits nStyle ) :
 
     m_xRemoveListener = new ClientRemovedListener( this );
 
+    populateEntries();
+
     Show();
 }
 
@@ -332,18 +341,30 @@ void ClientBox::DrawRow( const Rectangle& rRect, const 
TClientBoxEntry pEntry )
         Size aSize = LogicToPixel( Size( RSC_CD_PUSHBUTTON_WIDTH, 
RSC_CD_PUSHBUTTON_HEIGHT ),
                                MapMode( MAP_APPFONT ) );
         m_aPinBox.SetSizePixel( aSize );
+        m_aDeauthoriseButton.SetSizePixel( 
m_aDeauthoriseButton.GetOptimalSize() );
         const Rectangle aRect( GetEntryRect( m_nActive ) );
         Size  aBtnSize( m_aPinBox.GetSizePixel() );
         Point aBtnPos( aRect.Left(),
                    aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
-        OUString sPinText(SD_RESSTR(STR_ENTER_PIN));
-        DrawText( Rectangle( aBtnPos.X(), aBtnPos.Y(), rRect.Right(), 
rRect.Bottom() - TOP_OFFSET),
-                  sPinText, 0 );
 
-        aBtnPos = Point( aRect.Left() + GetTextWidth( sPinText ),
-                   aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
+        bool bAlreadyAuthorised = pEntry->m_pClientInfo->mbIsAlreadyAuthorised;
+
+        if ( !bAlreadyAuthorised )
+        {
+            OUString sPinText(SD_RESSTR(STR_ENTER_PIN));
+            DrawText( Rectangle( aBtnPos.X(), aBtnPos.Y(), rRect.Right(), 
rRect.Bottom() - TOP_OFFSET),
+                      sPinText, 0 );
 
+            aBtnPos = Point( aRect.Left() + GetTextWidth( sPinText ),
+                             aRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
+
+        }
         m_aPinBox.SetPosPixel( aBtnPos );
+        m_aPinBox.Show( !bAlreadyAuthorised );
+
+        aBtnPos.Move( 20, 0 );
+        m_aDeauthoriseButton.SetPosPixel( aBtnPos );
+        m_aDeauthoriseButton.Show( bAlreadyAuthorised );
 
 //         long nExtraHeight = 0;
 
@@ -476,6 +497,15 @@ void ClientBox::Paint( const Rectangle &/*rPaintRect*/ )
 
     const ::osl::MutexGuard aGuard( m_entriesMutex );
 
+    // If we have just removed the last entry (via deauthorise)
+    // then we need to make sure we hide the button (usually
+    // this would all be dealt with in in DrawRow, but that
+    // won't be called for 0 items).
+    if ( m_vEntries.size() == 0 )
+    {
+        m_aDeauthoriseButton.Show( false );
+    }
+
     typedef std::vector< TClientBoxEntry >::iterator ITER;
     for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); 
++iIndex )
     {
@@ -671,6 +701,44 @@ long ClientBox::addEntry( ::boost::shared_ptr<ClientInfo> 
pClientInfo )
     return nPos;
 }
 
+void ClientBox::clearEntries()
+{
+    selectEntry( -1 );
+    m_bHasActive = false;
+
+    const ::osl::MutexGuard aGuard( m_entriesMutex );
+
+    m_vEntries.clear();
+    if ( IsReallyVisible() )
+        Invalidate();
+    m_bNeedsRecalc = true;
+}
+
+void ClientBox::populateEntries()
+{
+    const ::osl::MutexGuard aGuard( m_entriesMutex );
+
+    clearEntries();
+
+#ifdef ENABLE_SDREMOTE
+    RemoteServer::ensureDiscoverable();
+
+    vector<::boost::shared_ptr<ClientInfo>> aClients( 
RemoteServer::getClients() );
+
+    const vector<::boost::shared_ptr<ClientInfo>>::const_iterator aEnd( 
aClients.end() );
+
+    for ( vector<::boost::shared_ptr<ClientInfo>>::const_iterator aIt( 
aClients.begin() );
+        aIt != aEnd; ++aIt )
+    {
+        addEntry( *aIt );
+    }
+#endif
+
+    if ( IsReallyVisible() )
+        Invalidate();
+    m_bNeedsRecalc = true;
+}
+
 void ClientBox::DoScroll( long nDelta )
 {
     m_nTopIndex += nDelta;
@@ -690,6 +758,20 @@ IMPL_LINK( ClientBox, ScrollHdl, ScrollBar*, pScrBar )
     return 1;
 }
 
+IMPL_LINK_NOARG( ClientBox, DeauthoriseHdl )
+{
+    long aSelected = GetActiveEntryIndex();
+    if ( aSelected < 0 )
+        return 1;
+    TClientBoxEntry aEntry = GetEntryData(aSelected);
+
+#ifdef ENABLE_SDREMOTE
+    RemoteServer::deauthoriseClient( aEntry->m_pClientInfo );
+#endif
+    populateEntries();
+    return 1;
+}
+
 } //namespace dp_gui
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.hxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
index 83295f2..0be1606 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.hxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
@@ -23,6 +23,7 @@
 #include "rtl/ustring.hxx"
 #include "vcl/scrbar.hxx"
 #include "vcl/fixed.hxx"
+#include "vcl/button.hxx"
 #include "vcl/dialog.hxx"
 #include "vcl/field.hxx"
 
@@ -98,8 +99,10 @@ class ClientBox:
     long            m_nExtraHeight;
     Size            m_aOutputSize;
     Link            m_aClickHdl;
+    Link            m_aDeauthoriseHdl;
 
     NumericBox      m_aPinBox;
+    PushButton      m_aDeauthoriseButton;
 
     ScrollBar       m_aScrollBar;
 
@@ -125,7 +128,7 @@ class ClientBox:
     void            DeleteRemoved();
 
     DECL_DLLPRIVATE_LINK( ScrollHdl, ScrollBar* );
-
+    DECL_DLLPRIVATE_LINK( DeauthoriseHdl, void * );
     //Index starts with 1.
     //Throws an com::sun::star::lang::IllegalArgumentException, when the index 
is invalid.
     void checkIndex(sal_Int32 pos) const;
@@ -158,11 +161,13 @@ public:
     long            addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
     void            updateEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
     void            removeEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
+    void            clearEntries();
 
     void            prepareChecking();
     void            checkEntries();
 
     OUString getPin();
+    void            populateEntries();
 };
 
 }
diff --git a/sd/source/ui/inc/RemoteServer.hxx 
b/sd/source/ui/inc/RemoteServer.hxx
index a17e984..91718f9 100644
--- a/sd/source/ui/inc/RemoteServer.hxx
+++ b/sd/source/ui/inc/RemoteServer.hxx
@@ -46,10 +46,15 @@ namespace sd
         OUString mName;
         OUString mAddress;
 
+        bool mbIsAlreadyAuthorised;
+
         enum PROTOCOL { NETWORK = 1, BLUETOOTH };
-        ClientInfo( const OUString& rName, const OUString& rAddress ) :
+        ClientInfo( const OUString& rName,
+                    const OUString& rAddress,
+                    const bool bIsAlreadyAuthorised ) :
             mName( rName ),
-            mAddress( rAddress ) {}
+            mAddress( rAddress ),
+            mbIsAlreadyAuthorised( bIsAlreadyAuthorised ) {}
 
         virtual ~ClientInfo() {};
     };
@@ -71,6 +76,7 @@ namespace sd
             SD_DLLPUBLIC static std::vector< ::boost::shared_ptr< ClientInfo > 
> getClients();
             SD_DLLPUBLIC static bool connectClient( ::boost::shared_ptr< 
ClientInfo > pClient,
                                                         const OUString& aPin );
+            SD_DLLPUBLIC static void deauthoriseClient( ::boost::shared_ptr< 
ClientInfo > pClient );
 
             /// ensure that discoverability (eg. for Bluetooth) is enabled
             SD_DLLPUBLIC static void ensureDiscoverable();
diff --git a/sd/source/ui/remotecontrol/Server.cxx 
b/sd/source/ui/remotecontrol/Server.cxx
index 038fac6..8133537 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -54,9 +54,10 @@ namespace sd {
 
         ClientInfoInternal( const OUString& rName,
                             const OUString& rAddress,
+                            const bool bIsAlreadyAuthorised,
                             BufferedStreamSocket *pSocket,
                             const OUString& rPin ):
-                ClientInfo( rName, rAddress ),
+                ClientInfo( rName, rAddress, bIsAlreadyAuthorised ),
                 mpStreamSocket( pSocket ),
                 mPin( rPin ) {}
     };
@@ -127,8 +128,8 @@ void RemoteServer::execute()
             ::boost::shared_ptr< ClientInfoInternal > pClient(
                 new ClientInfoInternal(
                     OStringToOUString( aName, RTL_TEXTENCODING_UTF8 ),
-                    aAddress, pSocket, OStringToOUString( aPin,
-                    RTL_TEXTENCODING_UTF8 ) );
+                    aAddress, false, pSocket, OStringToOUString( aPin,
+                                                                 
RTL_TEXTENCODING_UTF8 ) ) );
             mAvailableClients.push_back( pClient );
 
             // Read off any additional non-empty lines
@@ -247,6 +248,23 @@ std::vector< ::boost::shared_ptr< ClientInfo > > 
RemoteServer::getClients()
     MutexGuard aGuard( sDataMutex );
     aClients.assign( spServer->mAvailableClients.begin(),
                      spServer->mAvailableClients.end() );
+
+    // We also need to provide authorised clients (no matter whether or not
+    // they are actually available), so that they can be de-authorised if
+    // necessary. We specifically want these to be at the end of the list
+    // since the user is more likely to be trying to connect a new remote
+    // than removing an existing remote.
+    // We can also be sure that pre-authorised clients will not be on the
+    // available clients list, as they get automatially connected if seen.
+    // TODO: we should probably add some sort of extra labelling to mark
+    // authorised AND connected client.
+    Reference< XNameAccess > const xConfig = 
officecfg::Office::Impress::Misc::AuthorisedRemotes::get();
+    Sequence< OUString > aNames = xConfig->getElementNames();
+    for ( int i = 0; i < aNames.getLength(); i++ )
+    {
+        aClients.push_back( ::boost::shared_ptr< ClientInfo > ( new 
ClientInfo( aNames[i], "", true ) ) );
+    }
+
     return aClients;
 }
 
@@ -257,7 +275,12 @@ bool RemoteServer::connectClient( ::boost::shared_ptr< 
ClientInfo > pClient, con
         return false;
 
     ClientInfoInternal* apClient = dynamic_cast< ClientInfoInternal* >( 
pClient.get() );
-    ClientInfoInternal *apClient = (ClientInfoInternal*) pClient;
+    if ( !apClient )
+    // could happen if we try to "connect" an already authorised client
+    {
+        return false;
+    }
+
     if ( apClient->mPin.equals( aPin ) )
     {
         // Save in settings first
@@ -312,6 +335,30 @@ bool RemoteServer::connectClient( ::boost::shared_ptr< 
ClientInfo > pClient, con
     }
 }
 
+void RemoteServer::deauthoriseClient( ::boost::shared_ptr< ClientInfo > 
pClient )
+{
+    // TODO: we probably want to forcefully disconnect at this point too?
+    // But possibly via a separate function to allow just disconnecting from
+    // the UI.
+
+    SAL_INFO( "sdremote", "RemoteServer::deauthoriseClient called" );
+    if ( !spServer )
+        return;
+
+    if ( !pClient->mbIsAlreadyAuthorised )
+    // We can't remove unauthorised clients from the authorised list...
+    {
+        return;
+    }
+
+    boost::shared_ptr< ConfigurationChanges > aChanges = 
ConfigurationChanges::create();
+    Reference< XNameContainer > const xConfig =
+        officecfg::Office::Impress::Misc::AuthorisedRemotes::get( aChanges );
+
+    xConfig->removeByName( pClient->mName );
+    aChanges->commit();
+}
+
 void SdDLL::RegisterRemotes()
 {
     SAL_INFO( "sdremote", "SdDLL::RegisterRemotes called" );
commit f82c524f7615abc13adadca12ef27237ff3df4b7
Author: Andrzej Hunt <andrzej.h...@collabora.com>
Date:   Fri Jun 27 12:09:01 2014 +0200

    Move ClientInfo to shared_ptrs.
    
    I don't think these ever get deleted anywhere? This changes will also
    help in the management of existing clients (separate commit).
    
    Change-Id: I339916439f6b798524fac33e91688f81c03a3ca5

diff --git a/sd/source/ui/dlg/RemoteDialog.cxx 
b/sd/source/ui/dlg/RemoteDialog.cxx
index fd2fe81..4265bac 100644
--- a/sd/source/ui/dlg/RemoteDialog.cxx
+++ b/sd/source/ui/dlg/RemoteDialog.cxx
@@ -28,11 +28,11 @@ RemoteDialog::RemoteDialog( Window *pWindow )
 #ifdef ENABLE_SDREMOTE
     RemoteServer::ensureDiscoverable();
 
-    vector<ClientInfo*> aClients( RemoteServer::getClients() );
+    vector<::boost::shared_ptr<ClientInfo>> aClients( 
RemoteServer::getClients() );
 
-    const vector<ClientInfo*>::const_iterator aEnd( aClients.end() );
+    const vector<::boost::shared_ptr<ClientInfo>>::const_iterator aEnd( 
aClients.end() );
 
-    for ( vector<ClientInfo*>::const_iterator aIt( aClients.begin() );
+    for ( vector<::boost::shared_ptr<ClientInfo>>::const_iterator aIt( 
aClients.begin() );
         aIt != aEnd; ++aIt )
     {
         m_pClientBox->addEntry( *aIt );
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 4d356bc..22affdb 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -36,7 +36,7 @@ namespace sd {
 
 //                          struct ClientBoxEntry
 
-ClientBoxEntry::ClientBoxEntry( ClientInfo* pClientInfo ) :
+ClientBoxEntry::ClientBoxEntry( ::boost::shared_ptr<ClientInfo> pClientInfo ) :
     m_bActive( false ),
     m_pClientInfo( pClientInfo )
 {
@@ -611,7 +611,7 @@ bool ClientBox::Notify( NotifyEvent& rNEvt )
         return true;
 }
 
-long ClientBox::addEntry( ClientInfo* pClientInfo )
+long ClientBox::addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo )
 {
     long         nPos = 0;
 //     PackageState eState = m_pManager->getPackageState( xPackage );
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.hxx 
b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
index 5b63438..83295f2 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.hxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.hxx
@@ -56,9 +56,9 @@ typedef ::boost::shared_ptr< ClientBoxEntry > TClientBoxEntry;
 struct ClientBoxEntry
 {
     bool            m_bActive       :1;
-    ClientInfo*     m_pClientInfo;
+    ::boost::shared_ptr<ClientInfo>     m_pClientInfo;
 
-    ClientBoxEntry( ClientInfo* pClientInfo );
+    ClientBoxEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
    ~ClientBoxEntry();
 
 };
@@ -155,9 +155,9 @@ public:
     void            RemoveUnlocked();
 
     void    selectEntry( const long nPos );
-    long            addEntry( ClientInfo* pClientInfo );
-    void            updateEntry( const ClientInfo* rPackageInfo );
-    void            removeEntry( const ClientInfo* rPackageInfo );
+    long            addEntry( ::boost::shared_ptr<ClientInfo> pClientInfo );
+    void            updateEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
+    void            removeEntry( const ::boost::shared_ptr<ClientInfo> 
pPackageInfo );
 
     void            prepareChecking();
     void            checkEntries();
diff --git a/sd/source/ui/inc/RemoteServer.hxx 
b/sd/source/ui/inc/RemoteServer.hxx
index 4773083..a17e984 100644
--- a/sd/source/ui/inc/RemoteServer.hxx
+++ b/sd/source/ui/inc/RemoteServer.hxx
@@ -18,6 +18,8 @@
 #include <sys/types.h>
 #include <vector>
 
+#include <boost/shared_ptr.hpp>
+
 #include <osl/mutex.hxx>
 #include <osl/socket.hxx>
 #include <rtl/ref.hxx>
@@ -48,6 +50,8 @@ namespace sd
         ClientInfo( const OUString& rName, const OUString& rAddress ) :
             mName( rName ),
             mAddress( rAddress ) {}
+
+        virtual ~ClientInfo() {};
     };
 
     struct ClientInfoInternal;
@@ -64,8 +68,8 @@ namespace sd
             static void presentationStopped();
 
             // For the control dialog
-            SD_DLLPUBLIC static std::vector<ClientInfo*> getClients();
-            SD_DLLPUBLIC static bool connectClient( ClientInfo *pClient,
+            SD_DLLPUBLIC static std::vector< ::boost::shared_ptr< ClientInfo > 
> getClients();
+            SD_DLLPUBLIC static bool connectClient( ::boost::shared_ptr< 
ClientInfo > pClient,
                                                         const OUString& aPin );
 
             /// ensure that discoverability (eg. for Bluetooth) is enabled
@@ -83,7 +87,7 @@ namespace sd
             static ::std::vector<Communicator*> sCommunicators;
             osl::AcceptorSocket mSocket;
 
-            ::std::vector<ClientInfoInternal*> mAvailableClients;
+            ::std::vector< ::boost::shared_ptr< ClientInfoInternal > > 
mAvailableClients;
 
             void execute() SAL_OVERRIDE;
     };
diff --git a/sd/source/ui/remotecontrol/Server.cxx 
b/sd/source/ui/remotecontrol/Server.cxx
index ff42804..038fac6 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -124,7 +124,8 @@ void RemoteServer::execute()
             OUString aAddress = aClientAddr.getHostname();
 
             MutexGuard aGuard( sDataMutex );
-            ClientInfoInternal* pClient = new ClientInfoInternal(
+            ::boost::shared_ptr< ClientInfoInternal > pClient(
+                new ClientInfoInternal(
                     OStringToOUString( aName, RTL_TEXTENCODING_UTF8 ),
                     aAddress, pSocket, OStringToOUString( aPin,
                     RTL_TEXTENCODING_UTF8 ) );
@@ -233,10 +234,10 @@ void RemoteServer::removeCommunicator( Communicator* 
mCommunicator )
     }
 }
 
-std::vector<ClientInfo*> RemoteServer::getClients()
+std::vector< ::boost::shared_ptr< ClientInfo > > RemoteServer::getClients()
 {
     SAL_INFO( "sdremote", "RemoteServer::getClients() called" );
-    std::vector<ClientInfo*> aClients;
+    std::vector< ::boost::shared_ptr< ClientInfo > > aClients;
     if ( !spServer )
     {
         SAL_INFO( "sdremote", "No remote server instance => no clients" );
@@ -249,12 +250,13 @@ std::vector<ClientInfo*> RemoteServer::getClients()
     return aClients;
 }
 
-bool RemoteServer::connectClient( ClientInfo* pClient, const OUString& aPin )
+bool RemoteServer::connectClient( ::boost::shared_ptr< ClientInfo > pClient, 
const OUString& aPin )
 {
     SAL_INFO( "sdremote", "RemoteServer::connectClient called" );
     if ( !spServer )
         return false;
 
+    ClientInfoInternal* apClient = dynamic_cast< ClientInfoInternal* >( 
pClient.get() );
     ClientInfoInternal *apClient = (ClientInfoInternal*) pClient;
     if ( apClient->mPin.equals( aPin ) )
     {
@@ -292,7 +294,7 @@ bool RemoteServer::connectClient( ClientInfo* pClient, 
const OUString& aPin )
 
         sCommunicators.push_back( pCommunicator );
 
-        for ( vector<ClientInfoInternal*>::iterator aIt = 
spServer->mAvailableClients.begin();
+        for ( vector<::boost::shared_ptr<ClientInfoInternal>>::iterator aIt = 
spServer->mAvailableClients.begin();
             aIt != spServer->mAvailableClients.end(); ++aIt )
         {
             if ( pClient == *aIt )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to