]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-application.c
Updated Translation
[evince.git] / shell / ev-application.c
index 8721a0cd879a11cfa6917dabfa1a4012ca9d74e9..ffa58ee72ee00274cc7f05cead9f7855cd89e5ec 100644 (file)
 
 G_DEFINE_TYPE (EvApplication, ev_application, G_TYPE_OBJECT);
 
-#define EV_APPLICATION_GET_PRIVATE(object) \
-       (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_APPLICATION, EvApplicationPrivate))
-
 #define APPLICATION_SERVICE_NAME "org.gnome.evince.ApplicationService"
 
 #ifdef ENABLE_DBUS
 gboolean
 ev_application_register_service (EvApplication *application)
 {
-       DBusGConnection *connection;
+       static DBusGConnection *connection = NULL;
        DBusGProxy *driver_proxy;
        GError *err = NULL;
        guint request_name_result;
 
+       if (connection) {
+               g_warning ("Service already registered.");
+               return FALSE;
+       }
+       
        connection = dbus_g_bus_get (DBUS_BUS_STARTER, &err);
        if (connection == NULL) {
                g_warning ("Service registration failed.");
@@ -90,6 +92,8 @@ ev_application_register_service (EvApplication *application)
        }
 #endif 
 
+       g_object_unref (driver_proxy);
+       
        if (request_name_result == DBUS_REQUEST_NAME_REPLY_EXISTS) {
                return FALSE;
        }
@@ -185,7 +189,6 @@ ev_application_open_window (EvApplication  *application,
 #else
        gtk_window_present (GTK_WINDOW (new_window));
 #endif
-
        return TRUE;
 }
 
@@ -236,16 +239,15 @@ ev_application_get_uri_window (EvApplication *application, const char *uri)
        return uri_window;
 }
 
-gboolean
-ev_application_open_uri (EvApplication  *application,
-                        const char     *uri,
-                        const char     *page_label,
-                        guint           timestamp,
-                        GError        **error)
+void
+ev_application_open_uri_at_dest (EvApplication  *application,
+                                const char     *uri,
+                                EvLinkDest     *dest,
+                                guint           timestamp)
 {
        EvWindow *new_window;
 
-       g_return_val_if_fail (uri != NULL, FALSE);
+       g_return_if_fail (uri != NULL);
 
        new_window = ev_application_get_uri_window (application, uri);
        if (new_window != NULL) {
@@ -254,8 +256,11 @@ ev_application_open_uri (EvApplication  *application,
                                              timestamp);
 #else
                gtk_window_present (GTK_WINDOW (new_window));
-#endif 
-               return TRUE;
+#endif
+               if (dest)
+                       ev_window_goto_dest (new_window, dest);
+
+               return;
        }
 
        new_window = ev_application_get_empty_window (application);
@@ -266,7 +271,7 @@ ev_application_open_uri (EvApplication  *application,
 
        /* We need to load uri before showing the window, so
           we can restore window size without flickering */     
-       ev_window_open_uri (new_window, uri);
+       ev_window_open_uri (new_window, uri, dest);
 
        gtk_widget_show (GTK_WIDGET (new_window));
 
@@ -276,9 +281,22 @@ ev_application_open_uri (EvApplication  *application,
 #else
        gtk_window_present (GTK_WINDOW (new_window));
 #endif
+}
+
+gboolean
+ev_application_open_uri (EvApplication  *application,
+                        const char     *uri,
+                        const char     *page_label,
+                        guint           timestamp,
+                        GError        **error)
+{
+       ev_application_open_uri_at_dest (application, uri, NULL, timestamp);
+       
+       if (page_label && strcmp (page_label, "") != 0) {
+               EvWindow *window;
 
-       if (page_label != NULL) {
-               ev_window_open_page_label (new_window, page_label);
+               window = ev_application_get_uri_window (application, uri);
+               ev_window_open_page_label (window, page_label);
        }
 
        return TRUE;
@@ -293,9 +311,7 @@ ev_application_open_uri_list (EvApplication *application,
 
        for (l = uri_list; l != NULL; l = l->next) {
                ev_application_open_uri (application, (char *)l->data,
-                                        NULL,
-                                        timestamp,
-                                        NULL);
+                                        NULL, timestamp, NULL);
        }
 }
 
@@ -313,7 +329,7 @@ ev_application_shutdown (EvApplication *application)
                g_object_unref (application->recent_model);
                application->recent_model = NULL;
        }
-
+       
        g_free (application->last_chooser_uri);
        g_object_unref (application);
        
@@ -388,7 +404,7 @@ void ev_application_save_toolbars_model (EvApplication *application)
                                 application->toolbars_file, "1.0");
 }
 
-void ev_application_set_chooser_uri (EvApplication *application, gchar *uri)
+void ev_application_set_chooser_uri (EvApplication *application, const gchar *uri)
 {
        g_free (application->last_chooser_uri);
        application->last_chooser_uri = g_strdup (uri);