]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Updated Greek translation.
[evince.git] / shell / ev-window.c
index d646b9a61beb61f5ab8c9dd8ddf961c702e4b808..89d325d33049cb3d64a7f7401bfa5bc7847bd5bb 100644 (file)
@@ -5,7 +5,7 @@
  *  Copyright (C) 2004 Martin Kretzschmar
  *  Copyright (C) 2004 Red Hat, Inc.
  *  Copyright (C) 2000, 2001, 2002, 2003, 2004 Marco Pesenti Gritti
- *  Copyright (C) 2003, 2004, 2005 Christian Persch
+ *  Copyright © 2003, 2004, 2005, 2009 Christian Persch
  *
  *  Author:
  *    Martin Kretzschmar <martink@gnome.org>
@@ -246,7 +246,8 @@ static void     ev_window_set_page_mode                 (EvWindow         *windo
                                                         EvWindowPageMode  page_mode);
 static void    ev_window_load_job_cb                   (EvJob            *job,
                                                         gpointer          data);
-static void     ev_window_reload_document               (EvWindow         *window);
+static void     ev_window_reload_document               (EvWindow         *window,
+                                                        EvLinkDest *dest);
 static void     ev_window_reload_job_cb                 (EvJob            *job,
                                                         EvWindow         *window);
 static void     ev_window_set_icon_from_thumbnail       (EvJobThumbnail   *job,
@@ -368,7 +369,7 @@ ev_window_setup_action_sensitivity (EvWindow *ev_window)
                ok_to_copy = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_COPY);
        }
 
-       if (has_document && !EV_IS_FILE_EXPORTER(document))
+       if (has_document && !ev_print_operation_exists_for_document(document))
                ok_to_print = FALSE;
 
 #ifdef WITH_GCONF
@@ -1216,6 +1217,8 @@ ev_window_setup_document (EvWindow *ev_window)
        info = ev_page_cache_get_info (ev_window->priv->page_cache);
        update_document_mode (ev_window, info->mode);
 
+       gtk_widget_grab_focus (ev_window->priv->view);
+
        return FALSE;
 }
 
@@ -1268,7 +1271,7 @@ static void
 ev_window_document_changed (EvWindow *ev_window,
                            gpointer  user_data)
 {
-       ev_window_reload_document (ev_window);
+       ev_window_reload_document (ev_window, NULL);
 }
 
 static void
@@ -1352,6 +1355,21 @@ ev_window_clear_temp_symlink (EvWindow *ev_window)
        g_object_unref (tempdir);
 }
 
+static void
+ev_window_handle_link (EvWindow *ev_window,
+                      EvLinkDest *dest)
+{
+       if (dest) {
+               EvLink *link;
+               EvLinkAction *link_action;
+
+               link_action = ev_link_action_new_dest (dest);
+               link = ev_link_new (NULL, link_action);
+               ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
+               g_object_unref (link);
+       }
+}
+
 /* This callback will executed when load job will be finished.
  *
  * Since the flow of the error dialog is very confusing, we assume that both
@@ -1393,21 +1411,12 @@ ev_window_load_job_cb (EvJob *job,
                                                  flags);
                }
 
-               if (ev_window->priv->dest) {
-                       EvLink *link;
-                       EvLinkAction *link_action;
-       
-                       link_action = ev_link_action_new_dest (ev_window->priv->dest);
-                       link = ev_link_new (NULL, link_action);
-                       ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
-                       g_object_unref (link);
-
-                       /* Already unrefed by ev_link_action
-                        * FIXME: link action should inc dest ref counting
-                        * or not unref it at all
-                        */
-                       ev_window->priv->dest = NULL;
-               }
+               ev_window_handle_link (ev_window, ev_window->priv->dest);
+               /* Already unrefed by ev_link_action
+                * FIXME: link action should inc dest ref counting
+                * or not unref it at all
+                */
+               ev_window->priv->dest = NULL;
 
                switch (ev_window->priv->window_mode) {
                        case EV_WINDOW_MODE_FULLSCREEN:
@@ -1486,6 +1495,7 @@ ev_window_reload_job_cb (EvJob    *job,
                         EvWindow *ev_window)
 {
        GtkWidget *widget;
+       EvLinkDest *dest = NULL;
 
        if (ev_job_is_failed (job)) {
                ev_window_clear_reload_job (ev_window);
@@ -1495,9 +1505,14 @@ ev_window_reload_job_cb (EvJob    *job,
                
                return;
        }
-       
+
+       if (ev_window->priv->dest) {
+               dest = g_object_ref (ev_window->priv->dest);
+       }
        ev_window_set_document (ev_window, job->document);
-       
+
+       ev_window_handle_link (ev_window, dest);
+
        /* Restart the search after reloading */
        widget = gtk_window_get_focus (GTK_WINDOW (ev_window));
        if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) {
@@ -1800,7 +1815,7 @@ ev_window_open_uri (EvWindow       *ev_window,
        
        if (ev_window->priv->uri &&
            g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0) {
-               ev_window_reload_document (ev_window);
+               ev_window_reload_document (ev_window, dest);
                return;
        }
 
@@ -1995,7 +2010,8 @@ ev_window_reload_remote (EvWindow *ev_window)
 }
 
 static void
-ev_window_reload_document (EvWindow *ev_window)
+ev_window_reload_document (EvWindow *ev_window,
+                          EvLinkDest *dest)
 {
        gint page;
 
@@ -2008,7 +2024,7 @@ ev_window_reload_document (EvWindow *ev_window)
        if (ev_window->priv->dest)
                g_object_unref (ev_window->priv->dest);
        /* FIXME: save the scroll position too (xyz dest) */
-       ev_window->priv->dest = ev_link_dest_new_page (page);
+       ev_window->priv->dest = dest ? g_object_ref (dest) : ev_link_dest_new_page (page);
 
        if (ev_window->priv->local_uri) {
                ev_window_reload_remote (ev_window);
@@ -2989,6 +3005,11 @@ ev_window_print_range (EvWindow *ev_window,
                ev_window->priv->print_queue = g_queue_new ();
 
        op = ev_print_operation_new (ev_window->priv->document);
+       if (!op) {
+               g_warning ("%s", "Printing is not supported for document\n");
+               return;
+       }
+
        g_signal_connect (op, "begin_print",
                          G_CALLBACK (ev_window_print_operation_begin_print),
                          (gpointer)ev_window);
@@ -3871,7 +3892,7 @@ ev_window_cmd_go_backward (GtkAction *action, EvWindow *ev_window)
 static void
 ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
 {
-       ev_window_reload_document (ev_window);
+       ev_window_reload_document (ev_window, NULL);
 }
 
 static void
@@ -4140,6 +4161,7 @@ ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window)
                "Bryan Clark <clarkbw@gnome.org>",
                "Carlos Garcia Campos <carlosgc@gnome.org>",
                "Wouter Bolsterlee <wbolster@gnome.org>",
+                "Christian Persch <chpe" "\100" "gnome.org>",
                NULL
        };
 
@@ -4184,7 +4206,7 @@ ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window)
                "name", _("Evince"),
                "version", VERSION,
                "copyright",
-               _("\xc2\xa9 1996-2007 The Evince authors"),
+               _("© 1996–2009 The Evince authors"),
                "license", license_trans,
                "website", "http://www.gnome.org/projects/evince",
                "comments", comments,
@@ -5883,6 +5905,7 @@ ev_window_init (EvWindow *ev_window)
        GError *error = NULL;
        GtkWidget *sidebar_widget;
        GObject *mpkeys;
+       gchar *ui_path;
 
        g_signal_connect (ev_window, "configure_event",
                          G_CALLBACK (window_configure_event_cb), NULL);
@@ -5937,12 +5960,15 @@ ev_window_init (EvWindow *ev_window)
        gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
                                            action_group, 0);
 
-       if (!gtk_ui_manager_add_ui_from_file (ev_window->priv->ui_manager,
-                                             DATADIR"/evince-ui.xml",
-                                             &error)) {
+       ui_path = g_build_filename (ev_application_get_data_dir (EV_APP),
+                                   "evince-ui.xml", NULL);
+       if (!gtk_ui_manager_add_ui_from_file (
+               ev_window->priv->ui_manager, ui_path, &error))
+       {
                g_warning ("building menus failed: %s", error->message);
                g_error_free (error);
        }
+       g_free (ui_path);
        
        ev_window->priv->recent_manager = gtk_recent_manager_get_default ();
        ev_window->priv->recent_action_group = NULL;