[vlc-devel] [PATCH] vout display window: store vout in window state

Thomas Guillem thomas at gllm.fr
Tue Jun 11 17:37:02 CEST 2019


LGTM

On Tue, Jun 11, 2019, at 17:18, Alexandre Janniaux wrote:
> Store vout_thread in window display state instead of getting it from
> casting vlc_object_parent.
> ---
>  src/video_output/window.c | 37 ++++++++++++++++++++++++++-----------
>  1 file changed, 26 insertions(+), 11 deletions(-)
> 
> diff --git a/src/video_output/window.c b/src/video_output/window.c
> index 99a6d62454..48cd109745 100644
> --- a/src/video_output/window.c
> +++ b/src/video_output/window.c
> @@ -210,6 +210,7 @@ void vout_window_ReportFullscreen(vout_window_t 
> *window, const char *id)
>  
>  typedef struct vout_display_window
>  {
> +    vout_thread_t *vout;
>      vlc_mouse_t mouse;
>      vlc_tick_t last_left_press;
>  } vout_display_window_t;
> @@ -217,7 +218,8 @@ typedef struct vout_display_window
>  static void vout_display_window_ResizeNotify(vout_window_t *window,
>                                               unsigned width, unsigned height)
>  {
> -    vout_thread_t *vout = (vout_thread_t *)vlc_object_parent(window);
> +    vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
>  
>      msg_Dbg(window, "resized to %ux%u", width, height);
>      vout_ChangeDisplaySize(vout, width, height);
> @@ -231,40 +233,49 @@ static void 
> vout_display_window_CloseNotify(vout_window_t *window)
>  }
>  
>  static void vout_display_window_StateNotify(vout_window_t *window,
> -                                            unsigned state)
> +                                            unsigned window_state)
>  {
> +    vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
> +
>      static const char states[][8] = {
>          [VOUT_WINDOW_STATE_NORMAL] = "normal",
>          [VOUT_WINDOW_STATE_ABOVE] = "above",
>          [VOUT_WINDOW_STATE_BELOW] = "below",
>      };
>  
> -    assert(state < ARRAY_SIZE(states));
> -    msg_Dbg(window, "window state changed: %s", states[state]);
> -    var_SetInteger(vlc_object_parent(window), "window-state", state);
> +    assert(window_state < ARRAY_SIZE(states));
> +    msg_Dbg(window, "window state changed: %s", states[window_state]);
> +    var_SetInteger(vout, "window-state", window_state);
>  }
>  
>  static void vout_display_window_FullscreenNotify(vout_window_t *window,
>                                                   const char *id)
>  {
> +    vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
> +
>      msg_Dbg(window, (id != NULL) ? "window set to fullscreen on %s"
>                                   : "window set to fullscreen", id);
> -    var_SetString(vlc_object_parent(window), "window-fullscreen-output",
> +    var_SetString(vout, "window-fullscreen-output",
>                    (id != NULL) ? id : "");
> -    var_SetBool(vlc_object_parent(window), "window-fullscreen", true);
> +    var_SetBool(vout, "window-fullscreen", true);
>  }
>  
>  static void vout_display_window_WindowingNotify(vout_window_t *window)
>  {
> +    vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
> +
>      msg_Dbg(window, "window set windowed");
> -    var_SetBool(vlc_object_parent(window), "window-fullscreen", false);
> +    var_SetBool(vout, "window-fullscreen", false);
>  }
>  
>  static void vout_display_window_MouseEvent(vout_window_t *window,
>                                             const vout_window_mouse_event_t *ev)
>  {
>      vout_display_window_t *state = window->owner.sys;
> -    vout_thread_t *vout = (vout_thread_t *)vlc_object_parent(window);
> +    vout_thread_t *vout = state->vout;
>      vlc_mouse_t *m = &state->mouse;
>  
>      m->b_double_click = false;
> @@ -315,7 +326,10 @@ static void 
> vout_display_window_MouseEvent(vout_window_t *window,
>  static void vout_display_window_KeyboardEvent(vout_window_t *window,
>                                                unsigned key)
>  {
> -    var_SetInteger(vlc_object_instance(window), "key-pressed", key);
> +    vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
> +
> +    var_SetInteger(vout, "key-pressed", key);
>  }
>  
>  static void vout_display_window_OutputEvent(vout_window_t *window,
> @@ -349,6 +363,7 @@ vout_window_t *vout_display_window_New(vout_thread_t *vout)
>  
>      vlc_mouse_Init(&state->mouse);
>      state->last_left_press = INT64_MIN;
> +    state->vout = vout;
>  
>      char *modlist = var_InheritString(vout, "window");
>      vout_window_owner_t owner = {
> @@ -374,8 +389,8 @@ vout_window_t *vout_display_window_New(vout_thread_t *vout)
>   */
>  void vout_display_window_Delete(vout_window_t *window)
>  {
> -    vout_thread_t *vout = (vout_thread_t *)vlc_object_parent(window);
>      vout_display_window_t *state = window->owner.sys;
> +    vout_thread_t *vout = state->vout;
>  
>      vout_window_Delete(window);
>      var_Destroy(vout, "window-fullscreen-output");
> -- 
> 2.20.1
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list