Commit a4ff9947 authored by Sam Hocevar's avatar Sam Hocevar

* ./modules/video_output/directx/events.c: we now call CreateWindow so that

    we are sure that the WndProc always has a valid p_vout value.
parent 8ab205ad
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* events.c: Windows DirectX video output events handler * events.c: Windows DirectX video output events handler
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: events.c,v 1.6 2002/10/25 18:17:59 sam Exp $ * $Id: events.c,v 1.7 2002/11/22 15:24:10 sam Exp $
* *
* Authors: Gildas Bazin <gbazin@netcourrier.com> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* *
...@@ -324,6 +324,10 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) ...@@ -324,6 +324,10 @@ static int DirectXCreateWindow( vout_thread_t *p_vout )
GCL_HBRBACKGROUND, (LONG)p_vout->p_sys->hbrush ); GCL_HBRBACKGROUND, (LONG)p_vout->p_sys->hbrush );
SetClassLong( p_vout->p_sys->hwnd, SetClassLong( p_vout->p_sys->hwnd,
GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW) ); GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW) );
/* Store a p_vout pointer into the window local storage (for later
* use in DirectXEventProc). */
SetWindowLong( p_vout->p_sys->hwnd, GWL_USERDATA, (LONG)p_vout );
p_vout->p_sys->pf_wndproc = p_vout->p_sys->pf_wndproc =
(WNDPROC)SetWindowLong( p_vout->p_sys->hwnd, (WNDPROC)SetWindowLong( p_vout->p_sys->hwnd,
GWL_WNDPROC, (LONG)DirectXEventProc ); GWL_WNDPROC, (LONG)DirectXEventProc );
...@@ -407,7 +411,7 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) ...@@ -407,7 +411,7 @@ static int DirectXCreateWindow( vout_thread_t *p_vout )
NULL, /* no parent window */ NULL, /* no parent window */
NULL, /* no menu in this window */ NULL, /* no menu in this window */
hInstance, /* handle of this program instance */ hInstance, /* handle of this program instance */
NULL); /* no additional arguments */ (LPVOID)p_vout ); /* send p_vout to WM_CREATE */
if( !p_vout->p_sys->hwnd ) if( !p_vout->p_sys->hwnd )
{ {
...@@ -416,11 +420,6 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) ...@@ -416,11 +420,6 @@ static int DirectXCreateWindow( vout_thread_t *p_vout )
} }
} }
/* Store a p_vout pointer into the window local storage (for later use
* in DirectXEventProc).
* We need to use SetWindowLongPtr when it is available in mingw */
SetWindowLong( p_vout->p_sys->hwnd, GWL_USERDATA, (LONG)p_vout );
/* Append a "Always On Top" entry in the system menu */ /* Append a "Always On Top" entry in the system menu */
hMenu = GetSystemMenu( p_vout->p_sys->hwnd, FALSE ); hMenu = GetSystemMenu( p_vout->p_sys->hwnd, FALSE );
AppendMenu( hMenu, MF_SEPARATOR, 0, "" ); AppendMenu( hMenu, MF_SEPARATOR, 0, "" );
...@@ -587,13 +586,17 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force ) ...@@ -587,13 +586,17 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
static long FAR PASCAL DirectXEventProc( HWND hwnd, UINT message, static long FAR PASCAL DirectXEventProc( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam ) WPARAM wParam, LPARAM lParam )
{ {
vout_thread_t *p_vout = vout_thread_t *p_vout;
(vout_thread_t *)GetWindowLong( hwnd, GWL_USERDATA );
/* Just in case the window wasn't properly initialized yet */ if( message == WM_CREATE )
if( !p_vout ) {
/* Store p_vout for future use */
p_vout = (vout_thread_t *)((CREATESTRUCT *)lParam)->lpCreateParams;
SetWindowLong( hWnd, GWL_USERDATA, (LONG)p_vout );
}
else
{ {
return DefWindowProc( hwnd, message, wParam, lParam ); p_vout = (vout_thread_t *)GetWindowLong( hWnd, GWL_USERDATA );
} }
switch( message ) switch( message )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment