Просмотр исходного кода

Fix up calling screensaver, now appears to work

Marc Di Luzio 6 лет назад
Родитель
Сommit
b4ba947255
1 измененных файлов с 47 добавлено и 35 удалено
  1. 47 35
      daemon/dbus_messaging.c

+ 47 - 35
daemon/dbus_messaging.c

@@ -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));
+		return -1;
+	}
+
+	if (inhibit) {
+		ret = sd_bus_call_method(bus,
+		                         service,
+		                         object_path,
+		                         interface,
+		                         function,
+		                         &err,
+		                         &msg,
+		                         "ss",
+		                         "com.feralinteractive.GameMode",
+		                         "GameMode Activated");
 	} else {
 	} 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);
+		ret = sd_bus_call_method(bus,
+		                         service,
+		                         object_path,
+		                         interface,
+		                         function,
+		                         &err,
+		                         &msg,
+		                         "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"
+		    "\t%s\n"
+		    "\t%s\n",
+		    function,
+		    service,
+		    strerror(-ret),
+		    err.name,
+		    err.message);
+	} else if (inhibit) {
+		// Read the reply
+		ret = sd_bus_message_read(msg, "u", &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("Failure to parse response from %s on %s: %s\n",
+			          function,
+			          service,
+			          strerror(-ret));
 		} else {
 		} 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));
-			}
+			result = 0;
 		}
 		}
+	} else {
+		result = 0;
 	}
 	}
 
 
 	return result;
 	return result;