Hi Snir, just some minor comments On Sun, 2015-12-13 at 10:40 +0200, Snir Sheriber wrote: > When using multiple monitors moving mouse between monitors releases > keyboard grab. > > Reproduce bug > -Open multiple monitors remote-viewer session > -Click on one of the monitors to get focus & keyboard-grab > -Move mouse to another monitor and try any keyboard command (do not click) > At this point all keyboard commands are being executed on the client machine > instead of the remote machine > > I added keyboard_have_focus and mouse_have_pointer variables at the session I know that 'keyboard_have_focus' is used in spice-widget, but you can introduce the new variables and functions with keyboard_has_focus, mouse_has_pointer > and The line in a commit message should not be longer than ~72 characters > now these properties are being tested for the session instead for the current > widget (works also when using alt-tab). > > Resolves: rhbz#1275231 > --- > No GObject properties were set > --- > src/spice-gtk-session-priv.h | 4 ++++ > src/spice-gtk-session.c | 36 ++++++++++++++++++++++++++++++++++++ > src/spice-widget.c | 7 +++++-- > 3 files changed, 45 insertions(+), 2 deletions(-) > > diff --git a/src/spice-gtk-session-priv.h b/src/spice-gtk-session-priv.h > index 91304b2..bd737d8 100644 > --- a/src/spice-gtk-session-priv.h > +++ b/src/spice-gtk-session-priv.h > @@ -28,6 +28,10 @@ gboolean spice_gtk_session_get_read_only(SpiceGtkSession > *self); > void spice_gtk_session_sync_keyboard_modifiers(SpiceGtkSession *self); > void spice_gtk_session_set_pointer_grabbed(SpiceGtkSession *self, gboolean > grabbed); > gboolean spice_gtk_session_get_pointer_grabbed(SpiceGtkSession *self); > +void spice_gtk_session_set_keyboard_have_focus(SpiceGtkSession *self, has_focus > gboolean grabbed); maybe gboolean has_focus or keyboard_has_focus instead of grabbed? > +void spice_gtk_session_set_mouse_have_pointer(SpiceGtkSession *self, gboolean > grabbed); has_pointer / mouse_has_pointer? > +gboolean spice_gtk_session_get_keyboard_have_focus(SpiceGtkSession *self); > +gboolean spice_gtk_session_get_mouse_have_pointer(SpiceGtkSession *self); have/has > > G_END_DECLS > > diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c > index 5abb16c..0218bdc 100644 > --- a/src/spice-gtk-session.c > +++ b/src/spice-gtk-session.c > @@ -64,6 +64,8 @@ struct _SpiceGtkSessionPrivate { > gboolean auto_usbredir_enable; > int auto_usbredir_reqs; > gboolean pointer_grabbed; > + gboolean keyboard_have_focus; > + gboolean mouse_have_pointer; have/has > }; > > /** > @@ -1227,3 +1229,37 @@ gboolean > spice_gtk_session_get_pointer_grabbed(SpiceGtkSession *self) > > return self->priv->pointer_grabbed; > } > + > +G_GNUC_INTERNAL > +void spice_gtk_session_set_keyboard_have_focus(SpiceGtkSession *self, > +gboolean grabbed) Please rename and fix the indentation void spice_gtk_session_set_keyboard_have_focus(SpiceGtkSession *self, gboolean have_focus) > +{ > + g_return_if_fail(SPICE_IS_GTK_SESSION(self)); > + > + self->priv->keyboard_have_focus = grabbed; > +} > + > +G_GNUC_INTERNAL > +void spice_gtk_session_set_mouse_have_pointer(SpiceGtkSession *self, gboolean > +grabbed) same here > + { > + g_return_if_fail(SPICE_IS_GTK_SESSION(self)); > + > + self->priv->mouse_have_pointer = grabbed; > + } > + > + G_GNUC_INTERNAL > +gboolean spice_gtk_session_get_keyboard_have_focus(SpiceGtkSession *self) > +{ > + g_return_val_if_fail(SPICE_IS_GTK_SESSION(self), FALSE); > + > + return self->priv->keyboard_have_focus; > +} > + > +G_GNUC_INTERNAL > +gboolean spice_gtk_session_get_mouse_have_pointer(SpiceGtkSession *self) > +{ > + g_return_val_if_fail(SPICE_IS_GTK_SESSION(self), FALSE); > + > + return self->priv->mouse_have_pointer; > +} > diff --git a/src/spice-widget.c b/src/spice-widget.c > index 503f82a..ffb2c00 100644 > --- a/src/spice-widget.c > +++ b/src/spice-widget.c > @@ -208,6 +208,7 @@ static void update_keyboard_focus(SpiceDisplay *display, > gboolean state) > SpiceDisplayPrivate *d = display->priv; > > d->keyboard_have_focus = state; > + spice_gtk_session_set_keyboard_have_focus(d->gtk_session, state); > > /* keyboard grab gets inhibited by usb-device-manager when it is > in the process of redirecting a usb-device (as this may show a > @@ -737,9 +738,9 @@ static void try_keyboard_grab(SpiceDisplay *display) > return; > if (d->keyboard_grab_active) > return; > - if (!d->keyboard_have_focus) > + if (!spice_gtk_session_get_keyboard_have_focus(d->gtk_session)) > return; > - if (!d->mouse_have_pointer) > + if (!spice_gtk_session_get_mouse_have_pointer(d->gtk_session)) > return; > if (d->keyboard_grab_released) > return; > @@ -1465,6 +1466,7 @@ static gboolean enter_event(GtkWidget *widget, > GdkEventCrossing *crossing G_GNUC > SPICE_DEBUG("%s", __FUNCTION__); > > d->mouse_have_pointer = true; > + spice_gtk_session_set_mouse_have_pointer(d->gtk_session, true); > try_keyboard_grab(display); > update_display(display); > > @@ -1482,6 +1484,7 @@ static gboolean leave_event(GtkWidget *widget, > GdkEventCrossing *crossing G_GNUC > return true; > > d->mouse_have_pointer = false; > + spice_gtk_session_set_mouse_have_pointer(d->gtk_session, false); > try_keyboard_ungrab(display); > > return true; Ack with the changes, Pavel _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel