1
0
forked from drath/libratbag

implement resolution active set (#249)

Fixes #80

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Benjamin Tissoires
2017-07-26 08:32:16 +02:00
committed by Jente Hidskes
parent 9dcd2c6c05
commit de3bb0e579
6 changed files with 63 additions and 6 deletions

View File

@@ -209,6 +209,9 @@ uint for the minimum possible resolution
#### `SetDefault() → () `
Set this resolution to be the default
#### `SetActive() → () `
Set this resolution to be the active one
org.freedesktop.ratbag1.Button
==============================

View File

@@ -79,6 +79,42 @@ ratbagd_resolution_set_report_rate(sd_bus *bus,
return r;
}
static int ratbagd_resolution_active_signal_cb(sd_bus *bus,
struct ratbagd_resolution *resolution)
{
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
/* FIXME: we should cache is_active and only send the signal for
* those resolutions where it changed */
(void) sd_bus_emit_signal(bus,
resolution->path,
RATBAGD_NAME_ROOT ".Resolution",
"IsActive",
"b",
ratbag_resolution_is_active(lib_resolution));
return 0;
}
static int ratbagd_resolution_set_active(sd_bus_message *m,
void *userdata,
sd_bus_error *error)
{
struct ratbagd_resolution *resolution = userdata;
int r;
r = ratbag_resolution_set_active(resolution->lib_resolution);
if (r < 0)
return r;
ratbagd_for_each_resolution_signal(sd_bus_message_get_bus(m),
resolution->profile,
ratbagd_resolution_active_signal_cb);
return sd_bus_reply_method_return(m, "u", r);
}
static int ratbagd_resolution_default_signal_cb(sd_bus *bus,
struct ratbagd_resolution *resolution)
{
@@ -310,6 +346,7 @@ const sd_bus_vtable ratbagd_resolution_vtable[] = {
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("Maximum", "u", ratbagd_resolution_get_maximum, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("Minimum", "u", ratbagd_resolution_get_minimum, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_METHOD("SetActive", "", "u", ratbagd_resolution_set_active, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetDefault", "", "u", ratbagd_resolution_set_default, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_VTABLE_END,
};

View File

@@ -1141,9 +1141,15 @@ ratbag_resolution_is_active(const struct ratbag_resolution *resolution)
LIBRATBAG_EXPORT enum ratbag_error_code
ratbag_resolution_set_active(struct ratbag_resolution *resolution)
{
struct ratbag_profile *profile = resolution->profile;
unsigned int i;
for (i = 0; i < profile->resolution.num_modes; i++)
profile->resolution.modes[i].is_active = false;
resolution->is_active = true;
/* FIXME: call into the driver */
return RATBAG_ERROR_IMPLEMENTATION;
profile->dirty = true;
return RATBAG_SUCCESS;
}

View File

@@ -429,6 +429,12 @@ def func_resolution_active_get(r, args):
print(r.index)
def func_resolution_active_set(r, args):
r, p, d = find_resolution(r, args)
r.set_active()
d.commit()
def func_resolution_default_get(r, args):
p, d = find_profile(r, args)
for r in p.resolutions:
@@ -707,7 +713,7 @@ parser_def = [
arg_type: int,
},
],
func: func_dummy, # FIXME: func_active_resolution_set,
func: func_resolution_active_set,
},
],
},

View File

@@ -213,13 +213,14 @@ class TestRatbgagCtlResolution(TestRatbagCtl):
self.launch_fail_test(command + " 10 test_device")
self.launch_fail_test(command + " test_device x")
@unittest.skip("Resolution active set not implemented")
def test_resolution_active_set(self):
command = "Resolution active set"
r = self.launch_good_test(command + " 2 test_device")
self.assertNotEqual(r, '')
r = self.launch_good_test("Resolution active get test_device")
self.assertEqual(int(r), 2)
r = self.launch_good_test(command + " 0 test_device")
self.assertEqual(r, '')
r = self.launch_good_test("Resolution active get test_device")
self.assertEqual(int(r), 0)
self.launch_fail_test(command)
self.launch_fail_test(command + " X test_device")
self.launch_fail_test(command + " 1 test_device X")

View File

@@ -426,6 +426,10 @@ class RatbagdResolution(_RatbagdDBus):
"""Set this resolution to be the default."""
return self._dbus_call("SetDefault", "")
def set_active(self):
"""Set this resolution to be the active one."""
return self._dbus_call("SetActive", "")
class RatbagdButton(_RatbagdDBus):
"""Represents a ratbagd button."""