From: Rémi Bernon rbernon@codeweavers.com
--- server/protocol.def | 2 ++ server/winstation.c | 12 ++++++++++++ 2 files changed, 14 insertions(+)
diff --git a/server/protocol.def b/server/protocol.def index edfdd9621ff..509d0c95aee 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2815,6 +2815,8 @@ enum coords_relative thread_id_t tid; /* thread id */ @REPLY obj_handle_t handle; /* handle to the desktop */ + int index; /* index of desktop object in session shared memory */ + object_id_t object_id; /* id of the session object */ @END
diff --git a/server/winstation.c b/server/winstation.c index 167ac8aeb62..df87de758c2 100644 --- a/server/winstation.c +++ b/server/winstation.c @@ -741,10 +741,22 @@ DECL_HANDLER(close_desktop) /* get the thread current desktop */ DECL_HANDLER(get_thread_desktop) { + struct desktop *desktop; struct thread *thread;
if (!(thread = get_thread_from_id( req->tid ))) return; reply->handle = thread->desktop; + reply->index = -1; + + if (!(desktop = get_thread_desktop( thread, 0 ))) clear_error(); + else + { + const desktop_shm_t *desktop_shm = get_shared_desktop( desktop->session_index ); + reply->index = desktop->session_index; + reply->object_id = desktop_shm->obj.id; + release_object( desktop ); + } + release_object( thread ); }