disable default grab sequence in kiosk mode

Hotkeys should be disabled in kiosk mode. However, if no
"release-cursor" hotkey is specified, the default Ctrl+Alt
grab sequence keeps functioning even in kiosk mode.
That's because it's based on the spice/vnc functionality instead
of on the accelerators in virt-viewer.

That's especially problematic with spice, because the grab
sequence releases both the cursor and the keyboard. Thus the user
can escape from kiosk mode by pressing Ctrl+Alt followed by
Alt+Tab, for example.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1893584

Signed-off-by: Jakub Janků <jjanku@redhat.com>
This commit is contained in:
Jakub Janků 2020-12-20 12:29:27 +01:00 committed by Daniel P. Berrangé
parent 1e18203e55
commit c3a3f23968
2 changed files with 10 additions and 2 deletions

View File

@ -238,10 +238,14 @@ enable_accel_changed(VirtViewerApp *app,
VirtViewerDisplaySpice *self)
{
GtkAccelKey key = {0, 0, 0};
gboolean kiosk;
if (virt_viewer_app_get_enable_accel(app))
gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key);
if (key.accel_key || key.accel_mods) {
g_object_get(app, "kiosk", &kiosk, NULL);
if (key.accel_key || key.accel_mods || kiosk) {
SpiceGrabSequence *seq = spice_grab_sequence_new(0, NULL);
/* disable default grab sequence */
spice_display_set_grab_keys(self->priv->display, seq);

View File

@ -188,10 +188,14 @@ enable_accel_changed(VirtViewerApp *app,
VncDisplay *vnc)
{
GtkAccelKey key = {0, 0, 0};
gboolean kiosk;
if (virt_viewer_app_get_enable_accel(app))
gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key);
if (key.accel_key || key.accel_mods) {
g_object_get(app, "kiosk", &kiosk, NULL);
if (key.accel_key || key.accel_mods || kiosk) {
VncGrabSequence *seq = vnc_grab_sequence_new(0, NULL);
/* disable default grab sequence */
vnc_display_set_grab_keys(vnc, seq);