X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=979298fdb5b9ed6e8263bdf331ff58574dff5e86;hb=57935abc1bed43333cd46e77ef3ba0bf60783a65;hp=5b832c553af6d6b376b59d61d1b1b34bb0f75e8d;hpb=8a07afcdde8003320294a9c1b90ff3a961964ea7;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 5b832c55..979298fd 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -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),