diff options
author | Michael Terry <michael.terry@canonical.com> | 2013-08-28 17:36:42 +0000 |
---|---|---|
committer | Tarmac <Unknown> | 2013-08-28 17:36:42 +0000 |
commit | 57a4a0edb15b2933ad4dd0fea59074219f5d8c5b (patch) | |
tree | 7fa2345f400443009fa462551887aa3f666745a1 /service/service.c | |
parent | 770bf58782b33d03b6c32342158710103ca85db7 (diff) | |
parent | 6d444beb4392c2116533749fa869b6a1c4c6454a (diff) | |
download | ayatana-greeter-session-broadcast-57a4a0edb15b2933ad4dd0fea59074219f5d8c5b.tar.gz ayatana-greeter-session-broadcast-57a4a0edb15b2933ad4dd0fea59074219f5d8c5b.tar.bz2 ayatana-greeter-session-broadcast-57a4a0edb15b2933ad4dd0fea59074219f5d8c5b.zip |
Implement the basic service. Adds RequestApplicationStart method which sends out a StartApplication signal.
Approved by Ted Gould, PS Jenkins bot.
Diffstat (limited to 'service/service.c')
-rw-r--r-- | service/service.c | 70 |
1 files changed, 68 insertions, 2 deletions
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; } |