[Spice-devel] [PATCH spice-gtk 1/3] Correctly hide client pointer (in server mode)

Marc-André Lureau mlureau at redhat.com
Fri Dec 9 07:00:36 PST 2011



----- Mensaje original -----
> The hide cursor event happen when the widget is not yet
> realized. Forcing realize may fail if the widget is not yet embedded
> for example. Instead, let's update the cursor whenever there is a
> draw().
> 
> v2: do not call gdk_window_set_cursor() with the same cursor
> ---
>  gtk/spice-widget.c |    9 +++++++--
>  1 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
> index d6a8602..07fb677 100644
> --- a/gtk/spice-widget.c
> +++ b/gtk/spice-widget.c
> @@ -556,11 +556,13 @@ static void update_mouse_pointer(SpiceDisplay
> *display)
>  
>      switch (d->mouse_mode) {
>      case SPICE_MOUSE_MODE_CLIENT:
> -        gdk_window_set_cursor(window, d->mouse_cursor);
> +        if (gdk_window_get_cursor(window) != d->mouse_cursor)
> +            gdk_window_set_cursor(window, d->mouse_cursor);
>          break;
>      case SPICE_MOUSE_MODE_SERVER:
>          if (!d->mouse_grab_active) {
> -            gdk_window_set_cursor(window, NULL);
> +            if (gdk_window_get_cursor(window) == NULL)

oops, this should be != (fixed now)

> +                gdk_window_set_cursor(window, NULL);
>          } else {
>              try_mouse_grab(display);
>          }
> @@ -751,6 +753,7 @@ static gboolean draw_event(GtkWidget *widget,
> cairo_t *cr)
>      }
>  
>      spicex_draw_event(display, cr);
> +    update_mouse_pointer(display);
>  
>      return true;
>  }
> @@ -769,6 +772,8 @@ static gboolean expose_event(GtkWidget *widget,
> GdkEventExpose *expose)
>      }
>  
>      spicex_expose_event(display, expose);
> +    update_mouse_pointer(display);
> +
>      return true;
>  }
>  #endif
> --
> 1.7.7.3
> 
> 


More information about the Spice-devel mailing list