diff options
author | Pierre Ossman <ossman@cendio.se> | 2016-12-10 17:13:40 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2017-08-24 12:33:08 +0200 |
commit | 1668cfaef2fe7effb38f311d232d4f57a8703d11 (patch) | |
tree | b0d3e8f6f82246618720f66fdba695fde2e0bd5c /vncviewer/DesktopWindow.cxx | |
parent | 2fa63f8576e5d1c632efeeb2c185f11e943899d8 (diff) | |
download | tigervnc-1668cfaef2fe7effb38f311d232d4f57a8703d11.tar.gz tigervnc-1668cfaef2fe7effb38f311d232d4f57a8703d11.zip |
Sync LED state when gaining focus
The state might have changed when we didn't have focus. Get
everything back in sync once we're back in control.
Diffstat (limited to 'vncviewer/DesktopWindow.cxx')
-rw-r--r-- | vncviewer/DesktopWindow.cxx | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx index 3973cd66..897f9557 100644 --- a/vncviewer/DesktopWindow.cxx +++ b/vncviewer/DesktopWindow.cxx @@ -666,23 +666,31 @@ int DesktopWindow::fltkHandle(int event, Fl_Window *win) DesktopWindow *dw = dynamic_cast<DesktopWindow*>(win); - if (dw && fullscreenSystemKeys) { + if (dw) { switch (event) { case FL_FOCUS: - // FIXME: We reassert the keyboard grabbing on focus as FLTK there are - // some issues we need to work around: - // a) Fl::grab(0) on X11 will release the keyboard grab for us. - // b) Gaining focus on the system level causes FLTK to switch - // window level on OS X. - if (dw->fullscreen_active()) - dw->grabKeyboard(); + if (fullscreenSystemKeys) { + // FIXME: We reassert the keyboard grabbing on focus as FLTK there are + // some issues we need to work around: + // a) Fl::grab(0) on X11 will release the keyboard grab for us. + // b) Gaining focus on the system level causes FLTK to switch + // window level on OS X. + if (dw->fullscreen_active()) + dw->grabKeyboard(); + } + + // We may have gotten our lock keys out of sync with the server + // whilst we didn't have focus. Try to sort this out. + dw->viewport->pushLEDState(); break; case FL_UNFOCUS: - // FIXME: We need to relinquish control when the entire window loses - // focus as it is very tied to this specific window on some - // platforms and we want to be able to open subwindows. - dw->ungrabKeyboard(); + if (fullscreenSystemKeys) { + // FIXME: We need to relinquish control when the entire window loses + // focus as it is very tied to this specific window on some + // platforms and we want to be able to open subwindows. + dw->ungrabKeyboard(); + } break; } } |