summaryrefslogtreecommitdiff
path: root/vcl/source/window/syschild.cxx
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2016-01-11 17:17:10 +0200
committerTor Lillqvist <tml@collabora.com>2016-01-12 14:55:26 +0000
commit0ba752201dca6129cc6b4a19ec93eb369eb70890 (patch)
tree30f20f8a316af0a2672cefdf4f4a9cfd2787a18b /vcl/source/window/syschild.cxx
parent7a32b6f247b2cb92373bbce6fc2a314cb043e3bb (diff)
Re-work focus handling to use an idle handler
Gets rid of some flashing when using OpenGL. Change-Id: I1273b960725bf868e7340eac3f2bad2f20e73d91 Reviewed-on: https://gerrit.libreoffice.org/21390 Reviewed-by: Tor Lillqvist <tml@collabora.com> Tested-by: Tor Lillqvist <tml@collabora.com>
Diffstat (limited to 'vcl/source/window/syschild.cxx')
-rw-r--r--vcl/source/window/syschild.cxx7
1 files changed, 5 insertions, 2 deletions
diff --git a/vcl/source/window/syschild.cxx b/vcl/source/window/syschild.cxx
index d0c8e8ca375d..7a007a96cc62 100644
--- a/vcl/source/window/syschild.cxx
+++ b/vcl/source/window/syschild.cxx
@@ -79,10 +79,13 @@ long ImplSysChildProc( void* pInst, SalObject* /* pObject */,
// trigger a LoseFocus which matches the status
// of the window with matching Activate-Status
pWindow->ImplGetFrameData()->mbSysObjFocus = false;
- if ( !pWindow->ImplGetFrameData()->mnFocusId )
+ if ( !pWindow->ImplGetFrameData()->mpFocusIdle )
{
pWindow->ImplGetFrameData()->mbStartFocusState = true;
- pWindow->ImplGetFrameData()->mnFocusId = Application::PostUserEvent( LINK( pWindow->ImplGetFrameWindow(), vcl::Window, ImplAsyncFocusHdl ), nullptr, true );
+ pWindow->ImplGetFrameData()->mpFocusIdle = new Idle("loseFocus");
+ pWindow->ImplGetFrameData()->mpFocusIdle->SetIdleHdl(LINK( pWindow->ImplGetFrameWindow(), vcl::Window, ImplAsyncFocusHdl ));
+ pWindow->ImplGetFrameData()->mpFocusIdle->SetPriority(SchedulerPriority::LOW);
+ pWindow->ImplGetFrameData()->mpFocusIdle->Start();
}
break;