81
81
static gchar **other_stuff = NULL;
83
static GMainLoop *mainloop = NULL;
83
85
static GOptionEntry args[] = {
84
86
{ "debug", 0, 0, G_OPTION_ARG_NONE, &debug, NULL, NULL },
548
550
g_hash_table_destroy (properties);
552
state_changed_cb (GActionGroup *action, const char *action_name, GVariant *state, GMainLoop *loop)
554
if (g_strcmp0 (action_name, "load-uri") == 0) {
555
gboolean loaded, scanned;
557
g_variant_get (state, "(bb)", &loaded, &scanned);
558
if (loaded && scanned) {
559
/* give it a tiny bit longer to populate sources etc. */
560
g_timeout_add (1500, (GSourceFunc) g_main_loop_quit, loop);
566
state_changed_signal_cb (GDBusProxy *proxy, const char *sender_name, const char *signal_name, GVariant *parameters, GMainLoop *loop)
570
if (g_strcmp0 (signal_name, "StateChanged") != 0) {
574
g_variant_get (parameters, "(sv)", &action, &state);
575
if (g_strcmp0 (action, "load-uri") == 0) {
577
app = g_object_get_data (G_OBJECT (proxy), "actual-app");
578
state_changed_cb (G_ACTION_GROUP (app), action, state, loop);
580
g_variant_unref (state);
555
check_loaded_state (GVariant *state)
557
gboolean loaded, scanned;
559
g_variant_get (state, "(bb)", &loaded, &scanned);
560
if (loaded && scanned) {
561
/* give it a tiny bit longer to populate sources etc. */
562
g_timeout_add (1500, (GSourceFunc) g_main_loop_quit, mainloop);
567
state_changed_cb (GActionGroup *group, const char *action_name, GVariant *state, gpointer data)
569
if (g_strcmp0 (action_name, "load-uri") == 0) {
570
check_loaded_state (state);
575
action_added_cb (GActionGroup *group, const char *action_name, gpointer data)
577
if (g_strcmp0 (action_name, "load-uri") == 0) {
578
GVariant *state = g_action_group_get_action_state (group, "load-uri");
579
check_loaded_state (state);
580
g_variant_unref (state);
672
673
g_variant_get (state, "(bb)", &loaded, &scanned);
673
674
if ((loaded && scanned) == FALSE) {
675
GDBusProxy *app_proxy;
675
GDBusActionGroup *group;
677
677
rb_debug ("waiting for app startup");
678
loop = g_main_loop_new (NULL, FALSE);
679
g_signal_connect (app, "action-state-changed", G_CALLBACK (state_changed_cb), loop);
681
/* dbus implementation of GApplication doesn't do action state updates yet */
682
app_proxy = g_dbus_proxy_new_sync (bus, G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL,
683
"org.gnome.Rhythmbox3",
684
"/org/gnome/Rhythmbox3",
688
if (app_proxy == NULL || proxy_has_name_owner (app_proxy) == FALSE) {
689
g_warning ("unable to wait for app startup: %s", error->message);
690
g_clear_error (&error);
692
g_object_set_data (G_OBJECT (app_proxy), "actual-app", app);
693
g_signal_connect (app_proxy, "g-signal", G_CALLBACK (state_changed_signal_cb), loop);
694
g_main_loop_run (loop);
695
rb_debug ("app is now started enough");
678
mainloop = g_main_loop_new (NULL, FALSE);
679
group = g_dbus_action_group_get (bus, "org.gnome.Rhythmbox3", "/org/gnome/Rhythmbox3");
680
/* make sure the group gets initialised and put in strict mode */
681
g_action_group_has_action (G_ACTION_GROUP (group), "load-uri");
682
g_signal_connect (group, "action-state-changed", G_CALLBACK (state_changed_cb), NULL);
683
g_signal_connect (group, "action-added", G_CALLBACK (action_added_cb), NULL);
684
g_main_loop_run (mainloop);
685
rb_debug ("app is now started enough");
686
g_object_unref (group);
699
689
/* create proxies */