ratbagd: change the key action types to enums

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Peter Hutterer
2017-07-25 13:37:41 +10:00
committed by Benjamin Tissoires
parent 67e1c8667b
commit 96067f18ca
5 changed files with 42 additions and 59 deletions

View File

@@ -236,15 +236,15 @@ String of the current special mapping (if mapped to special)
Array of uints, first entry is the keycode, other entries, if any, are
modifiers (if mapped to key)
#### `ActionType`
- type: `s`, read-only, mutable
String describing the action type of the button ("none", "button", "key",
"special", "macro", "unknown"). This decides which Mapping property has a
value
- type: `u`, read-only, mutable
An enum describing the action type of the button, see
ratbag\_button\_get\_action\_type for the list of enums.
This decides which *Mapping* property has a value.
#### `ActionTypes`
- type: `as`, read-only, constant
Array of strings, possible values for ActionType
- type: `au`, read-only, constant
Array of enum ratbag\_button\_action\_type, possible values for ActionType
on the current device
### Methods:
#### `SetButtonMapping(u) → ()`

View File

@@ -412,30 +412,11 @@ static int ratbagd_button_get_action_type(sd_bus *bus,
sd_bus_error *error)
{
struct ratbagd_button *button = userdata;
const char *type;
enum ratbag_button_action_type type;
switch (ratbag_button_get_action_type(button->lib_button)) {
case RATBAG_BUTTON_ACTION_TYPE_NONE:
type = "none";
break;
case RATBAG_BUTTON_ACTION_TYPE_BUTTON:
type = "button";
break;
case RATBAG_BUTTON_ACTION_TYPE_KEY:
type = "key";
break;
case RATBAG_BUTTON_ACTION_TYPE_SPECIAL:
type = "special";
break;
case RATBAG_BUTTON_ACTION_TYPE_MACRO:
type = "macro";
break;
case RATBAG_BUTTON_ACTION_TYPE_UNKNOWN:
type = "unknown";
break;
}
type = ratbag_button_get_action_type(button->lib_button);
return sd_bus_message_append(reply, "s", type);
return sd_bus_message_append(reply, "u", type);
}
static int ratbagd_button_get_action_types(sd_bus *bus,
@@ -447,34 +428,27 @@ static int ratbagd_button_get_action_types(sd_bus *bus,
sd_bus_error *error)
{
struct ratbagd_button *button = userdata;
const char *types[5] = {NULL};
const char **t;
int idx = 0;
int r;
enum ratbag_button_action_type types[] = {
RATBAG_BUTTON_ACTION_TYPE_BUTTON,
RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
RATBAG_BUTTON_ACTION_TYPE_KEY,
RATBAG_BUTTON_ACTION_TYPE_MACRO
};
enum ratbag_button_action_type *t;
r = sd_bus_message_open_container(reply, 'a', "s");
r = sd_bus_message_open_container(reply, 'a', "u");
if (r < 0)
return r;
if (ratbag_button_has_action_type(button->lib_button,
RATBAG_BUTTON_ACTION_TYPE_BUTTON))
types[idx++] = "button";
if (ratbag_button_has_action_type(button->lib_button,
RATBAG_BUTTON_ACTION_TYPE_KEY))
types[idx++] = "key";
if (ratbag_button_has_action_type(button->lib_button,
RATBAG_BUTTON_ACTION_TYPE_SPECIAL))
types[idx++] = "special";
if (ratbag_button_has_action_type(button->lib_button,
RATBAG_BUTTON_ACTION_TYPE_MACRO))
types[idx++] = "macro";
ARRAY_FOR_EACH(types, t) {
if (!ratbag_button_has_action_type(button->lib_button, *t))
continue;
t = types;
while (*t) {
r = sd_bus_message_append(reply, "s", *t);
r = sd_bus_message_append(reply, "u", *t);
if (r < 0)
return r;
t++;
}
return sd_bus_message_close_container(reply);
@@ -503,9 +477,8 @@ const sd_bus_vtable ratbagd_button_vtable[] = {
SD_BUS_PROPERTY("ButtonMapping", "u", ratbagd_button_get_button, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("SpecialMapping", "s", ratbagd_button_get_special, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("KeyMapping", "au", ratbagd_button_get_key, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("ActionType", "s", ratbagd_button_get_action_type, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("ActionTypes", "as", ratbagd_button_get_action_types, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("ActionType", "u", ratbagd_button_get_action_type, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("ActionTypes", "au", ratbagd_button_get_action_types, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_METHOD("SetButtonMapping", "u", "u", ratbagd_button_set_button, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetSpecialMapping", "s", "u", ratbagd_button_set_special, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetKeyMapping", "au", "u", ratbagd_button_set_key, SD_BUS_VTABLE_UNPRIVILEGED),

View File

@@ -137,12 +137,16 @@ def print_button(d, p, b, level):
header = " " * level + "Button: {} type {} is mapped to ".format(b.index,
b.type)
if b.action_type == "button":
if b.action_type == RatbagdButton.ACTION_TYPE_BUTTON:
print("{}'button {}'".format(header, b.mapping))
elif b.action_type == "key":
elif b.action_type == RatbagdButton.ACTION_TYPE_KEY:
print("{}'{}'".format(header, b.key))
elif b.action_type == "special":
elif b.action_type == RatbagdButton.ACTION_TYPE_SPECIAL:
print("{}'{}'".format(header, b.special))
elif b.action_type == RatbagdButton.ACTION_TYPE_MACRO:
print("{}macro".format(header))
elif b.action_type == RatbagdButton.ACTION_TYPE_NONE:
print("{}none".format(header))
else:
print("{}UNKNOWN".format(header))

View File

@@ -378,8 +378,7 @@ class TestRatbgagCtlButton(TestRatbagCtl):
# FIXME: special maps to UNKNOWN????
self.assertEqual(r, "Button: 2 type unknown is mapped to UNKNOWN")
r = self.launch_good_test("button 3 get test_device")
# FIXME: macro maps to UNKNOWN????
self.assertEqual(r, "Button: 3 type unknown is mapped to UNKNOWN")
self.assertEqual(r, "Button: 3 type unknown is mapped to macro")
self.launch_fail_test("button 1 get 10 test_device")
self.launch_fail_test("button 10 get test_device")
self.launch_fail_test("button 1 get test_device X")

View File

@@ -429,6 +429,12 @@ class RatbagdResolution(_RatbagdDBus):
class RatbagdButton(_RatbagdDBus):
"""Represents a ratbagd button."""
ACTION_TYPE_NONE = 0
ACTION_TYPE_BUTTON = 1
ACTION_TYPE_SPECIAL = 2
ACTION_TYPE_KEY = 3
ACTION_TYPE_MACRO = 4
def __init__(self, object_path):
_RatbagdDBus.__init__(self, "Button", object_path)
@@ -491,8 +497,9 @@ class RatbagdButton(_RatbagdDBus):
@GObject.Property
def action_type(self):
"""A string describing the action type of the button. One of "none",
"button", "key", "special", "macro" or "unknown". This decides which
"""An enum describing the action type of the button. One of
ACTION_TYPE_NONE, ACTION_TYPE_BUTTON, ACTION_TYPE_SPECIAL,
ACTION_TYPE_KEY, ACTION_TYPE_MACRO. This decides which
*Mapping property has a value.
"""
return self._get_dbus_property("ActionType")