Fix up calling screensaver, now appears to work

This commit is contained in:
Marc Di Luzio 2019-01-27 14:17:38 +00:00
parent 42dd7e6ea8
commit b4ba947255

View File

@ -197,11 +197,13 @@ int game_mode_inhibit_screensaver(bool inhibit)
{ {
const char *service = "org.freedesktop.ScreenSaver"; const char *service = "org.freedesktop.ScreenSaver";
const char *object_path = "/org/freedesktop/ScreenSaver"; const char *object_path = "/org/freedesktop/ScreenSaver";
const char *interface = service; const char *interface = "org.freedesktop.ScreenSaver";
const char *function = inhibit ? "Inhibit" : "UnInhibit"; const char *function = inhibit ? "Inhibit" : "UnInhibit";
sd_bus_message *msg = NULL; sd_bus_message *msg = NULL;
sd_bus *bus = NULL; sd_bus *bus = NULL;
sd_bus_error err;
memset(&err, 0, sizeof(sd_bus_error));
int result = -1; int result = -1;
@ -209,45 +211,55 @@ int game_mode_inhibit_screensaver(bool inhibit)
int ret = sd_bus_open_user(&bus); int ret = sd_bus_open_user(&bus);
if (ret < 0) { if (ret < 0) {
LOG_ERROR("Could not connect to user bus: %s\n", strerror(-ret)); LOG_ERROR("Could not connect to user bus: %s\n", strerror(-ret));
} else { return -1;
}
if (inhibit) { if (inhibit) {
ret = sd_bus_call_method(bus, ret = sd_bus_call_method(bus,
service, service,
object_path, object_path,
interface, interface,
function, function,
NULL, &err,
&msg, &msg,
"s", "ss",
"GameMode", "com.feralinteractive.GameMode",
"s", "GameMode Activated");
"GameMode Activated",
"u",
&screensaver_inhibit_cookie);
} else { } else {
ret = sd_bus_call_method(bus, ret = sd_bus_call_method(bus,
service, service,
object_path, object_path,
interface, interface,
function, function,
NULL, &err,
&msg, &msg,
"u", "u",
screensaver_inhibit_cookie); screensaver_inhibit_cookie);
} }
if (ret < 0) { if (ret < 0) {
LOG_ERROR("Could not call %s on %s: %s\n", function, service, strerror(-ret)); LOG_ERROR(
} else { "Could not call %s on %s: %s\n"
"\t%s\n"
"\t%s\n",
function,
service,
strerror(-ret),
err.name,
err.message);
} else if (inhibit) {
// Read the reply // Read the reply
ret = sd_bus_message_read(msg, "i", &result); ret = sd_bus_message_read(msg, "u", &screensaver_inhibit_cookie);
if (ret < 0) { if (ret < 0) {
LOG_ERROR("Failure to parse response from %s on %s: %s\n", LOG_ERROR("Failure to parse response from %s on %s: %s\n",
function, function,
service, service,
strerror(-ret)); strerror(-ret));
} else {
result = 0;
} }
} } else {
result = 0;
} }
return result; return result;