summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/unx/generic/app/saldisp.cxx40
-rw-r--r--vcl/unx/generic/gdi/salgdi2.cxx3
-rw-r--r--vcl/unx/generic/window/salframe.cxx15
3 files changed, 32 insertions, 26 deletions
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index dd0b57c2fb38..57afd6cdf875 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -1422,9 +1422,8 @@ KeySym SalDisplay::GetKeySym( XKeyEvent *pEvent,
memset( pPrintable, 0, *pLen );
*pStatusReturn = 0;
- SalI18N_InputMethod *pInputMethod = nullptr;
- if ( pXLib_ )
- pInputMethod = pXLib_->GetInputMethod();
+ SalI18N_InputMethod* const pInputMethod =
+ ( pXLib_ ) ? pXLib_->GetInputMethod() : nullptr;
// first get the printable of the possibly modified KeySym
if ( (aInputContext == nullptr)
@@ -1927,32 +1926,29 @@ void SalX11Display::Yield()
bool SalX11Display::Dispatch( XEvent *pEvent )
{
- SalI18N_InputMethod *pInputMethod = nullptr;
- if ( pXLib_ )
- pInputMethod = pXLib_->GetInputMethod();
+ SalI18N_InputMethod* const pInputMethod =
+ ( pXLib_ ) ? pXLib_->GetInputMethod() : nullptr;
- if( pEvent->type == KeyPress || pEvent->type == KeyRelease )
+ if( pInputMethod )
{
- ::Window aWindow = pEvent->xkey.window;
-
- for (auto pSalFrame : m_aFrames )
+ ::Window aFrameWindow = None;
+ if( pEvent->type == KeyPress || pEvent->type == KeyRelease )
{
- const X11SalFrame* pFrame = static_cast< const X11SalFrame* >( pSalFrame );
- if( pFrame->GetWindow() == aWindow || pFrame->GetShellWindow() == aWindow )
+ const ::Window aWindow = pEvent->xkey.window;
+ for( auto pSalFrame : m_aFrames )
{
- aWindow = pFrame->GetWindow();
- break;
+ const X11SalFrame* pFrame = static_cast< const X11SalFrame* >( pSalFrame );
+ const ::Window aCurFrameWindow = pFrame->GetWindow();
+ if( aCurFrameWindow == aWindow || pFrame->GetShellWindow() == aWindow )
+ {
+ aFrameWindow = aCurFrameWindow;
+ break;
+ }
}
}
- if( aWindow != pEvent->xkey.window )
- {
- if ( pInputMethod && pInputMethod->FilterEvent( pEvent , aWindow ) )
- return false;
- }
- }
- else
- if ( pInputMethod && pInputMethod->FilterEvent( pEvent, None ) )
+ if( pInputMethod->FilterEvent( pEvent, aFrameWindow ) )
return false;
+ }
SalInstance* pInstance = GetSalData()->m_pInstance;
pInstance->CallEventCallback( pEvent, sizeof( XEvent ) );
diff --git a/vcl/unx/generic/gdi/salgdi2.cxx b/vcl/unx/generic/gdi/salgdi2.cxx
index ed33c0acacaf..44e371341bad 100644
--- a/vcl/unx/generic/gdi/salgdi2.cxx
+++ b/vcl/unx/generic/gdi/salgdi2.cxx
@@ -131,7 +131,10 @@ void X11SalGraphics::YieldGraphicsExpose()
{
const SystemEnvData* pEnvData = pSalFrame->GetSystemData();
if( Drawable(pEnvData->aWindow) == aWindow )
+ {
pFrame = pSalFrame;
+ break;
+ }
}
if( ! pFrame )
return;
diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx
index 03fc70c40676..4e62877f40e0 100644
--- a/vcl/unx/generic/window/salframe.cxx
+++ b/vcl/unx/generic/window/salframe.cxx
@@ -492,14 +492,17 @@ void X11SalFrame::Init( SalFrameStyleFlags nSalFrameStyle, SalX11Screen nXScreen
// check if this is really one of our own frames
// do not change the input mask in that case
+ bool bIsReallyOurFrame = false;
for (auto pSalFrame : GetDisplay()->getFrames() )
- {
if ( static_cast<const X11SalFrame*>( pSalFrame )->GetWindow() == mhForeignParent )
{
- XSelectInput( GetDisplay()->GetDisplay(), mhForeignParent, StructureNotifyMask | FocusChangeMask );
- XSelectInput( GetDisplay()->GetDisplay(), mhShellWindow, StructureNotifyMask | FocusChangeMask );
+ bIsReallyOurFrame = true;
break;
}
+ if (!bIsReallyOurFrame)
+ {
+ XSelectInput( GetDisplay()->GetDisplay(), mhForeignParent, StructureNotifyMask | FocusChangeMask );
+ XSelectInput( GetDisplay()->GetDisplay(), mhShellWindow, StructureNotifyMask | FocusChangeMask );
}
}
else
@@ -520,6 +523,7 @@ void X11SalFrame::Init( SalFrameStyleFlags nSalFrameStyle, SalX11Screen nXScreen
{
// find the last document window (if any)
const X11SalFrame* pFrame = nullptr;
+ bool bIsDocumentWindow = false;
for (auto pSalFrame : GetDisplay()->getFrames() )
{
pFrame = static_cast< const X11SalFrame* >( pSalFrame );
@@ -530,10 +534,13 @@ void X11SalFrame::Init( SalFrameStyleFlags nSalFrameStyle, SalX11Screen nXScreen
|| ! pFrame->GetUnmirroredGeometry().nHeight
)
)
+ {
+ bIsDocumentWindow = true;
break;
+ }
}
- if( pFrame )
+ if( bIsDocumentWindow )
{
// set a document position and size
// the first frame gets positioned by the window manager