winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
July 2024
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
519 discussions
Start a n
N
ew thread
Rémi Bernon : win32u: Use the thread input shared memory for NtUserGetGUIThreadInfo.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 8ef766f114e9cdc41727e34f25e169733210e8d4 URL:
https://gitlab.winehq.org/wine/wine/-/commit/8ef766f114e9cdc41727e34f25e169…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri Jul 5 08:46:09 2024 +0200 win32u: Use the thread input shared memory for NtUserGetGUIThreadInfo. --- dlls/win32u/message.c | 32 ++++++++++------------------- dlls/win32u/winstation.c | 7 ++++++- include/wine/server_protocol.h | 28 +------------------------ server/protocol.def | 17 ---------------- server/queue.c | 46 ------------------------------------------ server/request.h | 15 -------------- server/trace.c | 22 -------------------- 7 files changed, 18 insertions(+), 149 deletions(-)
1
0
0
0
Rémi Bernon : win32u: Use the thread input shared memory for NtUserGetCursorInfo.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 0b12023b93bbfa7dcac16a6591c986545d47e650 URL:
https://gitlab.winehq.org/wine/wine/-/commit/0b12023b93bbfa7dcac16a6591c986…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri Jun 16 09:58:55 2023 +0200 win32u: Use the thread input shared memory for NtUserGetCursorInfo. Always returning TRUE as it now can only fail if there is no foreground thread input, which can spuriously happen, and the code was returning success in that case before. --- dlls/win32u/input.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 810cb4c0993..794dde58359 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -772,22 +772,25 @@ BOOL get_cursor_pos( POINT *pt ) */ BOOL WINAPI NtUserGetCursorInfo( CURSORINFO *info ) { - BOOL ret; + struct object_lock lock = OBJECT_LOCK_INIT; + const input_shm_t *input_shm; + NTSTATUS status; if (!info) return FALSE; - SERVER_START_REQ( get_thread_input_data ) + while ((status = get_shared_input( 0, &lock, &input_shm )) == STATUS_PENDING) { - req->tid = 0; - if ((ret = !wine_server_call( req ))) - { - info->hCursor = wine_server_ptr_handle( reply->cursor ); - info->flags = reply->show_count >= 0 ? CURSOR_SHOWING : 0; - } + info->hCursor = wine_server_ptr_handle( input_shm->cursor ); + info->flags = (input_shm->cursor_count >= 0) ? CURSOR_SHOWING : 0; } - SERVER_END_REQ; + if (status) + { + info->hCursor = 0; + info->flags = CURSOR_SHOWING; + } + get_cursor_pos( &info->ptScreenPos ); - return ret; + return TRUE; } static void check_for_events( UINT flags )
1
0
0
0
Rémi Bernon : win32u: Use the thread input shared memory for NtUserGetForegroundWindow.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 1f9d011a4c813ec315c6e31f56ed9c0016f569b8 URL:
https://gitlab.winehq.org/wine/wine/-/commit/1f9d011a4c813ec315c6e31f56ed9c…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri Jun 16 09:58:55 2023 +0200 win32u: Use the thread input shared memory for NtUserGetForegroundWindow. --- dlls/win32u/input.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 8cdc5a03e16..810cb4c0993 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -551,15 +551,16 @@ static WCHAR kbd_tables_vkey_to_wchar( const KBDTABLES *tables, UINT vkey, const */ HWND WINAPI NtUserGetForegroundWindow(void) { - HWND ret = 0; + struct object_lock lock = OBJECT_LOCK_INIT; + const input_shm_t *input_shm; + NTSTATUS status; + HWND hwnd = 0; - SERVER_START_REQ( get_thread_input_data ) - { - req->tid = 0; - if (!wine_server_call_err( req )) ret = wine_server_ptr_handle( reply->foreground ); - } - SERVER_END_REQ; - return ret; + while ((status = get_shared_input( 0, &lock, &input_shm )) == STATUS_PENDING) + hwnd = wine_server_ptr_handle( input_shm->active ); + if (status) hwnd = 0; + + return hwnd; } /* see GetActiveWindow */
1
0
0
0
Rémi Bernon : server: Add cursor handle and count to desktop shared memory.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: ae5ede98c4ee76fd269b8b5882db8a2fbe257bf0 URL:
https://gitlab.winehq.org/wine/wine/-/commit/ae5ede98c4ee76fd269b8b5882db8a…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri Apr 5 19:04:44 2024 +0200 server: Add cursor handle and count to desktop shared memory. --- include/wine/server_protocol.h | 4 ++- server/protocol.def | 2 ++ server/queue.c | 74 ++++++++++++++++++++++++++++-------------- 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index f0c203793fd..6fabddf0804 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -917,6 +917,8 @@ typedef volatile struct user_handle_t move_size; user_handle_t caret; rectangle_t caret_rect; + user_handle_t cursor; + int cursor_count; } input_shm_t; typedef volatile union @@ -6621,7 +6623,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 828 +#define SERVER_PROTOCOL_VERSION 829 /* ### protocol_version end ### */ diff --git a/server/protocol.def b/server/protocol.def index 8002f3482ea..063fa502929 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -933,6 +933,8 @@ typedef volatile struct user_handle_t move_size; /* handle to the moving/resizing window */ user_handle_t caret; /* handle to the caret window */ rectangle_t caret_rect; /* caret rectangle */ + user_handle_t cursor; /* handle to the cursor */ + int cursor_count; /* cursor show count */ } input_shm_t; typedef volatile union diff --git a/server/queue.c b/server/queue.c index d7d2aa7679d..18be49331e3 100644 --- a/server/queue.c +++ b/server/queue.c @@ -106,8 +106,6 @@ struct thread_input struct desktop *desktop; /* desktop that this thread input belongs to */ int caret_hide; /* caret hide count */ int caret_state; /* caret on/off state */ - user_handle_t cursor; /* current cursor */ - int cursor_count; /* cursor show count */ struct list msg_list; /* list of hardware messages */ unsigned char keystate[256]; /* state of each key */ unsigned char desktop_keystate[256]; /* desktop keystate when keystate was synced */ @@ -252,8 +250,6 @@ static struct thread_input *create_thread_input( struct thread *thread ) if ((input = alloc_object( &thread_input_ops ))) { - input->cursor = 0; - input->cursor_count = 0; list_init( &input->msg_list ); memset( input->keystate, 0, sizeof(input->keystate) ); input->keystate_lock = 0; @@ -282,6 +278,8 @@ static struct thread_input *create_thread_input( struct thread *thread ) shared->menu_owner = 0; shared->move_size = 0; set_caret_window( input, shared, 0 ); + shared->cursor = 0; + shared->cursor_count = 0; } SHARED_WRITE_END; } @@ -392,6 +390,7 @@ static void unlock_input_keystate( struct thread_input *input ) static int assign_thread_input( struct thread *thread, struct thread_input *new_input ) { struct msg_queue *queue = thread->queue; + const input_shm_t *input_shm; if (!queue) { @@ -400,7 +399,14 @@ static int assign_thread_input( struct thread *thread, struct thread_input *new_ } if (queue->input) { - queue->input->cursor_count -= queue->cursor_count; + input_shm = queue->input->shared; + + SHARED_WRITE_BEGIN( input_shm, input_shm_t ) + { + shared->cursor_count -= queue->cursor_count; + } + SHARED_WRITE_END; + if (queue->keystate_lock) unlock_input_keystate( queue->input ); /* invalidate the old object to force clients to refresh their cached thread input */ @@ -409,7 +415,14 @@ static int assign_thread_input( struct thread *thread, struct thread_input *new_ } queue->input = (struct thread_input *)grab_object( new_input ); if (queue->keystate_lock) lock_input_keystate( queue->input ); - new_input->cursor_count += queue->cursor_count; + + input_shm = new_input->shared; + SHARED_WRITE_BEGIN( input_shm, input_shm_t ) + { + shared->cursor_count += queue->cursor_count; + } + SHARED_WRITE_END; + return 1; } @@ -488,7 +501,8 @@ static int update_desktop_cursor_window( struct desktop *desktop, user_handle_t if (updated && (input = get_desktop_cursor_thread_input( desktop ))) { - user_handle_t handle = input->cursor_count < 0 ? 0 : input->cursor; + const input_shm_t *input_shm = input->shared; + user_handle_t handle = input_shm->cursor_count < 0 ? 0 : input_shm->cursor; /* when clipping send the message to the foreground window as well, as some driver have an artificial overlay window */ if (is_cursor_clipped( desktop )) queue_cursor_message( desktop, 0, WM_WINE_SETCURSOR, win, handle ); queue_cursor_message( desktop, win, WM_WINE_SETCURSOR, win, handle ); @@ -1259,6 +1273,7 @@ static void msg_queue_destroy( struct object *obj ) struct msg_queue *queue = (struct msg_queue *)obj; struct list *ptr; struct hotkey *hotkey, *hotkey2; + const input_shm_t *input_shm = queue->input->shared; int i; cleanup_results( queue ); @@ -1286,7 +1301,11 @@ static void msg_queue_destroy( struct object *obj ) free( timer ); } if (queue->timeout) remove_timeout_user( queue->timeout ); - queue->input->cursor_count -= queue->cursor_count; + SHARED_WRITE_BEGIN( input_shm, input_shm_t ) + { + shared->cursor_count -= queue->cursor_count; + } + SHARED_WRITE_END; if (queue->keystate_lock) unlock_input_keystate( queue->input ); release_object( queue->input ); if (queue->hooks) release_object( queue->hooks ); @@ -3683,8 +3702,8 @@ DECL_HANDLER(get_thread_input_data) reply->menu_owner = input_shm->menu_owner; reply->move_size = input_shm->move_size; reply->caret = input_shm->caret; - reply->cursor = input->cursor; - reply->show_count = input->cursor_count; + reply->cursor = input_shm->cursor; + reply->show_count = input_shm->cursor_count; reply->rect = input_shm->caret_rect; } @@ -3972,39 +3991,46 @@ DECL_HANDLER(set_cursor) struct msg_queue *queue = get_current_queue(); user_handle_t prev_cursor, new_cursor; struct thread_input *input; + const input_shm_t *input_shm; struct desktop *desktop; const desktop_shm_t *desktop_shm; if (!queue) return; input = queue->input; + input_shm = input->shared; desktop = input->desktop; desktop_shm = desktop->shared; - prev_cursor = input->cursor_count < 0 ? 0 : input->cursor; + prev_cursor = input_shm->cursor_count < 0 ? 0 : input_shm->cursor; - reply->prev_handle = input->cursor; - reply->prev_count = input->cursor_count; + reply->prev_handle = input_shm->cursor; + reply->prev_count = input_shm->cursor_count; reply->prev_x = desktop_shm->cursor.x; reply->prev_y = desktop_shm->cursor.y; - if (req->flags & SET_CURSOR_HANDLE) + if ((req->flags & SET_CURSOR_HANDLE) && req->handle && + !get_user_object( req->handle, USER_CLIENT )) { - if (req->handle && !get_user_object( req->handle, USER_CLIENT )) - { - set_win32_error( ERROR_INVALID_CURSOR_HANDLE ); - return; - } - input->cursor = req->handle; + set_win32_error( ERROR_INVALID_CURSOR_HANDLE ); + return; } - if (req->flags & SET_CURSOR_COUNT) + + SHARED_WRITE_BEGIN( input_shm, input_shm_t ) { - queue->cursor_count += req->show_count; - input->cursor_count += req->show_count; + if (req->flags & SET_CURSOR_HANDLE) + shared->cursor = req->handle; + if (req->flags & SET_CURSOR_COUNT) + { + queue->cursor_count += req->show_count; + shared->cursor_count += req->show_count; + } } + SHARED_WRITE_END; + if (req->flags & SET_CURSOR_POS) set_cursor_pos( desktop, req->x, req->y ); if (req->flags & SET_CURSOR_CLIP) set_clip_rectangle( desktop, &req->clip, req->flags, 0 ); if (req->flags & SET_CURSOR_NOCLIP) set_clip_rectangle( desktop, NULL, SET_CURSOR_NOCLIP, 0 ); - new_cursor = input->cursor_count < 0 ? 0 : input->cursor; + new_cursor = input_shm->cursor_count < 0 ? 0 : input_shm->cursor; if (prev_cursor != new_cursor) update_desktop_cursor_handle( desktop, input, new_cursor ); reply->new_x = desktop_shm->cursor.x;
1
0
0
0
Rémi Bernon : server: Add a foreground flag to the thread input shared memory.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 025e8cf4a0da1304dc8845d22f85c5a677a2cdcd URL:
https://gitlab.winehq.org/wine/wine/-/commit/025e8cf4a0da1304dc8845d22f85c5…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Sun Jun 23 10:37:48 2024 +0200 server: Add a foreground flag to the thread input shared memory. --- dlls/win32u/winstation.c | 12 ++++++++++-- include/wine/server_protocol.h | 3 ++- server/protocol.def | 1 + server/queue.c | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index 41a4d63b54c..5ed08433b27 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -56,6 +56,7 @@ struct session_thread_data const shared_object_t *shared_desktop; /* thread desktop shared session cached object */ const shared_object_t *shared_queue; /* thread message queue shared session cached object */ struct shared_input_cache shared_input; /* current thread input shared session cached object */ + struct shared_input_cache shared_foreground; /* foreground thread input shared session cached object */ }; struct session_block @@ -286,7 +287,11 @@ static NTSTATUS try_get_shared_input( UINT tid, struct object_lock *lock, const } /* check object validity by comparing ids, within the object seqlock */ - valid = cache->id == object->id; + if ((valid = cache->id == object->id) && !tid) + { + /* check that a previously locked foreground thread input is still foreground */ + valid = !!object->shm.input.foreground; + } if (!lock->id || !shared_object_release_seqlock( object, lock->seq )) { @@ -309,6 +314,7 @@ NTSTATUS get_shared_input( UINT tid, struct object_lock *lock, const input_shm_t TRACE( "tid %u, lock %p, input_shm %p\n", tid, lock, input_shm ); if (tid == GetCurrentThreadId()) cache = &data->shared_input; + else if (!tid) cache = &data->shared_foreground; else return STATUS_INVALID_HANDLE; do { status = try_get_shared_input( tid, lock, input_shm, cache ); } @@ -543,7 +549,9 @@ BOOL WINAPI NtUserSetThreadDesktop( HDESK handle ) if (ret) /* reset the desktop windows */ { struct user_thread_info *thread_info = get_user_thread_info(); - get_session_thread_data()->shared_desktop = find_shared_session_object( locator ); + struct session_thread_data *data = get_session_thread_data(); + data->shared_desktop = find_shared_session_object( locator ); + memset( &data->shared_foreground, 0, sizeof(data->shared_foreground) ); thread_info->client_info.top_window = 0; thread_info->client_info.msg_window = 0; if (was_virtual_desktop != is_virtual_desktop()) update_display_cache( FALSE ); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 45806cd7e08..f0c203793fd 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -909,6 +909,7 @@ typedef volatile struct typedef volatile struct { + int foreground; user_handle_t active; user_handle_t focus; user_handle_t capture; @@ -6620,7 +6621,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 827 +#define SERVER_PROTOCOL_VERSION 828 /* ### protocol_version end ### */ diff --git a/server/protocol.def b/server/protocol.def index 5a1b30d4049..8002f3482ea 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -925,6 +925,7 @@ typedef volatile struct typedef volatile struct { + int foreground; /* is desktop foreground thread input */ user_handle_t active; /* handle to the active window */ user_handle_t focus; /* handle to the focus window */ user_handle_t capture; /* handle to the capture window */ diff --git a/server/queue.c b/server/queue.c index 4494b426c0e..d7d2aa7679d 100644 --- a/server/queue.c +++ b/server/queue.c @@ -275,6 +275,7 @@ static struct thread_input *create_thread_input( struct thread *thread ) SHARED_WRITE_BEGIN( input->shared, input_shm_t ) { + shared->foreground = 0; shared->active = 0; shared->focus = 0; shared->capture = 0; @@ -609,9 +610,26 @@ void set_clip_rectangle( struct desktop *desktop, const rectangle_t *rect, unsig /* change the foreground input and reset the cursor clip rect */ static void set_foreground_input( struct desktop *desktop, struct thread_input *input ) { + const input_shm_t *input_shm, *old_input_shm, dummy_shm = {0}; + if (desktop->foreground_input == input) return; + input_shm = input ? input->shared : &dummy_shm; + old_input_shm = desktop->foreground_input ? desktop->foreground_input->shared : &dummy_shm; + set_clip_rectangle( desktop, NULL, SET_CURSOR_NOCLIP, 1 ); desktop->foreground_input = input; + + SHARED_WRITE_BEGIN( old_input_shm, input_shm_t ) + { + input_shm_t *old_shared = shared; + SHARED_WRITE_BEGIN( input_shm, input_shm_t ) + { + old_shared->foreground = 0; + shared->foreground = 1; + } + SHARED_WRITE_END; + } + SHARED_WRITE_END; } /* get the hook table for a given thread */
1
0
0
0
Rémi Bernon : ddraw/tests: Flush messages and X11 events between some tests.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 60458cebc7dc50d1a5dd952c38bf1605a0ba0be3 URL:
https://gitlab.winehq.org/wine/wine/-/commit/60458cebc7dc50d1a5dd952c38bf16…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jul 3 12:07:13 2024 +0200 ddraw/tests: Flush messages and X11 events between some tests. This test appear to be sensitive to pending ConfigureNotify events which will otherwise overwrite window resizes triggered by cooperative level and display mode changes. --- dlls/ddraw/tests/ddraw2.c | 2 ++ dlls/ddraw/tests/ddraw4.c | 2 ++ dlls/ddraw/tests/ddraw7.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 4841a4f0b8a..48a49815c58 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -3784,6 +3784,8 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw2_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); + flush_events(); /* flush any pending window resize X11 event */ + /* If the window is changed at the same time, messages are sent to the new window. */ hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#lx.\n", hr); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 00b5d27f55c..8abd9cd44fd 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -4020,6 +4020,8 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw4_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); + flush_events(); /* flush any pending window resize X11 event */ + /* If the window is changed at the same time, messages are sent to the new window. */ hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#lx.\n", hr); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 39be7a1b1e8..3e03d3e4dd6 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -3792,6 +3792,8 @@ static void test_coop_level_mode_set(void) hr = IDirectDraw7_RestoreDisplayMode(ddraw); ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#lx.\n", hr); + flush_events(); /* flush any pending window resize X11 event */ + /* If the window is changed at the same time, messages are sent to the new window. */ hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#lx.\n", hr);
1
0
0
0
Rémi Bernon : ddraw/tests: Make sure the window is restored after some minimize tests.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: f5ee314270d7bc0b476b3c64840b52bcc1853a13 URL:
https://gitlab.winehq.org/wine/wine/-/commit/f5ee314270d7bc0b476b3c64840b52…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Jul 3 12:06:02 2024 +0200 ddraw/tests: Make sure the window is restored after some minimize tests. We may receive ConfigureNotify for the minimization late, overriding the restore request, and ending with a minimized window for the rest of the test. --- dlls/ddraw/tests/ddraw2.c | 7 +++++++ dlls/ddraw/tests/ddraw4.c | 7 +++++++ dlls/ddraw/tests/ddraw7.c | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 66fceafbc8d..4841a4f0b8a 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -3344,6 +3344,13 @@ static void test_coop_level_mode_set(void) /* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#lx.\n", change_ret); + flush_events(); + + if (IsIconic(window)) /* make sure the window is restored, working around some Wine/X11 race condition */ + { + ShowWindow(window, SW_RESTORE); + flush_events(); + } memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index a952eb683a5..00b5d27f55c 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -3587,6 +3587,13 @@ static void test_coop_level_mode_set(void) /* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#lx.\n", change_ret); + flush_events(); + + if (IsIconic(window)) /* make sure the window is restored, working around some Wine/X11 race condition */ + { + ShowWindow(window, SW_RESTORE); + flush_events(); + } memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 04fe5a2049b..39be7a1b1e8 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -3359,6 +3359,13 @@ static void test_coop_level_mode_set(void) /* For Wine. */ change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#lx.\n", change_ret); + flush_events(); + + if (IsIconic(window)) /* make sure the window is restored, working around some Wine/X11 race condition */ + { + ShowWindow(window, SW_RESTORE); + flush_events(); + } memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd);
1
0
0
0
Hans Leidekker : odbc32/tests: Add tests.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: 5a4597163a887d68972377d893f0a93208fad0b8 URL:
https://gitlab.winehq.org/wine/wine/-/commit/5a4597163a887d68972377d893f0a9…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Fri Jul 5 17:22:54 2024 +0200 odbc32/tests: Add tests. --- dlls/odbc32/tests/odbc32.c | 129 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 114 insertions(+), 15 deletions(-) diff --git a/dlls/odbc32/tests/odbc32.c b/dlls/odbc32/tests/odbc32.c index 5a3b0c6f817..40ca97eca3c 100644 --- a/dlls/odbc32/tests/odbc32.c +++ b/dlls/odbc32/tests/odbc32.c @@ -55,6 +55,7 @@ static void test_SQLAllocHandle( void ) ok( ret == SQL_SUCCESS, "got %d\n", ret ); ret = SQLFreeConnect( 0 ); ok( ret == SQL_INVALID_HANDLE, "got %d\n", ret ); + ret = SQLFreeEnv( env ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); ret = SQLFreeEnv( 0 ); @@ -68,12 +69,12 @@ static void diag( SQLHANDLE handle, SQLSMALLINT type ) SQLCHAR state[5], msg[256]; SQLRETURN ret; - memset( state, 0, sizeof(state) ); + state[0] = 0; + msg[0] = 0; err = -1; len = 0; ret = SQLGetDiagRec( type, handle, 1, state, &err, msg, sizeof(msg), &len ); - ok( ret == SQL_SUCCESS, "got %d\n", ret ); - trace( "state %s, err %d, msg %s len %d\n", state, err, msg, len ); + if (ret == SQL_SUCCESS) trace( "state '%s' err %d msg '%s' len %d\n", state, err, msg, len ); } static void test_SQLConnect( void ) @@ -101,7 +102,7 @@ static void test_SQLConnect( void ) ret = SQLAllocConnect( env, &con ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); - ret = SQLConnect( con, (SQLCHAR *)"winetest", 8, NULL, 0, NULL, 0 ); + ret = SQLConnect( con, (SQLCHAR *)"winetest", 8, (SQLCHAR *)"winetest", 8, (SQLCHAR *)"winetest", 8 ); if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); if (ret != SQL_SUCCESS) { @@ -121,10 +122,84 @@ static void test_SQLConnect( void ) len = -1; memset( str, 0, sizeof(str) ); ret = SQLGetInfo( con, SQL_ODBC_VER, str, sizeof(str), &len ); + if (ret == SQL_SUCCESS) + { + ok( str[0], "empty string\n" ); + ok( len != -1, "len not set\n" ); + trace( "version %s\n", str ); + } + + ret = SQLDisconnect( con ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + ret = SQLFreeConnect( con ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + ret = SQLFreeEnv( env ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); +} + +static void test_SQLDriverConnect( void ) +{ + SQLHENV env; + SQLHDBC con; + SQLRETURN ret; + SQLSMALLINT len; + SQLCHAR str[256]; + + ret = SQLAllocEnv( &env ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + ret = SQLAllocConnect( env, &con ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + len = 0; + str[0] = 0; + ret = SQLDriverConnect( con, NULL, (SQLCHAR *)"DSN=winetest", strlen("DSN=winetest"), str, sizeof(str), &len, 0 ); + if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); + if (ret != SQL_SUCCESS) + { + SQLFreeConnect( con ); + SQLFreeEnv( env ); + skip( "data source winetest not available\n" ); + return; + } + + ret = SQLDisconnect( con ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + ret = SQLFreeConnect( con ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); - ok( str[0], "empty string\n" ); - ok( len != -1, "len not set\n" ); - trace( "version %s\n", str ); + + ret = SQLFreeEnv( env ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); +} + +static void test_SQLBrowseConnect( void ) +{ + SQLHENV env; + SQLHDBC con; + SQLRETURN ret; + SQLSMALLINT len; + SQLCHAR str[256]; + + ret = SQLAllocEnv( &env ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + ret = SQLAllocConnect( env, &con ); + ok( ret == SQL_SUCCESS, "got %d\n", ret ); + + len = 0; + str[0] = 0; + ret = SQLBrowseConnect( con, (SQLCHAR *)"DSN=winetest", 12, str, sizeof(str), &len ); + if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); + if (ret != SQL_SUCCESS) + { + SQLFreeConnect( con ); + SQLFreeEnv( env ); + skip( "data source winetest not available\n" ); + return; + } ret = SQLDisconnect( con ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); @@ -151,13 +226,19 @@ static void test_SQLDataSources( void ) memset( desc, 0, sizeof(desc) ); ret = SQLDataSources( env, SQL_FETCH_FIRST, server, sizeof(server), &len, desc, sizeof(desc), &len2 ); ok( ret == SQL_SUCCESS || ret == SQL_NO_DATA, "got %d\n", ret ); - if (ret == SQL_SUCCESS) + while (ret == SQL_SUCCESS) { - ok( len, "unexpected len\n" ); - ok( len2, "unexpected len\n" ); + ok( len == strlen((const char *)server), "unexpected len\n" ); + ok( len2 == strlen((const char *)desc), "unexpected len\n" ); ok( server[0], "empty string\n" ); ok( desc[0], "empty string\n" ); trace( "server %s len %d desc %s len %d\n", server, len, desc, len2 ); + + len = len2 = -1; + memset( server, 0, sizeof(server) ); + memset( desc, 0, sizeof(desc) ); + ret = SQLDataSources( env, SQL_FETCH_NEXT, server, sizeof(server), &len, desc, sizeof(desc), &len2 ); + ok( ret == SQL_SUCCESS || ret == SQL_NO_DATA, "got %d\n", ret ); } ret = SQLFreeEnv( env ); @@ -179,12 +260,25 @@ static void test_SQLDrivers( void ) memset( attrs, 0, sizeof(attrs) ); ret = SQLDrivers( env, SQL_FETCH_FIRST, desc, sizeof(desc), &len, attrs, sizeof(attrs), &len2 ); ok( ret == SQL_SUCCESS || ret == SQL_NO_DATA, "got %d\n", ret ); - if (ret == SQL_SUCCESS) + while (ret == SQL_SUCCESS) { - ok( len, "unexpected len\n" ); - ok( len2, "unexpected len\n" ); + SQLCHAR *ptr; + + trace( "desc %s len %d len2 %d\n", desc, len, len2 ); + ok( len == strlen((const char *)desc), "unexpected len %u\n", len ); ok( desc[0], "empty string\n" ); - trace( "desc %s len %d\n", desc, len ); + ptr = attrs; + while (*ptr) + { + trace( " attr %s\n", ptr ); + ptr += strlen( (const char *)ptr ) + 1; + } + + len = len2 = 0; + memset( desc, 0, sizeof(desc) ); + memset( attrs, 0, sizeof(attrs) ); + ret = SQLDrivers( env, SQL_FETCH_NEXT, desc, sizeof(desc), &len, attrs, sizeof(attrs), &len2 ); + ok( ret == SQL_SUCCESS || ret == SQL_NO_DATA, "got %d\n", ret ); } ret = SQLFreeEnv( env ); @@ -208,7 +302,8 @@ static void test_SQLExecDirect( void ) ret = SQLAllocConnect( env, &con ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); - ret = SQLConnect( con, (SQLCHAR *)"winetest", 8, NULL, 0, NULL, 0 ); + ret = SQLConnect( con, (SQLCHAR *)"winetest", 8, (SQLCHAR *)"winetest", 8, (SQLCHAR *)"winetest", 8 ); + if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); if (ret != SQL_SUCCESS) { SQLFreeConnect( con ); @@ -221,9 +316,11 @@ static void test_SQLExecDirect( void ) ret = SQLAllocStmt( con, &stmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); + SQLExecDirect( stmt, (SQLCHAR *)"USE winetest", ARRAYSIZE("USE winetest") - 1 ); SQLExecDirect( stmt, (SQLCHAR *)"DROP TABLE winetest", ARRAYSIZE("DROP TABLE winetest") - 1 ); ret = SQLExecDirect( stmt, (SQLCHAR *)"CREATE TABLE winetest ( Id int, Name varchar(255) )", ARRAYSIZE("CREATE TABLE winetest ( Id int, Name varchar(255) )") - 1 ); + if (ret == SQL_ERROR) diag( stmt, SQL_HANDLE_STMT ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); if (ret == SQL_ERROR) diag( stmt, SQL_HANDLE_STMT ); @@ -361,6 +458,8 @@ START_TEST(odbc32) { test_SQLAllocHandle(); test_SQLConnect(); + test_SQLDriverConnect(); + test_SQLBrowseConnect(); test_SQLDataSources(); test_SQLDrivers(); test_SQLExecDirect();
1
0
0
0
Hans Leidekker : odbc32: Forward the remaining functions to the Windows driver.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: a312fad7b53590360fb356a4d2bab115aafe2dd0 URL:
https://gitlab.winehq.org/wine/wine/-/commit/a312fad7b53590360fb356a4d2bab1…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Fri Jul 5 17:21:22 2024 +0200 odbc32: Forward the remaining functions to the Windows driver. --- dlls/odbc32/proxyodbc.c | 767 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 571 insertions(+), 196 deletions(-)
1
0
0
0
Hans Leidekker : odbc32: Forward yet more functions to the Windows driver.
by Alexandre Julliard
09 Jul '24
09 Jul '24
Module: wine Branch: master Commit: a39f26d52ad3892aede6caeec0d7ac8407863a71 URL:
https://gitlab.winehq.org/wine/wine/-/commit/a39f26d52ad3892aede6caeec0d7ac…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Fri Jul 5 17:19:59 2024 +0200 odbc32: Forward yet more functions to the Windows driver. --- dlls/odbc32/proxyodbc.c | 991 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 736 insertions(+), 255 deletions(-)
1
0
0
0
← Newer
1
...
25
26
27
28
29
30
31
...
52
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Results per page:
10
25
50
100
200