Add initial screensaver inhibiting code

This commit is contained in:
Marc Di Luzio
2019-01-27 13:19:27 +00:00
parent 56e083eb60
commit c25fc285ee
3 changed files with 77 additions and 0 deletions

View File

@@ -187,3 +187,68 @@ void game_mode_context_loop(GameModeContext *context)
}
}
}
/**
* Attempts to inhibit the screensaver
* Uses the "org.freedesktop.ScreenSaver" interface
*/
static unsigned int screensaver_inhibit_cookie = 0;
int game_mode_inhibit_screensaver(bool inhibit)
{
const char *service = "org.freedesktop.ScreenSaver";
const char *object_path = "/org/freedesktop/ScreenSaver";
const char *interface = service;
const char *function = inhibit ? "Inhibit" : "UnInhibit";
sd_bus_message *msg = NULL;
sd_bus *bus = NULL;
int result = -1;
// Open the user bus
int ret = sd_bus_open_user(&bus);
if (ret < 0) {
LOG_ERROR("Could not connect to user bus: %s\n", strerror(-ret));
} else {
if (inhibit) {
ret = sd_bus_call_method(bus,
service,
object_path,
interface,
function,
NULL,
&msg,
"s",
"GameMode",
"s",
"GameMode Activated",
"u",
&screensaver_inhibit_cookie);
} else {
ret = sd_bus_call_method(bus,
service,
object_path,
interface,
function,
NULL,
&msg,
"u",
screensaver_inhibit_cookie);
}
if (ret < 0) {
LOG_ERROR("Could not call %s on %s: %s\n", function, service, strerror(-ret));
} else {
// Read the reply
ret = sd_bus_message_read(msg, "i", &result);
if (ret < 0) {
LOG_ERROR("Failure to parse response from %s on %s: %s\n",
function,
service,
strerror(-ret));
}
}
}
return result;
}