diff options
Diffstat (limited to 'vcl/unx/generic')
24 files changed, 1303 insertions, 1298 deletions
diff --git a/vcl/unx/generic/app/i18n_ic.cxx b/vcl/unx/generic/app/i18n_ic.cxx index 6f94fe938818..8f1a814233ea 100644 --- a/vcl/unx/generic/app/i18n_ic.cxx +++ b/vcl/unx/generic/app/i18n_ic.cxx @@ -363,23 +363,23 @@ SalI18N_InputContext::Unmap() void SalI18N_InputContext::Map( SalFrame *pFrame ) { - if( mbUseable ) + if( !mbUseable ) + return; + + if( !pFrame ) + return; + + if ( maContext == nullptr ) { - if( pFrame ) - { - if ( maContext == nullptr ) - { - SalI18N_InputMethod *pInputMethod; - pInputMethod = vcl_sal::getSalDisplay(GetGenericUnixSalData())->GetInputMethod(); + SalI18N_InputMethod *pInputMethod; + pInputMethod = vcl_sal::getSalDisplay(GetGenericUnixSalData())->GetInputMethod(); - maContext = XCreateIC( pInputMethod->GetMethod(), - XNVaNestedList, mpAttributes, - nullptr ); - } - if( maClientData.pFrame != pFrame ) - SetICFocus( pFrame ); - } + maContext = XCreateIC( pInputMethod->GetMethod(), + XNVaNestedList, mpAttributes, + nullptr ); } + if( maClientData.pFrame != pFrame ) + SetICFocus( pFrame ); } // Handle DestroyCallbacks @@ -541,28 +541,28 @@ SalI18N_InputContext::UpdateSpotLocation() void SalI18N_InputContext::SetICFocus( SalFrame* pFocusFrame ) { - if ( mbUseable && (maContext != nullptr) ) - { - maClientData.pFrame = pFocusFrame; + if ( !(mbUseable && (maContext != nullptr)) ) + return; - const SystemEnvData* pEnv = pFocusFrame->GetSystemData(); - ::Window aClientWindow = pEnv->aShellWindow; - ::Window aFocusWindow = pEnv->aWindow; + maClientData.pFrame = pFocusFrame; - XSetICValues( maContext, - XNFocusWindow, aFocusWindow, - XNClientWindow, aClientWindow, - nullptr ); + const SystemEnvData* pEnv = pFocusFrame->GetSystemData(); + ::Window aClientWindow = pEnv->aShellWindow; + ::Window aFocusWindow = pEnv->aWindow; - if( maClientData.aInputEv.mpTextAttr ) - { - sendEmptyCommit(pFocusFrame); - // begin preedit again - vcl_sal::getSalDisplay(GetGenericUnixSalData())->SendInternalEvent( pFocusFrame, &maClientData.aInputEv, SalEvent::ExtTextInput ); - } + XSetICValues( maContext, + XNFocusWindow, aFocusWindow, + XNClientWindow, aClientWindow, + nullptr ); - XSetICFocus( maContext ); + if( maClientData.aInputEv.mpTextAttr ) + { + sendEmptyCommit(pFocusFrame); + // begin preedit again + vcl_sal::getSalDisplay(GetGenericUnixSalData())->SendInternalEvent( pFocusFrame, &maClientData.aInputEv, SalEvent::ExtTextInput ); } + + XSetICFocus( maContext ); } void @@ -583,20 +583,20 @@ SalI18N_InputContext::UnsetICFocus() void SalI18N_InputContext::EndExtTextInput() { - if ( mbUseable && (maContext != nullptr) && maClientData.pFrame ) + if ( !mbUseable || (maContext == nullptr) || !maClientData.pFrame ) + return; + + vcl::DeletionListener aDel( maClientData.pFrame ); + // delete preedit in sal (commit an empty string) + sendEmptyCommit( maClientData.pFrame ); + if( ! aDel.isDeleted() ) { - vcl::DeletionListener aDel( maClientData.pFrame ); - // delete preedit in sal (commit an empty string) - sendEmptyCommit( maClientData.pFrame ); - if( ! aDel.isDeleted() ) + // mark previous preedit state again (will e.g. be sent at focus gain) + maClientData.aInputEv.mpTextAttr = maClientData.aInputFlags.data(); + if( static_cast<X11SalFrame*>(maClientData.pFrame)->hasFocus() ) { - // mark previous preedit state again (will e.g. be sent at focus gain) - maClientData.aInputEv.mpTextAttr = maClientData.aInputFlags.data(); - if( static_cast<X11SalFrame*>(maClientData.pFrame)->hasFocus() ) - { - // begin preedit again - vcl_sal::getSalDisplay(GetGenericUnixSalData())->SendInternalEvent( maClientData.pFrame, &maClientData.aInputEv, SalEvent::ExtTextInput ); - } + // begin preedit again + vcl_sal::getSalDisplay(GetGenericUnixSalData())->SendInternalEvent( maClientData.pFrame, &maClientData.aInputEv, SalEvent::ExtTextInput ); } } } diff --git a/vcl/unx/generic/app/i18n_im.cxx b/vcl/unx/generic/app/i18n_im.cxx index a9e9fb42fb87..6a655ca39ea1 100644 --- a/vcl/unx/generic/app/i18n_im.cxx +++ b/vcl/unx/generic/app/i18n_im.cxx @@ -192,35 +192,35 @@ SalI18N_InputMethod::SetLocale() { // check whether we want an Input Method engine, if we don't we // do not need to set the locale - if ( mbUseable ) + if ( !mbUseable ) + return; + + char *locale = SetSystemLocale( "" ); + if ( (!IsXWindowCompatibleLocale(locale)) || IsPosixLocale(locale) ) { - char *locale = SetSystemLocale( "" ); - if ( (!IsXWindowCompatibleLocale(locale)) || IsPosixLocale(locale) ) - { - osl_setThreadTextEncoding (RTL_TEXTENCODING_ISO_8859_1); - locale = SetSystemLocale( "en_US" ); + osl_setThreadTextEncoding (RTL_TEXTENCODING_ISO_8859_1); + locale = SetSystemLocale( "en_US" ); #ifdef __sun - SetSystemEnvironment( "en_US" ); + SetSystemEnvironment( "en_US" ); #endif - if (! IsXWindowCompatibleLocale(locale)) - { - locale = SetSystemLocale( "C" ); + if (! IsXWindowCompatibleLocale(locale)) + { + locale = SetSystemLocale( "C" ); #ifdef __sun - SetSystemEnvironment( "C" ); + SetSystemEnvironment( "C" ); #endif - if (! IsXWindowCompatibleLocale(locale)) - mbUseable = False; - } + if (! IsXWindowCompatibleLocale(locale)) + mbUseable = False; } + } - // must not fail if mbUseable since XSupportsLocale() asserts success - if ( mbUseable && XSetLocaleModifiers("") == nullptr ) - { - SAL_WARN("vcl.app", - "I18N: Can't set X modifiers for locale \"" - << locale << "\"."); - mbUseable = False; - } + // must not fail if mbUseable since XSupportsLocale() asserts success + if ( mbUseable && XSetLocaleModifiers("") == nullptr ) + { + SAL_WARN("vcl.app", + "I18N: Can't set X modifiers for locale \"" + << locale << "\"."); + mbUseable = False; } } diff --git a/vcl/unx/generic/app/randrwrapper.cxx b/vcl/unx/generic/app/randrwrapper.cxx index ad884435cb36..431c70ae37af 100644 --- a/vcl/unx/generic/app/randrwrapper.cxx +++ b/vcl/unx/generic/app/randrwrapper.cxx @@ -131,47 +131,47 @@ void SalDisplay::processRandREvent( XEvent* pEvent ) { #ifdef USE_RANDR XConfigureEvent* pCnfEvent=reinterpret_cast<XConfigureEvent*>(pEvent); - if( pWrapper && pWrapper->XRRRootToScreen(GetDisplay(),pCnfEvent->window) != -1 ) + if( !pWrapper || pWrapper->XRRRootToScreen(GetDisplay(),pCnfEvent->window) == -1 ) + return; + + int nRet = pWrapper->XRRUpdateConfiguration( pEvent ); + if( nRet != 1 || pEvent->type == ConfigureNotify) // this should then be a XRRScreenChangeNotifyEvent + return; + + // update screens + bool bNotify = false; + for(ScreenData & rScreen : m_aScreens) { - int nRet = pWrapper->XRRUpdateConfiguration( pEvent ); - if( nRet == 1 && pEvent->type != ConfigureNotify) // this should then be a XRRScreenChangeNotifyEvent + if( rScreen.m_bInit ) { - // update screens - bool bNotify = false; - for(ScreenData & rScreen : m_aScreens) - { - if( rScreen.m_bInit ) - { - XRRScreenConfiguration *pConfig = nullptr; - XRRScreenSize *pSizes = nullptr; - int nSizes = 0; - Rotation nRot = 0; - SizeID nId = 0; - - pConfig = pWrapper->XRRGetScreenInfo( GetDisplay(), rScreen.m_aRoot ); - nId = pWrapper->XRRConfigCurrentConfiguration( pConfig, &nRot ); - pSizes = pWrapper->XRRConfigSizes( pConfig, &nSizes ); - XRRScreenSize *pTargetSize = pSizes + nId; - - bNotify = bNotify || - rScreen.m_aSize.Width() != pTargetSize->width || - rScreen.m_aSize.Height() != pTargetSize->height; - - rScreen.m_aSize = Size( pTargetSize->width, pTargetSize->height ); - - pWrapper->XRRFreeScreenConfigInfo( pConfig ); + XRRScreenConfiguration *pConfig = nullptr; + XRRScreenSize *pSizes = nullptr; + int nSizes = 0; + Rotation nRot = 0; + SizeID nId = 0; + + pConfig = pWrapper->XRRGetScreenInfo( GetDisplay(), rScreen.m_aRoot ); + nId = pWrapper->XRRConfigCurrentConfiguration( pConfig, &nRot ); + pSizes = pWrapper->XRRConfigSizes( pConfig, &nSizes ); + XRRScreenSize *pTargetSize = pSizes + nId; + + bNotify = bNotify || + rScreen.m_aSize.Width() != pTargetSize->width || + rScreen.m_aSize.Height() != pTargetSize->height; + + rScreen.m_aSize = Size( pTargetSize->width, pTargetSize->height ); + + pWrapper->XRRFreeScreenConfigInfo( pConfig ); #if OSL_DEBUG_LEVEL > 1 - SAL_INFO("vcl.app", "screen " << nId - << " changed to size " << (int)pTargetSize->width - << "x" << (int)pTargetSize->height); + SAL_INFO("vcl.app", "screen " << nId + << " changed to size " << (int)pTargetSize->width + << "x" << (int)pTargetSize->height); #endif - } - } - if( bNotify ) - emitDisplayChanged(); } } + if( bNotify ) + emitDisplayChanged(); #else (void)this; (void)pEvent; diff --git a/vcl/unx/generic/app/saldata.cxx b/vcl/unx/generic/app/saldata.cxx index 1b58c7dab0f2..c5a97ee4d5cd 100644 --- a/vcl/unx/generic/app/saldata.cxx +++ b/vcl/unx/generic/app/saldata.cxx @@ -318,39 +318,39 @@ SalXLib::SalXLib() m_pDisplay = nullptr; m_pTimeoutFDS[0] = m_pTimeoutFDS[1] = -1; - if (pipe (m_pTimeoutFDS) != -1) - { - // initialize 'wakeup' pipe. - int flags; + if (pipe (m_pTimeoutFDS) == -1) + return; - // set close-on-exec descriptor flag. - if ((flags = fcntl (m_pTimeoutFDS[0], F_GETFD)) != -1) - { - flags |= FD_CLOEXEC; - (void)fcntl(m_pTimeoutFDS[0], F_SETFD, flags); - } - if ((flags = fcntl (m_pTimeoutFDS[1], F_GETFD)) != -1) - { - flags |= FD_CLOEXEC; - (void)fcntl(m_pTimeoutFDS[1], F_SETFD, flags); - } + // initialize 'wakeup' pipe. + int flags; - // set non-blocking I/O flag. - if ((flags = fcntl (m_pTimeoutFDS[0], F_GETFL)) != -1) - { - flags |= O_NONBLOCK; - (void)fcntl(m_pTimeoutFDS[0], F_SETFL, flags); - } - if ((flags = fcntl (m_pTimeoutFDS[1], F_GETFL)) != -1) - { - flags |= O_NONBLOCK; - (void)fcntl(m_pTimeoutFDS[1], F_SETFL, flags); - } + // set close-on-exec descriptor flag. + if ((flags = fcntl (m_pTimeoutFDS[0], F_GETFD)) != -1) + { + flags |= FD_CLOEXEC; + (void)fcntl(m_pTimeoutFDS[0], F_SETFD, flags); + } + if ((flags = fcntl (m_pTimeoutFDS[1], F_GETFD)) != -1) + { + flags |= FD_CLOEXEC; + (void)fcntl(m_pTimeoutFDS[1], F_SETFD, flags); + } - // insert [0] into read descriptor set. - FD_SET( m_pTimeoutFDS[0], &aReadFDS_ ); - nFDs_ = m_pTimeoutFDS[0] + 1; + // set non-blocking I/O flag. + if ((flags = fcntl (m_pTimeoutFDS[0], F_GETFL)) != -1) + { + flags |= O_NONBLOCK; + (void)fcntl(m_pTimeoutFDS[0], F_SETFL, flags); + } + if ((flags = fcntl (m_pTimeoutFDS[1], F_GETFL)) != -1) + { + flags |= O_NONBLOCK; + (void)fcntl(m_pTimeoutFDS[1], F_SETFL, flags); } + + // insert [0] into read descriptor set. + FD_SET( m_pTimeoutFDS[0], &aReadFDS_ ); + nFDs_ = m_pTimeoutFDS[0] + 1; } SalXLib::~SalXLib() diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx index 679014cd53be..1b029e031f64 100644 --- a/vcl/unx/generic/app/saldisp.cxx +++ b/vcl/unx/generic/app/saldisp.cxx @@ -712,21 +712,21 @@ unsigned int GetKeySymMask(Display* dpy, KeySym nKeySym) void SalDisplay::SimulateKeyPress( sal_uInt16 nKeyCode ) { - if (nKeyCode == KEY_CAPSLOCK) - { - Display* dpy = GetDisplay(); - if (!InitXkb(dpy)) - return; + if (nKeyCode != KEY_CAPSLOCK) + return; - unsigned int nMask = GetKeySymMask(dpy, XK_Caps_Lock); - XkbStateRec xkbState; - XkbGetState(dpy, XkbUseCoreKbd, &xkbState); - unsigned int nCapsLockState = xkbState.locked_mods & nMask; - if (nCapsLockState) - XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, 0); - else - XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, nMask); - } + Display* dpy = GetDisplay(); + if (!InitXkb(dpy)) + return; + + unsigned int nMask = GetKeySymMask(dpy, XK_Caps_Lock); + XkbStateRec xkbState; + XkbGetState(dpy, XkbUseCoreKbd, &xkbState); + unsigned int nCapsLockState = xkbState.locked_mods & nMask; + if (nCapsLockState) + XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, 0); + else + XkbLockModifiers (dpy, XkbUseCoreKbd, nMask, nMask); } KeyIndicatorState SalDisplay::GetIndicatorState() const @@ -2288,28 +2288,28 @@ void SalDisplay::InitXinerama() return; // multiple screens mean no xinerama } #if defined(USE_XINERAMA_XORG) - if( XineramaIsActive( pDisp_ ) ) + if( !XineramaIsActive( pDisp_ ) ) + return; + + int nFramebuffers = 1; + XineramaScreenInfo* pScreens = XineramaQueryScreens( pDisp_, &nFramebuffers ); + if( !pScreens ) + return; + + if( nFramebuffers > 1 ) { - int nFramebuffers = 1; - XineramaScreenInfo* pScreens = XineramaQueryScreens( pDisp_, &nFramebuffers ); - if( pScreens ) + m_aXineramaScreens = std::vector<tools::Rectangle>(); + m_aXineramaScreenIndexMap = std::vector<int>(nFramebuffers); + for( int i = 0; i < nFramebuffers; i++ ) { - if( nFramebuffers > 1 ) - { - m_aXineramaScreens = std::vector<tools::Rectangle>(); - m_aXineramaScreenIndexMap = std::vector<int>(nFramebuffers); - for( int i = 0; i < nFramebuffers; i++ ) - { - addXineramaScreenUnique( i, pScreens[i].x_org, - pScreens[i].y_org, - pScreens[i].width, - pScreens[i].height ); - } - m_bXinerama = m_aXineramaScreens.size() > 1; - } - XFree( pScreens ); + addXineramaScreenUnique( i, pScreens[i].x_org, + pScreens[i].y_org, + pScreens[i].width, + pScreens[i].height ); } + m_bXinerama = m_aXineramaScreens.size() > 1; } + XFree( pScreens ); #endif #if OSL_DEBUG_LEVEL > 1 if( m_bXinerama ) @@ -2395,61 +2395,61 @@ SalVisual::SalVisual(): SalVisual::SalVisual( const XVisualInfo* pXVI ) { *static_cast<XVisualInfo*>(this) = *pXVI; - if( GetClass() == TrueColor ) - { - nRedShift_ = sal_Shift( red_mask ); - nGreenShift_ = sal_Shift( green_mask ); - nBlueShift_ = sal_Shift( blue_mask ); - - nRedBits_ = sal_significantBits( red_mask ); - nGreenBits_ = sal_significantBits( green_mask ); - nBlueBits_ = sal_significantBits( blue_mask ); - - if( GetDepth() == 24 ) - if( red_mask == 0xFF0000 ) - if( green_mask == 0xFF00 ) - if( blue_mask == 0xFF ) - eRGBMode_ = SalRGB::RGB; - else - eRGBMode_ = SalRGB::otherSalRGB; - else if( blue_mask == 0xFF00 ) - if( green_mask == 0xFF ) - eRGBMode_ = SalRGB::RBG; - else - eRGBMode_ = SalRGB::otherSalRGB; + if( GetClass() != TrueColor ) + return; + + nRedShift_ = sal_Shift( red_mask ); + nGreenShift_ = sal_Shift( green_mask ); + nBlueShift_ = sal_Shift( blue_mask ); + + nRedBits_ = sal_significantBits( red_mask ); + nGreenBits_ = sal_significantBits( green_mask ); + nBlueBits_ = sal_significantBits( blue_mask ); + + if( GetDepth() == 24 ) + if( red_mask == 0xFF0000 ) + if( green_mask == 0xFF00 ) + if( blue_mask == 0xFF ) + eRGBMode_ = SalRGB::RGB; else eRGBMode_ = SalRGB::otherSalRGB; - else if( green_mask == 0xFF0000 ) - if( red_mask == 0xFF00 ) - if( blue_mask == 0xFF ) - eRGBMode_ = SalRGB::GRB; - else - eRGBMode_ = SalRGB::otherSalRGB; - else if( blue_mask == 0xFF00 ) - if( red_mask == 0xFF ) - eRGBMode_ = SalRGB::GBR; - else - eRGBMode_ = SalRGB::otherSalRGB; + else if( blue_mask == 0xFF00 ) + if( green_mask == 0xFF ) + eRGBMode_ = SalRGB::RBG; else eRGBMode_ = SalRGB::otherSalRGB; - else if( blue_mask == 0xFF0000 ) - if( red_mask == 0xFF00 ) - if( green_mask == 0xFF ) - eRGBMode_ = SalRGB::BRG; - else - eRGBMode_ = SalRGB::otherSalRGB; - else if( green_mask == 0xFF00 ) - if( red_mask == 0xFF ) - eRGBMode_ = SalRGB::BGR; - else - eRGBMode_ = SalRGB::otherSalRGB; + else + eRGBMode_ = SalRGB::otherSalRGB; + else if( green_mask == 0xFF0000 ) + if( red_mask == 0xFF00 ) + if( blue_mask == 0xFF ) + eRGBMode_ = SalRGB::GRB; + else + eRGBMode_ = SalRGB::otherSalRGB; + else if( blue_mask == 0xFF00 ) + if( red_mask == 0xFF ) + eRGBMode_ = SalRGB::GBR; + else + eRGBMode_ = SalRGB::otherSalRGB; + else + eRGBMode_ = SalRGB::otherSalRGB; + else if( blue_mask == 0xFF0000 ) + if( red_mask == 0xFF00 ) + if( green_mask == 0xFF ) + eRGBMode_ = SalRGB::BRG; + else + eRGBMode_ = SalRGB::otherSalRGB; + else if( green_mask == 0xFF00 ) + if( red_mask == 0xFF ) + eRGBMode_ = SalRGB::BGR; else eRGBMode_ = SalRGB::otherSalRGB; else eRGBMode_ = SalRGB::otherSalRGB; else eRGBMode_ = SalRGB::otherSalRGB; - } + else + eRGBMode_ = SalRGB::otherSalRGB; } // Converts the order of bytes of a Pixel into bytes of a Color diff --git a/vcl/unx/generic/app/sm.cxx b/vcl/unx/generic/app/sm.cxx index 30ff437a263a..7827f01eec35 100644 --- a/vcl/unx/generic/app/sm.cxx +++ b/vcl/unx/generic/app/sm.cxx @@ -450,20 +450,20 @@ void SessionManagerClient::saveDone() { SAL_INFO("vcl.sm", "SessionManagerClient::saveDone"); - if( m_pSmcConnection ) - { - assert(m_xICEConnectionObserver); - osl::MutexGuard g(m_xICEConnectionObserver->m_ICEMutex); - //SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eCloneCommand ] ); - // this message-handling is now equal to kate and plasma desktop - SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eRestartCommand ] ); - SmcDeleteProperties( m_pSmcConnection, 1, &ppSmDel[ eDiscardCommand ] ); - SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eRestartStyleHint ] ); - - SmcSaveYourselfDone( m_pSmcConnection, True ); - SAL_INFO("vcl.sm.debug", " sent SmRestartHint = " << (*pSmRestartHint) ); - m_bDocSaveDone = true; - } + if( !m_pSmcConnection ) + return; + + assert(m_xICEConnectionObserver); + osl::MutexGuard g(m_xICEConnectionObserver->m_ICEMutex); + //SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eCloneCommand ] ); + // this message-handling is now equal to kate and plasma desktop + SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eRestartCommand ] ); + SmcDeleteProperties( m_pSmcConnection, 1, &ppSmDel[ eDiscardCommand ] ); + SmcSetProperties( m_pSmcConnection, 1, &ppSmProps[ eRestartStyleHint ] ); + + SmcSaveYourselfDone( m_pSmcConnection, True ); + SAL_INFO("vcl.sm.debug", " sent SmRestartHint = " << (*pSmRestartHint) ); + m_bDocSaveDone = true; } void SessionManagerClient::open(SalSession * pSession) @@ -553,19 +553,19 @@ void SessionManagerClient::close() { SAL_INFO("vcl.sm", "SessionManagerClient::close"); - if( m_pSmcConnection ) + if( !m_pSmcConnection ) + return; + + SAL_INFO("vcl.sm.debug", " attempting SmcCloseConnection"); + assert(m_xICEConnectionObserver); { - SAL_INFO("vcl.sm.debug", " attempting SmcCloseConnection"); - assert(m_xICEConnectionObserver); - { - osl::MutexGuard g(m_xICEConnectionObserver->m_ICEMutex); - SmcCloseConnection( m_pSmcConnection, 0, nullptr ); - SAL_INFO("vcl.sm", " SmcCloseConnection closed"); - } - m_xICEConnectionObserver->deactivate(); - m_xICEConnectionObserver.reset(); - m_pSmcConnection = nullptr; + osl::MutexGuard g(m_xICEConnectionObserver->m_ICEMutex); + SmcCloseConnection( m_pSmcConnection, 0, nullptr ); + SAL_INFO("vcl.sm", " SmcCloseConnection closed"); } + m_xICEConnectionObserver->deactivate(); + m_xICEConnectionObserver.reset(); + m_pSmcConnection = nullptr; } bool SessionManagerClient::queryInteraction() diff --git a/vcl/unx/generic/app/wmadaptor.cxx b/vcl/unx/generic/app/wmadaptor.cxx index 8304efbf226d..cc38683fe0e5 100644 --- a/vcl/unx/generic/app/wmadaptor.cxx +++ b/vcl/unx/generic/app/wmadaptor.cxx @@ -286,37 +286,37 @@ WMAdaptor::WMAdaptor( SalDisplay* pDisplay ) : } } } - if( m_aWMName.isEmpty() ) + if( !m_aWMName.isEmpty() ) + return; + + Atom aTTAPlatform = XInternAtom( m_pDisplay, "TTA_CLIENT_PLATFORM", True ); + if( aTTAPlatform == None || + XGetWindowProperty( m_pDisplay, + m_pSalDisplay->GetRootWindow( m_pSalDisplay->GetDefaultXScreen() ), + aTTAPlatform, + 0, 32, + False, + XA_STRING, + &aRealType, + &nFormat, + &nItems, + &nBytesLeft, + &pProperty ) != 0 ) + return; + + if( aRealType == XA_STRING ) { - Atom aTTAPlatform = XInternAtom( m_pDisplay, "TTA_CLIENT_PLATFORM", True ); - if( aTTAPlatform != None && - XGetWindowProperty( m_pDisplay, - m_pSalDisplay->GetRootWindow( m_pSalDisplay->GetDefaultXScreen() ), - aTTAPlatform, - 0, 32, - False, - XA_STRING, - &aRealType, - &nFormat, - &nItems, - &nBytesLeft, - &pProperty ) == 0 ) - { - if( aRealType == XA_STRING ) - { - m_aWMName = "Tarantella"; - // #i62319# pretend that AlwaysOnTop works since - // the alwaysontop workaround in salframe.cxx results - // in a raise/lower loop on a Windows tarantella client - // FIXME: this property contains an identification string that - // in theory should be good enough to recognize running on a - // Windows client; however this string does not seem to be - // documented as well as the property itself. - m_bEnableAlwaysOnTopWorks = true; - } - XFree( pProperty ); - } + m_aWMName = "Tarantella"; + // #i62319# pretend that AlwaysOnTop works since + // the alwaysontop workaround in salframe.cxx results + // in a raise/lower loop on a Windows tarantella client + // FIXME: this property contains an identification string that + // in theory should be good enough to recognize running on a + // Windows client; however this string does not seem to be + // documented as well as the property itself. + m_bEnableAlwaysOnTopWorks = true; } + XFree( pProperty ); } /* @@ -1066,104 +1066,104 @@ void NetWMAdaptor::setWMName( X11SalFrame* pFrame, const OUString& rWMName ) con */ void NetWMAdaptor::setNetWMState( X11SalFrame* pFrame ) const { - if( m_aWMAtoms[ NET_WM_STATE ] ) + if( !(m_aWMAtoms[ NET_WM_STATE ]) ) + return; + + Atom aStateAtoms[ 10 ]; + int nStateAtoms = 0; + + // set NET_WM_STATE_MODAL + if( pFrame->mbMaximizedVert + && m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_VERT ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_VERT ]; + if( pFrame->mbMaximizedHorz + && m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_HORZ ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_HORZ ]; + if( pFrame->bAlwaysOnTop_ && m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ]; + if( pFrame->mbShaded && m_aWMAtoms[ NET_WM_STATE_SHADED ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_SHADED ]; + if( pFrame->mbFullScreen && m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ]; + if( pFrame->meWindowType == WMWindowType::Utility && m_aWMAtoms[ NET_WM_STATE_SKIP_TASKBAR ] ) + aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_SKIP_TASKBAR ]; + + if( nStateAtoms ) { - Atom aStateAtoms[ 10 ]; - int nStateAtoms = 0; - - // set NET_WM_STATE_MODAL - if( pFrame->mbMaximizedVert - && m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_VERT ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_VERT ]; - if( pFrame->mbMaximizedHorz - && m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_HORZ ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_MAXIMIZED_HORZ ]; - if( pFrame->bAlwaysOnTop_ && m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ]; - if( pFrame->mbShaded && m_aWMAtoms[ NET_WM_STATE_SHADED ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_SHADED ]; - if( pFrame->mbFullScreen && m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ]; - if( pFrame->meWindowType == WMWindowType::Utility && m_aWMAtoms[ NET_WM_STATE_SKIP_TASKBAR ] ) - aStateAtoms[ nStateAtoms++ ] = m_aWMAtoms[ NET_WM_STATE_SKIP_TASKBAR ]; - - if( nStateAtoms ) - { - XChangeProperty( m_pDisplay, - pFrame->GetShellWindow(), - m_aWMAtoms[ NET_WM_STATE ], - XA_ATOM, - 32, - PropModeReplace, - reinterpret_cast<unsigned char*>(aStateAtoms), - nStateAtoms - ); - } - else - XDeleteProperty( m_pDisplay, - pFrame->GetShellWindow(), - m_aWMAtoms[ NET_WM_STATE ] ); - if( pFrame->mbMaximizedHorz - && pFrame->mbMaximizedVert - && ! ( pFrame->nStyle_ & SalFrameStyleFlags::SIZEABLE ) ) - { - /* - * for maximizing use NorthWestGravity (including decoration) - */ - XSizeHints hints; - long supplied; - bool bHint = false; - if( XGetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints, - &supplied ) ) - { - bHint = true; - hints.flags |= PWinGravity; - hints.win_gravity = NorthWestGravity; - XSetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints ); - XSync( m_pDisplay, False ); - } + XChangeProperty( m_pDisplay, + pFrame->GetShellWindow(), + m_aWMAtoms[ NET_WM_STATE ], + XA_ATOM, + 32, + PropModeReplace, + reinterpret_cast<unsigned char*>(aStateAtoms), + nStateAtoms + ); + } + else + XDeleteProperty( m_pDisplay, + pFrame->GetShellWindow(), + m_aWMAtoms[ NET_WM_STATE ] ); + if( !(pFrame->mbMaximizedHorz + && pFrame->mbMaximizedVert + && ! ( pFrame->nStyle_ & SalFrameStyleFlags::SIZEABLE )) ) + return; - // SetPosSize necessary to set width/height, min/max w/h - sal_Int32 nCurrent = 0; - /* - * get current desktop here if work areas have different size - * (does this happen on any platform ?) - */ - if( ! m_bEqualWorkAreas ) - { - nCurrent = getCurrentWorkArea(); - if( nCurrent < 0 ) - nCurrent = 0; - } - tools::Rectangle aPosSize = m_aWMWorkAreas[nCurrent]; - const SalFrameGeometry& rGeom( pFrame->GetUnmirroredGeometry() ); - aPosSize = tools::Rectangle( Point( aPosSize.Left() + rGeom.nLeftDecoration, - aPosSize.Top() + rGeom.nTopDecoration ), - Size( aPosSize.GetWidth() - - rGeom.nLeftDecoration - - rGeom.nRightDecoration, - aPosSize.GetHeight() - - rGeom.nTopDecoration - - rGeom.nBottomDecoration ) - ); - pFrame->SetPosSize( aPosSize ); - - /* - * reset gravity hint to static gravity - * (this should not move window according to ICCCM) - */ - if( bHint && pFrame->nShowState_ != SHOWSTATE_UNKNOWN ) - { - hints.win_gravity = StaticGravity; - XSetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints ); - } - } + /* + * for maximizing use NorthWestGravity (including decoration) + */ + XSizeHints hints; + long supplied; + bool bHint = false; + if( XGetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints, + &supplied ) ) + { + bHint = true; + hints.flags |= PWinGravity; + hints.win_gravity = NorthWestGravity; + XSetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints ); + XSync( m_pDisplay, False ); + } + + // SetPosSize necessary to set width/height, min/max w/h + sal_Int32 nCurrent = 0; + /* + * get current desktop here if work areas have different size + * (does this happen on any platform ?) + */ + if( ! m_bEqualWorkAreas ) + { + nCurrent = getCurrentWorkArea(); + if( nCurrent < 0 ) + nCurrent = 0; + } + tools::Rectangle aPosSize = m_aWMWorkAreas[nCurrent]; + const SalFrameGeometry& rGeom( pFrame->GetUnmirroredGeometry() ); + aPosSize = tools::Rectangle( Point( aPosSize.Left() + rGeom.nLeftDecoration, + aPosSize.Top() + rGeom.nTopDecoration ), + Size( aPosSize.GetWidth() + - rGeom.nLeftDecoration + - rGeom.nRightDecoration, + aPosSize.GetHeight() + - rGeom.nTopDecoration + - rGeom.nBottomDecoration ) + ); + pFrame->SetPosSize( aPosSize ); + + /* + * reset gravity hint to static gravity + * (this should not move window according to ICCCM) + */ + if( bHint && pFrame->nShowState_ != SHOWSTATE_UNKNOWN ) + { + hints.win_gravity = StaticGravity; + XSetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints ); } } @@ -1173,87 +1173,87 @@ void NetWMAdaptor::setNetWMState( X11SalFrame* pFrame ) const */ void GnomeWMAdaptor::setGnomeWMState( X11SalFrame* pFrame ) const { - if( m_aWMAtoms[ WIN_STATE ] ) - { - sal_uInt32 nWinWMState = 0; + if( !(m_aWMAtoms[ WIN_STATE ]) ) + return; - if( pFrame->mbMaximizedVert ) - nWinWMState |= 1 << 2; - if( pFrame->mbMaximizedHorz ) - nWinWMState |= 1 << 3; - if( pFrame->mbShaded ) - nWinWMState |= 1 << 5; + sal_uInt32 nWinWMState = 0; - XChangeProperty( m_pDisplay, - pFrame->GetShellWindow(), - m_aWMAtoms[ WIN_STATE ], - XA_CARDINAL, - 32, - PropModeReplace, - reinterpret_cast<unsigned char*>(&nWinWMState), - 1 - ); - if( pFrame->mbMaximizedHorz - && pFrame->mbMaximizedVert - && ! ( pFrame->nStyle_ & SalFrameStyleFlags::SIZEABLE ) ) - { - /* - * for maximizing use NorthWestGravity (including decoration) - */ - XSizeHints hints; - long supplied; - bool bHint = false; - if( XGetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints, - &supplied ) ) - { - bHint = true; - hints.flags |= PWinGravity; - hints.win_gravity = NorthWestGravity; - XSetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints ); - XSync( m_pDisplay, False ); - } + if( pFrame->mbMaximizedVert ) + nWinWMState |= 1 << 2; + if( pFrame->mbMaximizedHorz ) + nWinWMState |= 1 << 3; + if( pFrame->mbShaded ) + nWinWMState |= 1 << 5; - // SetPosSize necessary to set width/height, min/max w/h - sal_Int32 nCurrent = 0; - /* - * get current desktop here if work areas have different size - * (does this happen on any platform ?) - */ - if( ! m_bEqualWorkAreas ) - { - nCurrent = getCurrentWorkArea(); - if( nCurrent < 0 ) - nCurrent = 0; - } - tools::Rectangle aPosSize = m_aWMWorkAreas[nCurrent]; - const SalFrameGeometry& rGeom( pFrame->GetUnmirroredGeometry() ); - aPosSize = tools::Rectangle( Point( aPosSize.Left() + rGeom.nLeftDecoration, - aPosSize.Top() + rGeom.nTopDecoration ), - Size( aPosSize.GetWidth() - - rGeom.nLeftDecoration - - rGeom.nRightDecoration, - aPosSize.GetHeight() - - rGeom.nTopDecoration - - rGeom.nBottomDecoration ) - ); - pFrame->SetPosSize( aPosSize ); - - /* - * reset gravity hint to static gravity - * (this should not move window according to ICCCM) - */ - if( bHint && pFrame->nShowState_ != SHOWSTATE_UNKNOWN ) - { - hints.win_gravity = StaticGravity; - XSetWMNormalHints( m_pDisplay, - pFrame->GetShellWindow(), - &hints ); - } - } + XChangeProperty( m_pDisplay, + pFrame->GetShellWindow(), + m_aWMAtoms[ WIN_STATE ], + XA_CARDINAL, + 32, + PropModeReplace, + reinterpret_cast<unsigned char*>(&nWinWMState), + 1 + ); + if( !(pFrame->mbMaximizedHorz + && pFrame->mbMaximizedVert + && ! ( pFrame->nStyle_ & SalFrameStyleFlags::SIZEABLE )) ) + return; + + /* + * for maximizing use NorthWestGravity (including decoration) + */ + XSizeHints hints; + long supplied; + bool bHint = false; + if( XGetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints, + &supplied ) ) + { + bHint = true; + hints.flags |= PWinGravity; + hints.win_gravity = NorthWestGravity; + XSetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints ); + XSync( m_pDisplay, False ); + } + + // SetPosSize necessary to set width/height, min/max w/h + sal_Int32 nCurrent = 0; + /* + * get current desktop here if work areas have different size + * (does this happen on any platform ?) + */ + if( ! m_bEqualWorkAreas ) + { + nCurrent = getCurrentWorkArea(); + if( nCurrent < 0 ) + nCurrent = 0; + } + tools::Rectangle aPosSize = m_aWMWorkAreas[nCurrent]; + const SalFrameGeometry& rGeom( pFrame->GetUnmirroredGeometry() ); + aPosSize = tools::Rectangle( Point( aPosSize.Left() + rGeom.nLeftDecoration, + aPosSize.Top() + rGeom.nTopDecoration ), + Size( aPosSize.GetWidth() + - rGeom.nLeftDecoration + - rGeom.nRightDecoration, + aPosSize.GetHeight() + - rGeom.nTopDecoration + - rGeom.nBottomDecoration ) + ); + pFrame->SetPosSize( aPosSize ); + + /* + * reset gravity hint to static gravity + * (this should not move window according to ICCCM) + */ + if( bHint && pFrame->nShowState_ != SHOWSTATE_UNKNOWN ) + { + hints.win_gravity = StaticGravity; + XSetWMNormalHints( m_pDisplay, + pFrame->GetShellWindow(), + &hints ); } } @@ -1660,32 +1660,32 @@ void WMAdaptor::enableAlwaysOnTop( X11SalFrame*, bool /*bEnable*/ ) const void NetWMAdaptor::enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) const { pFrame->bAlwaysOnTop_ = bEnable; - if( m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ] ) + if( !(m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ]) ) + return; + + if( pFrame->bMapped_ ) { - if( pFrame->bMapped_ ) - { - // window already mapped, send WM a message - XEvent aEvent; - aEvent.type = ClientMessage; - aEvent.xclient.display = m_pDisplay; - aEvent.xclient.window = pFrame->GetShellWindow(); - aEvent.xclient.message_type = m_aWMAtoms[ NET_WM_STATE ]; - aEvent.xclient.format = 32; - aEvent.xclient.data.l[0] = bEnable ? 1 : 0; - aEvent.xclient.data.l[1] = m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ]; - aEvent.xclient.data.l[2] = 0; - aEvent.xclient.data.l[3] = 0; - aEvent.xclient.data.l[4] = 0; - XSendEvent( m_pDisplay, - m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &aEvent - ); - } - else - setNetWMState( pFrame ); + // window already mapped, send WM a message + XEvent aEvent; + aEvent.type = ClientMessage; + aEvent.xclient.display = m_pDisplay; + aEvent.xclient.window = pFrame->GetShellWindow(); + aEvent.xclient.message_type = m_aWMAtoms[ NET_WM_STATE ]; + aEvent.xclient.format = 32; + aEvent.xclient.data.l[0] = bEnable ? 1 : 0; + aEvent.xclient.data.l[1] = m_aWMAtoms[ NET_WM_STATE_STAYS_ON_TOP ]; + aEvent.xclient.data.l[2] = 0; + aEvent.xclient.data.l[3] = 0; + aEvent.xclient.data.l[4] = 0; + XSendEvent( m_pDisplay, + m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), + False, + SubstructureNotifyMask | SubstructureRedirectMask, + &aEvent + ); } + else + setNetWMState( pFrame ); } /* @@ -1694,42 +1694,42 @@ void NetWMAdaptor::enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) const void GnomeWMAdaptor::enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) const { pFrame->bAlwaysOnTop_ = bEnable; - if( m_aWMAtoms[ WIN_LAYER ] ) + if( !(m_aWMAtoms[ WIN_LAYER ]) ) + return; + + if( pFrame->bMapped_ ) { - if( pFrame->bMapped_ ) - { - // window already mapped, send WM a message - XEvent aEvent; - aEvent.type = ClientMessage; - aEvent.xclient.display = m_pDisplay; - aEvent.xclient.window = pFrame->GetShellWindow(); - aEvent.xclient.message_type = m_aWMAtoms[ WIN_LAYER ]; - aEvent.xclient.format = 32; - aEvent.xclient.data.l[0] = bEnable ? 6 : 4; - aEvent.xclient.data.l[1] = 0; - aEvent.xclient.data.l[2] = 0; - aEvent.xclient.data.l[3] = 0; - aEvent.xclient.data.l[4] = 0; - XSendEvent( m_pDisplay, - m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &aEvent - ); - } - else - { - sal_uInt32 nNewLayer = bEnable ? 6 : 4; - XChangeProperty( m_pDisplay, - pFrame->GetShellWindow(), - m_aWMAtoms[ WIN_LAYER ], - XA_CARDINAL, - 32, - PropModeReplace, - reinterpret_cast<unsigned char*>(&nNewLayer), - 1 - ); - } + // window already mapped, send WM a message + XEvent aEvent; + aEvent.type = ClientMessage; + aEvent.xclient.display = m_pDisplay; + aEvent.xclient.window = pFrame->GetShellWindow(); + aEvent.xclient.message_type = m_aWMAtoms[ WIN_LAYER ]; + aEvent.xclient.format = 32; + aEvent.xclient.data.l[0] = bEnable ? 6 : 4; + aEvent.xclient.data.l[1] = 0; + aEvent.xclient.data.l[2] = 0; + aEvent.xclient.data.l[3] = 0; + aEvent.xclient.data.l[4] = 0; + XSendEvent( m_pDisplay, + m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), + False, + SubstructureNotifyMask | SubstructureRedirectMask, + &aEvent + ); + } + else + { + sal_uInt32 nNewLayer = bEnable ? 6 : 4; + XChangeProperty( m_pDisplay, + pFrame->GetShellWindow(), + m_aWMAtoms[ WIN_LAYER ], + XA_CARDINAL, + 32, + PropModeReplace, + reinterpret_cast<unsigned char*>(&nNewLayer), + 1 + ); } } @@ -1738,22 +1738,22 @@ void GnomeWMAdaptor::enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) cons */ void WMAdaptor::changeReferenceFrame( X11SalFrame* pFrame, X11SalFrame const * pReferenceFrame ) const { - if( ! ( pFrame->nStyle_ & SalFrameStyleFlags::PLUG ) + if( !(! ( pFrame->nStyle_ & SalFrameStyleFlags::PLUG ) && ! pFrame->IsOverrideRedirect() - && ! pFrame->IsFloatGrabWindow() + && ! pFrame->IsFloatGrabWindow()) ) + return; + + ::Window aTransient = pFrame->pDisplay_->GetRootWindow( pFrame->GetScreenNumber() ); + pFrame->mbTransientForRoot = true; + if( pReferenceFrame ) { - ::Window aTransient = pFrame->pDisplay_->GetRootWindow( pFrame->GetScreenNumber() ); - pFrame->mbTransientForRoot = true; - if( pReferenceFrame ) - { - aTransient = pReferenceFrame->GetShellWindow(); - pFrame->mbTransientForRoot = false; - } - XSetTransientForHint( m_pDisplay, - pFrame->GetShellWindow(), - aTransient ); + aTransient = pReferenceFrame->GetShellWindow(); + pFrame->mbTransientForRoot = false; } + XSetTransientForHint( m_pDisplay, + pFrame->GetShellWindow(), + aTransient ); } /* @@ -1918,38 +1918,38 @@ void WMAdaptor::shade( X11SalFrame*, bool /*bToShaded*/ ) const */ void NetWMAdaptor::shade( X11SalFrame* pFrame, bool bToShaded ) const { - if( m_aWMAtoms[ NET_WM_STATE ] + if( !(m_aWMAtoms[ NET_WM_STATE ] && m_aWMAtoms[ NET_WM_STATE_SHADED ] - && ( pFrame->nStyle_ & ~SalFrameStyleFlags::DEFAULT ) + && ( pFrame->nStyle_ & ~SalFrameStyleFlags::DEFAULT )) ) + return; + + pFrame->mbShaded = bToShaded; + if( pFrame->bMapped_ ) { - pFrame->mbShaded = bToShaded; - if( pFrame->bMapped_ ) - { - // window already mapped, send WM a message - XEvent aEvent; - aEvent.type = ClientMessage; - aEvent.xclient.display = m_pDisplay; - aEvent.xclient.window = pFrame->GetShellWindow(); - aEvent.xclient.message_type = m_aWMAtoms[ NET_WM_STATE ]; - aEvent.xclient.format = 32; - aEvent.xclient.data.l[0] = bToShaded ? 1 : 0; - aEvent.xclient.data.l[1] = m_aWMAtoms[ NET_WM_STATE_SHADED ]; - aEvent.xclient.data.l[2] = 0; - aEvent.xclient.data.l[3] = 0; - aEvent.xclient.data.l[4] = 0; - XSendEvent( m_pDisplay, - m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &aEvent - ); - } - else - { - // window not mapped yet, set _NET_WM_STATE directly - setNetWMState( pFrame ); - } + // window already mapped, send WM a message + XEvent aEvent; + aEvent.type = ClientMessage; + aEvent.xclient.display = m_pDisplay; + aEvent.xclient.window = pFrame->GetShellWindow(); + aEvent.xclient.message_type = m_aWMAtoms[ NET_WM_STATE ]; + aEvent.xclient.format = 32; + aEvent.xclient.data.l[0] = bToShaded ? 1 : 0; + aEvent.xclient.data.l[1] = m_aWMAtoms[ NET_WM_STATE_SHADED ]; + aEvent.xclient.data.l[2] = 0; + aEvent.xclient.data.l[3] = 0; + aEvent.xclient.data.l[4] = 0; + XSendEvent( m_pDisplay, + m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), + False, + SubstructureNotifyMask | SubstructureRedirectMask, + &aEvent + ); + } + else + { + // window not mapped yet, set _NET_WM_STATE directly + setNetWMState( pFrame ); } } @@ -1958,33 +1958,33 @@ void NetWMAdaptor::shade( X11SalFrame* pFrame, bool bToShaded ) const */ void GnomeWMAdaptor::shade( X11SalFrame* pFrame, bool bToShaded ) const { - if( m_aWMAtoms[ WIN_STATE ] ) + if( !(m_aWMAtoms[ WIN_STATE ]) ) + return; + + pFrame->mbShaded = bToShaded; + if( pFrame->bMapped_ ) { - pFrame->mbShaded = bToShaded; - if( pFrame->bMapped_ ) - { - // window already mapped, send WM a message - XEvent aEvent; - aEvent.type = ClientMessage; - aEvent.xclient.display = m_pDisplay; - aEvent.xclient.window = pFrame->GetShellWindow(); - aEvent.xclient.message_type = m_aWMAtoms[ WIN_STATE ]; - aEvent.xclient.format = 32; - aEvent.xclient.data.l[0] = (1<<5); - aEvent.xclient.data.l[1] = bToShaded ? (1<<5) : 0; - aEvent.xclient.data.l[2] = 0; - aEvent.xclient.data.l[3] = 0; - aEvent.xclient.data.l[4] = 0; - XSendEvent( m_pDisplay, - m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &aEvent - ); - } - else - setGnomeWMState( pFrame ); + // window already mapped, send WM a message + XEvent aEvent; + aEvent.type = ClientMessage; + aEvent.xclient.display = m_pDisplay; + aEvent.xclient.window = pFrame->GetShellWindow(); + aEvent.xclient.message_type = m_aWMAtoms[ WIN_STATE ]; + aEvent.xclient.format = 32; + aEvent.xclient.data.l[0] = (1<<5); + aEvent.xclient.data.l[1] = bToShaded ? (1<<5) : 0; + aEvent.xclient.data.l[2] = 0; + aEvent.xclient.data.l[3] = 0; + aEvent.xclient.data.l[4] = 0; + XSendEvent( m_pDisplay, + m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ), + False, + SubstructureNotifyMask | SubstructureRedirectMask, + &aEvent + ); } + else + setGnomeWMState( pFrame ); } /* @@ -2236,19 +2236,19 @@ void NetWMAdaptor::setUserTime( X11SalFrame* i_pFrame, long i_nUserTime ) const */ void WMAdaptor::setPID( X11SalFrame const * i_pFrame ) const { - if( m_aWMAtoms[NET_WM_PID] ) - { - long nPID = static_cast<long>(getpid()); - XChangeProperty( m_pDisplay, - i_pFrame->GetShellWindow(), - m_aWMAtoms[NET_WM_PID], - XA_CARDINAL, - 32, - PropModeReplace, - reinterpret_cast<unsigned char*>(&nPID), - 1 - ); - } + if( !(m_aWMAtoms[NET_WM_PID]) ) + return; + + long nPID = static_cast<long>(getpid()); + XChangeProperty( m_pDisplay, + i_pFrame->GetShellWindow(), + m_aWMAtoms[NET_WM_PID], + XA_CARDINAL, + 32, + PropModeReplace, + reinterpret_cast<unsigned char*>(&nPID), + 1 + ); } /* @@ -2263,21 +2263,21 @@ void WMAdaptor::setClientMachine( X11SalFrame const * i_pFrame ) const void WMAdaptor::answerPing( X11SalFrame const * i_pFrame, XClientMessageEvent const * i_pEvent ) const { - if( m_aWMAtoms[NET_WM_PING] && - i_pEvent->message_type == m_aWMAtoms[ WM_PROTOCOLS ] && - static_cast<Atom>(i_pEvent->data.l[0]) == m_aWMAtoms[ NET_WM_PING ] ) - { - XEvent aEvent; - aEvent.xclient = *i_pEvent; - aEvent.xclient.window = m_pSalDisplay->GetRootWindow( i_pFrame->GetScreenNumber() ); - XSendEvent( m_pDisplay, - m_pSalDisplay->GetRootWindow( i_pFrame->GetScreenNumber() ), - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &aEvent - ); - XFlush( m_pDisplay ); - } + if( !m_aWMAtoms[NET_WM_PING] || + i_pEvent->message_type != m_aWMAtoms[ WM_PROTOCOLS ] || + static_cast<Atom>(i_pEvent->data.l[0]) != m_aWMAtoms[ NET_WM_PING ] ) + return; + + XEvent aEvent; + aEvent.xclient = *i_pEvent; + aEvent.xclient.window = m_pSalDisplay->GetRootWindow( i_pFrame->GetScreenNumber() ); + XSendEvent( m_pDisplay, + m_pSalDisplay->GetRootWindow( i_pFrame->GetScreenNumber() ), + False, + SubstructureNotifyMask | SubstructureRedirectMask, + &aEvent + ); + XFlush( m_pDisplay ); } void WMAdaptor::activateWindow( X11SalFrame const *pFrame, Time nTimestamp ) diff --git a/vcl/unx/generic/dtrans/X11_droptarget.cxx b/vcl/unx/generic/dtrans/X11_droptarget.cxx index 72f8dff00d9e..745e695a7a14 100644 --- a/vcl/unx/generic/dtrans/X11_droptarget.cxx +++ b/vcl/unx/generic/dtrans/X11_droptarget.cxx @@ -47,28 +47,28 @@ DropTarget::~DropTarget() void DropTarget::initialize( const Sequence< Any >& arguments ) { - if( arguments.getLength() > 1 ) + if( arguments.getLength() <= 1 ) + return; + + OUString aDisplayName; + Reference< XDisplayConnection > xConn; + arguments.getConstArray()[0] >>= xConn; + if( xConn.is() ) + { + Any aIdentifier; + aIdentifier >>= aDisplayName; + } + + m_xSelectionManager = &SelectionManager::get( aDisplayName ); + m_xSelectionManager->initialize( arguments ); + + if( m_xSelectionManager->getDisplay() ) // #136582# sanity check { - OUString aDisplayName; - Reference< XDisplayConnection > xConn; - arguments.getConstArray()[0] >>= xConn; - if( xConn.is() ) - { - Any aIdentifier; - aIdentifier >>= aDisplayName; - } - - m_xSelectionManager = &SelectionManager::get( aDisplayName ); - m_xSelectionManager->initialize( arguments ); - - if( m_xSelectionManager->getDisplay() ) // #136582# sanity check - { - sal_IntPtr aWindow = None; - arguments.getConstArray()[1] >>= aWindow; - m_xSelectionManager->registerDropTarget( aWindow, this ); - m_aTargetWindow = aWindow; - m_bActive = true; - } + sal_IntPtr aWindow = None; + arguments.getConstArray()[1] >>= aWindow; + m_xSelectionManager->registerDropTarget( aWindow, this ); + m_aTargetWindow = aWindow; + m_bActive = true; } } diff --git a/vcl/unx/generic/dtrans/X11_selection.cxx b/vcl/unx/generic/dtrans/X11_selection.cxx index 20321c9915c2..4be75f23ee56 100644 --- a/vcl/unx/generic/dtrans/X11_selection.cxx +++ b/vcl/unx/generic/dtrans/X11_selection.cxx @@ -345,113 +345,113 @@ void SelectionManager::initialize( const Sequence< Any >& arguments ) m_xDisplayConnection->addEventHandler( Any(), this, ~0 ); } - if( ! m_pDisplay ) + if( m_pDisplay ) + return; + + OUString aUDisplay; + if( m_xDisplayConnection.is() ) { - OUString aUDisplay; - if( m_xDisplayConnection.is() ) - { - Any aIdentifier = m_xDisplayConnection->getIdentifier(); - aIdentifier >>= aUDisplay; - } + Any aIdentifier = m_xDisplayConnection->getIdentifier(); + aIdentifier >>= aUDisplay; + } - OString aDisplayName( OUStringToOString( aUDisplay, RTL_TEXTENCODING_ISO_8859_1 ) ); + OString aDisplayName( OUStringToOString( aUDisplay, RTL_TEXTENCODING_ISO_8859_1 ) ); - m_pDisplay = XOpenDisplay( aDisplayName.isEmpty() ? nullptr : aDisplayName.getStr()); + m_pDisplay = XOpenDisplay( aDisplayName.isEmpty() ? nullptr : aDisplayName.getStr()); + + if( !m_pDisplay ) + return; - if( m_pDisplay ) - { #ifdef SYNCHRONIZE - XSynchronize( m_pDisplay, True ); + XSynchronize( m_pDisplay, True ); #endif - // special targets - m_nTARGETSAtom = getAtom( "TARGETS" ); - m_nTIMESTAMPAtom = getAtom( "TIMESTAMP" ); - m_nTEXTAtom = getAtom( "TEXT" ); - m_nINCRAtom = getAtom( "INCR" ); - m_nCOMPOUNDAtom = getAtom( "COMPOUND_TEXT" ); - m_nMULTIPLEAtom = getAtom( "MULTIPLE" ); - m_nImageBmpAtom = getAtom( "image/bmp" ); - - // Atoms for Xdnd protocol - m_nXdndAware = getAtom( "XdndAware" ); - m_nXdndEnter = getAtom( "XdndEnter" ); - m_nXdndLeave = getAtom( "XdndLeave" ); - m_nXdndPosition = getAtom( "XdndPosition" ); - m_nXdndStatus = getAtom( "XdndStatus" ); - m_nXdndDrop = getAtom( "XdndDrop" ); - m_nXdndFinished = getAtom( "XdndFinished" ); - m_nXdndSelection = getAtom( "XdndSelection" ); - m_nXdndTypeList = getAtom( "XdndTypeList" ); - m_nXdndProxy = getAtom( "XdndProxy" ); - m_nXdndActionCopy = getAtom( "XdndActionCopy" ); - m_nXdndActionMove = getAtom( "XdndActionMove" ); - m_nXdndActionLink = getAtom( "XdndActionLink" ); - m_nXdndActionAsk = getAtom( "XdndActionAsk" ); - - // initialize map with member none - m_aAtomToString[ 0 ]= "None"; - m_aAtomToString[ XA_PRIMARY ] = "PRIMARY"; - - // create a (invisible) message window - m_aWindow = XCreateSimpleWindow( m_pDisplay, DefaultRootWindow( m_pDisplay ), - 10, 10, 10, 10, 0, 0, 1 ); - - // initialize threshold for incremental transfers - // ICCCM says it should be smaller that the max request size - // which in turn is guaranteed to be at least 16k bytes - m_nIncrementalThreshold = XMaxRequestSize( m_pDisplay ) - 1024; - - if( m_aWindow ) - { - // initialize default cursors - m_aMoveCursor = createCursor( movedata_curs_bits, - movedata_mask_bits, - movedata_curs_width, - movedata_curs_height, - movedata_curs_x_hot, - movedata_curs_y_hot ); - m_aCopyCursor = createCursor( copydata_curs_bits, - copydata_mask_bits, - copydata_curs_width, - copydata_curs_height, - copydata_curs_x_hot, - copydata_curs_y_hot ); - m_aLinkCursor = createCursor( linkdata_curs_bits, - linkdata_mask_bits, - linkdata_curs_width, - linkdata_curs_height, - linkdata_curs_x_hot, - linkdata_curs_y_hot ); - m_aNoneCursor = createCursor( nodrop_curs_bits, - nodrop_mask_bits, - nodrop_curs_width, - nodrop_curs_height, - nodrop_curs_x_hot, - nodrop_curs_y_hot ); - - // just interested in SelectionClear/Notify/Request and PropertyChange - XSelectInput( m_pDisplay, m_aWindow, PropertyChangeMask ); - // create the transferable for Drag operations - m_xDropTransferable = new X11Transferable( *this, m_nXdndSelection ); - registerHandler( m_nXdndSelection, *this ); - - m_aThread = osl_createSuspendedThread( call_SelectionManager_run, this ); - if( m_aThread ) - osl_resumeThread( m_aThread ); + // special targets + m_nTARGETSAtom = getAtom( "TARGETS" ); + m_nTIMESTAMPAtom = getAtom( "TIMESTAMP" ); + m_nTEXTAtom = getAtom( "TEXT" ); + m_nINCRAtom = getAtom( "INCR" ); + m_nCOMPOUNDAtom = getAtom( "COMPOUND_TEXT" ); + m_nMULTIPLEAtom = getAtom( "MULTIPLE" ); + m_nImageBmpAtom = getAtom( "image/bmp" ); + + // Atoms for Xdnd protocol + m_nXdndAware = getAtom( "XdndAware" ); + m_nXdndEnter = getAtom( "XdndEnter" ); + m_nXdndLeave = getAtom( "XdndLeave" ); + m_nXdndPosition = getAtom( "XdndPosition" ); + m_nXdndStatus = getAtom( "XdndStatus" ); + m_nXdndDrop = getAtom( "XdndDrop" ); + m_nXdndFinished = getAtom( "XdndFinished" ); + m_nXdndSelection = getAtom( "XdndSelection" ); + m_nXdndTypeList = getAtom( "XdndTypeList" ); + m_nXdndProxy = getAtom( "XdndProxy" ); + m_nXdndActionCopy = getAtom( "XdndActionCopy" ); + m_nXdndActionMove = getAtom( "XdndActionMove" ); + m_nXdndActionLink = getAtom( "XdndActionLink" ); + m_nXdndActionAsk = getAtom( "XdndActionAsk" ); + + // initialize map with member none + m_aAtomToString[ 0 ]= "None"; + m_aAtomToString[ XA_PRIMARY ] = "PRIMARY"; + + // create a (invisible) message window + m_aWindow = XCreateSimpleWindow( m_pDisplay, DefaultRootWindow( m_pDisplay ), + 10, 10, 10, 10, 0, 0, 1 ); + + // initialize threshold for incremental transfers + // ICCCM says it should be smaller that the max request size + // which in turn is guaranteed to be at least 16k bytes + m_nIncrementalThreshold = XMaxRequestSize( m_pDisplay ) - 1024; + + if( !m_aWindow ) + return; + + // initialize default cursors + m_aMoveCursor = createCursor( movedata_curs_bits, + movedata_mask_bits, + movedata_curs_width, + movedata_curs_height, + movedata_curs_x_hot, + movedata_curs_y_hot ); + m_aCopyCursor = createCursor( copydata_curs_bits, + copydata_mask_bits, + copydata_curs_width, + copydata_curs_height, + copydata_curs_x_hot, + copydata_curs_y_hot ); + m_aLinkCursor = createCursor( linkdata_curs_bits, + linkdata_mask_bits, + linkdata_curs_width, + linkdata_curs_height, + linkdata_curs_x_hot, + linkdata_curs_y_hot ); + m_aNoneCursor = createCursor( nodrop_curs_bits, + nodrop_mask_bits, + nodrop_curs_width, + nodrop_curs_height, + nodrop_curs_x_hot, + nodrop_curs_y_hot ); + + // just interested in SelectionClear/Notify/Request and PropertyChange + XSelectInput( m_pDisplay, m_aWindow, PropertyChangeMask ); + // create the transferable for Drag operations + m_xDropTransferable = new X11Transferable( *this, m_nXdndSelection ); + registerHandler( m_nXdndSelection, *this ); + + m_aThread = osl_createSuspendedThread( call_SelectionManager_run, this ); + if( m_aThread ) + osl_resumeThread( m_aThread ); #if OSL_DEBUG_LEVEL > 1 - else - SAL_WARN("vcl.unx.dtrans", "SelectionManager::initialize: " - << "creation of dispatch thread failed !."); + else + SAL_WARN("vcl.unx.dtrans", "SelectionManager::initialize: " + << "creation of dispatch thread failed !."); #endif - if (pipe(m_EndThreadPipe) != 0) { + if (pipe(m_EndThreadPipe) != 0) { #if OSL_DEBUG_LEVEL > 1 - SAL_WARN("vcl.unx.dtrans", "Failed to create endThreadPipe."); + SAL_WARN("vcl.unx.dtrans", "Failed to create endThreadPipe."); #endif - m_EndThreadPipe[0] = m_EndThreadPipe[1] = 0; - } - } - } + m_EndThreadPipe[0] = m_EndThreadPipe[1] = 0; } } @@ -492,29 +492,29 @@ SelectionManager::~SelectionManager() SAL_INFO("vcl.unx.dtrans", "shutting down SelectionManager."); #endif - if( m_pDisplay ) - { - deregisterHandler( m_nXdndSelection ); - // destroy message window - if( m_aWindow ) - XDestroyWindow( m_pDisplay, m_aWindow ); - // release cursors - if (m_aMoveCursor != None) - XFreeCursor(m_pDisplay, m_aMoveCursor); - if (m_aCopyCursor != None) - XFreeCursor(m_pDisplay, m_aCopyCursor); - if (m_aLinkCursor != None) - XFreeCursor(m_pDisplay, m_aLinkCursor); - if (m_aNoneCursor != None) - XFreeCursor(m_pDisplay, m_aNoneCursor); - - // paranoia setting, the drag thread should have - // done that already - XUngrabPointer( m_pDisplay, CurrentTime ); - XUngrabKeyboard( m_pDisplay, CurrentTime ); + if( !m_pDisplay ) + return; - XCloseDisplay( m_pDisplay ); - } + deregisterHandler( m_nXdndSelection ); + // destroy message window + if( m_aWindow ) + XDestroyWindow( m_pDisplay, m_aWindow ); + // release cursors + if (m_aMoveCursor != None) + XFreeCursor(m_pDisplay, m_aMoveCursor); + if (m_aCopyCursor != None) + XFreeCursor(m_pDisplay, m_aCopyCursor); + if (m_aLinkCursor != None) + XFreeCursor(m_pDisplay, m_aLinkCursor); + if (m_aNoneCursor != None) + XFreeCursor(m_pDisplay, m_aNoneCursor); + + // paranoia setting, the drag thread should have + // done that already + XUngrabPointer( m_pDisplay, CurrentTime ); + XUngrabKeyboard( m_pDisplay, CurrentTime ); + + XCloseDisplay( m_pDisplay ); } SelectionAdaptor* SelectionManager::getAdaptor( Atom selection ) @@ -2919,44 +2919,44 @@ bool SelectionManager::handleDragEvent( XEvent const & rMessage ) void SelectionManager::accept( sal_Int8 dragOperation, ::Window aDropWindow ) { - if( aDropWindow == m_aCurrentDropWindow ) - { + if( aDropWindow != m_aCurrentDropWindow ) + return; + #if OSL_DEBUG_LEVEL > 1 - SAL_INFO("vcl.unx.dtrans", "accept: " << std::hex << dragOperation); + SAL_INFO("vcl.unx.dtrans", "accept: " << std::hex << dragOperation); #endif - Atom nAction = None; - dragOperation &= (DNDConstants::ACTION_MOVE | DNDConstants::ACTION_COPY | DNDConstants::ACTION_LINK); - if( dragOperation & DNDConstants::ACTION_MOVE ) - nAction = m_nXdndActionMove; - else if( dragOperation & DNDConstants::ACTION_COPY ) - nAction = m_nXdndActionCopy; - else if( dragOperation & DNDConstants::ACTION_LINK ) - nAction = m_nXdndActionLink; - m_bLastDropAccepted = true; - sendDragStatus( nAction ); - } + Atom nAction = None; + dragOperation &= (DNDConstants::ACTION_MOVE | DNDConstants::ACTION_COPY | DNDConstants::ACTION_LINK); + if( dragOperation & DNDConstants::ACTION_MOVE ) + nAction = m_nXdndActionMove; + else if( dragOperation & DNDConstants::ACTION_COPY ) + nAction = m_nXdndActionCopy; + else if( dragOperation & DNDConstants::ACTION_LINK ) + nAction = m_nXdndActionLink; + m_bLastDropAccepted = true; + sendDragStatus( nAction ); } void SelectionManager::reject( ::Window aDropWindow ) { - if( aDropWindow == m_aCurrentDropWindow ) - { + if( aDropWindow != m_aCurrentDropWindow ) + return; + #if OSL_DEBUG_LEVEL > 1 - SAL_INFO("vcl.unx.dtrans", "reject."); + SAL_INFO("vcl.unx.dtrans", "reject."); #endif - m_bLastDropAccepted = false; - sendDragStatus( None ); - if( m_bDropSent && m_xDragSourceListener.is() ) - { - DragSourceDropEvent dsde; - dsde.Source = static_cast< OWeakObject* >(this); - dsde.DragSourceContext = new DragSourceContext( m_aDropWindow, *this ); - dsde.DragSource = static_cast< XDragSource* >(this); - dsde.DropAction = DNDConstants::ACTION_NONE; - dsde.DropSuccess = false; - m_xDragSourceListener->dragDropEnd( dsde ); - m_xDragSourceListener.clear(); - } + m_bLastDropAccepted = false; + sendDragStatus( None ); + if( m_bDropSent && m_xDragSourceListener.is() ) + { + DragSourceDropEvent dsde; + dsde.Source = static_cast< OWeakObject* >(this); + dsde.DragSourceContext = new DragSourceContext( m_aDropWindow, *this ); + dsde.DragSource = static_cast< XDragSource* >(this); + dsde.DropAction = DNDConstants::ACTION_NONE; + dsde.DropSuccess = false; + m_xDragSourceListener->dragDropEnd( dsde ); + m_xDragSourceListener.clear(); } } diff --git a/vcl/unx/generic/dtrans/bmp.cxx b/vcl/unx/generic/dtrans/bmp.cxx index 7f0111a614e4..0b5f6f85c236 100644 --- a/vcl/unx/generic/dtrans/bmp.cxx +++ b/vcl/unx/generic/dtrans/bmp.cxx @@ -401,20 +401,20 @@ PixmapHolder::PixmapHolder( Display* pDisplay ) << std::showbase << std::hex << m_aColormap); #endif - if( m_aInfo.c_class == TrueColor ) - { - int nRedShift2(0); - int nGreenShift2(0); - int nBlueShift2(0); - int nRedSig, nGreenSig, nBlueSig; - getShift( m_aInfo.red_mask, m_nRedShift, nRedSig, nRedShift2 ); - getShift( m_aInfo.green_mask, m_nGreenShift, nGreenSig, nGreenShift2 ); - getShift( m_aInfo.blue_mask, m_nBlueShift, nBlueSig, nBlueShift2 ); - - m_nBlueShift2Mask = nBlueShift2 ? ~static_cast<unsigned long>((1<<nBlueShift2)-1) : ~0L; - m_nGreenShift2Mask = nGreenShift2 ? ~static_cast<unsigned long>((1<<nGreenShift2)-1) : ~0L; - m_nRedShift2Mask = nRedShift2 ? ~static_cast<unsigned long>((1<<nRedShift2)-1) : ~0L; - } + if( m_aInfo.c_class != TrueColor ) + return; + + int nRedShift2(0); + int nGreenShift2(0); + int nBlueShift2(0); + int nRedSig, nGreenSig, nBlueSig; + getShift( m_aInfo.red_mask, m_nRedShift, nRedSig, nRedShift2 ); + getShift( m_aInfo.green_mask, m_nGreenShift, nGreenSig, nGreenShift2 ); + getShift( m_aInfo.blue_mask, m_nBlueShift, nBlueSig, nBlueShift2 ); + + m_nBlueShift2Mask = nBlueShift2 ? ~static_cast<unsigned long>((1<<nBlueShift2)-1) : ~0L; + m_nGreenShift2Mask = nGreenShift2 ? ~static_cast<unsigned long>((1<<nGreenShift2)-1) : ~0L; + m_nRedShift2Mask = nRedShift2 ? ~static_cast<unsigned long>((1<<nRedShift2)-1) : ~0L; } PixmapHolder::~PixmapHolder() diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx index dea4cd548949..d8cc1db16849 100644 --- a/vcl/unx/generic/fontmanager/fontconfig.cxx +++ b/vcl/unx/generic/fontmanager/fontconfig.cxx @@ -726,20 +726,20 @@ static void addtopattern(FcPattern *pPattern, } FcPatternAddInteger(pPattern, FC_WIDTH, nWidth); } - if( ePitch != PITCH_DONTKNOW ) + if( ePitch == PITCH_DONTKNOW ) + return; + + int nSpacing = FC_PROPORTIONAL; + switch( ePitch ) { - int nSpacing = FC_PROPORTIONAL; - switch( ePitch ) - { - case PITCH_FIXED: nSpacing = FC_MONO;break; - case PITCH_VARIABLE: nSpacing = FC_PROPORTIONAL;break; - default: - break; - } - FcPatternAddInteger(pPattern, FC_SPACING, nSpacing); - if (nSpacing == FC_MONO) - FcPatternAddString(pPattern, FC_FAMILY, reinterpret_cast<FcChar8 const *>("monospace")); + case PITCH_FIXED: nSpacing = FC_MONO;break; + case PITCH_VARIABLE: nSpacing = FC_PROPORTIONAL;break; + default: + break; } + FcPatternAddInteger(pPattern, FC_SPACING, nSpacing); + if (nSpacing == FC_MONO) + FcPatternAddString(pPattern, FC_FAMILY, reinterpret_cast<FcChar8 const *>("monospace")); } namespace diff --git a/vcl/unx/generic/fontmanager/helper.cxx b/vcl/unx/generic/fontmanager/helper.cxx index c28753e33b35..79b772c39d6e 100644 --- a/vcl/unx/generic/fontmanager/helper.cxx +++ b/vcl/unx/generic/fontmanager/helper.cxx @@ -153,20 +153,20 @@ void psp::getPrinterPathList( std::vector< OUString >& rPathList, const char* pS } #endif - if( rPathList.empty() ) + if( !rPathList.empty() ) + return; + + // last resort: next to program file (mainly for setup) + OUString aExe; + if( osl_getExecutableFile( &aExe.pData ) == osl_Process_E_None ) { - // last resort: next to program file (mainly for setup) - OUString aExe; - if( osl_getExecutableFile( &aExe.pData ) == osl_Process_E_None ) + INetURLObject aDir( aExe ); + aDir.removeSegment(); + aExe = aDir.GetMainURL( INetURLObject::DecodeMechanism::NONE ); + OUString aSysPath; + if( osl_getSystemPathFromFileURL( aExe.pData, &aSysPath.pData ) == osl_File_E_None ) { - INetURLObject aDir( aExe ); - aDir.removeSegment(); - aExe = aDir.GetMainURL( INetURLObject::DecodeMechanism::NONE ); - OUString aSysPath; - if( osl_getSystemPathFromFileURL( aExe.pData, &aSysPath.pData ) == osl_File_E_None ) - { - rPathList.push_back( aSysPath ); - } + rPathList.push_back( aSysPath ); } } } diff --git a/vcl/unx/generic/gdi/gdiimpl.cxx b/vcl/unx/generic/gdi/gdiimpl.cxx index 6310b6ba99fa..a348b752dc89 100644 --- a/vcl/unx/generic/gdi/gdiimpl.cxx +++ b/vcl/unx/generic/gdi/gdiimpl.cxx @@ -102,19 +102,20 @@ namespace //fdo#33455 and fdo#80160 handle 1 bit depth pngs with palette entries //to set fore/back colors SalBitmap& rBitmap = const_cast<SalBitmap&>(rSalBitmap); - if (BitmapBuffer* pBitmapBuffer = rBitmap.AcquireBuffer(BitmapAccessMode::Read)) + BitmapBuffer* pBitmapBuffer = rBitmap.AcquireBuffer(BitmapAccessMode::Read); + if (!pBitmapBuffer) + return; + + const BitmapPalette& rPalette = pBitmapBuffer->maPalette; + if (rPalette.GetEntryCount() == 2) { - const BitmapPalette& rPalette = pBitmapBuffer->maPalette; - if (rPalette.GetEntryCount() == 2) - { - const BitmapColor aWhite(rPalette[rPalette.GetBestIndex(COL_WHITE)]); - rValues.foreground = rColMap.GetPixel(aWhite); + const BitmapColor aWhite(rPalette[rPalette.GetBestIndex(COL_WHITE)]); + rValues.foreground = rColMap.GetPixel(aWhite); - const BitmapColor aBlack(rPalette[rPalette.GetBestIndex(COL_BLACK)]); - rValues.background = rColMap.GetPixel(aBlack); - } - rBitmap.ReleaseBuffer(pBitmapBuffer, BitmapAccessMode::Read); + const BitmapColor aBlack(rPalette[rPalette.GetBestIndex(COL_BLACK)]); + rValues.background = rColMap.GetPixel(aBlack); } + rBitmap.ReleaseBuffer(pBitmapBuffer, BitmapAccessMode::Read); } } @@ -925,19 +926,19 @@ void X11SalGraphicsImpl::drawMask( const SalTwoRect& rPosAry, void X11SalGraphicsImpl::ResetClipRegion() { - if( mrParent.mpClipRegion ) - { - mbPenGC = false; - mbBrushGC = false; - mbCopyGC = false; - mbInvertGC = false; - mbInvert50GC = false; - mbStippleGC = false; - mbTrackingGC = false; + if( !mrParent.mpClipRegion ) + return; - XDestroyRegion( mrParent.mpClipRegion ); - mrParent.mpClipRegion = nullptr; - } + mbPenGC = false; + mbBrushGC = false; + mbCopyGC = false; + mbInvertGC = false; + mbInvert50GC = false; + mbStippleGC = false; + mbTrackingGC = false; + + XDestroyRegion( mrParent.mpClipRegion ); + mrParent.mpClipRegion = nullptr; } bool X11SalGraphicsImpl::setClipRegion( const vcl::Region& i_rClip ) @@ -1036,32 +1037,32 @@ void X11SalGraphicsImpl::SetFillColor() void X11SalGraphicsImpl::SetFillColor( Color nColor ) { - if( mnBrushColor != nColor ) - { - mbDitherBrush = false; - mnBrushColor = nColor; - mnBrushPixel = mrParent.GetPixel( nColor ); - if( TrueColor != mrParent.GetColormap().GetVisual().GetClass() - && mrParent.GetColormap().GetColor( mnBrushPixel ) != mnBrushColor - && nColor != Color( 0x00, 0x00, 0x00 ) // black - && nColor != Color( 0x00, 0x00, 0x80 ) // blue - && nColor != Color( 0x00, 0x80, 0x00 ) // green - && nColor != Color( 0x00, 0x80, 0x80 ) // cyan - && nColor != Color( 0x80, 0x00, 0x00 ) // red - && nColor != Color( 0x80, 0x00, 0x80 ) // magenta - && nColor != Color( 0x80, 0x80, 0x00 ) // brown - && nColor != Color( 0x80, 0x80, 0x80 ) // gray - && nColor != Color( 0xC0, 0xC0, 0xC0 ) // light gray - && nColor != Color( 0x00, 0x00, 0xFF ) // light blue - && nColor != Color( 0x00, 0xFF, 0x00 ) // light green - && nColor != Color( 0x00, 0xFF, 0xFF ) // light cyan - && nColor != Color( 0xFF, 0x00, 0x00 ) // light red - && nColor != Color( 0xFF, 0x00, 0xFF ) // light magenta - && nColor != Color( 0xFF, 0xFF, 0x00 ) // light brown - && nColor != Color( 0xFF, 0xFF, 0xFF ) ) - mbDitherBrush = mrParent.GetDitherPixmap(nColor); - mbBrushGC = false; - } + if( mnBrushColor == nColor ) + return; + + mbDitherBrush = false; + mnBrushColor = nColor; + mnBrushPixel = mrParent.GetPixel( nColor ); + if( TrueColor != mrParent.GetColormap().GetVisual().GetClass() + && mrParent.GetColormap().GetColor( mnBrushPixel ) != mnBrushColor + && nColor != Color( 0x00, 0x00, 0x00 ) // black + && nColor != Color( 0x00, 0x00, 0x80 ) // blue + && nColor != Color( 0x00, 0x80, 0x00 ) // green + && nColor != Color( 0x00, 0x80, 0x80 ) // cyan + && nColor != Color( 0x80, 0x00, 0x00 ) // red + && nColor != Color( 0x80, 0x00, 0x80 ) // magenta + && nColor != Color( 0x80, 0x80, 0x00 ) // brown + && nColor != Color( 0x80, 0x80, 0x80 ) // gray + && nColor != Color( 0xC0, 0xC0, 0xC0 ) // light gray + && nColor != Color( 0x00, 0x00, 0xFF ) // light blue + && nColor != Color( 0x00, 0xFF, 0x00 ) // light green + && nColor != Color( 0x00, 0xFF, 0xFF ) // light cyan + && nColor != Color( 0xFF, 0x00, 0x00 ) // light red + && nColor != Color( 0xFF, 0x00, 0xFF ) // light magenta + && nColor != Color( 0xFF, 0xFF, 0x00 ) // light brown + && nColor != Color( 0xFF, 0xFF, 0xFF ) ) + mbDitherBrush = mrParent.GetDitherPixmap(nColor); + mbBrushGC = false; } void X11SalGraphicsImpl::SetROPLineColor( SalROPColor nROPColor ) @@ -1124,29 +1125,29 @@ void X11SalGraphicsImpl::drawPixel( long nX, long nY ) void X11SalGraphicsImpl::drawPixel( long nX, long nY, Color nColor ) { - if( nColor != SALCOLOR_NONE ) - { - Display *pDisplay = mrParent.GetXDisplay(); + if( nColor == SALCOLOR_NONE ) + return; - if( (mnPenColor == SALCOLOR_NONE) && !mbPenGC ) - { - SetLineColor( nColor ); - XDrawPoint( pDisplay, mrParent.GetDrawable(), SelectPen(), nX, nY ); - mnPenColor = SALCOLOR_NONE; - mbPenGC = False; - } - else - { - GC pGC = SelectPen(); + Display *pDisplay = mrParent.GetXDisplay(); + + if( (mnPenColor == SALCOLOR_NONE) && !mbPenGC ) + { + SetLineColor( nColor ); + XDrawPoint( pDisplay, mrParent.GetDrawable(), SelectPen(), nX, nY ); + mnPenColor = SALCOLOR_NONE; + mbPenGC = False; + } + else + { + GC pGC = SelectPen(); - if( nColor != mnPenColor ) - XSetForeground( pDisplay, pGC, mrParent.GetPixel( nColor ) ); + if( nColor != mnPenColor ) + XSetForeground( pDisplay, pGC, mrParent.GetPixel( nColor ) ); - XDrawPoint( pDisplay, mrParent.GetDrawable(), pGC, nX, nY ); + XDrawPoint( pDisplay, mrParent.GetDrawable(), pGC, nX, nY ); - if( nColor != mnPenColor ) - XSetForeground( pDisplay, pGC, mnPenPixel ); - } + if( nColor != mnPenColor ) + XSetForeground( pDisplay, pGC, mnPenPixel ); } } diff --git a/vcl/unx/generic/gdi/salbmp.cxx b/vcl/unx/generic/gdi/salbmp.cxx index 01a5e7637827..b0a3f3cfcab0 100644 --- a/vcl/unx/generic/gdi/salbmp.cxx +++ b/vcl/unx/generic/gdi/salbmp.cxx @@ -852,25 +852,26 @@ ImplSalDDB::ImplSalDDB( XImage* pImage, Drawable aDrawable, SalDisplay* pSalDisp = vcl_sal::getSalDisplay(GetGenericUnixSalData()); Display* pXDisp = pSalDisp->GetDisplay(); - if( (maPixmap = limitXCreatePixmap( pXDisp, aDrawable, ImplGetWidth(), ImplGetHeight(), ImplGetDepth() )) ) - { - XGCValues aValues; - GC aGC; - int nValues = GCFunction; + maPixmap = limitXCreatePixmap( pXDisp, aDrawable, ImplGetWidth(), ImplGetHeight(), ImplGetDepth() ); + if (!maPixmap) + return; - aValues.function = GXcopy; + XGCValues aValues; + GC aGC; + int nValues = GCFunction; - if( 1 == mnDepth ) - { - nValues |= ( GCForeground | GCBackground ); - aValues.foreground = 1; - aValues.background = 0; - } + aValues.function = GXcopy; - aGC = XCreateGC( pXDisp, maPixmap, nValues, &aValues ); - XPutImage( pXDisp, maPixmap, aGC, pImage, 0, 0, 0, 0, maTwoRect.mnDestWidth, maTwoRect.mnDestHeight ); - XFreeGC( pXDisp, aGC ); + if( 1 == mnDepth ) + { + nValues |= ( GCForeground | GCBackground ); + aValues.foreground = 1; + aValues.background = 0; } + + aGC = XCreateGC( pXDisp, maPixmap, nValues, &aValues ); + XPutImage( pXDisp, maPixmap, aGC, pImage, 0, 0, 0, 0, maTwoRect.mnDestWidth, maTwoRect.mnDestHeight ); + XFreeGC( pXDisp, aGC ); } ImplSalDDB::ImplSalDDB( diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 3ecbe013a88d..4b2632087e7d 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -320,20 +320,20 @@ void X11SalGraphics::GetResolution( sal_Int32 &rDPIX, sal_Int32 &rDPIY ) // cons } // #i12705# equalize x- and y-resolution if they are close enough - if( rDPIX != rDPIY ) - { - // different x- and y- resolutions are usually artifacts of - // a wrongly calculated screen size. + if( rDPIX == rDPIY ) + return; + + // different x- and y- resolutions are usually artifacts of + // a wrongly calculated screen size. #ifdef DEBUG - SAL_INFO("vcl.gdi", "Forcing Resolution from " - << std::hex << rDPIX - << std::dec << rDPIX - << " to " - << std::hex << rDPIY - << std::dec << rDPIY); + SAL_INFO("vcl.gdi", "Forcing Resolution from " + << std::hex << rDPIX + << std::dec << rDPIX + << " to " + << std::hex << rDPIY + << std::dec << rDPIY); #endif - rDPIX = rDPIY; // y-resolution is more trustworthy - } + rDPIX = rDPIY; // y-resolution is more trustworthy } sal_uInt16 X11SalGraphics::GetBitCount() const diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx index 885978ed1889..9ddf206572ac 100644 --- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx +++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx @@ -203,25 +203,25 @@ FT_FaceRec_* FreetypeFontInfo::GetFaceFT() void FreetypeFont::SetFontVariationsOnHBFont(hb_font_t* pHbFace) const { sal_uInt32 nFaceVariation = mxFontInfo->GetFontFaceVariation(); - if (maFaceFT && nFaceVariation) + if (!(maFaceFT && nFaceVariation)) + return; + + FT_MM_Var *pFtMMVar; + if (FT_Get_MM_Var(maFaceFT, &pFtMMVar) != 0) + return; + + if (nFaceVariation <= pFtMMVar->num_namedstyles) { - FT_MM_Var *pFtMMVar; - if (FT_Get_MM_Var(maFaceFT, &pFtMMVar) == 0) + FT_Var_Named_Style *instance = &pFtMMVar->namedstyle[nFaceVariation - 1]; + std::vector<hb_variation_t> aVariations(pFtMMVar->num_axis); + for (FT_UInt i = 0; i < pFtMMVar->num_axis; ++i) { - if (nFaceVariation <= pFtMMVar->num_namedstyles) - { - FT_Var_Named_Style *instance = &pFtMMVar->namedstyle[nFaceVariation - 1]; - std::vector<hb_variation_t> aVariations(pFtMMVar->num_axis); - for (FT_UInt i = 0; i < pFtMMVar->num_axis; ++i) - { - aVariations[i].tag = pFtMMVar->axis[i].tag; - aVariations[i].value = instance->coords[i] / 65536.0; - } - hb_font_set_variations(pHbFace, aVariations.data(), aVariations.size()); - } - dlFT_Done_MM_Var(aLibFT, pFtMMVar); + aVariations[i].tag = pFtMMVar->axis[i].tag; + aVariations[i].value = instance->coords[i] / 65536.0; } + hb_font_set_variations(pHbFace, aVariations.data(), aVariations.size()); } + dlFT_Done_MM_Var(aLibFT, pFtMMVar); } void FreetypeFontInfo::ReleaseFaceFT() diff --git a/vcl/unx/generic/print/common_gfx.cxx b/vcl/unx/generic/print/common_gfx.cxx index b6c92e49c84a..3938dfdebbea 100644 --- a/vcl/unx/generic/print/common_gfx.cxx +++ b/vcl/unx/generic/print/common_gfx.cxx @@ -476,49 +476,49 @@ PrinterGfx::DrawPolyLineBezier (sal_uInt32 nPoints, const Point* pPath, const Po const sal_uInt32 nBezString= 1024; char pString[nBezString]; - if ( nPoints > 1 && maLineColor.Is() && pPath ) - { - PSSetColor (maLineColor); - PSSetColor (); - PSSetLineWidth (); + if ( nPoints <= 1 || !maLineColor.Is() || !pPath ) + return; - snprintf(pString, nBezString, "%li %li moveto\n", pPath[0].X(), pPath[0].Y()); - WritePS(mpPageBody, pString); + PSSetColor (maLineColor); + PSSetColor (); + PSSetLineWidth (); + + snprintf(pString, nBezString, "%li %li moveto\n", pPath[0].X(), pPath[0].Y()); + WritePS(mpPageBody, pString); - // Handle the drawing of mixed lines mixed with curves - // - a normal point followed by a normal point is a line - // - a normal point followed by 2 control points and a normal point is a curve - for (unsigned int i=1; i<nPoints;) + // Handle the drawing of mixed lines mixed with curves + // - a normal point followed by a normal point is a line + // - a normal point followed by 2 control points and a normal point is a curve + for (unsigned int i=1; i<nPoints;) + { + if (pFlgAry[i] != PolyFlags::Control) //If the next point is a PolyFlags::Normal, we're drawing a line + { + snprintf(pString, nBezString, "%li %li lineto\n", pPath[i].X(), pPath[i].Y()); + i++; + } + else //Otherwise we're drawing a spline { - if (pFlgAry[i] != PolyFlags::Control) //If the next point is a PolyFlags::Normal, we're drawing a line + if (i+2 >= nPoints) + return; //Error: wrong sequence of control/normal points somehow + if ((pFlgAry[i] == PolyFlags::Control) && (pFlgAry[i+1] == PolyFlags::Control) && + (pFlgAry[i+2] != PolyFlags::Control)) { - snprintf(pString, nBezString, "%li %li lineto\n", pPath[i].X(), pPath[i].Y()); - i++; + snprintf(pString, nBezString, "%li %li %li %li %li %li curveto\n", + pPath[i].X(), pPath[i].Y(), + pPath[i+1].X(), pPath[i+1].Y(), + pPath[i+2].X(), pPath[i+2].Y()); } - else //Otherwise we're drawing a spline + else { - if (i+2 >= nPoints) - return; //Error: wrong sequence of control/normal points somehow - if ((pFlgAry[i] == PolyFlags::Control) && (pFlgAry[i+1] == PolyFlags::Control) && - (pFlgAry[i+2] != PolyFlags::Control)) - { - snprintf(pString, nBezString, "%li %li %li %li %li %li curveto\n", - pPath[i].X(), pPath[i].Y(), - pPath[i+1].X(), pPath[i+1].Y(), - pPath[i+2].X(), pPath[i+2].Y()); - } - else - { - OSL_FAIL( "PrinterGfx::DrawPolyLineBezier: Strange output" ); - } - i+=3; + OSL_FAIL( "PrinterGfx::DrawPolyLineBezier: Strange output" ); } - WritePS(mpPageBody, pString); + i+=3; } - - // now draw outlines - WritePS (mpPageBody, "stroke\n"); + WritePS(mpPageBody, pString); } + + // now draw outlines + WritePS (mpPageBody, "stroke\n"); } void @@ -683,34 +683,34 @@ PrinterGfx::PSSetColor () { PrinterColor& rColor( maVirtualStatus.maColor ); - if( currentState().maColor != rColor ) - { - currentState().maColor = rColor; + if( currentState().maColor == rColor ) + return; - OStringBuffer pBuffer; + currentState().maColor = rColor; - if( mbColor ) - { - psp::getValueOfDouble (pBuffer, - static_cast<double>(rColor.GetRed()) / 255.0, 5); - psp::appendStr (" ", pBuffer); - psp::getValueOfDouble (pBuffer, - static_cast<double>(rColor.GetGreen()) / 255.0, 5); - psp::appendStr (" ", pBuffer); - psp::getValueOfDouble (pBuffer, - static_cast<double>(rColor.GetBlue()) / 255.0, 5); - psp::appendStr (" setrgbcolor\n", pBuffer ); - } - else - { - Color aColor( rColor.GetRed(), rColor.GetGreen(), rColor.GetBlue() ); - sal_uInt8 nCol = aColor.GetLuminance(); - psp::getValueOfDouble( pBuffer, static_cast<double>(nCol) / 255.0, 5 ); - psp::appendStr( " setgray\n", pBuffer ); - } + OStringBuffer pBuffer; - WritePS (mpPageBody, pBuffer.makeStringAndClear()); + if( mbColor ) + { + psp::getValueOfDouble (pBuffer, + static_cast<double>(rColor.GetRed()) / 255.0, 5); + psp::appendStr (" ", pBuffer); + psp::getValueOfDouble (pBuffer, + static_cast<double>(rColor.GetGreen()) / 255.0, 5); + psp::appendStr (" ", pBuffer); + psp::getValueOfDouble (pBuffer, + static_cast<double>(rColor.GetBlue()) / 255.0, 5); + psp::appendStr (" setrgbcolor\n", pBuffer ); } + else + { + Color aColor( rColor.GetRed(), rColor.GetGreen(), rColor.GetBlue() ); + sal_uInt8 nCol = aColor.GetLuminance(); + psp::getValueOfDouble( pBuffer, static_cast<double>(nCol) / 255.0, 5 ); + psp::appendStr( " setgray\n", pBuffer ); + } + + WritePS (mpPageBody, pBuffer.makeStringAndClear()); } void diff --git a/vcl/unx/generic/print/genprnpsp.cxx b/vcl/unx/generic/print/genprnpsp.cxx index 5cfb5dcb7e11..18caa2e8f413 100644 --- a/vcl/unx/generic/print/genprnpsp.cxx +++ b/vcl/unx/generic/print/genprnpsp.cxx @@ -352,22 +352,22 @@ static bool createPdf( const OUString& rToFile, const OUString& rFromFile, const void SalGenericInstance::configurePspInfoPrinter(PspSalInfoPrinter *pPrinter, SalPrinterQueueInfo const * pQueueInfo, ImplJobSetup* pJobSetup) { - if( pJobSetup ) - { - PrinterInfoManager& rManager( PrinterInfoManager::get() ); - PrinterInfo aInfo( rManager.getPrinterInfo( pQueueInfo->maPrinterName ) ); - pPrinter->m_aJobData = aInfo; - pPrinter->m_aPrinterGfx.Init( pPrinter->m_aJobData ); - - if( pJobSetup->GetDriverData() ) - JobData::constructFromStreamBuffer( pJobSetup->GetDriverData(), - pJobSetup->GetDriverDataLen(), aInfo ); - - pJobSetup->SetSystem( JOBSETUP_SYSTEM_UNIX ); - pJobSetup->SetPrinterName( pQueueInfo->maPrinterName ); - pJobSetup->SetDriver( aInfo.m_aDriverName ); - copyJobDataToJobSetup( pJobSetup, aInfo ); - } + if( !pJobSetup ) + return; + + PrinterInfoManager& rManager( PrinterInfoManager::get() ); + PrinterInfo aInfo( rManager.getPrinterInfo( pQueueInfo->maPrinterName ) ); + pPrinter->m_aJobData = aInfo; + pPrinter->m_aPrinterGfx.Init( pPrinter->m_aJobData ); + + if( pJobSetup->GetDriverData() ) + JobData::constructFromStreamBuffer( pJobSetup->GetDriverData(), + pJobSetup->GetDriverDataLen(), aInfo ); + + pJobSetup->SetSystem( JOBSETUP_SYSTEM_UNIX ); + pJobSetup->SetPrinterName( pQueueInfo->maPrinterName ); + pJobSetup->SetDriver( aInfo.m_aDriverName ); + copyJobDataToJobSetup( pJobSetup, aInfo ); } SalInfoPrinter* SalGenericInstance::CreateInfoPrinter( SalPrinterQueueInfo* pQueueInfo, @@ -451,20 +451,20 @@ void PspSalInfoPrinter::InitPaperFormats( const ImplJobSetup* ) m_aPaperFormats.clear(); m_bPapersInit = true; - if( m_aJobData.m_pParser ) + if( !m_aJobData.m_pParser ) + return; + + const PPDKey* pKey = m_aJobData.m_pParser->getKey( "PageSize" ); + if( pKey ) { - const PPDKey* pKey = m_aJobData.m_pParser->getKey( "PageSize" ); - if( pKey ) + int nValues = pKey->countValues(); + for( int i = 0; i < nValues; i++ ) { - int nValues = pKey->countValues(); - for( int i = 0; i < nValues; i++ ) - { - const PPDValue* pValue = pKey->getValue( i ); - int nWidth = 0, nHeight = 0; - m_aJobData.m_pParser->getPaperDimension( pValue->m_aOption, nWidth, nHeight ); - PaperInfo aInfo(PtTo10Mu( nWidth ), PtTo10Mu( nHeight )); - m_aPaperFormats.push_back( aInfo ); - } + const PPDValue* pValue = pKey->getValue( i ); + int nWidth = 0, nHeight = 0; + m_aJobData.m_pParser->getPaperDimension( pValue->m_aOption, nWidth, nHeight ); + PaperInfo aInfo(PtTo10Mu( nWidth ), PtTo10Mu( nHeight )); + m_aPaperFormats.push_back( aInfo ); } } } diff --git a/vcl/unx/generic/print/prtsetup.cxx b/vcl/unx/generic/print/prtsetup.cxx index fae6a155220e..5ad90b7b878e 100644 --- a/vcl/unx/generic/print/prtsetup.cxx +++ b/vcl/unx/generic/print/prtsetup.cxx @@ -199,21 +199,21 @@ void RTSPaperPage::update() m_xSlotBox->set_sensitive( false ); } - if ( m_pParent->m_aJobData.meSetupMode == PrinterSetupMode::SingleJob ) - { - m_xCbFromSetup->show(); + if ( m_pParent->m_aJobData.meSetupMode != PrinterSetupMode::SingleJob ) + return; - if ( m_pParent->m_aJobData.m_bPapersizeFromSetup ) - m_xCbFromSetup->set_active(m_pParent->m_aJobData.m_bPapersizeFromSetup); - // disable those, unless user wants to use papersize from printer prefs - // as they have no influence on what's going to be printed anyway - else - { - m_xPaperText->set_sensitive( false ); - m_xPaperBox->set_sensitive( false ); - m_xOrientText->set_sensitive( false ); - m_xOrientBox->set_sensitive( false ); - } + m_xCbFromSetup->show(); + + if ( m_pParent->m_aJobData.m_bPapersizeFromSetup ) + m_xCbFromSetup->set_active(m_pParent->m_aJobData.m_bPapersizeFromSetup); + // disable those, unless user wants to use papersize from printer prefs + // as they have no influence on what's going to be printed anyway + else + { + m_xPaperText->set_sensitive( false ); + m_xPaperBox->set_sensitive( false ); + m_xOrientText->set_sensitive( false ); + m_xOrientBox->set_sensitive( false ); } } @@ -335,28 +335,28 @@ RTSDevicePage::RTSDevicePage(weld::Widget* pPage, RTSDialog* pParent) m_xDepthBox->set_active(1); // fill ppd boxes - if( m_pParent->m_aJobData.m_pParser ) + if( !m_pParent->m_aJobData.m_pParser ) + return; + + for( int i = 0; i < m_pParent->m_aJobData.m_pParser->getKeys(); i++ ) { - for( int i = 0; i < m_pParent->m_aJobData.m_pParser->getKeys(); i++ ) + const PPDKey* pKey = m_pParent->m_aJobData.m_pParser->getKey( i ); + + // skip options already shown somewhere else + // also skip options from the "InstallableOptions" PPD group + // Options in that group define hardware features that are not + // job-specific and should better be handled in the system-wide + // printer configuration. Keyword is defined in PPD specification + // (version 4.3), section 5.4. + if( pKey->isUIKey() && + pKey->getKey() != "PageSize" && + pKey->getKey() != "InputSlot" && + pKey->getKey() != "PageRegion" && + pKey->getKey() != "Duplex" && + pKey->getGroup() != "InstallableOptions") { - const PPDKey* pKey = m_pParent->m_aJobData.m_pParser->getKey( i ); - - // skip options already shown somewhere else - // also skip options from the "InstallableOptions" PPD group - // Options in that group define hardware features that are not - // job-specific and should better be handled in the system-wide - // printer configuration. Keyword is defined in PPD specification - // (version 4.3), section 5.4. - if( pKey->isUIKey() && - pKey->getKey() != "PageSize" && - pKey->getKey() != "InputSlot" && - pKey->getKey() != "PageRegion" && - pKey->getKey() != "Duplex" && - pKey->getGroup() != "InstallableOptions") - { - OUString aEntry( m_pParent->m_aJobData.m_pParser->translateKey( pKey->getKey() ) ); - m_xPPDKeyBox->append(OUString::number(reinterpret_cast<sal_Int64>(pKey)), aEntry); - } + OUString aEntry( m_pParent->m_aJobData.m_pParser->translateKey( pKey->getKey() ) ); + m_xPPDKeyBox->append(OUString::number(reinterpret_cast<sal_Int64>(pKey)), aEntry); } } } diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx index f5a50345a210..dbbb26666ba5 100644 --- a/vcl/unx/generic/printer/cupsmgr.cxx +++ b/vcl/unx/generic/printer/cupsmgr.cxx @@ -235,19 +235,19 @@ void CUPSManager::runDests() if( (p_http=httpConnectEncrypt( cupsServer(), ippPort(), - cupsEncryption())) != nullptr ) - { - int nDests = cupsGetDests2(p_http, &pDests); - SAL_INFO("vcl.unx.print", "came out of cupsGetDests"); + cupsEncryption())) == nullptr ) + return; - osl::MutexGuard aGuard( m_aCUPSMutex ); - m_nDests = nDests; - m_pDests = pDests; - m_bNewDests = true; - SAL_INFO("vcl.unx.print", "finished cupsGetDests"); + int nDests = cupsGetDests2(p_http, &pDests); + SAL_INFO("vcl.unx.print", "came out of cupsGetDests"); - httpClose(p_http); - } + osl::MutexGuard aGuard( m_aCUPSMutex ); + m_nDests = nDests; + m_pDests = pDests; + m_bNewDests = true; + SAL_INFO("vcl.unx.print", "finished cupsGetDests"); + + httpClose(p_http); #ifdef __GNUC__ #pragma GCC diagnostic pop #endif diff --git a/vcl/unx/generic/printer/jobdata.cxx b/vcl/unx/generic/printer/jobdata.cxx index 362305beac11..5bbeceba0036 100644 --- a/vcl/unx/generic/printer/jobdata.cxx +++ b/vcl/unx/generic/printer/jobdata.cxx @@ -64,23 +64,23 @@ void JobData::setCollate( bool bCollate ) return; } const PPDParser* pParser = m_aContext.getParser(); - if( pParser ) + if( !pParser ) + return; + + const PPDKey* pKey = pParser->getKey( "Collate" ); + if( !pKey ) + return; + + const PPDValue* pVal = nullptr; + if( bCollate ) + pVal = pKey->getValue( "True" ); + else { - const PPDKey* pKey = pParser->getKey( "Collate" ); - if( pKey ) - { - const PPDValue* pVal = nullptr; - if( bCollate ) - pVal = pKey->getValue( "True" ); - else - { - pVal = pKey->getValue( "False" ); - if( ! pVal ) - pVal = pKey->getValue( "None" ); - } - m_aContext.setValue( pKey, pVal ); - } + pVal = pKey->getValue( "False" ); + if( ! pVal ) + pVal = pKey->getValue( "None" ); } + m_aContext.setValue( pKey, pVal ); } void JobData::setPaper( int i_nWidth, int i_nHeight ) diff --git a/vcl/unx/generic/printer/ppdparser.cxx b/vcl/unx/generic/printer/ppdparser.cxx index d949441db608..35d0c960cf07 100644 --- a/vcl/unx/generic/printer/ppdparser.cxx +++ b/vcl/unx/generic/printer/ppdparser.cxx @@ -307,27 +307,28 @@ void PPDDecompressStream::Open( const OUString& i_rFile ) mpFileStream->Seek( 0 ); // check for compress'ed or gzip'ed file - if( aLine.getLength() > 1 && static_cast<unsigned char>(aLine[0]) == 0x1f - && static_cast<unsigned char>(aLine[1]) == 0x8b /* check for gzip */ ) + if( aLine.getLength() <= 1 || + static_cast<unsigned char>(aLine[0]) != 0x1f || + static_cast<unsigned char>(aLine[1]) != 0x8b /* check for gzip */ ) + return; + + // so let's try to decompress the stream + mpMemStream.reset( new SvMemoryStream( 4096, 4096 ) ); + ZCodec aCodec; + aCodec.BeginCompression( ZCODEC_DEFAULT_COMPRESSION, /*gzLib*/true ); + long nComp = aCodec.Decompress( *mpFileStream, *mpMemStream ); + aCodec.EndCompression(); + if( nComp < 0 ) { - // so let's try to decompress the stream - mpMemStream.reset( new SvMemoryStream( 4096, 4096 ) ); - ZCodec aCodec; - aCodec.BeginCompression( ZCODEC_DEFAULT_COMPRESSION, /*gzLib*/true ); - long nComp = aCodec.Decompress( *mpFileStream, *mpMemStream ); - aCodec.EndCompression(); - if( nComp < 0 ) - { - // decompression failed, must be an uncompressed stream after all - mpMemStream.reset(); - mpFileStream->Seek( 0 ); - } - else - { - // compression successful, can get rid of file stream - mpFileStream.reset(); - mpMemStream->Seek( 0 ); - } + // decompression failed, must be an uncompressed stream after all + mpMemStream.reset(); + mpFileStream->Seek( 0 ); + } + else + { + // compression successful, can get rid of file stream + mpFileStream.reset(); + mpMemStream->Seek( 0 ); } } @@ -387,49 +388,49 @@ void PPDParser::scanPPDDir( const OUString& rDir ) PPDCache &rPPDCache = thePPDCache::get(); osl::Directory aDir( rDir ); - if ( aDir.open() == osl::FileBase::E_None ) - { - osl::DirectoryItem aItem; + if ( aDir.open() != osl::FileBase::E_None ) + return; - INetURLObject aPPDDir(rDir); - while( aDir.getNextItem( aItem ) == osl::FileBase::E_None ) + osl::DirectoryItem aItem; + + INetURLObject aPPDDir(rDir); + while( aDir.getNextItem( aItem ) == osl::FileBase::E_None ) + { + osl::FileStatus aStatus( osl_FileStatus_Mask_FileName ); + if( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None ) { - osl::FileStatus aStatus( osl_FileStatus_Mask_FileName ); - if( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None ) - { - OUString aFileURL, aFileName; - osl::FileStatus::Type eType = osl::FileStatus::Unknown; - OUString aURL = rDir + "/" + aStatus.getFileName(); + OUString aFileURL, aFileName; + osl::FileStatus::Type eType = osl::FileStatus::Unknown; + OUString aURL = rDir + "/" + aStatus.getFileName(); - if(resolveLink( aURL, aFileURL, aFileName, eType ) == osl::FileBase::E_None) + if(resolveLink( aURL, aFileURL, aFileName, eType ) == osl::FileBase::E_None) + { + if( eType == osl::FileStatus::Regular ) { - if( eType == osl::FileStatus::Regular ) - { - INetURLObject aPPDFile = aPPDDir; - aPPDFile.Append( aFileName ); + INetURLObject aPPDFile = aPPDDir; + aPPDFile.Append( aFileName ); - // match extension - for(const suffix_t & rSuffix : pSuffixes) + // match extension + for(const suffix_t & rSuffix : pSuffixes) + { + if( aFileName.getLength() > rSuffix.nSuffixLen ) { - if( aFileName.getLength() > rSuffix.nSuffixLen ) + if( aFileName.endsWithIgnoreAsciiCaseAsciiL( rSuffix.pSuffix, rSuffix.nSuffixLen ) ) { - if( aFileName.endsWithIgnoreAsciiCaseAsciiL( rSuffix.pSuffix, rSuffix.nSuffixLen ) ) - { - (*rPPDCache.pAllPPDFiles)[ aFileName.copy( 0, aFileName.getLength() - rSuffix.nSuffixLen ) ] = aPPDFile.PathToFileName(); - break; - } + (*rPPDCache.pAllPPDFiles)[ aFileName.copy( 0, aFileName.getLength() - rSuffix.nSuffixLen ) ] = aPPDFile.PathToFileName(); + break; } } } - else if( eType == osl::FileStatus::Directory ) - { - scanPPDDir( aFileURL ); - } + } + else if( eType == osl::FileStatus::Directory ) + { + scanPPDDir( aFileURL ); } } } - aDir.close(); } + aDir.close(); } void PPDParser::initPPDFiles(PPDCache &rPPDCache) @@ -447,21 +448,21 @@ void PPDParser::initPPDFiles(PPDCache &rPPDCache) INetURLObject aPPDDir( path, INetProtocol::File, INetURLObject::EncodeMechanism::All ); scanPPDDir( aPPDDir.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); } - if( rPPDCache.pAllPPDFiles->find( OUString( "SGENPRT" ) ) == rPPDCache.pAllPPDFiles->end() ) + if( rPPDCache.pAllPPDFiles->find( OUString( "SGENPRT" ) ) != rPPDCache.pAllPPDFiles->end() ) + return; + + // last try: search in directory of executable (mainly for setup) + OUString aExe; + if( osl_getExecutableFile( &aExe.pData ) == osl_Process_E_None ) { - // last try: search in directory of executable (mainly for setup) - OUString aExe; - if( osl_getExecutableFile( &aExe.pData ) == osl_Process_E_None ) - { - INetURLObject aDir( aExe ); - aDir.removeSegment(); - SAL_INFO("vcl.unx.print", "scanning last chance dir: " - << aDir.GetMainURL(INetURLObject::DecodeMechanism::NONE)); - scanPPDDir( aDir.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); - SAL_INFO("vcl.unx.print", "SGENPRT " - << (rPPDCache.pAllPPDFiles->find("SGENPRT") == - rPPDCache.pAllPPDFiles->end() ? "not found" : "found")); - } + INetURLObject aDir( aExe ); + aDir.removeSegment(); + SAL_INFO("vcl.unx.print", "scanning last chance dir: " + << aDir.GetMainURL(INetURLObject::DecodeMechanism::NONE)); + scanPPDDir( aDir.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); + SAL_INFO("vcl.unx.print", "SGENPRT " + << (rPPDCache.pAllPPDFiles->find("SGENPRT") == + rPPDCache.pAllPPDFiles->end() ? "not found" : "found")); } } @@ -1964,23 +1965,23 @@ void PPDContext::getPageSize( OUString& rPaper, int& rWidth, int& rHeight ) cons rPaper = "A4"; rWidth = 595; rHeight = 842; - if( m_pParser ) + if( !m_pParser ) + return; + + const PPDKey* pKey = m_pParser->getKey( "PageSize" ); + if( !pKey ) + return; + + const PPDValue* pValue = getValue( pKey ); + if( pValue ) { - const PPDKey* pKey = m_pParser->getKey( "PageSize" ); - if( pKey ) - { - const PPDValue* pValue = getValue( pKey ); - if( pValue ) - { - rPaper = pValue->m_aOption; - m_pParser->getPaperDimension( rPaper, rWidth, rHeight ); - } - else - { - rPaper = m_pParser->getDefaultPaperDimension(); - m_pParser->getDefaultPaperDimension( rWidth, rHeight ); - } - } + rPaper = pValue->m_aOption; + m_pParser->getPaperDimension( rPaper, rWidth, rHeight ); + } + else + { + rPaper = m_pParser->getDefaultPaperDimension(); + m_pParser->getDefaultPaperDimension( rWidth, rHeight ); } } diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx index f2423ed0310b..f87796f99ecd 100644 --- a/vcl/unx/generic/window/salframe.cxx +++ b/vcl/unx/generic/window/salframe.cxx @@ -144,20 +144,20 @@ bool X11SalFrame::IsFloatGrabWindow() const void X11SalFrame::setXEmbedInfo() { - if( m_bXEmbed ) - { - long aInfo[2]; - aInfo[0] = 1; // XEMBED protocol version - aInfo[1] = (bMapped_ ? 1 : 0); // XEMBED_MAPPED - XChangeProperty( pDisplay_->GetDisplay(), - mhWindow, - pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::XEMBED_INFO ), - pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::XEMBED_INFO ), - 32, - PropModeReplace, - reinterpret_cast<unsigned char*>(aInfo), - SAL_N_ELEMENTS(aInfo) ); - } + if( !m_bXEmbed ) + return; + + long aInfo[2]; + aInfo[0] = 1; // XEMBED protocol version + aInfo[1] = (bMapped_ ? 1 : 0); // XEMBED_MAPPED + XChangeProperty( pDisplay_->GetDisplay(), + mhWindow, + pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::XEMBED_INFO ), + pDisplay_->getWMAdaptor()->getAtom( WMAdaptor::XEMBED_INFO ), + 32, + PropModeReplace, + reinterpret_cast<unsigned char*>(aInfo), + SAL_N_ELEMENTS(aInfo) ); } void X11SalFrame::askForXEmbedFocus( sal_Int32 i_nTimeCode ) @@ -1115,50 +1115,52 @@ void X11SalFrame::SetIcon( sal_uInt16 nIcon ) void X11SalFrame::SetMaxClientSize( long nWidth, long nHeight ) { - if( ! IsChildWindow() ) - { - if( GetShellWindow() && (nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) != SalFrameStyleFlags::FLOAT ) - { - XSizeHints* pHints = XAllocSizeHints(); - long nSupplied = 0; - XGetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints, - &nSupplied - ); - pHints->max_width = nWidth; - pHints->max_height = nHeight; - pHints->flags |= PMaxSize; - XSetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints ); - XFree( pHints ); - } - } + if( IsChildWindow() ) + return; + + if( !GetShellWindow() || + (nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) == SalFrameStyleFlags::FLOAT ) + return; + + XSizeHints* pHints = XAllocSizeHints(); + long nSupplied = 0; + XGetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints, + &nSupplied + ); + pHints->max_width = nWidth; + pHints->max_height = nHeight; + pHints->flags |= PMaxSize; + XSetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints ); + XFree( pHints ); } void X11SalFrame::SetMinClientSize( long nWidth, long nHeight ) { - if( ! IsChildWindow() ) - { - if( GetShellWindow() && (nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) != SalFrameStyleFlags::FLOAT ) - { - XSizeHints* pHints = XAllocSizeHints(); - long nSupplied = 0; - XGetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints, - &nSupplied - ); - pHints->min_width = nWidth; - pHints->min_height = nHeight; - pHints->flags |= PMinSize; - XSetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints ); - XFree( pHints ); - } - } + if( IsChildWindow() ) + return; + + if( !GetShellWindow() || + (nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) == SalFrameStyleFlags::FLOAT ) + return; + + XSizeHints* pHints = XAllocSizeHints(); + long nSupplied = 0; + XGetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints, + &nSupplied + ); + pHints->min_width = nWidth; + pHints->min_height = nHeight; + pHints->flags |= PMinSize; + XSetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints ); + XFree( pHints ); } // Show + Pos (x,y,z) + Size (width,height) @@ -1756,41 +1758,41 @@ void X11SalFrame::SetWindowState( const SalFrameState *pState ) } // request for status change - if (pState->mnMask & WindowStateMask::State) + if (!(pState->mnMask & WindowStateMask::State)) + return; + + if (pState->mnState & WindowStateState::Maximized) { - if (pState->mnState & WindowStateState::Maximized) + nShowState_ = SHOWSTATE_NORMAL; + if( ! (pState->mnState & (WindowStateState::MaximizedHorz|WindowStateState::MaximizedVert) ) ) + Maximize(); + else { - nShowState_ = SHOWSTATE_NORMAL; - if( ! (pState->mnState & (WindowStateState::MaximizedHorz|WindowStateState::MaximizedVert) ) ) - Maximize(); - else - { - bool bHorz(pState->mnState & WindowStateState::MaximizedHorz); - bool bVert(pState->mnState & WindowStateState::MaximizedVert); - GetDisplay()->getWMAdaptor()->maximizeFrame( this, bHorz, bVert ); - } - maRestorePosSize.SetLeft( pState->mnX ); - maRestorePosSize.SetTop( pState->mnY ); - maRestorePosSize.SetRight( maRestorePosSize.Left() + pState->mnWidth ); - maRestorePosSize.SetRight( maRestorePosSize.Left() + pState->mnHeight ); + bool bHorz(pState->mnState & WindowStateState::MaximizedHorz); + bool bVert(pState->mnState & WindowStateState::MaximizedVert); + GetDisplay()->getWMAdaptor()->maximizeFrame( this, bHorz, bVert ); } - else if( mbMaximizedHorz || mbMaximizedVert ) - GetDisplay()->getWMAdaptor()->maximizeFrame( this, false, false ); + maRestorePosSize.SetLeft( pState->mnX ); + maRestorePosSize.SetTop( pState->mnY ); + maRestorePosSize.SetRight( maRestorePosSize.Left() + pState->mnWidth ); + maRestorePosSize.SetRight( maRestorePosSize.Left() + pState->mnHeight ); + } + else if( mbMaximizedHorz || mbMaximizedVert ) + GetDisplay()->getWMAdaptor()->maximizeFrame( this, false, false ); - if (pState->mnState & WindowStateState::Minimized) - { - if (nShowState_ == SHOWSTATE_UNKNOWN) - nShowState_ = SHOWSTATE_NORMAL; - Minimize(); - } - if (pState->mnState & WindowStateState::Normal) - { - if (nShowState_ != SHOWSTATE_NORMAL) - Restore(); - } - if (pState->mnState & WindowStateState::Rollup) - GetDisplay()->getWMAdaptor()->shade( this, true ); + if (pState->mnState & WindowStateState::Minimized) + { + if (nShowState_ == SHOWSTATE_UNKNOWN) + nShowState_ = SHOWSTATE_NORMAL; + Minimize(); } + if (pState->mnState & WindowStateState::Normal) + { + if (nShowState_ != SHOWSTATE_NORMAL) + Restore(); + } + if (pState->mnState & WindowStateState::Rollup) + GetDisplay()->getWMAdaptor()->shade( this, true ); } bool X11SalFrame::GetWindowState( SalFrameState* pState ) @@ -1860,45 +1862,45 @@ void X11SalFrame::GetPosSize( tools::Rectangle &rPosSize ) void X11SalFrame::SetSize( const Size &rSize ) { - if( !rSize.IsEmpty() ) + if( rSize.IsEmpty() ) + return; + + if( ! ( nStyle_ & SalFrameStyleFlags::SIZEABLE ) + && ! IsChildWindow() + && ( nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) != SalFrameStyleFlags::FLOAT ) { - if( ! ( nStyle_ & SalFrameStyleFlags::SIZEABLE ) - && ! IsChildWindow() - && ( nStyle_ & (SalFrameStyleFlags::FLOAT|SalFrameStyleFlags::OWNERDRAWDECORATION) ) != SalFrameStyleFlags::FLOAT ) - { - XSizeHints* pHints = XAllocSizeHints(); - long nSupplied = 0; - XGetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints, - &nSupplied - ); - pHints->min_width = rSize.Width(); - pHints->min_height = rSize.Height(); - pHints->max_width = rSize.Width(); - pHints->max_height = rSize.Height(); - pHints->flags |= PMinSize | PMaxSize; - XSetWMNormalHints( GetXDisplay(), - GetShellWindow(), - pHints ); - XFree( pHints ); - } - XResizeWindow( GetXDisplay(), IsSysChildWindow() ? GetWindow() : GetShellWindow(), rSize.Width(), rSize.Height() ); - if( GetWindow() != GetShellWindow() ) - { - if( nStyle_ & SalFrameStyleFlags::PLUG ) - XMoveResizeWindow( GetXDisplay(), GetWindow(), 0, 0, rSize.Width(), rSize.Height() ); - else - XResizeWindow( GetXDisplay(), GetWindow(), rSize.Width(), rSize.Height() ); - } + XSizeHints* pHints = XAllocSizeHints(); + long nSupplied = 0; + XGetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints, + &nSupplied + ); + pHints->min_width = rSize.Width(); + pHints->min_height = rSize.Height(); + pHints->max_width = rSize.Width(); + pHints->max_height = rSize.Height(); + pHints->flags |= PMinSize | PMaxSize; + XSetWMNormalHints( GetXDisplay(), + GetShellWindow(), + pHints ); + XFree( pHints ); + } + XResizeWindow( GetXDisplay(), IsSysChildWindow() ? GetWindow() : GetShellWindow(), rSize.Width(), rSize.Height() ); + if( GetWindow() != GetShellWindow() ) + { + if( nStyle_ & SalFrameStyleFlags::PLUG ) + XMoveResizeWindow( GetXDisplay(), GetWindow(), 0, 0, rSize.Width(), rSize.Height() ); + else + XResizeWindow( GetXDisplay(), GetWindow(), rSize.Width(), rSize.Height() ); + } - maGeometry.nWidth = rSize.Width(); - maGeometry.nHeight = rSize.Height(); + maGeometry.nWidth = rSize.Width(); + maGeometry.nHeight = rSize.Height(); - // allow the external status window to reposition - if (mbInputFocus && mpInputContext != nullptr) - mpInputContext->SetICFocus ( this ); - } + // allow the external status window to reposition + if (mbInputFocus && mpInputContext != nullptr) + mpInputContext->SetICFocus ( this ); } void X11SalFrame::SetPosSize( const tools::Rectangle &rPosSize ) @@ -3389,58 +3391,58 @@ bool X11SalFrame::HandleExposeEvent( XEvent const *pEvent ) void X11SalFrame::RestackChildren( ::Window* pTopLevelWindows, int nTopLevelWindows ) { - if( !maChildren.empty() ) - { - int nWindow = nTopLevelWindows; - while( nWindow-- ) - if( pTopLevelWindows[nWindow] == GetStackingWindow() ) - break; - if( nWindow < 0 ) - return; + if( maChildren.empty() ) + return; - for (auto const& child : maChildren) + int nWindow = nTopLevelWindows; + while( nWindow-- ) + if( pTopLevelWindows[nWindow] == GetStackingWindow() ) + break; + if( nWindow < 0 ) + return; + + for (auto const& child : maChildren) + { + if( child->bMapped_ ) { - if( child->bMapped_ ) + int nChild = nWindow; + while( nChild-- ) { - int nChild = nWindow; - while( nChild-- ) + if( pTopLevelWindows[nChild] == child->GetStackingWindow() ) { - if( pTopLevelWindows[nChild] == child->GetStackingWindow() ) - { - // if a child is behind its parent, place it above the - // parent (for insane WMs like Dtwm and olwm) - XWindowChanges aCfg; - aCfg.sibling = GetStackingWindow(); - aCfg.stack_mode = Above; - XConfigureWindow( GetXDisplay(), child->GetStackingWindow(), CWSibling|CWStackMode, &aCfg ); - break; - } + // if a child is behind its parent, place it above the + // parent (for insane WMs like Dtwm and olwm) + XWindowChanges aCfg; + aCfg.sibling = GetStackingWindow(); + aCfg.stack_mode = Above; + XConfigureWindow( GetXDisplay(), child->GetStackingWindow(), CWSibling|CWStackMode, &aCfg ); + break; } } } - for (auto const& child : maChildren) - { - child->RestackChildren( pTopLevelWindows, nTopLevelWindows ); - } + } + for (auto const& child : maChildren) + { + child->RestackChildren( pTopLevelWindows, nTopLevelWindows ); } } void X11SalFrame::RestackChildren() { - if( !maChildren.empty() ) + if( maChildren.empty() ) + return; + + ::Window aRoot, aParent, *pChildren = nullptr; + unsigned int nChildren; + if( XQueryTree( GetXDisplay(), + GetDisplay()->GetRootWindow( m_nXScreen ), + &aRoot, + &aParent, + &pChildren, + &nChildren ) ) { - ::Window aRoot, aParent, *pChildren = nullptr; - unsigned int nChildren; - if( XQueryTree( GetXDisplay(), - GetDisplay()->GetRootWindow( m_nXScreen ), - &aRoot, - &aParent, - &pChildren, - &nChildren ) ) - { - RestackChildren( pChildren, nChildren ); - XFree( pChildren ); - } + RestackChildren( pChildren, nChildren ); + XFree( pChildren ); } } diff --git a/vcl/unx/generic/window/screensaverinhibitor.cxx b/vcl/unx/generic/window/screensaverinhibitor.cxx index 4cb4e273794b..0b499e638ecb 100644 --- a/vcl/unx/generic/window/screensaverinhibitor.cxx +++ b/vcl/unx/generic/window/screensaverinhibitor.cxx @@ -55,20 +55,20 @@ void ScreenSaverInhibitor::inhibit( bool bInhibit, const OUString& sReason, inhibitFDO( bInhibit, appname, aReason.getStr() ); inhibitFDOPM( bInhibit, appname, aReason.getStr() ); - if ( bIsX11 ) + if ( !bIsX11 ) + return; + + if (pDisplay) { - if (pDisplay) - { - inhibitXScreenSaver( bInhibit, *pDisplay ); - inhibitXAutoLock( bInhibit, *pDisplay ); - inhibitDPMS( bInhibit, *pDisplay ); - } + inhibitXScreenSaver( bInhibit, *pDisplay ); + inhibitXAutoLock( bInhibit, *pDisplay ); + inhibitDPMS( bInhibit, *pDisplay ); + } - if (xid) - { - inhibitGSM( bInhibit, appname, aReason.getStr(), *xid ); - inhibitMSM( bInhibit, appname, aReason.getStr(), *xid ); - } + if (xid) + { + inhibitGSM( bInhibit, appname, aReason.getStr(), *xid ); + inhibitMSM( bInhibit, appname, aReason.getStr(), *xid ); } } |