X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-daemon.c;h=b136369dfe8142e07f359d5758097469ba11213a;hb=df408ff0086984d7c067ea31f298c0aad002b2e6;hp=b30238a654da0de30e142670d6237da314632a44;hpb=5bd752a3831fbb99cdcef0055707bd624fb9e30c;p=evince.git diff --git a/shell/ev-daemon.c b/shell/ev-daemon.c index b30238a6..b136369d 100644 --- a/shell/ev-daemon.c +++ b/shell/ev-daemon.c @@ -211,6 +211,7 @@ name_appeared_cb (GDBusConnection *connection, const gchar *name_owner, gpointer user_data) { + LOG ("Watch name'%s' appeared with owner '%s'\n", name, name_owner); } static void @@ -220,12 +221,16 @@ name_vanished_cb (GDBusConnection *connection, { GList *l; + LOG ("Watch name'%s' disappeared\n", name); + for (l = ev_daemon_docs; l != NULL; l = l->next) { EvDoc *doc = (EvDoc *) l->data; if (strcmp (doc->dbus_name, name) != 0) continue; + LOG ("Watch found URI '%s' for name; removing\n", doc->uri); + ev_daemon_docs = g_list_delete_link (ev_daemon_docs, l); ev_doc_free (doc); @@ -267,19 +272,17 @@ method_call_cb (GDBusConnection *connection, doc->dbus_name = g_strdup (sender); doc->uri = g_strdup (uri); - doc->watch_id = g_bus_watch_name (G_BUS_TYPE_STARTER, - sender, - G_BUS_NAME_WATCHER_FLAGS_NONE, - name_appeared_cb, - name_vanished_cb, - user_data, NULL); + doc->watch_id = g_bus_watch_name_on_connection (connection, + sender, + G_BUS_NAME_WATCHER_FLAGS_NONE, + name_appeared_cb, + name_vanished_cb, + user_data, NULL); LOG ("RegisterDocument registered owner '%s' for URI '%s'\n", doc->dbus_name, uri); ev_daemon_docs = g_list_prepend (ev_daemon_docs, doc); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", "")); - return; - } else if (g_strcmp0 (method_name, "UnregisterDocument") == 0) { EvDoc *doc; const gchar *uri; @@ -314,10 +317,58 @@ method_call_cb (GDBusConnection *connection, ev_daemon_maybe_start_killtimer (user_data); g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); - return; } } +static const char introspection_xml[] = + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; + +static const GDBusInterfaceVTable interface_vtable = { + method_call_cb, + NULL, + NULL +}; + +static GDBusNodeInfo *introspection_data; + +static void +bus_acquired_cb (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + GMainLoop *loop = (GMainLoop *) user_data; + guint registration_id; + GError *error = NULL; + + if (!introspection_data) + introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); + + registration_id = g_dbus_connection_register_object (connection, + EV_DBUS_DAEMON_OBJECT_PATH, + introspection_data->interfaces[0], + &interface_vtable, + g_main_loop_ref (loop), + (GDestroyNotify) g_main_loop_unref, + &error); + if (registration_id == 0) { + g_printerr ("Failed to register object: %s\n", error->message); + g_error_free (error); + + if (g_main_loop_is_running (loop)) + g_main_loop_quit (loop); + } +} + static void name_acquired_cb (GDBusConnection *connection, const gchar *name, @@ -340,82 +391,36 @@ name_lost_cb (GDBusConnection *connection, g_main_loop_quit (loop); } -static const char introspection_xml[] = - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - ""; - -static const GDBusInterfaceVTable interface_vtable = { - method_call_cb, - NULL, - NULL -}; - gint main (gint argc, gchar **argv) { - GDBusConnection *connection; GMainLoop *loop; - GError *error = NULL; - guint registration_id, owner_id; - GDBusNodeInfo *introspection_data; + guint owner_id; g_set_prgname ("evince-daemon"); g_type_init (); - connection = g_bus_get_sync (G_BUS_TYPE_STARTER, NULL, &error); - if (connection == NULL) { - g_printerr ("Failed to get bus connection: %s\n", error->message); - g_error_free (error); - return 1; - } - - introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); - g_assert (introspection_data != NULL); - loop = g_main_loop_new (NULL, FALSE); - registration_id = g_dbus_connection_register_object (connection, - EV_DBUS_DAEMON_OBJECT_PATH, - EV_DBUS_DAEMON_NAME, - introspection_data->interfaces[0], - &interface_vtable, - g_main_loop_ref (loop), - (GDestroyNotify) g_main_loop_unref, - &error); - if (registration_id == 0) { - g_printerr ("Failed to register object: %s\n", error->message); - g_error_free (error); - g_object_unref (connection); - return 1; - } - - owner_id = g_bus_own_name_on_connection (connection, - EV_DBUS_DAEMON_NAME, - G_BUS_NAME_OWNER_FLAGS_NONE, - name_acquired_cb, - name_lost_cb, - g_main_loop_ref (loop), - (GDestroyNotify) g_main_loop_unref); + owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, + EV_DBUS_DAEMON_NAME, + G_BUS_NAME_OWNER_FLAGS_NONE, + bus_acquired_cb, + name_acquired_cb, + name_lost_cb, + g_main_loop_ref (loop), + (GDestroyNotify) g_main_loop_unref); g_main_loop_run (loop); g_bus_unown_name (owner_id); g_main_loop_unref (loop); - g_dbus_node_info_unref (introspection_data); + if (introspection_data) + g_dbus_node_info_unref (introspection_data); g_list_foreach (ev_daemon_docs, (GFunc)ev_doc_free, NULL); g_list_free (ev_daemon_docs); - g_object_unref (connection); return 0; }