Export the winstation and desktop structures to avoid having to write
too many accessor functions.
This commit is contained in:
parent
fc200d0ca7
commit
499e343d9f
|
@ -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 )
|
||||
{
|
||||
struct atom_table *global_table;
|
||||
|
||||
if (!(global_table = get_winstation_atom_table( winstation )))
|
||||
if (!winstation->atom_table)
|
||||
{
|
||||
if (create)
|
||||
{
|
||||
global_table = create_table( HASH_SIZE );
|
||||
if (global_table) set_winstation_atom_table( winstation, global_table );
|
||||
}
|
||||
if (create) winstation->atom_table = create_table( HASH_SIZE );
|
||||
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 )
|
||||
|
|
|
@ -80,7 +80,7 @@ static struct clipboard *get_process_clipboard(void)
|
|||
|
||||
if (!winstation) return NULL;
|
||||
|
||||
if (!(clipboard = get_winstation_clipboard( winstation )))
|
||||
if (!(clipboard = winstation->clipboard))
|
||||
{
|
||||
if ((clipboard = alloc_object( &clipboard_ops )))
|
||||
{
|
||||
|
@ -91,7 +91,7 @@ static struct clipboard *get_process_clipboard(void)
|
|||
clipboard->viewer = 0;
|
||||
clipboard->seqno = 0;
|
||||
clipboard->seqno_timestamp = 0;
|
||||
set_winstation_clipboard( winstation, clipboard );
|
||||
winstation->clipboard = clipboard;
|
||||
}
|
||||
}
|
||||
release_object( winstation );
|
||||
|
@ -107,7 +107,7 @@ void cleanup_clipboard_thread(struct thread *thread)
|
|||
|
||||
if (!winstation) return;
|
||||
|
||||
if ((clipboard = get_winstation_clipboard( winstation )))
|
||||
if ((clipboard = winstation->clipboard))
|
||||
{
|
||||
if (thread == clipboard->open_thread)
|
||||
{
|
||||
|
|
|
@ -40,6 +40,24 @@ enum user_object
|
|||
|
||||
#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 */
|
||||
|
||||
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 );
|
|||
/* windows station functions */
|
||||
|
||||
extern struct winstation *get_process_winstation( struct process *process, unsigned int access );
|
||||
extern void set_winstation_clipboard( struct winstation *winstation, struct clipboard *clipboard );
|
||||
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 struct desktop *get_thread_desktop( struct thread *thread, unsigned int access );
|
||||
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 close_thread_desktop( struct thread *thread );
|
||||
|
|
|
@ -35,23 +35,6 @@
|
|||
#include "user.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 winstation *interactive_winstation;
|
||||
|
@ -155,30 +138,6 @@ struct winstation *get_process_winstation( struct process *process, unsigned int
|
|||
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 */
|
||||
static WCHAR *build_desktop_name( const WCHAR *name, size_t len,
|
||||
struct winstation *winstation, size_t *res_len )
|
||||
|
@ -263,6 +222,12 @@ static void desktop_destroy( struct object *obj )
|
|||
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 */
|
||||
void connect_process_winstation( struct process *process, const WCHAR *name, size_t len )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue