]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Added missing file. Updated Canadian English translation.
[evince.git] / shell / ev-window.c
index 5b832c553af6d6b376b59d61d1b1b34bb0f75e8d..979298fdb5b9ed6e8263bdf331ff58574dff5e86 100644 (file)
@@ -219,6 +219,8 @@ update_action_sensitivity (EvWindow *ev_window)
        gboolean ok_to_copy = TRUE;
        gboolean has_properties = TRUE;
        gboolean override_restrictions = FALSE;
+       gboolean can_get_text = FALSE;
+       gboolean ok_to_copy_text = FALSE;
        GConfClient *client;
 
        view = EV_VIEW (ev_window->priv->view);
@@ -263,6 +265,11 @@ update_action_sensitivity (EvWindow *ev_window)
        
        g_object_unref (client);
 
+       if (has_document && ev_document_can_get_text (document)) {
+               can_get_text = TRUE;
+               ok_to_copy_text = ev_view_get_has_selection (view);
+       }
+       
        /* File menu */
        /* "FileOpen": always sensitive */
        set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy);
@@ -272,8 +279,8 @@ update_action_sensitivity (EvWindow *ev_window)
 
         /* Edit menu */
        sensitive = has_pages && ev_document_can_get_text (document);
-       set_action_sensitive (ev_window, "EditCopy", sensitive && ok_to_copy);
-       set_action_sensitive (ev_window, "EditSelectAll", sensitive && ok_to_copy);
+       set_action_sensitive (ev_window, "EditCopy", sensitive && ok_to_copy_text);
+       set_action_sensitive (ev_window, "EditSelectAll", sensitive && can_get_text);
        set_action_sensitive (ev_window, "EditFind",
                              has_pages && EV_IS_DOCUMENT_FIND (document));
        set_action_sensitive (ev_window, "Slash",
@@ -2423,6 +2430,12 @@ ev_window_rotation_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *window
                                       rotation);
 }
 
+static void
+ev_window_has_selection_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *window)
+{
+       update_action_sensitivity (window);
+}
+
 static void     
 ev_window_dual_mode_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *ev_window)
 {
@@ -3234,13 +3247,13 @@ launch_link (EvWindow *window, EvLink *link)
        const char *filename = ev_link_get_filename (link);
        char *uri = NULL;
 
-       if (g_path_is_absolute (filename)) {
-               uri = g_strconcat ("file://", filename, NULL);
+       if (filename  && g_path_is_absolute (filename)) {
+               uri = gnome_vfs_get_uri_from_local_path (filename);
        } else {
                GnomeVFSURI *base_uri, *resolved_uri;
 
                base_uri = gnome_vfs_uri_new (window->priv->uri);
-               if (base_uri) {
+               if (base_uri && filename) {
                        resolved_uri = gnome_vfs_uri_resolve_relative (base_uri, filename);     
                        if (resolved_uri) {
                                uri = gnome_vfs_uri_to_string (resolved_uri, GNOME_VFS_URI_HIDE_NONE);
@@ -3263,14 +3276,24 @@ launch_link (EvWindow *window, EvLink *link)
 }
 
 static void
-view_external_link_cb (EvView *view, EvLink *link, EvWindow *window)
+launch_external_uri (EvWindow *window, EvLink *link)
 {
        const char *uri;
+       char *escaped;
+
+       uri = ev_link_get_uri (link);
+       escaped = gnome_vfs_escape_host_and_path_string (uri);
 
+       gnome_vfs_url_show (escaped);
+       g_free (escaped);
+}
+
+static void
+view_external_link_cb (EvView *view, EvLink *link, EvWindow *window)
+{
        switch (ev_link_get_link_type (link)) {
        case EV_LINK_TYPE_EXTERNAL_URI:
-               uri = ev_link_get_uri (link);
-               gnome_vfs_url_show (uri);
+               launch_external_uri (window, link);
                break;
        case EV_LINK_TYPE_LAUNCH:
                launch_link (window, link);
@@ -3459,6 +3482,10 @@ ev_window_init (EvWindow *ev_window)
                          "notify::rotation",
                          G_CALLBACK (ev_window_rotation_changed_cb),
                          ev_window);
+       g_signal_connect (ev_window->priv->view,
+                         "notify::has-selection",
+                         G_CALLBACK (ev_window_has_selection_changed_cb),
+                         ev_window);
 
        ev_window->priv->find_bar = egg_find_bar_new ();
        gtk_box_pack_end (GTK_BOX (ev_window->priv->main_box),