aboutsummaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2013-08-28 12:37:47 -0400
committerMichael Terry <michael.terry@canonical.com>2013-08-28 12:37:47 -0400
commit6d444beb4392c2116533749fa869b6a1c4c6454a (patch)
treeb77a890162ce91c90bdd161a13433353e4006c75 /service
parent32a9e9c848b5a85bea267d70fc2b6f0f1c4c9468 (diff)
downloadayatana-greeter-session-broadcast-6d444beb4392c2116533749fa869b6a1c4c6454a.tar.gz
ayatana-greeter-session-broadcast-6d444beb4392c2116533749fa869b6a1c4c6454a.tar.bz2
ayatana-greeter-session-broadcast-6d444beb4392c2116533749fa869b6a1c4c6454a.zip
Flesh out service to actually do what it says on the tin
Diffstat (limited to 'service')
-rw-r--r--service/CMakeLists.txt10
-rw-r--r--service/service.c70
2 files changed, 77 insertions, 3 deletions
diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt
index ac70f23..7e336d5 100644
--- a/service/CMakeLists.txt
+++ b/service/CMakeLists.txt
@@ -30,11 +30,19 @@ ${GOBJECT2_LIBRARIES}
# Service Executable
###########################
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+
add_executable(service-exec service.c)
set_target_properties(service-exec PROPERTIES OUTPUT_NAME "unity-greeter-session-broadcast-service")
-target_link_libraries(service-exec service-generated)
+target_link_libraries(service-exec
+service-generated
+${GIO2_LIBRARIES}
+)
###########################
# Installation
diff --git a/service/service.c b/service/service.c
index 3c2f9e2..adf45b3 100644
--- a/service/service.c
+++ b/service/service.c
@@ -15,15 +15,81 @@
*
*/
+#include <gio/gio.h>
+#include <unistd.h>
+#include "service-iface.h"
+
+static gboolean
+on_handle_request_application_start (ServiceIfaceComCanonicalUnityGreeterBroadcast *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_username,
+ const gchar *arg_appId)
+{
+ /* Simply pass the request on */
+ service_iface_com_canonical_unity_greeter_broadcast_emit_start_application (object,
+ arg_username,
+ arg_appId);
+ service_iface_com_canonical_unity_greeter_broadcast_complete_request_application_start (object,
+ invocation);
+ return TRUE;
+}
+
+static void
+on_bus_acquired (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ ServiceIfaceComCanonicalUnityGreeterBroadcast *interface;
+
+ interface = (ServiceIfaceComCanonicalUnityGreeterBroadcast *)user_data;
+
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (interface),
+ connection,
+ "/com/canonical/Unity/Greeter/Broadcast",
+ &error))
+ {
+ g_error ("Unable to export interface: %s, exiting", error->message);
+ }
+}
+
+static void
+on_name_lost (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_error ("Lost bus name, exiting");
+}
+
int
main (int argc, char * argv[])
{
+ guint owner_id;
+ GMainLoop *loop;
+ ServiceIfaceComCanonicalUnityGreeterBroadcast *interface;
+ interface = service_iface_com_canonical_unity_greeter_broadcast_skeleton_new ();
+ g_signal_connect (interface,
+ "handle-request-application-start",
+ G_CALLBACK (on_handle_request_application_start),
+ NULL);
+ owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
+ "com.canonical.Unity.Greeter.Broadcast",
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ on_bus_acquired,
+ NULL,
+ on_name_lost,
+ g_object_ref (interface),
+ g_object_unref);
+ loop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (loop);
+ g_bus_unown_name (owner_id);
+ g_object_unref (interface);
+ g_object_unref (loop);
-
- return 0;
+ return 0;
}