X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=c53b772b448f761de91ecf50a151ae5285a750b3;hb=e03ccc6269d7e687b4f5a67a0c07a014f301930b;hp=cb09db468697f1e77aab13028134ee7950b7b241;hpb=43501f32deb50079e9f9eb7131a838f9548817bf;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index cb09db46..c53b772b 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -32,6 +32,7 @@ #include "ev-window-title.h" #include "ev-navigation-action.h" #include "ev-page-action.h" +#include "ev-open-recent-action.h" #include "ev-sidebar.h" #include "ev-sidebar-links.h" #include "ev-sidebar-attachments.h" @@ -51,13 +52,6 @@ #include "ev-jobs.h" #include "ev-sidebar-page.h" #include "eggfindbar.h" - -#ifndef HAVE_GTK_RECENT -#include "egg-recent-view-uimanager.h" -#include "egg-recent-view.h" -#include "egg-recent-model.h" -#endif - #include "egg-toolbar-editor.h" #include "egg-editable-toolbar.h" #include "egg-toolbars-model.h" @@ -145,11 +139,9 @@ struct _EvWindowPrivate { GtkActionGroup *action_group; GtkActionGroup *view_popup_action_group; GtkActionGroup *attachment_popup_action_group; -#ifdef HAVE_GTK_RECENT GtkRecentManager *recent_manager; GtkActionGroup *recent_action_group; guint recent_ui_id; -#endif GtkUIManager *ui_manager; /* Fullscreen mode */ @@ -183,9 +175,6 @@ struct _EvWindowPrivate { EvPageCache *page_cache; EvWindowPageMode page_mode; EvWindowTitle *title; -#ifndef HAVE_GTK_RECENT - EggRecentViewUIManager *recent_view; -#endif EvJob *load_job; EvJob *thumbnail_job; @@ -276,6 +265,8 @@ static void ev_window_cmd_view_page_width (GtkAction *action, static void view_handle_link_cb (EvView *view, EvLink *link, EvWindow *window); +static void ev_window_cmd_edit_find (GtkAction *action, + EvWindow *ev_window); static void find_bar_search_changed_cb (EggFindBar *find_bar, GParamSpec *param, EvWindow *ev_window); @@ -1353,6 +1344,10 @@ ev_window_load_job_cb (EvJobLoad *job, find_bar_search_changed_cb (EGG_FIND_BAR (ev_window->priv->find_bar), NULL, ev_window); } + } else if (job->search_string && EV_IS_DOCUMENT_FIND (document)) { + ev_window_cmd_edit_find (NULL, ev_window); + egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar), + job->search_string); } ev_window_clear_load_job (ev_window); @@ -1459,11 +1454,17 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri, EvLinkDest *dest, EvWindowRunMode mode, + const gchar *search_string, gboolean unlink_temp_file, const gchar *print_settings) { GnomeVFSURI *source_uri; GnomeVFSURI *target_uri; + + if (ev_window->priv->uri && + g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0) { + ev_window->priv->in_reload = TRUE; + } ev_window_close_dialogs (ev_window); ev_window_clear_load_job (ev_window); @@ -1484,7 +1485,7 @@ ev_window_open_uri (EvWindow *ev_window, setup_size_from_metadata (ev_window); - ev_window->priv->load_job = ev_job_load_new (uri, dest, mode); + ev_window->priv->load_job = ev_job_load_new (uri, dest, mode, search_string); g_signal_connect (ev_window->priv->load_job, "finished", G_CALLBACK (ev_window_load_job_cb), @@ -1686,6 +1687,7 @@ ev_window_cmd_file_open_copy_at_dest (EvWindow *window, EvLinkDest *dest) gtk_window_get_screen (GTK_WINDOW (window)), dest, 0, + NULL, TRUE, NULL, GDK_CURRENT_TIME); @@ -1707,10 +1709,9 @@ ev_window_cmd_file_open_copy (GtkAction *action, EvWindow *window) g_object_unref (dest); } -#ifdef HAVE_GTK_RECENT static void -ev_window_cmd_recent_file_activate (GtkAction *action, - EvWindow *window) +ev_window_cmd_recent_file_activate (GtkAction *action, + EvWindow *window) { GtkRecentInfo *info; const gchar *uri; @@ -1722,46 +1723,27 @@ ev_window_cmd_recent_file_activate (GtkAction *action, ev_application_open_uri_at_dest (EV_APP, uri, gtk_window_get_screen (GTK_WINDOW (window)), - NULL, 0, FALSE, NULL, + NULL, 0, NULL, FALSE, NULL, GDK_CURRENT_TIME); } -#else + static void -ev_window_cmd_recent_file_activate (GtkAction *action, - EvWindow *ev_window) +ev_window_open_recent_action_item_activated (EvOpenRecentAction *action, + const gchar *uri, + EvWindow *window) { - char *uri; - EggRecentItem *item; - - item = egg_recent_view_uimanager_get_item (ev_window->priv->recent_view, - action); - - uri = egg_recent_item_get_uri (item); - ev_application_open_uri_at_dest (EV_APP, uri, - gtk_window_get_screen (GTK_WINDOW (ev_window)), - NULL, 0, FALSE, NULL, + gtk_window_get_screen (GTK_WINDOW (window)), + NULL, 0, NULL, FALSE, NULL, GDK_CURRENT_TIME); - - g_free (uri); } -#endif /* HAVE_GTK_RECENT */ static void ev_window_add_recent (EvWindow *window, const char *filename) { -#ifdef HAVE_GTK_RECENT gtk_recent_manager_add_item (window->priv->recent_manager, filename); -#else - EggRecentItem *item; - - item = egg_recent_item_new_from_uri (filename); - egg_recent_item_add_group (item, "Evince"); - egg_recent_model_add_full (ev_application_get_recent_model (EV_APP), item); -#endif /* HAVE_GTK_RECENT */ } -#ifdef HAVE_GTK_RECENT static gint compare_recent_items (GtkRecentInfo *a, GtkRecentInfo *b) { @@ -1786,7 +1768,6 @@ compare_recent_items (GtkRecentInfo *a, GtkRecentInfo *b) return 0; } -#endif /* HAVE_GTK_RECENT */ /* * Doubles underscore to avoid spurious menu accels. @@ -1830,7 +1811,6 @@ ev_window_get_recent_file_label (gint index, const gchar *filename) static void ev_window_setup_recent (EvWindow *ev_window) { -#ifdef HAVE_GTK_RECENT GList *items, *l; guint n_items = 0; const gchar *evince = g_get_application_name (); @@ -1905,22 +1885,6 @@ ev_window_setup_recent (EvWindow *ev_window) g_list_foreach (items, (GFunc) gtk_recent_info_unref, NULL); g_list_free (items); -#else /* HAVE_GTK_RECENT */ - ev_window->priv->recent_view = egg_recent_view_uimanager_new (ev_window->priv->ui_manager, - "/MainMenu/FileMenu/RecentFilesMenu", - G_CALLBACK (ev_window_cmd_recent_file_activate), - ev_window); - - egg_recent_view_uimanager_show_icons (EGG_RECENT_VIEW_UIMANAGER (ev_window->priv->recent_view), FALSE); - - egg_recent_view_set_model (EGG_RECENT_VIEW (ev_window->priv->recent_view), - ev_application_get_recent_model (EV_APP)); - - egg_recent_view_uimanager_set_trailing_sep (ev_window->priv->recent_view, TRUE); - - g_signal_connect (ev_window->priv->recent_view, "activate", - G_CALLBACK (ev_window_cmd_recent_file_activate), ev_window); -#endif /* HAVE_GTK_RECENT */ } static gint @@ -2230,6 +2194,7 @@ ev_window_print_send (EvWindow *window, gtk_window_get_screen (GTK_WINDOW (window)), NULL, EV_WINDOW_MODE_PREVIEW, + NULL, TRUE, print_settings_file, GDK_CURRENT_TIME); @@ -3285,10 +3250,8 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window) { gchar *uri; - ev_window->priv->in_reload = TRUE; - uri = g_strdup (ev_window->priv->uri); - ev_window_open_uri (ev_window, uri, NULL, 0, FALSE, NULL); + ev_window_open_uri (ev_window, uri, NULL, 0, NULL, FALSE, NULL); g_free (uri); } @@ -3320,6 +3283,8 @@ ev_window_cmd_help_contents (GtkAction *action, EvWindow *ev_window) if (g_file_test (uri, G_FILE_TEST_EXISTS)) { break; } + g_free (uri); + uri = NULL; } if (uri == NULL) { @@ -4125,7 +4090,6 @@ ev_window_dispose (GObject *object) priv->attachment_popup_action_group = NULL; } -#ifdef HAVE_GTK_RECENT if (priv->recent_action_group) { g_object_unref (priv->recent_action_group); priv->recent_action_group = NULL; @@ -4139,12 +4103,6 @@ ev_window_dispose (GObject *object) } priv->recent_ui_id = 0; -#else - if (priv->recent_view) { - g_object_unref (priv->recent_view); - priv->recent_view = NULL; - } -#endif /* HAVE_GTK_RECENT */ if (priv->page_cache) { g_signal_handlers_disconnect_by_func (priv->page_cache, page_changed_cb, window); @@ -4311,11 +4269,7 @@ static const GtkActionEntry entries[] = { /* Edit menu */ { "EditCopy", GTK_STOCK_COPY, NULL, "C", NULL, G_CALLBACK (ev_window_cmd_edit_copy) }, -#ifdef HAVE_GTK_RECENT { "EditSelectAll", GTK_STOCK_SELECT_ALL, N_("Select _All"), "A", NULL, -#else - { "EditSelectAll", NULL, N_("Select _All"), "A", NULL, -#endif /* HAVE_GTK_RECENT */ G_CALLBACK (ev_window_cmd_edit_select_all) }, { "EditFind", GTK_STOCK_FIND, N_("_Find..."), "F", N_("Find a word or phrase in the document"), @@ -4534,6 +4488,20 @@ register_custom_actions (EvWindow *window, GtkActionGroup *group) G_CALLBACK (navigation_action_activate_link_cb), window); gtk_action_group_add_action (group, action); g_object_unref (action); + + action = g_object_new (EV_TYPE_OPEN_RECENT_ACTION, + "name", "FileOpenRecent", + "label", _("_Open..."), + "tooltip", _("Open an existing document"), + "stock_id", GTK_STOCK_OPEN, + NULL); + g_signal_connect (action, "activate", + G_CALLBACK (ev_window_cmd_file_open), window); + g_signal_connect (action, "item_activated", + G_CALLBACK (ev_window_open_recent_action_item_activated), + window); + gtk_action_group_add_action (group, action); + g_object_unref (action); } static void @@ -4728,45 +4696,41 @@ launch_action (EvWindow *window, EvLinkAction *action) allowing to launch executables is a good idea though. -- marco */ } -static gboolean -uri_is_valid (const gchar *uri) -{ - gchar *p = (gchar *) uri; - - if (!p || !g_ascii_isalpha (*p)) - return FALSE; - - p++; - while (g_ascii_isalnum (*p)) - p++; - - return (g_ascii_strncasecmp (p, "://", strlen ("://")) == 0); -} - static void launch_external_uri (EvWindow *window, EvLinkAction *action) { const gchar *uri = ev_link_action_get_uri (action); - - if (!uri_is_valid (uri)) { - GtkWidget *dialog; + GnomeVFSResult result = gnome_vfs_url_show (uri); + GtkWidget *dialog; + gchar* message = NULL; + switch(result) { + case GNOME_VFS_OK: + break; + case GNOME_VFS_ERROR_BAD_PARAMETERS: + message = _("Invalid URI: “%s”"); + break; + case GNOME_VFS_ERROR_NOT_SUPPORTED: + message = _("Unsupported URI: “%s”"); + break; + default: + message = _("Unknown error"); + } + if(message) { dialog = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Unable to open external link")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - _("Invalid URI: “%s”"), uri); + message, uri); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show (dialog); - return; } - - gnome_vfs_url_show (uri); + return; } static void @@ -4785,6 +4749,7 @@ open_remote_link (EvWindow *window, EvLinkAction *action) gtk_window_get_screen (GTK_WINDOW (window)), ev_link_action_get_dest (action), 0, + NULL, FALSE, NULL, GDK_CURRENT_TIME); @@ -5212,7 +5177,6 @@ ev_window_init (EvWindow *ev_window) g_error_free (error); } -#ifdef HAVE_GTK_RECENT #if GTK_CHECK_VERSION(2,11,4) ev_window->priv->recent_manager = gtk_recent_manager_get_default (); #else @@ -5226,8 +5190,7 @@ ev_window_init (EvWindow *ev_window) "changed", G_CALLBACK (ev_window_setup_recent), ev_window); -#endif /* HAVE_GTK_RECENT */ - + ev_window->priv->menubar = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, "/MainMenu"); @@ -5235,7 +5198,6 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->menubar, FALSE, FALSE, 0); - ev_window->priv->toolbar = GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR, "ui-manager", ev_window->priv->ui_manager,