Module: wine Branch: master Commit: 4fdcdefccf5b7df13b9ee1b7460ceff452f074f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4fdcdefccf5b7df13b9ee1b746...
Author: Eric Pouech eric.pouech@orange.fr Date: Mon Aug 30 22:19:00 2010 +0200
server: Report in get_console_mode request whether it's a bare console or not.
---
include/wine/server_protocol.h | 4 ++-- server/console.c | 15 +++++++++++++-- server/protocol.def | 1 + server/request.h | 1 + server/trace.c | 1 + 5 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 77c13e8..6a9c1de 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -1548,7 +1548,7 @@ struct get_console_mode_reply { struct reply_header __header; int mode; - char __pad_12[4]; + int is_bare; };
@@ -5506,6 +5506,6 @@ union generic_reply struct set_cursor_reply set_cursor_reply; };
-#define SERVER_PROTOCOL_VERSION 406 +#define SERVER_PROTOCOL_VERSION 407
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/console.c b/server/console.c index 905cc50..1fbf736 100644 --- a/server/console.c +++ b/server/console.c @@ -188,6 +188,11 @@ static struct list screen_buffer_list = LIST_INIT(screen_buffer_list);
static const char_info_t empty_char_info = { ' ', 0x000f }; /* white on black space */
+static int console_input_is_bare( struct console_input* cin ) +{ + return cin->evt == NULL; +} + static struct fd *console_input_get_fd( struct object* obj ) { struct console_input *console_input = (struct console_input*)obj; @@ -582,7 +587,7 @@ static void propagate_console_signal( struct console_input *console, enum_processes(propagate_console_signal_cb, &csi); }
-static int get_console_mode( obj_handle_t handle ) +static int get_console_mode( obj_handle_t handle, int *bare ) { struct object *obj; int ret = 0; @@ -590,9 +595,15 @@ static int get_console_mode( obj_handle_t handle ) if ((obj = get_handle_obj( current->process, handle, FILE_READ_PROPERTIES, NULL ))) { if (obj->ops == &console_input_ops) + { ret = ((struct console_input *)obj)->mode; + *bare = console_input_is_bare((struct console_input *)obj); + } else if (obj->ops == &screen_buffer_ops) + { ret = ((struct screen_buffer *)obj)->mode; + *bare = console_input_is_bare(((struct screen_buffer *)obj)->input); + } else set_error( STATUS_OBJECT_TYPE_MISMATCH ); release_object( obj ); @@ -1542,7 +1553,7 @@ DECL_HANDLER(get_console_input_info) /* get a console mode (input or output) */ DECL_HANDLER(get_console_mode) { - reply->mode = get_console_mode( req->handle ); + reply->mode = get_console_mode( req->handle, &reply->is_bare ); }
/* set a console mode (input or output) */ diff --git a/server/protocol.def b/server/protocol.def index ceebba1..c3d2c1d 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1224,6 +1224,7 @@ struct console_renderer_event obj_handle_t handle; /* handle to the console */ @REPLY int mode; /* console mode */ + int is_bare; /* whether the console has an evt_queue */ @END
diff --git a/server/request.h b/server/request.h index b16dbe9..cb3f2d9 100644 --- a/server/request.h +++ b/server/request.h @@ -976,6 +976,7 @@ C_ASSERT( sizeof(struct get_console_wait_event_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_console_mode_request, handle) == 12 ); C_ASSERT( sizeof(struct get_console_mode_request) == 16 ); C_ASSERT( FIELD_OFFSET(struct get_console_mode_reply, mode) == 8 ); +C_ASSERT( FIELD_OFFSET(struct get_console_mode_reply, is_bare) == 12 ); C_ASSERT( sizeof(struct get_console_mode_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct set_console_mode_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct set_console_mode_request, mode) == 16 ); diff --git a/server/trace.c b/server/trace.c index c7c12f6..408fe14 100644 --- a/server/trace.c +++ b/server/trace.c @@ -1641,6 +1641,7 @@ static void dump_get_console_mode_request( const struct get_console_mode_request static void dump_get_console_mode_reply( const struct get_console_mode_reply *req ) { fprintf( stderr, " mode=%d", req->mode ); + fprintf( stderr, ", is_bare=%d", req->is_bare ); }
static void dump_set_console_mode_request( const struct set_console_mode_request *req )