Commit 499e343d authored by Alexandre Julliard's avatar Alexandre Julliard

Export the winstation and desktop structures to avoid having to write

too many accessor functions.
parent fc200d0c
...@@ -286,18 +286,12 @@ static atom_t find_atom( struct atom_table *table, const WCHAR *str, size_t len ...@@ -286,18 +286,12 @@ static atom_t find_atom( struct atom_table *table, const WCHAR *str, size_t len
static struct atom_table *get_global_table( struct winstation *winstation, int create ) static struct atom_table *get_global_table( struct winstation *winstation, int create )
{ {
struct atom_table *global_table; if (!winstation->atom_table)
if (!(global_table = get_winstation_atom_table( winstation )))
{ {
if (create) if (create) winstation->atom_table = create_table( HASH_SIZE );
{
global_table = create_table( HASH_SIZE );
if (global_table) set_winstation_atom_table( winstation, global_table );
}
else set_error( STATUS_OBJECT_NAME_NOT_FOUND ); else set_error( STATUS_OBJECT_NAME_NOT_FOUND );
} }
return global_table; return winstation->atom_table;
} }
static struct atom_table *get_table( obj_handle_t h, int create ) static struct atom_table *get_table( obj_handle_t h, int create )
......
...@@ -80,7 +80,7 @@ static struct clipboard *get_process_clipboard(void) ...@@ -80,7 +80,7 @@ static struct clipboard *get_process_clipboard(void)
if (!winstation) return NULL; if (!winstation) return NULL;
if (!(clipboard = get_winstation_clipboard( winstation ))) if (!(clipboard = winstation->clipboard))
{ {
if ((clipboard = alloc_object( &clipboard_ops ))) if ((clipboard = alloc_object( &clipboard_ops )))
{ {
...@@ -91,7 +91,7 @@ static struct clipboard *get_process_clipboard(void) ...@@ -91,7 +91,7 @@ static struct clipboard *get_process_clipboard(void)
clipboard->viewer = 0; clipboard->viewer = 0;
clipboard->seqno = 0; clipboard->seqno = 0;
clipboard->seqno_timestamp = 0; clipboard->seqno_timestamp = 0;
set_winstation_clipboard( winstation, clipboard ); winstation->clipboard = clipboard;
} }
} }
release_object( winstation ); release_object( winstation );
...@@ -107,7 +107,7 @@ void cleanup_clipboard_thread(struct thread *thread) ...@@ -107,7 +107,7 @@ void cleanup_clipboard_thread(struct thread *thread)
if (!winstation) return; if (!winstation) return;
if ((clipboard = get_winstation_clipboard( winstation ))) if ((clipboard = winstation->clipboard))
{ {
if (thread == clipboard->open_thread) if (thread == clipboard->open_thread)
{ {
......
...@@ -40,6 +40,24 @@ enum user_object ...@@ -40,6 +40,24 @@ enum user_object
#define DESKTOP_ATOM ((atom_t)32769) #define DESKTOP_ATOM ((atom_t)32769)
struct winstation
{
struct object obj; /* object header */
unsigned int flags; /* winstation flags */
struct list entry; /* entry in global winstation list */
struct list desktops; /* list of desktops of this winstation */
struct clipboard *clipboard; /* clipboard information */
struct atom_table *atom_table; /* global atom table */
};
struct desktop
{
struct object obj; /* object header */
unsigned int flags; /* desktop flags */
struct winstation *winstation; /* winstation this desktop belongs to */
struct list entry; /* entry in winstation list of desktops */
};
/* user handles functions */ /* user handles functions */
extern user_handle_t alloc_user_handle( void *ptr, enum user_object type ); extern user_handle_t alloc_user_handle( void *ptr, enum user_object type );
...@@ -125,10 +143,7 @@ extern void *get_class_client_ptr( struct window_class *class ); ...@@ -125,10 +143,7 @@ extern void *get_class_client_ptr( struct window_class *class );
/* windows station functions */ /* windows station functions */
extern struct winstation *get_process_winstation( struct process *process, unsigned int access ); extern struct winstation *get_process_winstation( struct process *process, unsigned int access );
extern void set_winstation_clipboard( struct winstation *winstation, struct clipboard *clipboard ); extern struct desktop *get_thread_desktop( struct thread *thread, unsigned int access );
extern void set_winstation_atom_table( struct winstation *winstation, struct atom_table *table );
extern struct clipboard *get_winstation_clipboard( struct winstation *winstation );
extern struct atom_table *get_winstation_atom_table( struct winstation *winstation );
extern void connect_process_winstation( struct process *process, const WCHAR *name, size_t len ); extern void connect_process_winstation( struct process *process, const WCHAR *name, size_t len );
extern void connect_process_desktop( struct process *process, const WCHAR *name, size_t len ); extern void connect_process_desktop( struct process *process, const WCHAR *name, size_t len );
extern void close_thread_desktop( struct thread *thread ); extern void close_thread_desktop( struct thread *thread );
......
...@@ -35,23 +35,6 @@ ...@@ -35,23 +35,6 @@
#include "user.h" #include "user.h"
#include "wine/unicode.h" #include "wine/unicode.h"
struct winstation
{
struct object obj; /* object header */
unsigned int flags; /* winstation flags */
struct list entry; /* entry in global winstation list */
struct list desktops; /* list of desktops of this winstation */
struct clipboard *clipboard; /* clipboard information */
struct atom_table *atom_table; /* global atom table */
};
struct desktop
{
struct object obj; /* object header */
unsigned int flags; /* desktop flags */
struct winstation *winstation; /* winstation this desktop belongs to */
struct list entry; /* entry in winstation list of desktops */
};
static struct list winstation_list = LIST_INIT(winstation_list); static struct list winstation_list = LIST_INIT(winstation_list);
static struct winstation *interactive_winstation; static struct winstation *interactive_winstation;
...@@ -155,30 +138,6 @@ struct winstation *get_process_winstation( struct process *process, unsigned int ...@@ -155,30 +138,6 @@ struct winstation *get_process_winstation( struct process *process, unsigned int
access, &winstation_ops ); access, &winstation_ops );
} }
/* set the pointer to the (opaque) clipboard info */
void set_winstation_clipboard( struct winstation *winstation, struct clipboard *clipboard )
{
winstation->clipboard = clipboard;
}
/* retrieve the pointer to the (opaque) clipboard info */
struct clipboard *get_winstation_clipboard( struct winstation *winstation )
{
return winstation->clipboard;
}
/* set the pointer to the (opaque) atom table */
void set_winstation_atom_table( struct winstation *winstation, struct atom_table *table )
{
winstation->atom_table = table;
}
/* retrieve the pointer to the (opaque) clipboard info */
struct atom_table *get_winstation_atom_table( struct winstation *winstation )
{
return winstation->atom_table;
}
/* build the full name of a desktop object */ /* build the full name of a desktop object */
static WCHAR *build_desktop_name( const WCHAR *name, size_t len, static WCHAR *build_desktop_name( const WCHAR *name, size_t len,
struct winstation *winstation, size_t *res_len ) struct winstation *winstation, size_t *res_len )
...@@ -263,6 +222,12 @@ static void desktop_destroy( struct object *obj ) ...@@ -263,6 +222,12 @@ static void desktop_destroy( struct object *obj )
release_object( desktop->winstation ); release_object( desktop->winstation );
} }
/* retrieve the thread desktop, checking the handle access rights */
struct desktop *get_thread_desktop( struct thread *thread, unsigned int access )
{
return get_desktop_obj( thread->process, thread->desktop, access );
}
/* connect a process to its window station */ /* connect a process to its window station */
void connect_process_winstation( struct process *process, const WCHAR *name, size_t len ) void connect_process_winstation( struct process *process, const WCHAR *name, size_t len )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment