commit f25627d

Michael Forney  ·  2013-09-13 00:48:20 +0000 UTC
parent d44b1fe
seat: Always initialize keyboard and pointer
1 files changed,  +23, -24
+23, -24
 1@@ -315,28 +315,12 @@ static void add_device(struct swc_seat * seat, struct udev_device * udev_device)
 2 
 3     wl_signal_add(&entry->device.event_signal, &entry->event_listener);
 4 
 5-    if (!(seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
 6-        && entry->device.capabilities & WL_SEAT_CAPABILITY_POINTER)
 7+    if (~seat->capabilities & entry->device.capabilities)
 8     {
 9-        printf("initializing pointer\n");
10-        swc_pointer_initialize(&seat->pointer);
11-        seat->capabilities |= WL_SEAT_CAPABILITY_POINTER;
12+        seat->capabilities |= entry->device.capabilities;
13         update_capabilities(seat);
14     }
15 
16-    if (!(seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
17-        && entry->device.capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
18-    {
19-        printf("initializing keyboard\n");
20-        swc_keyboard_initialize(&seat->keyboard);
21-        wl_signal_add(&seat->keyboard.focus.event_signal,
22-                      &seat->keyboard_focus_listener);
23-        seat->capabilities |= WL_SEAT_CAPABILITY_KEYBOARD;
24-        update_capabilities(seat);
25-    }
26-
27-    seat->capabilities |= entry->device.capabilities;
28-
29     wl_list_insert(&seat->devices, &entry->link);
30 }
31 
32@@ -360,6 +344,21 @@ bool swc_seat_initialize(struct swc_seat * seat, struct udev * udev,
33         goto error_xkb;
34     }
35 
36+    if (!swc_keyboard_initialize(&seat->keyboard))
37+    {
38+        printf("could not initialize keyboard\n");
39+        goto error_data_device;
40+    }
41+
42+    wl_signal_add(&seat->keyboard.focus.event_signal,
43+                  &seat->keyboard_focus_listener);
44+
45+    if (!swc_pointer_initialize(&seat->pointer))
46+    {
47+        printf("could not initialize pointer\n");
48+        goto error_keyboard;
49+    }
50+
51     wl_signal_add(&seat->data_device.event_signal, &seat->data_device_listener);
52 
53     wl_list_init(&seat->resources);
54@@ -370,6 +369,10 @@ bool swc_seat_initialize(struct swc_seat * seat, struct udev * udev,
55 
56     return true;
57 
58+  error_keyboard:
59+    swc_keyboard_finish(&seat->keyboard);
60+  error_data_device:
61+    swc_data_device_finish(&seat->data_device);
62   error_xkb:
63     swc_xkb_finish(&seat->xkb);
64   error_name:
65@@ -384,12 +387,8 @@ void swc_seat_finish(struct swc_seat * seat)
66 
67     wl_signal_emit(&seat->destroy_signal, seat);
68 
69-    if (seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
70-        swc_keyboard_finish(&seat->keyboard);
71-
72-    if (seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
73-        swc_pointer_finish(&seat->pointer);
74-
75+    swc_pointer_finish(&seat->pointer);
76+    swc_keyboard_finish(&seat->keyboard);
77     swc_xkb_finish(&seat->xkb);
78 
79     free(seat->name);