[Libreoffice-commits] .: 13 commits - desktop/source vcl/inc vcl/source vcl/unx vcl/win

Stephan Bergmann sbergmann at kemper.freedesktop.org
Wed Jun 20 05:44:46 PDT 2012


 desktop/source/app/officeipcthread.cxx |    9 +-
 desktop/source/app/officeipcthread.hxx |    2 
 vcl/inc/aqua/saldata.hxx               |    1 
 vcl/inc/ios/saldata.hxx                |    1 
 vcl/inc/salsession.hxx                 |    8 +-
 vcl/inc/svdata.hxx                     |   13 ----
 vcl/inc/unx/salframe.h                 |    5 -
 vcl/inc/unx/sm.hxx                     |   32 +++-------
 vcl/inc/unx/wmadaptor.hxx              |    1 
 vcl/inc/win/saldata.hxx                |    1 
 vcl/source/app/session.cxx             |   91 ++++++++++++----------------
 vcl/source/components/factory.cxx      |    2 
 vcl/unx/generic/app/sm.cxx             |  101 +++++++++++++-------------------
 vcl/unx/generic/app/wmadaptor.cxx      |    1 
 vcl/unx/generic/window/salframe.cxx    |  104 ---------------------------------
 vcl/win/source/app/salinst.cxx         |    2 
 16 files changed, 111 insertions(+), 263 deletions(-)

New commits:
commit bd91d9319efb7fcf0e5861e66ab5ea9e5630bf3f
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Jun 20 14:37:43 2012 +0200

    Avoid deadlock when signal handler joins thread
    
    ...as the signal can potentially be delivered to the to-be-joined thread.  (It
    is unclear to me whether the SalMainPipeExchangeSingal_impl handler is really
    needed anyway, as there are various other places that should ensure that
    DisableOfficeIPCThread is called during shutdown.  At least in theory, no longer
    joining here can cause the thread to incur crashes etc. when it it still running
    during shutdown.)
    
    Change-Id: I677a2e31e1a58d2b8d91634c2eb5274d63ac15f4

diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx
index e99eb1d..d90aa27 100644
--- a/desktop/source/app/officeipcthread.cxx
+++ b/desktop/source/app/officeipcthread.cxx
@@ -297,7 +297,7 @@ void ImplPostProcessDocumentsEvent( ProcessDocumentsRequest* pEvent )
 oslSignalAction SAL_CALL SalMainPipeExchangeSignal_impl(void* /*pData*/, oslSignalInfo* pInfo)
 {
     if( pInfo->Signal == osl_Signal_Terminate )
-        OfficeIPCThread::DisableOfficeIPCThread();
+        OfficeIPCThread::DisableOfficeIPCThread(false);
     return osl_Signal_ActCallNextHdl;
 }
 
@@ -575,7 +575,7 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread()
     return IPC_STATUS_OK;
 }
 
-void OfficeIPCThread::DisableOfficeIPCThread()
+void OfficeIPCThread::DisableOfficeIPCThread(bool join)
 {
     osl::ClearableMutexGuard aMutex( GetMutex() );
 
@@ -604,7 +604,10 @@ void OfficeIPCThread::DisableOfficeIPCThread()
         OfficeIPCThread::SetReady(pOfficeIPCThread);
 
         // exit gracefully and join
-        pOfficeIPCThread->join();
+        if (join)
+        {
+            pOfficeIPCThread->join();
+        }
     }
 }
 
diff --git a/desktop/source/app/officeipcthread.hxx b/desktop/source/app/officeipcthread.hxx
index f60a134..5dc03bc 100644
--- a/desktop/source/app/officeipcthread.hxx
+++ b/desktop/source/app/officeipcthread.hxx
@@ -128,7 +128,7 @@ class OfficeIPCThread : public salhelper::Thread
 
     // return sal_False if second office
     static Status               EnableOfficeIPCThread();
-    static void                 DisableOfficeIPCThread();
+    static void                 DisableOfficeIPCThread(bool join = true);
     // start dispatching events...
     static void                 SetReady(
         rtl::Reference< OfficeIPCThread > const & pThread =
commit 97beabccb73321a8d2e022705afa755f15e99fa0
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Jun 20 12:09:12 2012 +0200

    Work around false valgrind warning about optimized strlen implementation
    
    ...that reads in word sized chunks and thus can read past the nominal end of
    a memory buffer.  Also, the return type of rtl_str_getLength (sal_Int32) fits
    better with the type of SmPropValue.length (int) than the return type of
    strlen (size_t).
    
    Change-Id: I7ff91408b4c6d8c9913cede516586f42b8349ed3

diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 185e550..a897805 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -220,7 +220,7 @@ static void BuildSmPropertyList()
         pSmProps[ 3 ].num_vals  = 1;
         pSmProps[ 3 ].vals      = new SmPropValue;
         pSmProps[ 3 ].vals->value   = strdup( aUser.getStr() );
-        pSmProps[ 3 ].vals->length  = strlen( (char *)pSmProps[ 3 ].vals->value )+1;
+        pSmProps[ 3 ].vals->length  = rtl_str_getLength( (char *)pSmProps[ 3 ].vals->value )+1;
 
         pSmProps[ 4 ].name      = const_cast<char*>(SmRestartStyleHint);
         pSmProps[ 4 ].type      = const_cast<char*>(SmCARD8);
commit c0823c29a053011daa563183d7bc46add9b88eec
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 15:23:58 2012 +0200

    pOldStyleSaveFrame is never set anyway
    
    ...so rip out all the corresponding, apparently obsolete, functionality.
    
    Change-Id: Ie1ca3fcf7f729464e4c11070caafc90a34da2d68

diff --git a/vcl/inc/unx/salframe.h b/vcl/inc/unx/salframe.h
index f03f0e5..cced9d6 100644
--- a/vcl/inc/unx/salframe.h
+++ b/vcl/inc/unx/salframe.h
@@ -64,8 +64,6 @@ class VCLPLUG_GEN_PUBLIC X11SalFrame : public SalFrame
     friend class vcl_sal::NetWMAdaptor;
     friend class vcl_sal::GnomeWMAdaptor;
 
-    static X11SalFrame* s_pSaveYourselfFrame;
-
     X11SalFrame*    mpParent;             // pointer to parent frame
                                           // which should never obscur this frame
     bool            mbTransientForRoot;
@@ -167,8 +165,6 @@ class VCLPLUG_GEN_PUBLIC X11SalFrame : public SalFrame
 
     DECL_LINK( HandleAlwaysOnTopRaise, void* );
 
-    void            passOnSaveYourSelf();
-
     void            createNewWindow( XLIB_Window aParent, SalX11Screen nXScreen = SalX11Screen( -1 ) );
     void            updateScreenNumber();
 
@@ -278,7 +274,6 @@ public:
     // done setting up the clipregion
     virtual void                    EndSetClipRegion();
 
-    static void SaveYourselfDone( SalFrame* );
     static Bool checkKeyReleaseForRepeat( Display*, XEvent*, XPointer pX11SalFrame );
 
     /// @internal
diff --git a/vcl/inc/unx/wmadaptor.hxx b/vcl/inc/unx/wmadaptor.hxx
index 5848c65..810c339 100644
--- a/vcl/inc/unx/wmadaptor.hxx
+++ b/vcl/inc/unx/wmadaptor.hxx
@@ -106,7 +106,6 @@ public:
         WM_PROTOCOLS,
         WM_DELETE_WINDOW,
         WM_TAKE_FOCUS,
-        WM_SAVE_YOURSELF,
         WM_CLIENT_LEADER,
         WM_COMMAND,
         WM_LOCALE_NAME,
diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 8ba6e9c..185e550 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -63,8 +63,10 @@ namespace {
 class IceSalSession : public SalSession
 {
 public:
-    IceSalSession();
-    virtual ~IceSalSession();
+    IceSalSession() {}
+
+private:
+    virtual ~IceSalSession() {}
 
     virtual void queryInteraction();
     virtual void interactionDone();
@@ -81,20 +83,6 @@ SalSession* X11SalInstance::CreateSalSession()
     return p;
 }
 
-/*
- *  class IceSalSession
- */
-
-static X11SalFrame* pOldStyleSaveFrame = NULL;
-
-IceSalSession::IceSalSession()
-{
-}
-
-IceSalSession::~IceSalSession()
-{
-}
-
 void IceSalSession::queryInteraction()
 {
     if( ! SessionManagerClient::queryInteraction() )
@@ -112,11 +100,6 @@ void IceSalSession::interactionDone()
 void IceSalSession::saveDone()
 {
     SessionManagerClient::saveDone();
-    if( pOldStyleSaveFrame )
-    {
-        // note: does nothing if not running in generic plugin
-        X11SalFrame::SaveYourselfDone( pOldStyleSaveFrame );
-    }
 }
 
 bool IceSalSession::cancelShutdown()
diff --git a/vcl/unx/generic/app/wmadaptor.cxx b/vcl/unx/generic/app/wmadaptor.cxx
index 8b9b278..a0791e0 100644
--- a/vcl/unx/generic/app/wmadaptor.cxx
+++ b/vcl/unx/generic/app/wmadaptor.cxx
@@ -171,7 +171,6 @@ static const WMAdaptorProtocol aAtomTab[] =
     { "WM_PROTOCOLS", WMAdaptor::WM_PROTOCOLS },
     { "WM_DELETE_WINDOW", WMAdaptor::WM_DELETE_WINDOW },
     { "WM_TAKE_FOCUS", WMAdaptor::WM_TAKE_FOCUS },
-    { "WM_SAVE_YOURSELF", WMAdaptor::WM_SAVE_YOURSELF },
     { "WM_COMMAND", WMAdaptor::WM_COMMAND },
     { "WM_CLIENT_LEADER", WMAdaptor::WM_CLIENT_LEADER },
     { "WM_LOCALE_NAME", WMAdaptor::WM_LOCALE_NAME },
diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx
index 549616c..0a76ff3 100644
--- a/vcl/unx/generic/window/salframe.cxx
+++ b/vcl/unx/generic/window/salframe.cxx
@@ -108,8 +108,6 @@ static XLIB_Window  hPresentationWindow = None, hPresFocusWindow = None;
 static ::std::list< XLIB_Window > aPresentationReparentList;
 static int          nVisibleFloats      = 0;
 
-X11SalFrame* X11SalFrame::s_pSaveYourselfFrame = NULL;
-
 // -=-= C++ statics =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 static void doReparentPresentationDialogues( SalDisplay* pDisplay )
@@ -530,17 +528,11 @@ void X11SalFrame::Init( sal_uLong nSalFrameStyle, SalX11Screen nXScreen, SystemP
     {
         XSetWMHints( GetXDisplay(), mhWindow, &Hints );
         // WM Protocols && internals
-        Atom a[4];
+        Atom a[3];
         int  n = 0;
         a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::WM_DELETE_WINDOW );
         if( pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::NET_WM_PING ) )
             a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::NET_WM_PING );
-        if( ! s_pSaveYourselfFrame && ! mpParent)
-        {
-            // at all times have only one frame with SaveYourself
-            a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::WM_SAVE_YOURSELF );
-            s_pSaveYourselfFrame = this;
-        }
         if( (nSalFrameStyle & SAL_FRAME_STYLE_OWNERDRAWDECORATION) )
             a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::WM_TAKE_FOCUS );
         XSetWMProtocols( GetXDisplay(), GetShellWindow(), a, n );
@@ -731,39 +723,6 @@ X11SalFrame::X11SalFrame( SalFrame *pParent, sal_uLong nSalFrameStyle,
     Init( nSalFrameStyle, GetDisplay()->GetDefaultXScreen(), pSystemParent );
 }
 
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-void X11SalFrame::passOnSaveYourSelf()
-{
-    if( this == s_pSaveYourselfFrame )
-    {
-        // pass on SaveYourself
-        const X11SalFrame* pFrame = NULL;
-        const std::list< SalFrame* >& rFrames = GetDisplay()->getFrames();
-        std::list< SalFrame* >::const_iterator it = rFrames.begin();
-        while( it != rFrames.end() )
-        {
-            pFrame = static_cast< const X11SalFrame* >(*it);
-            if( ! ( IsChildWindow() || pFrame->mpParent )
-                && pFrame != s_pSaveYourselfFrame )
-                    break;
-            ++it;
-        }
-
-        s_pSaveYourselfFrame = (it != rFrames.end() ) ? const_cast<X11SalFrame*>(pFrame) : NULL;
-        if( s_pSaveYourselfFrame )
-        {
-            Atom a[4];
-            int  n = 0;
-            a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::WM_DELETE_WINDOW );
-            a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::WM_SAVE_YOURSELF );
-            if( pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::NET_WM_PING ) )
-                a[n++] = pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::NET_WM_PING );
-            XSetWMProtocols( GetXDisplay(), s_pSaveYourselfFrame->GetShellWindow(), a, n );
-        }
-    }
-}
-
 X11SalFrame::~X11SalFrame()
 {
     notifyDelete();
@@ -842,8 +801,6 @@ X11SalFrame::~X11SalFrame()
             && ++sit == GetDisplay()->getFrames().end() )
             vcl::I18NStatus::free();
     }
-
-    passOnSaveYourSelf();
 }
 
 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -2637,8 +2594,6 @@ void X11SalFrame::createNewWindow( XLIB_Window aNewParent, SalX11Screen nXScreen
     XDestroyWindow( GetXDisplay(), mhWindow );
     mhWindow = None;
 
-    passOnSaveYourSelf();
-
     // now init with new parent again
     if ( aParentData.aWindow != None )
         Init( nStyle_ | SAL_FRAME_STYLE_PLUG, nXScreen, &aParentData );
@@ -4001,23 +3956,6 @@ long X11SalFrame::HandleClientMessage( XClientMessageEvent *pEvent )
                          "ownerdraw" : "NON OWNERDRAW" );
     #endif
             }
-            else if( (Atom)pEvent->data.l[0] == rWMAdaptor.getAtom( WMAdaptor::WM_SAVE_YOURSELF ) )
-            {
-                    if( this == s_pSaveYourselfFrame )
-                    {
-                        rtl::OString aExec(rtl::OUStringToOString(SessionManagerClient::getExecName(), osl_getThreadTextEncoding()));
-                        const char* argv[2];
-                        argv[0] = "/bin/sh";
-                        argv[1] = const_cast<char*>(aExec.getStr());
-    #if OSL_DEBUG_LEVEL > 1
-                        fprintf( stderr, "SaveYourself request, setting command: %s %s\n", argv[0], argv[1] );
-    #endif
-                        XSetCommand( GetXDisplay(), GetShellWindow(), (char**)argv, 2 );
-                    }
-                    else
-                        // can only happen in race between WM and window closing
-                        XChangeProperty( GetXDisplay(), GetShellWindow(), rWMAdaptor.getAtom( WMAdaptor::WM_COMMAND ), XA_STRING, 8, PropModeReplace, (unsigned char*)"", 0 );
-            }
         }
     }
     else if( pEvent->message_type == rWMAdaptor.getAtom( WMAdaptor::XEMBED ) &&
@@ -4040,46 +3978,6 @@ long X11SalFrame::HandleClientMessage( XClientMessageEvent *pEvent )
     return 0;
 }
 
-void X11SalFrame::SaveYourselfDone( SalFrame* pSaveFrame )
-{
-    // session save was done, inform dtwm
-    if( s_pSaveYourselfFrame && pSaveFrame )
-    {
-        rtl::OString aExec(rtl::OUStringToOString(SessionManagerClient::getExecName(), osl_getThreadTextEncoding()));
-        const char* argv[2];
-        argv[0] = "/bin/sh";
-        argv[1] = const_cast<char*>(aExec.getStr());
-#if OSL_DEBUG_LEVEL > 1
-        fprintf( stderr, "SaveYourself request, setting command: %s %s\n", argv[0], argv[1] );
-#endif
-        XSetCommand( s_pSaveYourselfFrame->GetXDisplay(),
-                     s_pSaveYourselfFrame->GetShellWindow(),
-                     (char**)argv, 2 );
-        if( pSaveFrame != s_pSaveYourselfFrame )
-        {
-            // check if it still exists
-            const X11SalFrame* pFrame = NULL;
-            const std::list< SalFrame* >& rFrames = static_cast<X11SalFrame*>(pSaveFrame)->GetDisplay()->getFrames();
-            std::list< SalFrame* >::const_iterator it = rFrames.begin();
-            while( it != rFrames.end() )
-            {
-                pFrame = static_cast< const X11SalFrame* >(*it);
-                if( pFrame == pSaveFrame )
-                    break;
-                ++it;
-            }
-            if( pFrame == pSaveFrame )
-            {
-                const WMAdaptor& rWMAdaptor( *pFrame->pDisplay_->getWMAdaptor() );
-                XChangeProperty( pFrame->GetXDisplay(),
-                                 pFrame->GetShellWindow(),
-                                 rWMAdaptor.getAtom( WMAdaptor::WM_COMMAND ), XA_STRING, 8, PropModeReplace, (unsigned char*)"", 0 );
-            }
-        }
-        s_pSaveYourselfFrame->ShutDown();
-    }
-}
-
 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 extern "C"
commit 5c9872de884bcc3f1ec7cd6901b9440eec270d6d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 13:14:43 2012 +0200

    Move IceSalSession declaration to sm.cxx
    
    Change-Id: I532e27b873e011aacebc1dd405de6d2e182ca3d4

diff --git a/vcl/inc/unx/sm.hxx b/vcl/inc/unx/sm.hxx
index 8e47c9a..13291d1 100644
--- a/vcl/inc/unx/sm.hxx
+++ b/vcl/inc/unx/sm.hxx
@@ -28,14 +28,19 @@
 #ifndef _VCL_SM_HXX
 #define _VCL_SM_HXX
 
-#include <rtl/string.hxx>
-#include <rtl/ustring.hxx>
-#include "tools/link.hxx"
-#include "unx/salunx.h"
+#include "sal/config.h"
+
 #include <X11/SM/SMlib.h>
-#include "salsession.hxx"
+
+#include "tools/link.hxx"
 #include "vclpluginapi.h"
 
+namespace rtl {
+    class OString;
+    class OUString;
+}
+class SalSession;
+
 class SessionManagerClient
 {
     static SalSession * m_pSession;
@@ -77,20 +82,6 @@ public:
     static VCLPLUG_GEN_PUBLIC const rtl::OString& getSessionID();
 };
 
-class SalFrame;
-
-class IceSalSession : public SalSession
-{
-public:
-    IceSalSession();
-    virtual ~IceSalSession();
-
-    virtual void queryInteraction();
-    virtual void interactionDone();
-    virtual void saveDone();
-    virtual bool cancelShutdown();
-};
-
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 1f8debf..8ba6e9c 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -56,6 +56,24 @@
 #include <vcl/svapp.hxx>
 #include <vcl/window.hxx>
 
+#include "salsession.hxx"
+
+namespace {
+
+class IceSalSession : public SalSession
+{
+public:
+    IceSalSession();
+    virtual ~IceSalSession();
+
+    virtual void queryInteraction();
+    virtual void interactionDone();
+    virtual void saveDone();
+    virtual bool cancelShutdown();
+};
+
+}
+
 SalSession* X11SalInstance::CreateSalSession()
 {
     SalSession * p = new IceSalSession;
commit 34a3f6e8b7604612749d4f700a5db6d380bd0829
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 13:08:06 2012 +0200

    Move pOneInstance to SessionManagerClient::m_pSession
    
    Change-Id: I264d978fe3db9ab7eedf79351f70cee194ef792c

diff --git a/vcl/inc/unx/sm.hxx b/vcl/inc/unx/sm.hxx
index d3cf9ab..8e47c9a 100644
--- a/vcl/inc/unx/sm.hxx
+++ b/vcl/inc/unx/sm.hxx
@@ -38,6 +38,7 @@
 
 class SessionManagerClient
 {
+    static SalSession * m_pSession;
     static SmcConn          aSmcConnection;
     static rtl::OString m_aClientID;
     static bool         bDocSaveDone;
@@ -64,7 +65,7 @@ class SessionManagerClient
     DECL_STATIC_LINK( SessionManagerClient, SaveYourselfHdl, void* );
     DECL_STATIC_LINK( SessionManagerClient, InteractionHdl, void* );
 public:
-    static void open(); // needed by other plugins, so export
+    static void open(SalSession * pSession);
     static void close();
 
     static bool checkDocumentsSaved();
diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 5a05c8d..1f8debf 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -26,6 +26,10 @@
  *
  ************************************************************************/
 
+#include "sal/config.h"
+
+#include <cassert>
+
 #include <string.h>
 #include <unistd.h>
 #include <sys/poll.h>
@@ -52,14 +56,11 @@
 #include <vcl/svapp.hxx>
 #include <vcl/window.hxx>
 
-static IceSalSession* pOneInstance = NULL;
-
 SalSession* X11SalInstance::CreateSalSession()
 {
-    if( ! pOneInstance )
-        pOneInstance = new IceSalSession();
-    SessionManagerClient::open();
-    return pOneInstance;
+    SalSession * p = new IceSalSession;
+    SessionManagerClient::open(p);
+    return p;
 }
 
 /*
@@ -74,8 +75,6 @@ IceSalSession::IceSalSession()
 
 IceSalSession::~IceSalSession()
 {
-    if( pOneInstance == this )
-        pOneInstance = NULL;
 }
 
 void IceSalSession::queryInteraction()
@@ -135,6 +134,7 @@ public:
 };
 
 
+SalSession * SessionManagerClient::m_pSession = 0;
 SmcConn             SessionManagerClient::aSmcConnection            = NULL;
 rtl::OString SessionManagerClient::m_aClientID;
 sal_Bool                ICEConnectionObserver::bIsWatching              = sal_False;
@@ -273,10 +273,10 @@ IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, SaveYourselfHdl, void*, pStat
         }
     }
 
-    if( pOneInstance )
+    if( m_pSession )
     {
         SalSessionSaveRequestEvent aEvent( shutdown, false );
-        pOneInstance->CallCallback( &aEvent );
+        m_pSession->CallCallback( &aEvent );
     }
     else
         saveDone();
@@ -287,10 +287,10 @@ IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, SaveYourselfHdl, void*, pStat
 IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, InteractionHdl, void*, EMPTYARG )
 {
     SAL_INFO("vcl.sm", "interaction link");
-    if( pOneInstance )
+    if( m_pSession )
     {
         SalSessionInteractionEvent aEvent( true );
-        pOneInstance->CallCallback( &aEvent );
+        m_pSession->CallCallback( &aEvent );
     }
 
     return 0;
@@ -299,10 +299,10 @@ IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, InteractionHdl, void*, EMPTYA
 IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, ShutDownCancelHdl, void*, EMPTYARG )
 {
     SAL_INFO("vcl.sm", "shutdown cancel");
-    if( pOneInstance )
+    if( m_pSession )
     {
         SalSessionShutdownCancelEvent aEvent;
-        pOneInstance->CallCallback( &aEvent );
+        m_pSession->CallCallback( &aEvent );
     }
 
     return 0;
@@ -348,10 +348,10 @@ void SessionManagerClient::SaveYourselfProc(
 
 IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, ShutDownHdl, void*, EMPTYARG )
 {
-    if( pOneInstance )
+    if( m_pSession )
     {
         SalSessionQuitEvent aEvent;
-        pOneInstance->CallCallback( &aEvent );
+        m_pSession->CallCallback( &aEvent );
     }
 
     const std::list< SalFrame* >& rFrames = GetGenericData()->GetSalDisplay()->getFrames();
@@ -414,8 +414,11 @@ void SessionManagerClient::saveDone()
 }
 
 
-void SessionManagerClient::open()
+void SessionManagerClient::open(SalSession * pSession)
 {
+    assert(!m_pSession);
+    m_pSession = pSession;
+
     static SmcCallbacks aCallbacks;
 
     // this is the way Xt does it, so we can too
commit c83a393ffe5c80afd18f215f70af3e152d51a6bd
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 12:43:10 2012 +0200

    Clean up how nStateVal is smuggled in
    
    Change-Id: Ib27bce3d6d20dd8ea81dc51f1501774cd313b5da

diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 843e039..5a05c8d 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -241,10 +241,10 @@ bool SessionManagerClient::checkDocumentsSaved()
     return bDocSaveDone;
 }
 
-IMPL_STATIC_LINK( SessionManagerClient, SaveYourselfHdl, void*, EMPTYARG )
+IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, SaveYourselfHdl, void*, pStateVal )
 {
-    //decode argument smuggled in by abusing pThis member of SessionManagerClient
-    sal_uIntPtr nStateVal = (sal_uIntPtr)pThis;
+    // Decode argument smuggled in as void*:
+    sal_uIntPtr nStateVal = reinterpret_cast< sal_uIntPtr >(pStateVal);
     Bool shutdown = nStateVal != 0;
 
     SAL_INFO("vcl.sm", "posting save documents event shutdown = " << (shutdown ? "true" : "false" ));
@@ -340,9 +340,9 @@ void SessionManagerClient::SaveYourselfProc(
         SessionManagerClient::saveDone();
         return;
     }
-    //Smuggle argument in by abusing pThis member of SessionManagerClient
-    sal_uIntPtr nStateVal = shutdown ? 0xffffffff : 0x0;
-    Application::PostUserEvent( STATIC_LINK( (void*)nStateVal, SessionManagerClient, SaveYourselfHdl ) );
+    // Smuggle argument in as void*:
+    sal_uIntPtr nStateVal = shutdown;
+    Application::PostUserEvent( STATIC_LINK( 0, SessionManagerClient, SaveYourselfHdl ), reinterpret_cast< void * >(nStateVal) );
     SAL_INFO("vcl.sm", "waiting for save yourself event to be processed" );
 }
 
commit 43a8d203d816321dccbaec38b6e8307f98f0249d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 11:59:01 2012 +0200

    Mutex lifecycle must encompass WeakComponentImplHelper base
    
    Change-Id: I98a9a22ce1e937b20bcd3b59b4e6677a5a60f762

diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx
index 0ac6bff..045d976 100644
--- a/vcl/source/app/session.cxx
+++ b/vcl/source/app/session.cxx
@@ -61,7 +61,9 @@ SalSession::~SalSession()
 {
 }
 
-class VCLSession : public cppu::WeakComponentImplHelper1 < XSessionManagerClient >
+class VCLSession:
+    private osl::Mutex,
+    public cppu::WeakComponentImplHelper1 < XSessionManagerClient >
 {
     struct Listener
     {
@@ -80,7 +82,6 @@ class VCLSession : public cppu::WeakComponentImplHelper1 < XSessionManagerClient
 
     std::list< Listener >                           m_aListeners;
     boost::scoped_ptr< SalSession >                 m_pSession;
-    osl::Mutex                                      m_aMutex;
     bool                                            m_bInteractionRequested;
     bool                                            m_bInteractionGranted;
     bool                                            m_bInteractionDone;
@@ -107,7 +108,7 @@ public:
 };
 
 VCLSession::VCLSession()
-        : cppu::WeakComponentImplHelper1< XSessionManagerClient >( m_aMutex ),
+        : cppu::WeakComponentImplHelper1< XSessionManagerClient >( *static_cast< osl::Mutex * >(this) ),
           m_pSession( ImplGetSVData()->mpDefInst->CreateSalSession() ),
           m_bInteractionRequested( false ),
           m_bInteractionGranted( false ),
@@ -122,7 +123,7 @@ void VCLSession::callSaveRequested( bool bShutdown, bool bCancelable )
 {
     std::list< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        osl::MutexGuard aGuard( *this );
         // reset listener states
         for( std::list< Listener >::iterator it = m_aListeners.begin();
              it != m_aListeners.end(); ++it )
@@ -159,7 +160,7 @@ void VCLSession::callInteractionGranted( bool bInteractionGranted )
 {
     std::list< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        osl::MutexGuard aGuard( *this );
         // copy listener list since calling a listener may remove it.
         for( std::list< Listener >::const_iterator it = m_aListeners.begin(); it != m_aListeners.end(); ++it )
             if( it->m_bInteractionRequested )
@@ -188,7 +189,7 @@ void VCLSession::callShutdownCancelled()
 {
     std::list< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        osl::MutexGuard aGuard( *this );
         // copy listener list since calling a listener may remove it.
         aListeners = m_aListeners;
         // set back interaction state
@@ -205,7 +206,7 @@ void VCLSession::callQuit()
 {
     std::list< Listener > aListeners;
     {
-        osl::MutexGuard aGuard( m_aMutex );
+        osl::MutexGuard aGuard( *this );
         // copy listener list since calling a listener may remove it.
         aListeners = m_aListeners;
         // set back interaction state
@@ -250,14 +251,14 @@ void VCLSession::SalSessionEventProc( void* pData, SalSessionEvent* pEvent )
 
 void SAL_CALL VCLSession::addSessionManagerListener( const css::uno::Reference<XSessionManagerListener>& xListener ) throw( RuntimeException )
 {
-    osl::MutexGuard aGuard( m_aMutex );
+    osl::MutexGuard aGuard( *this );
 
     m_aListeners.push_back( Listener( xListener ) );
 }
 
 void SAL_CALL VCLSession::removeSessionManagerListener( const css::uno::Reference<XSessionManagerListener>& xListener ) throw( RuntimeException )
 {
-    osl::MutexGuard aGuard( m_aMutex );
+    osl::MutexGuard aGuard( *this );
 
     std::list< Listener >::iterator it = m_aListeners.begin();
     while( it != m_aListeners.end() )
@@ -283,7 +284,7 @@ void SAL_CALL VCLSession::queryInteraction( const css::uno::Reference<XSessionMa
         return;
     }
 
-    osl::MutexGuard aGuard( m_aMutex );
+    osl::MutexGuard aGuard( *this );
     if( ! m_bInteractionRequested )
     {
         m_pSession->queryInteraction();
@@ -301,7 +302,7 @@ void SAL_CALL VCLSession::queryInteraction( const css::uno::Reference<XSessionMa
 
 void SAL_CALL VCLSession::interactionDone( const css::uno::Reference< XSessionManagerListener >& xListener ) throw( RuntimeException )
 {
-    osl::MutexGuard aGuard( m_aMutex );
+    osl::MutexGuard aGuard( *this );
     int nRequested = 0, nDone = 0;
     for( std::list< Listener >::iterator it = m_aListeners.begin(); it != m_aListeners.end(); ++it )
     {
@@ -324,7 +325,7 @@ void SAL_CALL VCLSession::interactionDone( const css::uno::Reference< XSessionMa
 
 void SAL_CALL VCLSession::saveDone( const css::uno::Reference< XSessionManagerListener >& xListener ) throw( RuntimeException )
 {
-    osl::MutexGuard aGuard( m_aMutex );
+    osl::MutexGuard aGuard( *this );
 
     bool bSaveDone = true;
     for( std::list< Listener >::iterator it = m_aListeners.begin();
commit e100891fecc777f0d25aef9044373633ae6a34af
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 11:28:42 2012 +0200

    Some clean up
    
    Change-Id: Ib8ed8c866eece8a57a5532a65d1229e5dd92a422

diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx
index 47a39d8..0ac6bff 100644
--- a/vcl/source/app/session.cxx
+++ b/vcl/source/app/session.cxx
@@ -26,7 +26,9 @@
  *
  ************************************************************************/
 
+#include "sal/config.h"
 
+#include <boost/scoped_ptr.hpp>
 #include <cppuhelper/compbase1.hxx>
 
 #include <tools/debug.hxx>
@@ -77,7 +79,7 @@ class VCLSession : public cppu::WeakComponentImplHelper1 < XSessionManagerClient
     };
 
     std::list< Listener >                           m_aListeners;
-    SalSession*                                     m_pSession;
+    boost::scoped_ptr< SalSession >                 m_pSession;
     osl::Mutex                                      m_aMutex;
     bool                                            m_bInteractionRequested;
     bool                                            m_bInteractionGranted;
@@ -86,13 +88,7 @@ class VCLSession : public cppu::WeakComponentImplHelper1 < XSessionManagerClient
 
     static void SalSessionEventProc( void* pData, SalSessionEvent* pEvent );
 
-    void callSaveRequested( bool bShutdown, bool bCancelable );
-    void callShutdownCancelled();
-    void callInteractionGranted( bool bGranted );
-    void callQuit();
-public:
-    VCLSession();
-    virtual ~VCLSession();
+    virtual ~VCLSession() {}
 
     virtual void SAL_CALL addSessionManagerListener( const css::uno::Reference< XSessionManagerListener >& xListener ) throw( RuntimeException );
     virtual void SAL_CALL removeSessionManagerListener( const css::uno::Reference< XSessionManagerListener>& xListener ) throw( RuntimeException );
@@ -100,25 +96,28 @@ public:
     virtual void SAL_CALL interactionDone( const css::uno::Reference< XSessionManagerListener >& xListener ) throw( RuntimeException );
     virtual void SAL_CALL saveDone( const css::uno::Reference< XSessionManagerListener >& xListener ) throw( RuntimeException );
     virtual sal_Bool SAL_CALL cancelShutdown() throw( RuntimeException );
+
+    void callSaveRequested( bool bShutdown, bool bCancelable );
+    void callShutdownCancelled();
+    void callInteractionGranted( bool bGranted );
+    void callQuit();
+
+public:
+    VCLSession();
 };
 
 VCLSession::VCLSession()
         : cppu::WeakComponentImplHelper1< XSessionManagerClient >( m_aMutex ),
+          m_pSession( ImplGetSVData()->mpDefInst->CreateSalSession() ),
           m_bInteractionRequested( false ),
           m_bInteractionGranted( false ),
           m_bInteractionDone( false ),
           m_bSaveDone( false )
 {
-    m_pSession = ImplGetSVData()->mpDefInst->CreateSalSession();
     if( m_pSession )
         m_pSession->SetCallback( SalSessionEventProc, this );
 }
 
-VCLSession::~VCLSession()
-{
-    delete m_pSession;
-}
-
 void VCLSession::callSaveRequested( bool bShutdown, bool bCancelable )
 {
     std::list< Listener > aListeners;
@@ -138,7 +137,7 @@ void VCLSession::callSaveRequested( bool bShutdown, bool bCancelable )
         m_bInteractionDone = false;
         // without session we assume UI is always possible,
         // so it was reqeusted and granted
-        m_bInteractionRequested = m_bInteractionGranted = m_pSession ? false : true;
+        m_bInteractionRequested = m_bInteractionGranted = !m_pSession;
 
         // answer the session manager even if no listeners available anymore
         DBG_ASSERT( ! aListeners.empty(), "saveRequested but no listeners !" );
@@ -346,25 +345,24 @@ void SAL_CALL VCLSession::saveDone( const css::uno::Reference< XSessionManagerLi
 
 sal_Bool SAL_CALL VCLSession::cancelShutdown() throw( RuntimeException )
 {
-    return m_pSession ? (sal_Bool)m_pSession->cancelShutdown() : sal_False;
+    return m_pSession && m_pSession->cancelShutdown();
 }
 
 // service implementation
 
 OUString SAL_CALL vcl_session_getImplementationName()
 {
-    static OUString aImplementationName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.VCLSessionManagerClient" ) );
-    return aImplementationName;
+    return OUString( "com.sun.star.frame.VCLSessionManagerClient" );
 }
 
 Sequence< rtl::OUString > SAL_CALL vcl_session_getSupportedServiceNames()
 {
     Sequence< OUString > aRet(1);
-    aRet[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.SessionManagerClient"));
+    aRet[0] = "com.sun.star.frame.SessionManagerClient";
     return aRet;
 }
 
-css::uno::Reference< XInterface > SAL_CALL vcl_session_createInstance( const css::uno::Reference< XMultiServiceFactory > & /*xMultiServiceFactory*/ )
+css::uno::Reference< XInterface > SAL_CALL vcl_session_createInstance( SAL_UNUSED_PARAMETER const css::uno::Reference< XMultiServiceFactory > & )
 {
     return static_cast< cppu::OWeakObject * >(new VCLSession);
 }
commit 1cdb792368ed26d58828eead2848422e7dec4c7d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 19 10:17:14 2012 +0200

    Make VCLSession into a OneInstanceFactory
    
    ...so no need to hold the one instance as ImplSVData::xSMClient.  Nor as
    VCLSession::pOneInstance, after changing SalSession::SetCallback to carry
    VCLSession* as user data.
    
    Change-Id: I3180d72035e3da7aa164a20309fbaeccecbb9b65

diff --git a/vcl/inc/salsession.hxx b/vcl/inc/salsession.hxx
index c912565..89e9239 100644
--- a/vcl/inc/salsession.hxx
+++ b/vcl/inc/salsession.hxx
@@ -84,25 +84,27 @@ struct SalSessionQuitEvent : public SalSessionEvent
     {}
 };
 
-typedef void(*SessionProc)( SalSessionEvent *pEvent);
+typedef void(*SessionProc)(void *pData, SalSessionEvent *pEvent);
 
 class VCL_PLUGIN_PUBLIC SalSession
 {
     SessionProc         m_aProc;
+    void *              m_pProcData;
 public:
     SalSession()
             : m_aProc( 0 )
     {}
     virtual ~SalSession();
 
-    void SetCallback( SessionProc aCallback )
+    void SetCallback( SessionProc aCallback, void * pCallbackData )
     {
         m_aProc = aCallback;
+        m_pProcData = pCallbackData;
     }
     void CallCallback( SalSessionEvent* pEvent )
     {
         if( m_aProc )
-            m_aProc( pEvent );
+            m_aProc( m_pProcData, pEvent );
     }
 
     // query the session manager for a user interaction slot
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 8aa5f87..e96979a 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -53,16 +53,9 @@
 
 #include <boost/unordered_map.hpp>
 
-namespace com {
-namespace sun {
-namespace star {
-namespace lang {
+namespace com { namespace sun { namespace star { namespace lang {
     class XMultiServiceFactory;
-}
-namespace frame {
-    class XSessionManagerClient;
-}
-}}}
+} } } }
 
 struct ImplTimerData;
 struct ImplFileImageCacheData;
@@ -366,7 +359,6 @@ struct ImplSVData
     rtl::Reference< vcl::DisplayConnection >            mxDisplayConnection;
 
     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxAccessBridge;
-    com::sun::star::uno::Reference< com::sun::star::frame::XSessionManagerClient > xSMClient;
     ::vcl::SettingsConfigItem*          mpSettingsConfigItem;
     std::list< vcl::DeleteOnDeinitBase* >*   mpDeinitDeleteList;
     boost::unordered_map< int, rtl::OUString >*     mpPaperNames;
diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx
index 25a8810..47a39d8 100644
--- a/vcl/source/app/session.cxx
+++ b/vcl/source/app/session.cxx
@@ -84,8 +84,7 @@ class VCLSession : public cppu::WeakComponentImplHelper1 < XSessionManagerClient
     bool                                            m_bInteractionDone;
     bool                                            m_bSaveDone;
 
-    static void SalSessionEventProc( SalSessionEvent* pEvent );
-    static VCLSession* pOneInstance;
+    static void SalSessionEventProc( void* pData, SalSessionEvent* pEvent );
 
     void callSaveRequested( bool bShutdown, bool bCancelable );
     void callShutdownCancelled();
@@ -103,8 +102,6 @@ public:
     virtual sal_Bool SAL_CALL cancelShutdown() throw( RuntimeException );
 };
 
-VCLSession* VCLSession::pOneInstance = NULL;
-
 VCLSession::VCLSession()
         : cppu::WeakComponentImplHelper1< XSessionManagerClient >( m_aMutex ),
           m_bInteractionRequested( false ),
@@ -112,17 +109,13 @@ VCLSession::VCLSession()
           m_bInteractionDone( false ),
           m_bSaveDone( false )
 {
-    DBG_ASSERT( pOneInstance == 0, "One instance  of VCLSession only !" );
-    pOneInstance = this;
     m_pSession = ImplGetSVData()->mpDefInst->CreateSalSession();
     if( m_pSession )
-        m_pSession->SetCallback( SalSessionEventProc );
+        m_pSession->SetCallback( SalSessionEventProc, this );
 }
 
 VCLSession::~VCLSession()
 {
-    DBG_ASSERT( pOneInstance == this, "Another instance of VCLSession in destructor !" );
-    pOneInstance = NULL;
     delete m_pSession;
 }
 
@@ -230,27 +223,28 @@ void VCLSession::callQuit()
     Application::AcquireSolarMutex( nAcquireCount );
 }
 
-void VCLSession::SalSessionEventProc( SalSessionEvent* pEvent )
+void VCLSession::SalSessionEventProc( void* pData, SalSessionEvent* pEvent )
 {
+    VCLSession * pThis = static_cast< VCLSession * >( pData );
     switch( pEvent->m_eType )
     {
         case Interaction:
         {
             SalSessionInteractionEvent* pIEv = static_cast<SalSessionInteractionEvent*>(pEvent);
-            pOneInstance->callInteractionGranted( pIEv->m_bInteractionGranted );
+            pThis->callInteractionGranted( pIEv->m_bInteractionGranted );
         }
         break;
         case SaveRequest:
         {
             SalSessionSaveRequestEvent* pSEv = static_cast<SalSessionSaveRequestEvent*>(pEvent);
-            pOneInstance->callSaveRequested( pSEv->m_bShutdown, pSEv->m_bCancelable );
+            pThis->callSaveRequested( pSEv->m_bShutdown, pSEv->m_bCancelable );
         }
         break;
         case ShutdownCancel:
-            pOneInstance->callShutdownCancelled();
+            pThis->callShutdownCancelled();
             break;
         case Quit:
-            pOneInstance->callQuit();
+            pThis->callQuit();
             break;
     }
 }
@@ -372,11 +366,7 @@ Sequence< rtl::OUString > SAL_CALL vcl_session_getSupportedServiceNames()
 
 css::uno::Reference< XInterface > SAL_CALL vcl_session_createInstance( const css::uno::Reference< XMultiServiceFactory > & /*xMultiServiceFactory*/ )
 {
-    ImplSVData* pSVData = ImplGetSVData();
-    if( ! pSVData->xSMClient.is() )
-        pSVData->xSMClient = new VCLSession();
-
-    return css::uno::Reference< XInterface >(pSVData->xSMClient, UNO_QUERY );
+    return static_cast< cppu::OWeakObject * >(new VCLSession);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/components/factory.cxx b/vcl/source/components/factory.cxx
index b482431..2f0027d 100644
--- a/vcl/source/components/factory.cxx
+++ b/vcl/source/components/factory.cxx
@@ -95,7 +95,7 @@ extern "C" {
             Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory;
             if( vcl_session_getImplementationName().equalsAscii( pImplementationName ) )
             {
-                xFactory = ::cppu::createSingleFactory(
+                xFactory = ::cppu::createOneInstanceFactory(
                     xMgr, vcl_session_getImplementationName(), vcl_session_createInstance,
                     vcl_session_getSupportedServiceNames() );
             }
commit b11de026cb8eb520dc410fd974581e780ecbef92
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 18 18:21:36 2012 +0200

    Remove duplicate ImplGetAppSVData and GetAppSalData
    
    Change-Id: I8cb241898e22251656de4e080f1ae9bfe0359383

diff --git a/vcl/inc/aqua/saldata.hxx b/vcl/inc/aqua/saldata.hxx
index 7339d5c..e9023be 100644
--- a/vcl/inc/aqua/saldata.hxx
+++ b/vcl/inc/aqua/saldata.hxx
@@ -129,7 +129,6 @@ public:
 
 inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = pData; }
 inline SalData *GetSalData() { return ImplGetSVData()->mpSalData; }
-inline SalData *GetAppSalData() { return ImplGetAppSVData()->mpSalData; }
 
 // --- Prototypes ---
 
diff --git a/vcl/inc/ios/saldata.hxx b/vcl/inc/ios/saldata.hxx
index a15d4e8..eca863a 100644
--- a/vcl/inc/ios/saldata.hxx
+++ b/vcl/inc/ios/saldata.hxx
@@ -113,7 +113,6 @@ public:
 
 inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = pData; }
 inline SalData *GetSalData() { return ImplGetSVData()->mpSalData; }
-inline SalData *GetAppSalData() { return ImplGetAppSVData()->mpSalData; }
 
 // --- Prototypes ---
 
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 1d951fd..8aa5f87 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -395,7 +395,6 @@ long        ImplCallEvent( NotifyEvent& rEvt );
 
 extern VCL_PLUGIN_PUBLIC ImplSVData* pImplSVData;
 inline VCL_PLUGIN_PUBLIC ImplSVData* ImplGetSVData() { return pImplSVData; }
-inline ImplSVData* ImplGetAppSVData() { return ImplGetSVData(); }
 VCL_PLUGIN_PUBLIC void ImplHideSplash();
 
 bool ImplInitAccessBridge( sal_Bool bAllowCancel, sal_Bool &rCancelled );
diff --git a/vcl/inc/win/saldata.hxx b/vcl/inc/win/saldata.hxx
index 8195001..ce3870e 100644
--- a/vcl/inc/win/saldata.hxx
+++ b/vcl/inc/win/saldata.hxx
@@ -149,7 +149,6 @@ public:
 
 inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = pData; }
 inline SalData* GetSalData() { return ImplGetSVData()->mpSalData; }
-inline SalData* GetAppSalData() { return ImplGetAppSVData()->mpSalData; }
 
 // --------------
 // - SalShlData -
diff --git a/vcl/win/source/app/salinst.cxx b/vcl/win/source/app/salinst.cxx
index f5f678b..b63d658 100644
--- a/vcl/win/source/app/salinst.cxx
+++ b/vcl/win/source/app/salinst.cxx
@@ -468,7 +468,7 @@ void DeInitSalData()
 void InitSalMain()
 {
     // remember data, copied from WinMain
-    SalData* pData = GetAppSalData();
+    SalData* pData = GetSalData();
     if ( pData )    // Im AppServer NULL
     {
         STARTUPINFO aSI;
commit 76cc3cf62162432afe2a34502a950654e7c3a48c
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 18 17:29:44 2012 +0200

    SessionManagerClient::open need not be exported
    
    Change-Id: I0284d8ae16861f7081547780e6b7de27bacaf467

diff --git a/vcl/inc/unx/sm.hxx b/vcl/inc/unx/sm.hxx
index 0dfc463..d3cf9ab 100644
--- a/vcl/inc/unx/sm.hxx
+++ b/vcl/inc/unx/sm.hxx
@@ -64,7 +64,7 @@ class SessionManagerClient
     DECL_STATIC_LINK( SessionManagerClient, SaveYourselfHdl, void* );
     DECL_STATIC_LINK( SessionManagerClient, InteractionHdl, void* );
 public:
-    static VCLPLUG_GEN_PUBLIC void open(); // needed by other plugins, so export
+    static void open(); // needed by other plugins, so export
     static void close();
 
     static bool checkDocumentsSaved();
commit 4307b6a465cd97cc0a85260cc798542b50ed0f58
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 18 17:26:46 2012 +0200

    Properly detect and remove ".bin" at end
    
    Change-Id: I89b321d5103017aa01151bd813d5789e688b62dd

diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index bb55adf..843e039 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -525,9 +525,8 @@ rtl::OUString SessionManagerClient::getExecName()
     osl_getExecutableFile( &aExec.pData );
     osl_getSystemPathFromFileURL( aExec.pData, &aSysExec.pData );
 
-    int nPos = aSysExec.indexOf( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".bin")) );
-    if( nPos != -1 )
-        aSysExec = aSysExec.copy( 0, nPos );
+    if( aSysExec.endsWith(".bin") )
+        aSysExec = aSysExec.copy( 0, aSysExec.getLength() - RTL_CONSTASCII_LENGTH(".bin") );
     return aSysExec;
 }
 
commit dcd7230e06134487663773fc2f45f6556f503b02
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 18 17:21:20 2012 +0200

    USE_SM_EXTENSION is always defined
    
    Change-Id: I70cde1991514dcc25e4bb8824812eb64c2e66edc

diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx
index 82fd4b1..bb55adf 100644
--- a/vcl/unx/generic/app/sm.cxx
+++ b/vcl/unx/generic/app/sm.cxx
@@ -52,8 +52,6 @@
 #include <vcl/svapp.hxx>
 #include <vcl/window.hxx>
 
-#define USE_SM_EXTENSION
-
 static IceSalSession* pOneInstance = NULL;
 
 SalSession* X11SalInstance::CreateSalSession()
@@ -125,10 +123,8 @@ class ICEConnectionObserver
     static int nWakeupFiles[2];
     static oslMutex ICEMutex;
     static oslThread ICEThread;
-#ifdef USE_SM_EXTENSION
     static IceIOErrorHandler origIOErrorHandler;
     static IceErrorHandler origErrorHandler;
-#endif
 public:
 
     static void activate();
@@ -149,7 +145,6 @@ oslMutex            ICEConnectionObserver::ICEMutex                 = NULL;
 oslThread           ICEConnectionObserver::ICEThread                = NULL;
 int                 ICEConnectionObserver::nWakeupFiles[2]          = { 0, 0 };
 
-#ifdef USE_SM_EXTENSION
 IceIOErrorHandler ICEConnectionObserver::origIOErrorHandler = NULL;
 IceErrorHandler ICEConnectionObserver::origErrorHandler = NULL;
 
@@ -160,7 +155,6 @@ static void IgnoreIceErrors(IceConn, Bool, int, unsigned long, int, int, IcePoin
 static void IgnoreIceIOErrors(IceConn)
 {
 }
-#endif
 
 // HACK
 bool SessionManagerClient::bDocSaveDone = false;
@@ -334,7 +328,6 @@ void SessionManagerClient::SaveYourselfProc(
             " SmInteractStyleErrors: " << (interact_style == SmInteractStyleErrors) <<
             " SmInteractStyleErrors: " << (interact_style == SmInteractStyleAny));
     BuildSmPropertyList();
-#ifdef USE_SM_EXTENSION
     bDocSaveDone = false;
     /* #i49875# some session managers send a "die" message if the
      * saveDone does not come early enough for their convenience
@@ -351,7 +344,6 @@ void SessionManagerClient::SaveYourselfProc(
     sal_uIntPtr nStateVal = shutdown ? 0xffffffff : 0x0;
     Application::PostUserEvent( STATIC_LINK( (void*)nStateVal, SessionManagerClient, SaveYourselfHdl ) );
     SAL_INFO("vcl.sm", "waiting for save yourself event to be processed" );
-#endif
 }
 
 IMPL_STATIC_LINK_NOINSTANCE( SessionManagerClient, ShutDownHdl, void*, EMPTYARG )
@@ -426,7 +418,6 @@ void SessionManagerClient::open()
 {
     static SmcCallbacks aCallbacks;
 
-#ifdef USE_SM_EXTENSION
     // this is the way Xt does it, so we can too
     if( ! aSmcConnection && getenv( "SESSION_MANAGER" ) )
     {
@@ -483,7 +474,6 @@ void SessionManagerClient::open()
     }
     else if( ! aSmcConnection )
         SAL_INFO("vcl.sm", "no SESSION_MANAGER");
-#endif
 }
 
 const rtl::OString& SessionManagerClient::getSessionID()
@@ -495,14 +485,12 @@ void SessionManagerClient::close()
 {
     if( aSmcConnection )
     {
-#ifdef USE_SM_EXTENSION
         ICEConnectionObserver::lock();
         SAL_INFO("vcl.sm", "attempting SmcCloseConnection");
         SmcCloseConnection( aSmcConnection, 0, NULL );
         SAL_INFO("vcl.sm", "SmcConnection closed");
         ICEConnectionObserver::unlock();
         ICEConnectionObserver::deactivate();
-#endif
         aSmcConnection = NULL;
     }
 }
@@ -583,7 +571,6 @@ void ICEConnectionObserver::activate()
         nWakeupFiles[0] = nWakeupFiles[1] = 0;
         ICEMutex = osl_createMutex();
         bIsWatching = sal_True;
-#ifdef USE_SM_EXTENSION
         /*
          * Default handlers call exit, we don't care that strongly if something
          * happens to fail
@@ -591,7 +578,6 @@ void ICEConnectionObserver::activate()
         origIOErrorHandler = IceSetIOErrorHandler( IgnoreIceIOErrors );
         origErrorHandler = IceSetErrorHandler( IgnoreIceErrors );
         IceAddConnectionWatch( ICEWatchProc, NULL );
-#endif
     }
 }
 
@@ -601,11 +587,9 @@ void ICEConnectionObserver::deactivate()
     {
         lock();
         bIsWatching = sal_False;
-#ifdef USE_SM_EXTENSION
         IceRemoveConnectionWatch( ICEWatchProc, NULL );
         IceSetErrorHandler( origErrorHandler );
         IceSetIOErrorHandler( origIOErrorHandler );
-#endif
         nConnections = 0;
         if( ICEThread )
         {
@@ -634,7 +618,6 @@ void ICEConnectionObserver::wakeup()
 
 void ICEConnectionWorker( void* )
 {
-#ifdef USE_SM_EXTENSION
     while( osl_scheduleThread(ICEConnectionObserver::ICEThread) && ICEConnectionObserver::nConnections )
     {
         ICEConnectionObserver::lock();
@@ -678,7 +661,6 @@ void ICEConnectionWorker( void* )
         }
         ICEConnectionObserver::unlock();
     }
-#endif
     SAL_INFO("vcl.sm", "shutting donw ICE dispatch thread");
 }
 
@@ -693,7 +675,6 @@ void ICEConnectionObserver::ICEWatchProc(
     // this implicitly means that a call into ICE lib is calling this
     // so the ICEMutex MUST already be locked by the caller
 
-#ifdef USE_SM_EXTENSION
     if( opening )
     {
         int fd = IceConnectionNumber( connection );
@@ -773,7 +754,6 @@ void ICEConnectionObserver::ICEWatchProc(
     }
     SAL_INFO( "vcl.sm", "ICE connection on " << IceConnectionNumber( connection ) << " " << (opening ? "inserted" : "removed"));
     SAL_INFO( "vcl.sm", "Display connection is " << ConnectionNumber( GetGenericData()->GetSalDisplay()->GetDisplay() ) );
-#endif
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list