8 static GMainLoop *loop;
9 static int exit_status = EXIT_SUCCESS;
10 static int from_dm_fd, to_dm_fd;
16 g_main_loop_quit (loop);
20 signal_cb (int signum)
22 status_notify ("UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=%d", signum);
27 request_cb (const gchar *request)
31 g_main_loop_quit (loop);
40 USC_MESSAGE_READY = 2,
41 USC_MESSAGE_SESSION_CONNECTED = 3,
42 USC_MESSAGE_SET_ACTIVE_SESSION = 4
46 write_message (guint16 id, const guint8 *payload, guint16 payload_length)
49 gsize data_length = 4 + payload_length;
51 data = g_malloc (data_length);
54 data[2] = payload_length >> 8;
55 data[3] = payload_length & 0xFF;
56 memcpy (data + 4, payload, payload_length);
58 if (write (to_dm_fd, data, data_length) < 0)
59 fprintf (stderr, "Failed to write to daemon: %s\n", strerror (errno));
63 main (int argc, char **argv)
65 signal (SIGINT, signal_cb);
66 signal (SIGTERM, signal_cb);
67 signal (SIGHUP, signal_cb);
69 #if !defined(GLIB_VERSION_2_36)
73 loop = g_main_loop_new (NULL, FALSE);
75 status_connect (request_cb);
79 from_dm_fd = atoi (argv[1]);
80 to_dm_fd = atoi (argv[2]);
82 status_notify ("UNITY-SYSTEM-COMPOSITOR START");
84 write_message (USC_MESSAGE_READY, NULL, 0);
86 g_main_loop_run (loop);