compositor: Consolidate code for finding and running bindings
diff --git a/compositor/compositor.c b/compositor/compositor.c
index befdbc7..1be2475 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -1270,13 +1270,30 @@
 	struct wl_list link;
 };
 
+static void
+wlsc_compositor_run_binding(struct wlsc_compositor *compositor,
+			    struct wlsc_input_device *device,
+			    uint32_t time,
+			    uint32_t key, uint32_t button, int32_t state)
+{
+	struct wlsc_binding *b;
+
+	wl_list_for_each(b, &compositor->binding_list, link) {
+		if (b->key == key && b->button == button &&
+		    b->modifier == device->modifier_state && state) {
+			b->handler(&device->input_device,
+				   time, key, button, state, b->data);
+			break;
+		}
+	}
+}
+
 WL_EXPORT void
 notify_button(struct wl_input_device *device,
 	      uint32_t time, int32_t button, int32_t state)
 {
 	struct wlsc_input_device *wd = (struct wlsc_input_device *) device;
 	struct wlsc_compositor *compositor = wd->compositor;
-	struct wlsc_binding *b;
 	struct wlsc_surface *surface =
 		(struct wlsc_surface *) device->pointer_focus;
 	int32_t sx, sy;
@@ -1286,14 +1303,7 @@
 	else
 		wlsc_compositor_idle_release(compositor);
 
-	wl_list_for_each(b, &compositor->binding_list, link) {
-		if (b->button == button &&
-		    b->modifier == wd->modifier_state && state) {
-			b->handler(&wd->input_device,
-				   time, 0, button, state, b->data);
-			break;
-		}
-	}
+	wlsc_compositor_run_binding(compositor, wd, time, 0, button, state);
 
 	if (state && surface && device->grab == NULL) {
 		wl_input_device_start_grab(device,
@@ -1407,21 +1417,13 @@
 	struct wlsc_input_device *wd = (struct wlsc_input_device *) device;
 	struct wlsc_compositor *compositor = wd->compositor;
 	uint32_t *k, *end;
-	struct wlsc_binding *b;
 
 	if (state)
 		wlsc_compositor_idle_inhibit(compositor);
 	else
 		wlsc_compositor_idle_release(compositor);
 
-	wl_list_for_each(b, &compositor->binding_list, link) {
-		if (b->key == key &&
-		    b->modifier == wd->modifier_state) {
-			b->handler(&wd->input_device,
-				   time, key, 0, state, b->data);
-			break;
-		}
-	}
+	wlsc_compositor_run_binding(compositor, wd, time, key, 0, state);
 
 	update_modifier_state(wd, key, state);
 	end = device->keys.data + device->keys.size;