diff options
Diffstat (limited to 'vcl/qt5/Qt5Instance.cxx')
-rw-r--r-- | vcl/qt5/Qt5Instance.cxx | 256 |
1 files changed, 113 insertions, 143 deletions
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx index 4e36c6684936..c61a29a01935 100644 --- a/vcl/qt5/Qt5Instance.cxx +++ b/vcl/qt5/Qt5Instance.cxx @@ -41,17 +41,17 @@ #include <headless/svpdummies.hxx> #include <headless/svpbmp.hxx> -Qt5Instance::Qt5Instance( SalYieldMutex* pMutex, bool bUseCairo ) - : SalGenericInstance( pMutex ) - , m_postUserEventId( -1 ) - , m_bUseCairo( bUseCairo ) +Qt5Instance::Qt5Instance(SalYieldMutex* pMutex, bool bUseCairo) + : SalGenericInstance(pMutex) + , m_postUserEventId(-1) + , m_bUseCairo(bUseCairo) { m_postUserEventId = QEvent::registerEventType(); // this one needs to be blocking, so that the handling in main thread // is processed before the thread emitting the signal continues - connect( this, SIGNAL( ImplYieldSignal( bool, bool )), - this, SLOT( ImplYield( bool, bool )), Qt::BlockingQueuedConnection ); + connect(this, SIGNAL(ImplYieldSignal(bool, bool)), this, SLOT(ImplYield(bool, bool)), + Qt::BlockingQueuedConnection); } Qt5Instance::~Qt5Instance() @@ -59,108 +59,95 @@ Qt5Instance::~Qt5Instance() // force freeing the QApplication before freeing the arguments, // as it uses references to the provided arguments! m_pQApplication.reset(); - for( int i = 0; i < *m_pFakeArgc; i++ ) - free( m_pFakeArgvFreeable[i] ); + for (int i = 0; i < *m_pFakeArgc; i++) + free(m_pFakeArgvFreeable[i]); } -SalFrame* Qt5Instance::CreateChildFrame( SystemParentData* /*pParent*/, SalFrameStyleFlags nStyle ) +SalFrame* Qt5Instance::CreateChildFrame(SystemParentData* /*pParent*/, SalFrameStyleFlags nStyle) { - return new Qt5Frame( nullptr, nStyle, m_bUseCairo ); + return new Qt5Frame(nullptr, nStyle, m_bUseCairo); } -SalFrame* Qt5Instance::CreateFrame( SalFrame* pParent, SalFrameStyleFlags nStyle ) +SalFrame* Qt5Instance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) { - assert( !pParent || dynamic_cast<Qt5Frame*>( pParent ) ); - return new Qt5Frame( static_cast<Qt5Frame*>( pParent ), nStyle, m_bUseCairo ); + assert(!pParent || dynamic_cast<Qt5Frame*>(pParent)); + return new Qt5Frame(static_cast<Qt5Frame*>(pParent), nStyle, m_bUseCairo); } -void Qt5Instance::DestroyFrame( SalFrame* pFrame ) -{ - delete pFrame; -} +void Qt5Instance::DestroyFrame(SalFrame* pFrame) { delete pFrame; } -SalObject* Qt5Instance::CreateObject( SalFrame* pParent, SystemWindowData*, bool bShow ) +SalObject* Qt5Instance::CreateObject(SalFrame* pParent, SystemWindowData*, bool bShow) { - assert( !pParent || dynamic_cast<Qt5Frame*>( pParent ) ); - return new Qt5Object( static_cast<Qt5Frame*>( pParent ), bShow ); + assert(!pParent || dynamic_cast<Qt5Frame*>(pParent)); + return new Qt5Object(static_cast<Qt5Frame*>(pParent), bShow); } -void Qt5Instance::DestroyObject( SalObject* pObject ) -{ - delete pObject; -} +void Qt5Instance::DestroyObject(SalObject* pObject) { delete pObject; } -SalVirtualDevice* Qt5Instance::CreateVirtualDevice( SalGraphics* /* pGraphics */, - long &nDX, long &nDY, - DeviceFormat eFormat, - const SystemGraphicsData* /* pData */ ) +SalVirtualDevice* Qt5Instance::CreateVirtualDevice(SalGraphics* /* pGraphics */, long& nDX, + long& nDY, DeviceFormat eFormat, + const SystemGraphicsData* /* pData */) { - if ( m_bUseCairo ) + if (m_bUseCairo) { - SvpSalVirtualDevice *pVD = new SvpSalVirtualDevice( eFormat, 1 ); - pVD->SetSize( nDX, nDY ); + SvpSalVirtualDevice* pVD = new SvpSalVirtualDevice(eFormat, 1); + pVD->SetSize(nDX, nDY); return pVD; } else { - Qt5VirtualDevice* pVD = new Qt5VirtualDevice( eFormat, 1 ); - pVD->SetSize( nDX, nDY ); + Qt5VirtualDevice* pVD = new Qt5VirtualDevice(eFormat, 1); + pVD->SetSize(nDX, nDY); return pVD; } } -SalTimer* Qt5Instance::CreateSalTimer() -{ - return new Qt5Timer(); -} +SalTimer* Qt5Instance::CreateSalTimer() { return new Qt5Timer(); } -SalSystem* Qt5Instance::CreateSalSystem() -{ - return new SvpSalSystem(); -} +SalSystem* Qt5Instance::CreateSalSystem() { return new SvpSalSystem(); } SalBitmap* Qt5Instance::CreateSalBitmap() { - if ( m_bUseCairo ) + if (m_bUseCairo) return new SvpSalBitmap(); else return new Qt5Bitmap(); } -bool Qt5Instance::ImplYield( bool bWait, bool bHandleAllCurrentEvents ) +bool Qt5Instance::ImplYield(bool bWait, bool bHandleAllCurrentEvents) { - bool wasEvent = DispatchUserEvents( bHandleAllCurrentEvents ); - if ( !bHandleAllCurrentEvents && wasEvent ) + bool wasEvent = DispatchUserEvents(bHandleAllCurrentEvents); + if (!bHandleAllCurrentEvents && wasEvent) return true; /** * Quoting the Qt docs: [QAbstractEventDispatcher::processEvents] processes * pending events that match flags until there are no more events to process. */ - QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance( qApp->thread()); - if ( bWait && !wasEvent ) - wasEvent = dispatcher->processEvents( QEventLoop::WaitForMoreEvents ); + QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance(qApp->thread()); + if (bWait && !wasEvent) + wasEvent = dispatcher->processEvents(QEventLoop::WaitForMoreEvents); else - wasEvent = dispatcher->processEvents( QEventLoop::AllEvents ) || wasEvent; + wasEvent = dispatcher->processEvents(QEventLoop::AllEvents) || wasEvent; return wasEvent; } bool Qt5Instance::DoYield(bool bWait, bool bHandleAllCurrentEvents) { bool bWasEvent = false; - if( qApp->thread() == QThread::currentThread() ) + if (qApp->thread() == QThread::currentThread()) { - bWasEvent = ImplYield( bWait, bHandleAllCurrentEvents ); - if ( bWasEvent ) + bWasEvent = ImplYield(bWait, bHandleAllCurrentEvents); + if (bWasEvent) m_aWaitingYieldCond.set(); } else { { SolarMutexReleaser aReleaser; - bWasEvent = Q_EMIT ImplYieldSignal( false, bHandleAllCurrentEvents ); + bWasEvent = Q_EMIT ImplYieldSignal(false, bHandleAllCurrentEvents); } - if ( !bWasEvent && bWait ) + if (!bWasEvent && bWait) { m_aWaitingYieldCond.reset(); SolarMutexReleaser aReleaser; @@ -171,125 +158,108 @@ bool Qt5Instance::DoYield(bool bWait, bool bHandleAllCurrentEvents) return bWasEvent; } -bool Qt5Instance::AnyInput( VclInputFlags nType ) -{ - return false; -} +bool Qt5Instance::AnyInput(VclInputFlags nType) { return false; } -SalSession* Qt5Instance::CreateSalSession() -{ - return nullptr; -} +SalSession* Qt5Instance::CreateSalSession() { return nullptr; } -OUString Qt5Instance::GetConnectionIdentifier() -{ - return OUString(); -} +OUString Qt5Instance::GetConnectionIdentifier() { return OUString(); } -void Qt5Instance::AddToRecentDocumentList(const OUString&, const OUString&, const OUString&) -{ -} +void Qt5Instance::AddToRecentDocumentList(const OUString&, const OUString&, const OUString&) {} -OpenGLContext* Qt5Instance::CreateOpenGLContext() -{ - return nullptr; -} +OpenGLContext* Qt5Instance::CreateOpenGLContext() { return nullptr; } -bool Qt5Instance::IsMainThread() const -{ - return qApp->thread() != QThread::currentThread(); -} +bool Qt5Instance::IsMainThread() const { return qApp->thread() != QThread::currentThread(); } void Qt5Instance::TriggerUserEventProcessing() { - QApplication::postEvent(this, new QEvent(QEvent::Type( m_postUserEventId ))); + QApplication::postEvent(this, new QEvent(QEvent::Type(m_postUserEventId))); } -void Qt5Instance::ProcessEvent( SalUserEvent aEvent ) +void Qt5Instance::ProcessEvent(SalUserEvent aEvent) { - aEvent.m_pFrame->CallCallback( aEvent.m_nEvent, aEvent.m_pData ); + aEvent.m_pFrame->CallCallback(aEvent.m_nEvent, aEvent.m_pData); } extern "C" { - VCLPLUG_QT5_PUBLIC SalInstance* create_SalInstance() - { - OString aVersion( qVersion() ); - SAL_INFO( "vcl.qt5", "qt version string is " << aVersion ); +VCLPLUG_QT5_PUBLIC SalInstance* create_SalInstance() +{ + OString aVersion(qVersion()); + SAL_INFO("vcl.qt5", "qt version string is " << aVersion); - QApplication *pQApplication; - char **pFakeArgvFreeable = nullptr; + QApplication* pQApplication; + char** pFakeArgvFreeable = nullptr; - int nFakeArgc = 2; - const sal_uInt32 nParams = osl_getCommandArgCount(); - OString aDisplay; - OUString aParam, aBin; + int nFakeArgc = 2; + const sal_uInt32 nParams = osl_getCommandArgCount(); + OString aDisplay; + OUString aParam, aBin; - for ( sal_uInt32 nIdx = 0; nIdx < nParams; ++nIdx ) + for (sal_uInt32 nIdx = 0; nIdx < nParams; ++nIdx) + { + osl_getCommandArg(nIdx, &aParam.pData); + if (aParam != "-display") + continue; + if (!pFakeArgvFreeable) { - osl_getCommandArg( nIdx, &aParam.pData ); - if ( aParam != "-display" ) - continue; - if ( !pFakeArgvFreeable ) - { - pFakeArgvFreeable = new char*[ nFakeArgc + 2 ]; - pFakeArgvFreeable[ nFakeArgc++ ] = strdup( "-display" ); - } - else - free( pFakeArgvFreeable[ nFakeArgc ] ); - - ++nIdx; - osl_getCommandArg( nIdx, &aParam.pData ); - aDisplay = OUStringToOString( aParam, osl_getThreadTextEncoding() ); - pFakeArgvFreeable[ nFakeArgc ] = strdup( aDisplay.getStr() ); + pFakeArgvFreeable = new char*[nFakeArgc + 2]; + pFakeArgvFreeable[nFakeArgc++] = strdup("-display"); } - if ( !pFakeArgvFreeable ) - pFakeArgvFreeable = new char*[ nFakeArgc ]; else - nFakeArgc++; + free(pFakeArgvFreeable[nFakeArgc]); - osl_getExecutableFile( &aParam.pData ); - osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); - OString aExec = OUStringToOString( aBin, osl_getThreadTextEncoding() ); - pFakeArgvFreeable[ 0 ] = strdup( aExec.getStr() ); - pFakeArgvFreeable[ 1 ] = strdup( "--nocrashhandler" ); + ++nIdx; + osl_getCommandArg(nIdx, &aParam.pData); + aDisplay = OUStringToOString(aParam, osl_getThreadTextEncoding()); + pFakeArgvFreeable[nFakeArgc] = strdup(aDisplay.getStr()); + } + if (!pFakeArgvFreeable) + pFakeArgvFreeable = new char*[nFakeArgc]; + else + nFakeArgc++; - char **pFakeArgv = new char*[ nFakeArgc ]; - for( int i = 0; i < nFakeArgc; i++ ) - pFakeArgv[ i ] = pFakeArgvFreeable[ i ]; + osl_getExecutableFile(&aParam.pData); + osl_getSystemPathFromFileURL(aParam.pData, &aBin.pData); + OString aExec = OUStringToOString(aBin, osl_getThreadTextEncoding()); + pFakeArgvFreeable[0] = strdup(aExec.getStr()); + pFakeArgvFreeable[1] = strdup("--nocrashhandler"); - char* session_manager = nullptr; - if( getenv( "SESSION_MANAGER" ) != nullptr ) - { - session_manager = strdup( getenv( "SESSION_MANAGER" )); - unsetenv( "SESSION_MANAGER" ); - } + char** pFakeArgv = new char*[nFakeArgc]; + for (int i = 0; i < nFakeArgc; i++) + pFakeArgv[i] = pFakeArgvFreeable[i]; - int * pFakeArgc = new int; - *pFakeArgc = nFakeArgc; - pQApplication = new QApplication( *pFakeArgc, pFakeArgv ); + char* session_manager = nullptr; + if (getenv("SESSION_MANAGER") != nullptr) + { + session_manager = strdup(getenv("SESSION_MANAGER")); + unsetenv("SESSION_MANAGER"); + } - if( session_manager != nullptr ) - { - // coverity[tainted_string] - trusted source for setenv - setenv( "SESSION_MANAGER", session_manager, 1 ); - free( session_manager ); - } + int* pFakeArgc = new int; + *pFakeArgc = nFakeArgc; + pQApplication = new QApplication(*pFakeArgc, pFakeArgv); - QApplication::setQuitOnLastWindowClosed(false); + if (session_manager != nullptr) + { + // coverity[tainted_string] - trusted source for setenv + setenv("SESSION_MANAGER", session_manager, 1); + free(session_manager); + } - const bool bUseCairo = (nullptr != getenv( "SAL_VCL_QT5_USE_CAIRO" )); - Qt5Instance* pInstance = new Qt5Instance( new SalYieldMutex(), bUseCairo ); + QApplication::setQuitOnLastWindowClosed(false); - // initialize SalData - new Qt5Data( pInstance ); + const bool bUseCairo = (nullptr != getenv("SAL_VCL_QT5_USE_CAIRO")); + Qt5Instance* pInstance = new Qt5Instance(new SalYieldMutex(), bUseCairo); - pInstance->m_pQApplication.reset( pQApplication ); - pInstance->m_pFakeArgvFreeable.reset( pFakeArgvFreeable ); - pInstance->m_pFakeArgv.reset( pFakeArgv ); - pInstance->m_pFakeArgc.reset( pFakeArgc ); + // initialize SalData + new Qt5Data(pInstance); - return pInstance; - } + pInstance->m_pQApplication.reset(pQApplication); + pInstance->m_pFakeArgvFreeable.reset(pFakeArgvFreeable); + pInstance->m_pFakeArgv.reset(pFakeArgv); + pInstance->m_pFakeArgc.reset(pFakeArgc); + + return pInstance; +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |