xwm: do not include shadow in input region
The window frame was created with position and size which include an offset for margins and shadow. Set the input region to ignore shadow. [daniels: Fixed type mismatch, removed unused variable.] Signed-off-by: Ian Ray <ian.ray@ge.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Tested-by: Scott Moreau <oreaus@gmail.com>
This commit is contained in:
@@ -641,6 +641,20 @@ weston_wm_window_get_child_position(struct weston_wm_window *window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
weston_wm_window_get_input_rect(struct weston_wm_window *window,
|
||||||
|
int32_t *x, int32_t *y,
|
||||||
|
int32_t *width, int32_t *height)
|
||||||
|
{
|
||||||
|
if (!window->decorate) {
|
||||||
|
weston_wm_window_get_child_position(window, x, y);
|
||||||
|
*width = window->width;
|
||||||
|
*height = window->height;
|
||||||
|
} else {
|
||||||
|
frame_input_rect(window->frame, x, y, width, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
weston_wm_window_send_configure_notify(struct weston_wm_window *window)
|
weston_wm_window_send_configure_notify(struct weston_wm_window *window)
|
||||||
{
|
{
|
||||||
@@ -966,6 +980,7 @@ weston_wm_window_create_frame(struct weston_wm_window *window)
|
|||||||
{
|
{
|
||||||
struct weston_wm *wm = window->wm;
|
struct weston_wm *wm = window->wm;
|
||||||
uint32_t values[3];
|
uint32_t values[3];
|
||||||
|
xcb_rectangle_t rect;
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
int buttons = FRAME_BUTTON_CLOSE;
|
int buttons = FRAME_BUTTON_CLOSE;
|
||||||
|
|
||||||
@@ -1020,6 +1035,25 @@ weston_wm_window_create_frame(struct weston_wm_window *window)
|
|||||||
&wm->format_rgba,
|
&wm->format_rgba,
|
||||||
width, height);
|
width, height);
|
||||||
|
|
||||||
|
weston_wm_window_get_input_rect(window, &x, &y, &width, &height);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = width;
|
||||||
|
rect.height = height;
|
||||||
|
|
||||||
|
/* The window frame was created with position and size which include
|
||||||
|
* an offset for margins and shadow. Set the input region to ignore
|
||||||
|
* shadow. */
|
||||||
|
xcb_shape_rectangles(wm->conn,
|
||||||
|
XCB_SHAPE_SO_SET,
|
||||||
|
XCB_SHAPE_SK_INPUT,
|
||||||
|
0,
|
||||||
|
window->frame_id,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
&rect);
|
||||||
|
|
||||||
hash_table_insert(wm->window_hash, window->frame_id, window);
|
hash_table_insert(wm->window_hash, window->frame_id, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user