compositor: Make click to activate behavior a binding

This commit is contained in:
Kristian Høgsberg 2011-12-19 14:54:11 -05:00
parent 42e40ae6dd
commit 5a5f0077be

View File

@ -1286,14 +1286,6 @@ notify_button(struct wl_input_device *device,
else
wlsc_compositor_idle_release(compositor);
if (state && surface && device->grab == NULL) {
compositor->shell->activate(compositor->shell,
surface, wd, time);
wl_input_device_start_grab(device,
&device->implicit_grab,
button, time);
}
wl_list_for_each(b, &compositor->binding_list, link) {
if (b->button == button &&
b->modifier == wd->modifier_state && state) {
@ -1303,6 +1295,12 @@ notify_button(struct wl_input_device *device,
}
}
if (state && surface && device->grab == NULL) {
wl_input_device_start_grab(device,
&device->implicit_grab,
button, time);
}
if (device->grab)
device->grab->interface->button(device->grab, time,
button, state);
@ -1326,6 +1324,21 @@ terminate_binding(struct wl_input_device *device, uint32_t time,
wl_display_terminate(compositor->wl_display);
}
static void
click_to_activate_binding(struct wl_input_device *device,
uint32_t time, uint32_t key,
uint32_t button, uint32_t state, void *data)
{
struct wlsc_input_device *wd = (struct wlsc_input_device *) device;
struct wlsc_compositor *compositor = data;
struct wlsc_surface *focus;
focus = (struct wlsc_surface *) device->pointer_focus;
if (state && focus && device->grab == NULL)
compositor->shell->activate(compositor->shell,
focus, wd, time);
}
WL_EXPORT struct wlsc_binding *
wlsc_compositor_add_binding(struct wlsc_compositor *compositor,
uint32_t key, uint32_t button, uint32_t modifier,
@ -1906,6 +1919,9 @@ wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display)
MODIFIER_CTRL | MODIFIER_ALT,
terminate_binding, ec);
wlsc_compositor_add_binding(ec, 0, BTN_LEFT, 0,
click_to_activate_binding, ec);
screenshooter_create(ec);
wlsc_data_device_manager_init(ec);