x11: Flatten D-Bus (un)inhibit functions

Instead of nesting, try to exit as soon as possible in case of errors.
Also make sure to tell the caller whether the call succeeded and a
fallback should be attempted.
This commit is contained in:
Bastien Nocera 2016-09-16 12:59:16 +02:00
parent 297c9a8613
commit e563bd5512
1 changed files with 37 additions and 30 deletions

View File

@ -92,48 +92,53 @@ static void dbus_close_connection(void)
dbus_connection = NULL; dbus_connection = NULL;
} }
static void dbus_screensaver_inhibit(void) static bool dbus_screensaver_inhibit(void)
{ {
const char *app = "RetroArch"; const char *app = "RetroArch";
const char *reason = "Playing a game"; const char *reason = "Playing a game";
DBusMessage *msg = NULL; DBusMessage *msg = NULL;
DBusMessage *reply = NULL; DBusMessage *reply = NULL;
bool ret = false;
if (dbus_connection == NULL) if (dbus_connection == NULL)
return; /* DBus connection was not obtained */ return false; /* DBus connection was not obtained */
if (dbus_screensaver_cookie > 0) if (dbus_screensaver_cookie > 0)
return; /* Already inhibited */ return true; /* Already inhibited */
msg = dbus_message_new_method_call("org.freedesktop.ScreenSaver", msg = dbus_message_new_method_call("org.freedesktop.ScreenSaver",
"/org/freedesktop/ScreenSaver", "/org/freedesktop/ScreenSaver",
"org.freedesktop.ScreenSaver", "org.freedesktop.ScreenSaver",
"Inhibit"); "Inhibit");
if (msg != NULL) if (!msg)
dbus_message_append_args(msg, return false;
DBUS_TYPE_STRING, &app,
DBUS_TYPE_STRING, &reason,
DBUS_TYPE_INVALID);
if (msg != NULL)
{
reply = dbus_connection_send_with_reply_and_block(dbus_connection,
msg, 300, NULL);
if (reply != NULL)
{
if (!dbus_message_get_args(reply, NULL,
DBUS_TYPE_UINT32, &dbus_screensaver_cookie,
DBUS_TYPE_INVALID))
dbus_screensaver_cookie = 0;
dbus_message_unref(reply);
}
if (!dbus_message_append_args(msg,
DBUS_TYPE_STRING, &app,
DBUS_TYPE_STRING, &reason,
DBUS_TYPE_INVALID)) {
dbus_message_unref(msg); dbus_message_unref(msg);
return false;
} }
reply = dbus_connection_send_with_reply_and_block(dbus_connection,
msg, 300, NULL);
if (reply != NULL)
{
if (!dbus_message_get_args(reply, NULL,
DBUS_TYPE_UINT32, &dbus_screensaver_cookie,
DBUS_TYPE_INVALID))
dbus_screensaver_cookie = 0;
else
ret = true;
dbus_message_unref(reply);
}
dbus_message_unref(msg);
if (dbus_screensaver_cookie == 0) if (dbus_screensaver_cookie == 0)
{ {
RARCH_ERR("[DBus]: Failed to suspend screensaver via DBus.\n"); RARCH_ERR("[DBus]: Failed to suspend screensaver via DBus.\n");
@ -142,6 +147,8 @@ static void dbus_screensaver_inhibit(void)
{ {
RARCH_LOG("[DBus]: Suspended screensaver via DBus.\n"); RARCH_LOG("[DBus]: Suspended screensaver via DBus.\n");
} }
return ret;
} }
static void dbus_screensaver_uninhibit(void) static void dbus_screensaver_uninhibit(void)
@ -151,23 +158,23 @@ static void dbus_screensaver_uninhibit(void)
if (!dbus_connection) if (!dbus_connection)
return; return;
if (!dbus_screensaver_cookie) if (dbus_screensaver_cookie == 0)
return; return;
msg = dbus_message_new_method_call("org.freedesktop.ScreenSaver", msg = dbus_message_new_method_call("org.freedesktop.ScreenSaver",
"/org/freedesktop/ScreenSaver", "/org/freedesktop/ScreenSaver",
"org.freedesktop.ScreenSaver", "org.freedesktop.ScreenSaver",
"UnInhibit"); "UnInhibit");
if (!msg)
return;
dbus_message_append_args(msg, dbus_message_append_args(msg,
DBUS_TYPE_UINT32, &dbus_screensaver_cookie, DBUS_TYPE_UINT32, &dbus_screensaver_cookie,
DBUS_TYPE_INVALID); DBUS_TYPE_INVALID);
if (msg != NULL) if (dbus_connection_send(dbus_connection, msg, NULL))
{ dbus_connection_flush(dbus_connection);
if (dbus_connection_send(dbus_connection, msg, NULL)) dbus_message_unref(msg);
dbus_connection_flush(dbus_connection);
dbus_message_unref(msg);
}
dbus_screensaver_cookie = 0; dbus_screensaver_cookie = 0;
} }