Module: wine Branch: master Commit: a5d73ae427cf7f92546f943041278d196504d26b URL: https://gitlab.winehq.org/wine/wine/-/commit/a5d73ae427cf7f92546f943041278d1...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Jan 19 13:48:32 2024 +0100
winemac.drv: Return result through NtCallbackReturn for the drag and drop callbacks.
---
dlls/winemac.drv/dllmain.c | 10 ++++++---- dlls/winemac.drv/dragdrop.c | 9 +++++---- dlls/winemac.drv/event.c | 19 ++++++++++++++++--- 3 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/dlls/winemac.drv/dllmain.c b/dlls/winemac.drv/dllmain.c index 5917ed0906f..90fcd469eff 100644 --- a/dlls/winemac.drv/dllmain.c +++ b/dlls/winemac.drv/dllmain.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include "ntstatus.h" +#define WIN32_NO_STATUS #include "macdrv_dll.h" #include "macdrv_res.h" #include "shellapi.h" @@ -209,7 +211,7 @@ NTSTATUS WINAPI macdrv_app_quit_request(void *arg, ULONG size) }
/* quit_callback() will clean up qi */ - return 0; + return STATUS_SUCCESS;
fail: WARN("failed to allocate window list\n"); @@ -219,7 +221,7 @@ fail: HeapFree(GetProcessHeap(), 0, qi); } quit_reply(FALSE); - return 0; + return STATUS_SUCCESS; }
/*********************************************************************** @@ -259,13 +261,13 @@ static NTSTATUS WINAPI macdrv_app_icon(void *arg, ULONG size) if (!res_info) { WARN("found no RT_GROUP_ICON resource\n"); - return 0; + return STATUS_SUCCESS; }
if (!(res_data = LoadResource(NULL, res_info))) { WARN("failed to load RT_GROUP_ICON resource\n"); - return 0; + return STATUS_SUCCESS; }
if (!(icon_dir = LockResource(res_data))) diff --git a/dlls/winemac.drv/dragdrop.c b/dlls/winemac.drv/dragdrop.c index bbf74ac80c2..a75641afd32 100644 --- a/dlls/winemac.drv/dragdrop.c +++ b/dlls/winemac.drv/dragdrop.c @@ -499,7 +499,7 @@ NTSTATUS WINAPI macdrv_dnd_query_drop(void *arg, ULONG size) if (active_data_object) IDataObject_Release(active_data_object); active_data_object = NULL; last_droptarget_hwnd = NULL; - return ret; + return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
@@ -511,6 +511,7 @@ NTSTATUS WINAPI macdrv_dnd_query_exited(void *arg, ULONG size) struct dnd_query_exited_params *params = arg; HWND hwnd = UlongToHandle(params->hwnd); IDropTarget *droptarget; + BOOL ret = TRUE;
TRACE("win %p\n", hwnd);
@@ -529,8 +530,7 @@ NTSTATUS WINAPI macdrv_dnd_query_exited(void *arg, ULONG size) if (active_data_object) IDataObject_Release(active_data_object); active_data_object = NULL; last_droptarget_hwnd = NULL; - - return TRUE; + return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
@@ -643,5 +643,6 @@ NTSTATUS WINAPI macdrv_dnd_query_drag(void *arg, ULONG size) }
TRACE(" -> %s\n", ret ? "TRUE" : "FALSE"); - return ret ? effect : 0; + if (!ret) effect = 0; + return NtCallbackReturn( &effect, sizeof(effect), STATUS_SUCCESS ); } diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 9fbbe9d3d66..ab31c9d22c7 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -227,6 +227,8 @@ static BOOL query_drag_drop(macdrv_query *query) HWND hwnd = macdrv_get_window_hwnd(query->window); struct macdrv_win_data *data = get_win_data(hwnd); struct dnd_query_drop_params params; + void *ret_ptr; + ULONG ret_len;
if (!data) { @@ -240,7 +242,9 @@ static BOOL query_drag_drop(macdrv_query *query) params.y = query->drag_drop.y + data->whole_rect.top; params.handle = (UINT_PTR)query->drag_drop.pasteboard; release_win_data(data); - return macdrv_client_func(client_func_dnd_query_drop, ¶ms, sizeof(params)); + if (KeUserModeCallback(client_func_dnd_query_drop, ¶ms, sizeof(params), &ret_ptr, &ret_len)) + return FALSE; + return *(BOOL *)ret_ptr; }
/************************************************************************** @@ -249,8 +253,13 @@ static BOOL query_drag_drop(macdrv_query *query) static BOOL query_drag_exited(macdrv_query *query) { struct dnd_query_exited_params params; + void *ret_ptr; + ULONG ret_len; + params.hwnd = HandleToUlong(macdrv_get_window_hwnd(query->window)); - return macdrv_client_func(client_func_dnd_query_exited, ¶ms, sizeof(params)); + if (KeUserModeCallback(client_func_dnd_query_exited, ¶ms, sizeof(params), &ret_ptr, &ret_len)) + return FALSE; + return *(BOOL *)ret_ptr; }
@@ -262,6 +271,8 @@ static BOOL query_drag_operation(macdrv_query *query) struct dnd_query_drag_params params; HWND hwnd = macdrv_get_window_hwnd(query->window); struct macdrv_win_data *data = get_win_data(hwnd); + void *ret_ptr; + ULONG ret_len; DWORD effect;
if (!data) @@ -277,7 +288,9 @@ static BOOL query_drag_operation(macdrv_query *query) params.handle = (UINT_PTR)query->drag_operation.pasteboard; release_win_data(data);
- effect = macdrv_client_func(client_func_dnd_query_drag, ¶ms, sizeof(params)); + if (KeUserModeCallback(client_func_dnd_query_drag, ¶ms, sizeof(params), &ret_ptr, &ret_len)) + return FALSE; + effect = *(DWORD *)ret_ptr; if (!effect) return FALSE;
query->drag_operation.accepted_op = dropeffect_to_drag_operation(effect,