ack ----- Original Message ----- > When the --hotkeys option is given, all hotkeys that are not explicitly > specified are disabled. The method used to disable hotkeys is to change the > accel map entry to key=0, mods=0. However, when we decide whether to set a > grab > sequence on the spice dispay widget, we simply use the return value for > gtk_accel_map_lookup_entry and assume that a TRUE value returned from this > function means that the hotkey is enabled. In reality, this function will > return TRUE for disabled hotkeys, but the 'key' variable will be set to > key=0, > mods=0. The result is that if I start virt-viewer like this: > > virt-viewer --hotkeys secure-attention=ctrl+alt+end ... > > and the guest that I'm attached to uses server mouse mode, it will be > impossible > to release the grab on the spice widget. Because we will explicitly disable > the > grab keys in the spice widget and handle the 'release-cursor' hotkey in > virt-viewer, but the hotkey is an empty accel key. > > Instead of simply checking the return value of gtk_accel_map_lookup_entry, we > have to inspect the return value for 'key' and check whether any keys are > actually assigned. > --- > src/virt-viewer-display-spice.c | 7 +++++-- > src/virt-viewer-window.c | 9 ++++++--- > 2 files changed, 11 insertions(+), 5 deletions(-) > > diff --git a/src/virt-viewer-display-spice.c > b/src/virt-viewer-display-spice.c > index a803ab0..f36ba98 100644 > --- a/src/virt-viewer-display-spice.c > +++ b/src/virt-viewer-display-spice.c > @@ -235,8 +235,11 @@ enable_accel_changed(VirtViewerApp *app, > GParamSpec *pspec G_GNUC_UNUSED, > VirtViewerDisplaySpice *self) > { > - if (virt_viewer_app_get_enable_accel(app) > - && > gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", NULL)) { > + GtkAccelKey key = { 0 }; > + 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) { > SpiceGrabSequence *seq = spice_grab_sequence_new(0, NULL); > /* disable default grab sequence */ > spice_display_set_grab_keys(self->priv->display, seq); > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 05d5fe7..fe896c2 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -1157,10 +1157,13 @@ virt_viewer_window_update_title(VirtViewerWindow > *self) > > if (priv->grabbed) { > gchar *label; > - GtkAccelKey key; > + GtkAccelKey key = { 0 }; > > - if (virt_viewer_app_get_enable_accel(priv->app) > - && > gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key)) { > + if (virt_viewer_app_get_enable_accel(priv->app)) > + gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", > &key); > + > + if (key.accel_key || key.accel_mods) { > + DEBUG_LOG("release-cursor accel key: key=%u, mods=%x, flags=%u", > key.accel_key, key.accel_mods, key.accel_flags); > label = gtk_accelerator_get_label(key.accel_key, > key.accel_mods); > } else { > label = g_strdup(_("Ctrl+Alt")); > -- > 1.8.5.3 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list > _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list