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);
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);
/* 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",
ev_view_set_document (view, document);
}
- ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri);
ev_window_title_set_document (ev_window->priv->title, document);
+ ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri);
action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
ev_page_action_set_document (EV_PAGE_ACTION (action), document);
update_action_sensitivity (ev_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)
{
g_list_free (windows);
}
- g_list_free (windows);
G_OBJECT_CLASS (ev_window_parent_class)->finalize (object);
}
G_CALLBACK (ev_window_cmd_view_zoom_in) },
{ "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal", NULL,
G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "Equal", GTK_STOCK_ZOOM_IN, NULL, "equal", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
{ "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus", NULL,
G_CALLBACK (ev_window_cmd_view_zoom_out) },
{ "FocusPageSelector", NULL, "", "<control>l", NULL,
G_CALLBACK (ev_window_cmd_view_zoom_in) },
{ "KpMinus", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract", NULL,
G_CALLBACK (ev_window_cmd_view_zoom_out) },
+ { "CtrlKpPlus", GTK_STOCK_ZOOM_IN, NULL, "<control>KP_Add", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "CtrlKpMinus", GTK_STOCK_ZOOM_OUT, NULL, "<control>KP_Subtract", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_out) },
};
/* Toggle items */
set_action_sensitive (window, "Minus", sensitive);
set_action_sensitive (window, "KpPlus", sensitive);
set_action_sensitive (window, "KpMinus", sensitive);
+ set_action_sensitive (window, "Equal", sensitive);
}
}
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);
}
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);
"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),