- for (l = windows; l != NULL; l = l->next) {
- if (EV_IS_WINDOW (l->data)) {
- EvWindow *window = EV_WINDOW (l->data);
- const char *window_uri = ev_window_get_uri (window);
-
- if (window_uri && strcmp (window_uri, uri) == 0 && !ev_window_is_empty (window)) {
- uri_window = window;
- break;
+#ifdef ENABLE_DBUS
+static gboolean
+ev_application_register_uri (EvApplication *application,
+ const gchar *uri,
+ GHashTable *args,
+ guint timestamp)
+{
+ DBusGProxy *proxy;
+ gchar *owner;
+ gboolean retval = TRUE;
+ GError *error = NULL;
+
+ if (!application->connection)
+ return TRUE;
+
+ proxy = dbus_g_proxy_new_for_name (application->connection,
+ "org.gnome.evince.Daemon",
+ "/org/gnome/evince/Daemon",
+ "org.gnome.evince.Daemon");
+ if (!dbus_g_proxy_call (proxy, "RegisterDocument", &error,
+ G_TYPE_STRING, uri,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, &owner,
+ G_TYPE_INVALID)) {
+ g_warning ("Error registering document: %s\n", error->message);
+ g_error_free (error);
+ g_object_unref (proxy);
+
+ return TRUE;
+ }
+ g_object_unref (proxy);
+
+ if (*owner == ':') {
+ /* Already registered */
+ proxy = dbus_g_proxy_new_for_name_owner (application->connection,
+ owner,
+ APPLICATION_DBUS_OBJECT_PATH,
+ APPLICATION_DBUS_INTERFACE,
+ &error);
+ if (proxy) {
+ if (!dbus_g_proxy_call (proxy, "OpenURI", &error,
+ G_TYPE_STRING, uri,
+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), args,
+ G_TYPE_UINT, timestamp,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID)) {
+ g_warning ("%s", error->message);
+ g_error_free (error);