Browse Source

globalhotkeys/win32: use semaphore and simplify

pull/128/head
Rémi Denis-Courmont 5 years ago
committed by Jean-Baptiste Kempf
parent
commit
167f1af49c
  1. 29
      modules/control/globalhotkeys/win32.c

29
modules/control/globalhotkeys/win32.c

@ -58,7 +58,7 @@ struct intf_sys_t
vlc_thread_t thread;
HWND hotkeyWindow;
vlc_mutex_t lock;
vlc_cond_t wait;
vlc_sem_t wait;
};
/*****************************************************************************
@ -73,25 +73,21 @@ static int Open( vlc_object_t *p_this )
return VLC_ENOMEM;
p_intf->p_sys = p_sys;
p_sys->hotkeyWindow = NULL;
vlc_mutex_init( &p_sys->lock );
vlc_cond_init( &p_sys->wait );
vlc_sem_init( &p_sys->wait, 0 );
if( vlc_clone( &p_sys->thread, Thread, p_intf, VLC_THREAD_PRIORITY_LOW ) )
return VLC_ENOMEM;
vlc_sem_wait( &p_sys->wait );
vlc_mutex_lock( &p_sys->lock );
while( p_sys->hotkeyWindow == NULL )
vlc_cond_wait( &p_sys->wait, &p_sys->lock );
if( p_sys->hotkeyWindow == INVALID_HANDLE_VALUE )
{
vlc_mutex_unlock( &p_sys->lock );
vlc_join( p_sys->thread, NULL );
return VLC_ENOMEM;
}
bool fail = p_sys->hotkeyWindow == NULL;
vlc_mutex_unlock( &p_sys->lock );
return VLC_SUCCESS;
if( fail )
vlc_join( p_sys->thread, NULL );
return fail ? VLC_ENOMEM : VLC_SUCCESS;
}
/*****************************************************************************
@ -122,7 +118,6 @@ static void *Thread( void *p_data )
intf_sys_t *p_sys = p_intf->p_sys;
/* Window which receives Hotkeys */
vlc_mutex_lock( &p_sys->lock );
p_sys->hotkeyWindow =
(void*)CreateWindow( TEXT("STATIC"), /* name of window class */
TEXT("VLC ghk ") TEXT(VERSION), /* window title bar text */
@ -135,16 +130,10 @@ static void *Thread( void *p_data )
NULL, /* no menu in this window */
GetModuleHandle(NULL), /* handle of this program instance */
NULL ); /* sent to WM_CREATE */
vlc_sem_post( &p_sys->wait );
if( p_sys->hotkeyWindow == NULL )
{
p_sys->hotkeyWindow = INVALID_HANDLE_VALUE;
vlc_cond_signal( &p_sys->wait );
vlc_mutex_unlock( &p_sys->lock );
return NULL;
}
vlc_cond_signal( &p_sys->wait );
vlc_mutex_unlock( &p_sys->lock );
SetWindowLongPtr( p_sys->hotkeyWindow, GWLP_WNDPROC,
(LONG_PTR)WMHOTKEYPROC );

Loading…
Cancel
Save