mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-04-18 15:22:37 +03:00
lsteamclient: Queue callback for input EnableActionEventCallbacks functions.
CW-Bug-Id: #22729
This commit is contained in:
parent
6a7dbe6160
commit
98a90a1458
@ -356,6 +356,10 @@ static void execute_pending_callbacks(void)
|
|||||||
TRACE( "CALL_CDECL_FUNC_DATA func %p, data %p.\n", params.callback->call_cdecl_func_data.pFunc, params.callback->call_cdecl_func_data.data );
|
TRACE( "CALL_CDECL_FUNC_DATA func %p, data %p.\n", params.callback->call_cdecl_func_data.pFunc, params.callback->call_cdecl_func_data.data );
|
||||||
params.callback->call_cdecl_func_data.pFunc( params.callback->call_cdecl_func_data.data );
|
params.callback->call_cdecl_func_data.pFunc( params.callback->call_cdecl_func_data.data );
|
||||||
break;
|
break;
|
||||||
|
case CALL_STDCALL_FUNC_DATA:
|
||||||
|
TRACE( "CALL_STDCALL_FUNC_DATA func %p, data %p.\n", params.callback->call_stdcall_func_data.pFunc, params.callback->call_stdcall_func_data.data );
|
||||||
|
params.callback->call_stdcall_func_data.pFunc( params.callback->call_stdcall_func_data.data );
|
||||||
|
break;
|
||||||
case CALL_IFACE_VTABLE_0:
|
case CALL_IFACE_VTABLE_0:
|
||||||
TRACE( "CALL_IFACE_VTABLE_0 iface %p, arg0 %#jx, arg1 %#jx, arg2 %#jx.\n", params.callback->call_iface_vtable.iface,
|
TRACE( "CALL_IFACE_VTABLE_0 iface %p, arg0 %#jx, arg1 %#jx, arg2 %#jx.\n", params.callback->call_iface_vtable.iface,
|
||||||
params.callback->call_iface_vtable.arg0, params.callback->call_iface_vtable.arg1, params.callback->call_iface_vtable.arg2 );
|
params.callback->call_iface_vtable.arg0, params.callback->call_iface_vtable.arg1, params.callback->call_iface_vtable.arg2 );
|
||||||
|
@ -25,6 +25,8 @@ extern void queue_vtable_callback_0_rules_responded( struct w_steam_iface *w_ifa
|
|||||||
|
|
||||||
typedef void (*W_CDECL w_cdecl_func)( void * );
|
typedef void (*W_CDECL w_cdecl_func)( void * );
|
||||||
extern void queue_cdecl_func_callback( w_cdecl_func func, void *data, uint32_t data_size );
|
extern void queue_cdecl_func_callback( w_cdecl_func func, void *data, uint32_t data_size );
|
||||||
|
typedef void (*W_STDCALL w_stdcall_func)( void * );
|
||||||
|
extern void queue_stdcall_func_callback( w_stdcall_func func, void *data, uint32_t data_size );
|
||||||
|
|
||||||
extern uint32_t manual_convert_nNativeKeyCode( uint32_t win_vk );
|
extern uint32_t manual_convert_nNativeKeyCode( uint32_t win_vk );
|
||||||
|
|
||||||
|
@ -315,9 +315,9 @@ NTSTATUS ISteamInput_SteamInput002_GetGlyphForXboxOrigin( void *args )
|
|||||||
/* ISteamInput_SteamInput005 */
|
/* ISteamInput_SteamInput005 */
|
||||||
|
|
||||||
static void (W_STDCALL *w_EnableActionEventCallbacks_152)( SteamInputActionEvent_t * );
|
static void (W_STDCALL *w_EnableActionEventCallbacks_152)( SteamInputActionEvent_t * );
|
||||||
static void u_SteamInputActionEventCallbackPointer_152( SteamInputActionEvent_t *dat )
|
static void U_STDCALL u_SteamInputActionEventCallbackPointer_152( SteamInputActionEvent_t *dat )
|
||||||
{
|
{
|
||||||
if (w_EnableActionEventCallbacks_152) w_EnableActionEventCallbacks_152( dat );
|
if (w_EnableActionEventCallbacks_152) queue_stdcall_func_callback( (w_stdcall_func)w_EnableActionEventCallbacks_152, dat, sizeof(*dat) );
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS ISteamInput_SteamInput005_EnableActionEventCallbacks( void *args )
|
NTSTATUS ISteamInput_SteamInput005_EnableActionEventCallbacks( void *args )
|
||||||
|
@ -123,6 +123,26 @@ void queue_cdecl_func_callback( w_cdecl_func func, void *data, uint32_t data_siz
|
|||||||
pthread_mutex_unlock( &callbacks_lock );
|
pthread_mutex_unlock( &callbacks_lock );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void queue_stdcall_func_callback( w_stdcall_func func, void *data, uint32_t data_size )
|
||||||
|
{
|
||||||
|
uint32_t size = data_size;
|
||||||
|
struct callback_entry *entry;
|
||||||
|
|
||||||
|
size += sizeof(struct callback_entry);
|
||||||
|
if (!(entry = (struct callback_entry *)malloc( size ))) return;
|
||||||
|
|
||||||
|
entry->callback.type = CALL_STDCALL_FUNC_DATA;
|
||||||
|
size -= offsetof( struct callback_entry, callback );
|
||||||
|
entry->callback.size = size;
|
||||||
|
|
||||||
|
entry->callback.call_stdcall_func_data.pFunc = func;
|
||||||
|
memcpy( (char *)entry->callback.call_stdcall_func_data.data, data, data_size );
|
||||||
|
|
||||||
|
pthread_mutex_lock( &callbacks_lock );
|
||||||
|
list_add_tail( &callbacks, &entry->entry );
|
||||||
|
pthread_mutex_unlock( &callbacks_lock );
|
||||||
|
}
|
||||||
|
|
||||||
u_FSteamNetworkingSocketsDebugOutput manual_convert_SetDebugOutputFunction_pfnFunc( w_FSteamNetworkingSocketsDebugOutput w_func )
|
u_FSteamNetworkingSocketsDebugOutput manual_convert_SetDebugOutputFunction_pfnFunc( w_FSteamNetworkingSocketsDebugOutput w_func )
|
||||||
{
|
{
|
||||||
w_steam_networking_socket_debug_output = w_func;
|
w_steam_networking_socket_debug_output = w_func;
|
||||||
|
@ -35,6 +35,7 @@ enum callback_type
|
|||||||
SOCKETS_DEBUG_OUTPUT = 1,
|
SOCKETS_DEBUG_OUTPUT = 1,
|
||||||
WARNING_MESSAGE_HOOK,
|
WARNING_MESSAGE_HOOK,
|
||||||
CALL_CDECL_FUNC_DATA,
|
CALL_CDECL_FUNC_DATA,
|
||||||
|
CALL_STDCALL_FUNC_DATA,
|
||||||
CALL_IFACE_VTABLE_0,
|
CALL_IFACE_VTABLE_0,
|
||||||
CALL_IFACE_VTABLE_1,
|
CALL_IFACE_VTABLE_1,
|
||||||
CALL_IFACE_VTABLE_2,
|
CALL_IFACE_VTABLE_2,
|
||||||
@ -69,6 +70,12 @@ struct callback
|
|||||||
unsigned char data[1];
|
unsigned char data[1];
|
||||||
} call_cdecl_func_data;
|
} call_cdecl_func_data;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
void (*W_STDCALL pFunc)( void * );
|
||||||
|
unsigned char data[1];
|
||||||
|
} call_stdcall_func_data;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
struct w_steam_iface *iface;
|
struct w_steam_iface *iface;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user