Added requests to store window rectangles in the server.
This commit is contained in:
parent
b662e11a00
commit
0d50965a13
|
@ -140,6 +140,15 @@ typedef struct
|
||||||
} property_data_t;
|
} property_data_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int left;
|
||||||
|
int top;
|
||||||
|
int right;
|
||||||
|
int bottom;
|
||||||
|
} rectangle_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1652,6 +1661,36 @@ struct get_window_tree_request
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct set_window_rectangles_request
|
||||||
|
{
|
||||||
|
struct request_header __header;
|
||||||
|
user_handle_t handle;
|
||||||
|
rectangle_t window;
|
||||||
|
rectangle_t client;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct get_window_rectangles_request
|
||||||
|
{
|
||||||
|
struct request_header __header;
|
||||||
|
user_handle_t handle;
|
||||||
|
rectangle_t window;
|
||||||
|
rectangle_t client;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct get_windows_offset_request
|
||||||
|
{
|
||||||
|
struct request_header __header;
|
||||||
|
user_handle_t from;
|
||||||
|
user_handle_t to;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct set_window_property_request
|
struct set_window_property_request
|
||||||
{
|
{
|
||||||
|
@ -1823,6 +1862,9 @@ enum request
|
||||||
REQ_get_window_parents,
|
REQ_get_window_parents,
|
||||||
REQ_get_window_children,
|
REQ_get_window_children,
|
||||||
REQ_get_window_tree,
|
REQ_get_window_tree,
|
||||||
|
REQ_set_window_rectangles,
|
||||||
|
REQ_get_window_rectangles,
|
||||||
|
REQ_get_windows_offset,
|
||||||
REQ_set_window_property,
|
REQ_set_window_property,
|
||||||
REQ_remove_window_property,
|
REQ_remove_window_property,
|
||||||
REQ_get_window_property,
|
REQ_get_window_property,
|
||||||
|
@ -1963,12 +2005,15 @@ union generic_request
|
||||||
struct get_window_parents_request get_window_parents;
|
struct get_window_parents_request get_window_parents;
|
||||||
struct get_window_children_request get_window_children;
|
struct get_window_children_request get_window_children;
|
||||||
struct get_window_tree_request get_window_tree;
|
struct get_window_tree_request get_window_tree;
|
||||||
|
struct set_window_rectangles_request set_window_rectangles;
|
||||||
|
struct get_window_rectangles_request get_window_rectangles;
|
||||||
|
struct get_windows_offset_request get_windows_offset;
|
||||||
struct set_window_property_request set_window_property;
|
struct set_window_property_request set_window_property;
|
||||||
struct remove_window_property_request remove_window_property;
|
struct remove_window_property_request remove_window_property;
|
||||||
struct get_window_property_request get_window_property;
|
struct get_window_property_request get_window_property;
|
||||||
struct get_window_properties_request get_window_properties;
|
struct get_window_properties_request get_window_properties;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SERVER_PROTOCOL_VERSION 59
|
#define SERVER_PROTOCOL_VERSION 60
|
||||||
|
|
||||||
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
|
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
|
||||||
|
|
|
@ -141,6 +141,15 @@ typedef struct
|
||||||
handle_t handle; /* handle stored in property */
|
handle_t handle; /* handle stored in property */
|
||||||
} property_data_t;
|
} property_data_t;
|
||||||
|
|
||||||
|
/* structure to specify window rectangles */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int left;
|
||||||
|
int top;
|
||||||
|
int right;
|
||||||
|
int bottom;
|
||||||
|
} rectangle_t;
|
||||||
|
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
/* Request declarations */
|
/* Request declarations */
|
||||||
|
|
||||||
|
@ -1478,6 +1487,32 @@ enum message_type
|
||||||
user_handle_t last_child; /* last child */
|
user_handle_t last_child; /* last child */
|
||||||
@END
|
@END
|
||||||
|
|
||||||
|
/* Set the window and client rectangles of a window */
|
||||||
|
@REQ(set_window_rectangles)
|
||||||
|
user_handle_t handle; /* handle to the window */
|
||||||
|
rectangle_t window; /* window rectangle */
|
||||||
|
rectangle_t client; /* client rectangle */
|
||||||
|
@END
|
||||||
|
|
||||||
|
|
||||||
|
/* Get the window and client rectangles of a window */
|
||||||
|
@REQ(get_window_rectangles)
|
||||||
|
user_handle_t handle; /* handle to the window */
|
||||||
|
@REPLY
|
||||||
|
rectangle_t window; /* window rectangle */
|
||||||
|
rectangle_t client; /* client rectangle */
|
||||||
|
@END
|
||||||
|
|
||||||
|
|
||||||
|
/* Get the coordinates offset between two windows */
|
||||||
|
@REQ(get_windows_offset)
|
||||||
|
user_handle_t from; /* handle to the first window */
|
||||||
|
user_handle_t to; /* handle to the second window */
|
||||||
|
@REPLY
|
||||||
|
int x; /* x coordinate offset */
|
||||||
|
int y; /* y coordinate offset */
|
||||||
|
@END
|
||||||
|
|
||||||
|
|
||||||
/* Set a window property */
|
/* Set a window property */
|
||||||
@REQ(set_window_property)
|
@REQ(set_window_property)
|
||||||
|
|
|
@ -194,6 +194,9 @@ DECL_HANDLER(get_window_info);
|
||||||
DECL_HANDLER(get_window_parents);
|
DECL_HANDLER(get_window_parents);
|
||||||
DECL_HANDLER(get_window_children);
|
DECL_HANDLER(get_window_children);
|
||||||
DECL_HANDLER(get_window_tree);
|
DECL_HANDLER(get_window_tree);
|
||||||
|
DECL_HANDLER(set_window_rectangles);
|
||||||
|
DECL_HANDLER(get_window_rectangles);
|
||||||
|
DECL_HANDLER(get_windows_offset);
|
||||||
DECL_HANDLER(set_window_property);
|
DECL_HANDLER(set_window_property);
|
||||||
DECL_HANDLER(remove_window_property);
|
DECL_HANDLER(remove_window_property);
|
||||||
DECL_HANDLER(get_window_property);
|
DECL_HANDLER(get_window_property);
|
||||||
|
@ -333,6 +336,9 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
|
||||||
(req_handler)req_get_window_parents,
|
(req_handler)req_get_window_parents,
|
||||||
(req_handler)req_get_window_children,
|
(req_handler)req_get_window_children,
|
||||||
(req_handler)req_get_window_tree,
|
(req_handler)req_get_window_tree,
|
||||||
|
(req_handler)req_set_window_rectangles,
|
||||||
|
(req_handler)req_get_window_rectangles,
|
||||||
|
(req_handler)req_get_windows_offset,
|
||||||
(req_handler)req_set_window_property,
|
(req_handler)req_set_window_property,
|
||||||
(req_handler)req_remove_window_property,
|
(req_handler)req_remove_window_property,
|
||||||
(req_handler)req_get_window_property,
|
(req_handler)req_get_window_property,
|
||||||
|
|
|
@ -43,6 +43,12 @@ static void dump_uints( const int *ptr, int len )
|
||||||
fputc( '}', stderr );
|
fputc( '}', stderr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dump_rectangle( const void *req, const rectangle_t *rect )
|
||||||
|
{
|
||||||
|
fprintf( stderr, "{%d,%d;%d,%d}",
|
||||||
|
rect->left, rect->top, rect->right, rect->bottom );
|
||||||
|
}
|
||||||
|
|
||||||
static void dump_context( const CONTEXT *context )
|
static void dump_context( const CONTEXT *context )
|
||||||
{
|
{
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
|
@ -1761,6 +1767,42 @@ static void dump_get_window_tree_reply( const struct get_window_tree_request *re
|
||||||
fprintf( stderr, " last_child=%08x", req->last_child );
|
fprintf( stderr, " last_child=%08x", req->last_child );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dump_set_window_rectangles_request( const struct set_window_rectangles_request *req )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " handle=%08x,", req->handle );
|
||||||
|
fprintf( stderr, " window=" );
|
||||||
|
dump_rectangle( req, &req->window );
|
||||||
|
fprintf( stderr, "," );
|
||||||
|
fprintf( stderr, " client=" );
|
||||||
|
dump_rectangle( req, &req->client );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dump_get_window_rectangles_request( const struct get_window_rectangles_request *req )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " handle=%08x", req->handle );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dump_get_window_rectangles_reply( const struct get_window_rectangles_request *req )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " window=" );
|
||||||
|
dump_rectangle( req, &req->window );
|
||||||
|
fprintf( stderr, "," );
|
||||||
|
fprintf( stderr, " client=" );
|
||||||
|
dump_rectangle( req, &req->client );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dump_get_windows_offset_request( const struct get_windows_offset_request *req )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " from=%08x,", req->from );
|
||||||
|
fprintf( stderr, " to=%08x", req->to );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dump_get_windows_offset_reply( const struct get_windows_offset_request *req )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " x=%d,", req->x );
|
||||||
|
fprintf( stderr, " y=%d", req->y );
|
||||||
|
}
|
||||||
|
|
||||||
static void dump_set_window_property_request( const struct set_window_property_request *req )
|
static void dump_set_window_property_request( const struct set_window_property_request *req )
|
||||||
{
|
{
|
||||||
fprintf( stderr, " window=%08x,", req->window );
|
fprintf( stderr, " window=%08x,", req->window );
|
||||||
|
@ -1932,6 +1974,9 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
|
||||||
(dump_func)dump_get_window_parents_request,
|
(dump_func)dump_get_window_parents_request,
|
||||||
(dump_func)dump_get_window_children_request,
|
(dump_func)dump_get_window_children_request,
|
||||||
(dump_func)dump_get_window_tree_request,
|
(dump_func)dump_get_window_tree_request,
|
||||||
|
(dump_func)dump_set_window_rectangles_request,
|
||||||
|
(dump_func)dump_get_window_rectangles_request,
|
||||||
|
(dump_func)dump_get_windows_offset_request,
|
||||||
(dump_func)dump_set_window_property_request,
|
(dump_func)dump_set_window_property_request,
|
||||||
(dump_func)dump_remove_window_property_request,
|
(dump_func)dump_remove_window_property_request,
|
||||||
(dump_func)dump_get_window_property_request,
|
(dump_func)dump_get_window_property_request,
|
||||||
|
@ -2069,6 +2114,9 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
|
||||||
(dump_func)dump_get_window_children_reply,
|
(dump_func)dump_get_window_children_reply,
|
||||||
(dump_func)dump_get_window_tree_reply,
|
(dump_func)dump_get_window_tree_reply,
|
||||||
(dump_func)0,
|
(dump_func)0,
|
||||||
|
(dump_func)dump_get_window_rectangles_reply,
|
||||||
|
(dump_func)dump_get_windows_offset_reply,
|
||||||
|
(dump_func)0,
|
||||||
(dump_func)dump_remove_window_property_reply,
|
(dump_func)dump_remove_window_property_reply,
|
||||||
(dump_func)dump_get_window_property_reply,
|
(dump_func)dump_get_window_property_reply,
|
||||||
(dump_func)dump_get_window_properties_reply,
|
(dump_func)dump_get_window_properties_reply,
|
||||||
|
@ -2204,6 +2252,9 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
|
||||||
"get_window_parents",
|
"get_window_parents",
|
||||||
"get_window_children",
|
"get_window_children",
|
||||||
"get_window_tree",
|
"get_window_tree",
|
||||||
|
"set_window_rectangles",
|
||||||
|
"get_window_rectangles",
|
||||||
|
"get_windows_offset",
|
||||||
"set_window_property",
|
"set_window_property",
|
||||||
"remove_window_property",
|
"remove_window_property",
|
||||||
"get_window_property",
|
"get_window_property",
|
||||||
|
|
|
@ -40,6 +40,8 @@ struct window
|
||||||
user_handle_t handle; /* full handle for this window */
|
user_handle_t handle; /* full handle for this window */
|
||||||
struct thread *thread; /* thread owning the window */
|
struct thread *thread; /* thread owning the window */
|
||||||
atom_t atom; /* class atom */
|
atom_t atom; /* class atom */
|
||||||
|
rectangle_t window_rect; /* window rectangle */
|
||||||
|
rectangle_t client_rect; /* client rectangle */
|
||||||
int prop_inuse; /* number of in-use window properties */
|
int prop_inuse; /* number of in-use window properties */
|
||||||
int prop_alloc; /* number of allocated window properties */
|
int prop_alloc; /* number of allocated window properties */
|
||||||
struct property *properties; /* window properties array */
|
struct property *properties; /* window properties array */
|
||||||
|
@ -476,6 +478,61 @@ DECL_HANDLER(get_window_tree)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* set the window and client rectangles of a window */
|
||||||
|
DECL_HANDLER(set_window_rectangles)
|
||||||
|
{
|
||||||
|
struct window *win = get_window( req->handle );
|
||||||
|
|
||||||
|
if (win)
|
||||||
|
{
|
||||||
|
win->window_rect = req->window;
|
||||||
|
win->client_rect = req->client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* get the window and client rectangles of a window */
|
||||||
|
DECL_HANDLER(get_window_rectangles)
|
||||||
|
{
|
||||||
|
struct window *win = get_window( req->handle );
|
||||||
|
|
||||||
|
if (win)
|
||||||
|
{
|
||||||
|
req->window = win->window_rect;
|
||||||
|
req->client = win->client_rect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* get the coordinates offset between two windows */
|
||||||
|
DECL_HANDLER(get_windows_offset)
|
||||||
|
{
|
||||||
|
struct window *win;
|
||||||
|
|
||||||
|
req->x = req->y = 0;
|
||||||
|
if (req->from)
|
||||||
|
{
|
||||||
|
if (!(win = get_window( req->from ))) return;
|
||||||
|
while (win)
|
||||||
|
{
|
||||||
|
req->x += win->client_rect.left;
|
||||||
|
req->y += win->client_rect.top;
|
||||||
|
win = win->parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (req->to)
|
||||||
|
{
|
||||||
|
if (!(win = get_window( req->to ))) return;
|
||||||
|
while (win)
|
||||||
|
{
|
||||||
|
req->x -= win->client_rect.left;
|
||||||
|
req->y -= win->client_rect.top;
|
||||||
|
win = win->parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* set a window property */
|
/* set a window property */
|
||||||
DECL_HANDLER(set_window_property)
|
DECL_HANDLER(set_window_property)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
"handle_t" => "%d",
|
"handle_t" => "%d",
|
||||||
"atom_t" => "%04x",
|
"atom_t" => "%04x",
|
||||||
"user_handle_t" => "%08x",
|
"user_handle_t" => "%08x",
|
||||||
|
"rectangle_t" => "&dump_rectangle",
|
||||||
);
|
);
|
||||||
|
|
||||||
my @requests = ();
|
my @requests = ();
|
||||||
|
|
Loading…
Reference in New Issue