commit c671c49

shar  ·  2026-05-18 03:02:16 +0000 UTC
parent 98120f8
feat: add unregister binding function
2 files changed,  +38, -1
+29, -0
 1@@ -260,6 +260,35 @@ swc_add_binding(enum swc_binding_type type, uint32_t modifiers, uint32_t value,
 2 	return 0;
 3 }
 4 
 5+EXPORT void
 6+swc_remove_binding(enum swc_binding_type type, uint32_t modifiers,
 7+                   uint32_t value)
 8+{
 9+	struct wl_array *bindings;
10+	switch (type) {
11+	case SWC_BINDING_KEY:
12+		bindings = &key_bindings;
13+		break;
14+	case SWC_BINDING_BUTTON:
15+		bindings = &button_bindings;
16+		break;
17+	default:
18+		return;
19+	}
20+
21+	struct binding *b = find_binding(bindings, modifiers, value);
22+	if (!b) {
23+		return;
24+	}
25+
26+	struct binding *last = (struct binding *)((char *)bindings->data +
27+	                                          bindings->size - sizeof(*b));
28+	if (b != last) {
29+		*b = *last;
30+	}
31+	bindings->size -= sizeof(*b);
32+}
33+
34 EXPORT int
35 swc_add_axis_binding(uint32_t modifiers, uint32_t axis,
36                      swc_axis_binding_handler handler, void *data)
+9, -1
 1@@ -475,7 +475,7 @@ struct swc_decor_parts {
 2 /**
 3  * Describe decor around a window's edges.
 4  *
 5- * The edge sizes extend outward from the window content geometry. 
 6+ * The edge sizes extend outward from the window content geometry.
 7  * if you put 0 it won't be visible.
 8  *
 9  * The title field controls an optional text slot rendered on one edge.
10@@ -580,6 +580,14 @@ int
11 swc_add_binding(enum swc_binding_type type, uint32_t modifiers, uint32_t value,
12                 swc_binding_handler handler, void *data);
13 
14+/**
15+ * Unregister a registered input binding.
16+ *
17+ */
18+void
19+swc_remove_binding(enum swc_binding_type type, uint32_t modifiers,
20+                   uint32_t value);
21+
22 /**
23  * register a new pointer axis binding
24  *