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>
dev
Ian Ray 7 years ago committed by Daniel Stone
parent 8564a0d109
commit 332d1892bb
  1. 34
      xwayland/window-manager.c

@ -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);
} }

Loading…
Cancel
Save