X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=01c4f8a3ea9557876816afc0a6d0c6b9fe6a34ba;hb=8dbcee6be49013edc9821096288e2c078169e349;hp=407ce28b868e5f228f62b34cec2d00c01f889cee;hpb=4ff03ce9d5234a35ee07fe6724fcc616e9198200;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 407ce28b..01c4f8a3 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -29,12 +29,12 @@ #endif #include "ev-window.h" -#include "ev-navigation-action.h" #include "ev-page-action.h" #include "ev-sidebar.h" #include "ev-sidebar-links.h" #include "ev-sidebar-thumbnails.h" #include "ev-view.h" +#include "ev-page-view.h" #include "ev-password.h" #include "ev-password-view.h" #include "ev-print-job.h" @@ -71,6 +71,7 @@ struct _EvWindowPrivate { GtkWidget *find_bar; GtkWidget *scrolled_window; GtkWidget *view; + GtkWidget *page_view; GtkWidget *password_view; GtkActionGroup *action_group; GtkUIManager *ui_manager; @@ -82,6 +83,7 @@ struct _EvWindowPrivate { EvDocument *document; + EvWindowPageMode page_mode; /* These members are used temporarily when in PAGE_MODE_PASSWORD */ EvDocument *password_document; GtkWidget *password_dialog; @@ -93,8 +95,6 @@ struct _EvWindowPrivate { (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_WINDOW, EvWindowPrivate)) -#define NAVIGATION_BACK_ACTION "NavigationBack" -#define NAVIGATION_FORWARD_ACTION "NavigationForward" #define PAGE_SELECTOR_ACTION "PageSelector" @@ -122,20 +122,14 @@ static void update_action_sensitivity (EvWindow *ev_window) { EvDocument *document; + EvWindowPageMode page_mode; EvView *view; - gboolean can_go_back = FALSE; - gboolean can_go_forward = FALSE; - document = ev_window->priv->document; + page_mode = ev_window->priv->page_mode; view = EV_VIEW (ev_window->priv->view); - if (document) { - can_go_back = ev_view_can_go_back (view); - can_go_forward = ev_view_can_go_forward (view); - } - /* File menu */ /* "FileOpen": always sensitive */ set_action_sensitive (ev_window, "FileSaveAs", document!=NULL); @@ -159,8 +153,6 @@ update_action_sensitivity (EvWindow *ev_window) set_action_sensitive (ev_window, "ViewPageWidth", document!=NULL); /* Go menu */ - set_action_sensitive (ev_window, "GoBack", can_go_back); - set_action_sensitive (ev_window, "GoForward", can_go_forward); if (document) { int n_pages; int page; @@ -168,24 +160,30 @@ update_action_sensitivity (EvWindow *ev_window) page = ev_view_get_page (EV_VIEW (ev_window->priv->view)); n_pages = ev_document_get_n_pages (document); - set_action_sensitive (ev_window, "GoPageDown", page > 1); - set_action_sensitive (ev_window, "GoPageUp", page < n_pages); + set_action_sensitive (ev_window, "GoPageUp", page > 1); + set_action_sensitive (ev_window, "GoPageDown", page < n_pages); set_action_sensitive (ev_window, "GoFirstPage", page > 1); set_action_sensitive (ev_window, "GoLastPage", page < n_pages); } else { - set_action_sensitive (ev_window, "GoFirstPage", FALSE); - set_action_sensitive (ev_window, "GoPageDown", FALSE); + set_action_sensitive (ev_window, "GoFirstPage", FALSE); set_action_sensitive (ev_window, "GoPageUp", FALSE); + set_action_sensitive (ev_window, "GoPageDown", FALSE); set_action_sensitive (ev_window, "GoLastPage", FALSE); } + /* Page View radio group */ + if (document) { + set_action_sensitive (ev_window, "SinglePage", page_mode != PAGE_MODE_PASSWORD); + set_action_sensitive (ev_window, "ContinuousPage", page_mode != PAGE_MODE_PASSWORD); + } else { + set_action_sensitive (ev_window, "SinglePage", FALSE); + set_action_sensitive (ev_window, "ContinuousPage", FALSE); + } /* Help menu */ /* "HelpContents": always sensitive */ /* "HelpAbout": always sensitive */ /* Toolbar-specific actions: */ - set_action_sensitive (ev_window, NAVIGATION_BACK_ACTION, can_go_back); - set_action_sensitive (ev_window, NAVIGATION_FORWARD_ACTION, can_go_forward); set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, document!=NULL); } @@ -327,10 +325,9 @@ static void ev_window_setup_document (EvWindow *ev_window) { EvDocument *document; - EvHistory *history; EvView *view = EV_VIEW (ev_window->priv->view); + EvPageView *page_view = EV_PAGE_VIEW (ev_window->priv->page_view); EvSidebar *sidebar = EV_SIDEBAR (ev_window->priv->sidebar); - GtkAction *action; document = ev_window->priv->document; @@ -343,22 +340,9 @@ ev_window_setup_document (EvWindow *ev_window) ev_sidebar_set_document (sidebar, document); ev_view_set_document (view, document); + ev_page_view_set_document (page_view, document); - history = ev_history_new (); - ev_view_set_history (view, history); - g_object_unref (history); - - action = gtk_action_group_get_action - (ev_window->priv->action_group, NAVIGATION_BACK_ACTION); - ev_navigation_action_set_history - (EV_NAVIGATION_ACTION (action), history); - - action = gtk_action_group_get_action - (ev_window->priv->action_group, NAVIGATION_FORWARD_ACTION); - ev_navigation_action_set_history - (EV_NAVIGATION_ACTION (action), history); - - update_window_title (ev_window->priv->document, NULL, ev_window); + update_window_title (document, NULL, ev_window); update_total_pages (ev_window); update_action_sensitivity (ev_window); } @@ -513,7 +497,8 @@ ev_window_open (EvWindow *ev_window, const char *uri) document = NULL; else if (!strcmp (mime_type, "application/pdf")) document = g_object_new (PDF_TYPE_DOCUMENT, NULL); - else if (!strcmp (mime_type, "application/postscript")) + else if (!strcmp (mime_type, "application/postscript") || + !strcmp (mime_type, "image/x-eps")) document = g_object_new (PS_TYPE_DOCUMENT, NULL); else if (mime_type_supported_by_gdk_pixbuf (mime_type)) document = g_object_new (PIXBUF_TYPE_DOCUMENT, NULL); @@ -1021,6 +1006,11 @@ ev_window_set_page_mode (EvWindow *window, GtkWidget *child = NULL; GtkWidget *real_child; + if (window->priv->page_mode == page_mode) + return; + + window->priv->page_mode = page_mode; + switch (page_mode) { case PAGE_MODE_SINGLE_PAGE: child = window->priv->view; @@ -1028,10 +1018,13 @@ ev_window_set_page_mode (EvWindow *window, case PAGE_MODE_PASSWORD: child = window->priv->password_view; break; + case PAGE_MODE_CONTINUOUS_PAGE: + child = window->priv->page_view; + break; default: - g_warning ("page_mode not implemented yet\n"); g_assert_not_reached (); } + real_child = gtk_bin_get_child (GTK_BIN (window->priv->scrolled_window)); if (child != real_child) { gtk_container_remove (GTK_CONTAINER (window->priv->scrolled_window), @@ -1039,6 +1032,7 @@ ev_window_set_page_mode (EvWindow *window, gtk_container_add (GTK_CONTAINER (window->priv->scrolled_window), child); } + update_action_sensitivity (window); } static void @@ -1081,22 +1075,6 @@ ev_window_cmd_view_page_width (GtkAction *action, EvWindow *ev_window) ev_view_fit_width (EV_VIEW (ev_window->priv->view)); } -static void -ev_window_cmd_go_back (GtkAction *action, EvWindow *ev_window) -{ - g_return_if_fail (EV_IS_WINDOW (ev_window)); - - ev_view_go_back (EV_VIEW (ev_window->priv->view)); -} - -static void -ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window) -{ - g_return_if_fail (EV_IS_WINDOW (ev_window)); - - ev_view_go_forward (EV_VIEW (ev_window->priv->view)); -} - static void ev_window_cmd_go_page_up (GtkAction *action, EvWindow *ev_window) { @@ -1338,17 +1316,14 @@ static void find_bar_previous_cb (EggFindBar *find_bar, EvWindow *ev_window) { - /* FIXME - highlight previous result */ - g_printerr ("Find Previous\n"); - + ev_view_find_previous (EV_VIEW (ev_window->priv->view)); } static void find_bar_next_cb (EggFindBar *find_bar, EvWindow *ev_window) { - /* FIXME - highlight next result */ - g_printerr ("Find Next\n"); + ev_view_find_next (EV_VIEW (ev_window->priv->view)); } static void @@ -1361,6 +1336,21 @@ find_bar_close_cb (EggFindBar *find_bar, ev_window_update_fullscreen_popup (ev_window); } +static void +ev_window_page_mode_cb (GtkRadioAction *action, + GtkRadioAction *activated_action, + EvWindow *window) +{ + int mode; + + mode = gtk_radio_action_get_current_value (action); + + g_assert (mode == PAGE_MODE_CONTINUOUS_PAGE || + mode == PAGE_MODE_SINGLE_PAGE); + + ev_window_set_page_mode (window, (EvWindowPageMode) mode); +} + static void find_bar_search_changed_cb (EggFindBar *find_bar, GParamSpec *param, @@ -1498,16 +1488,10 @@ static GtkActionEntry entries[] = { G_CALLBACK (ev_window_cmd_view_page_width) }, /* Go menu */ - { "GoBack", GTK_STOCK_GO_BACK, N_("_Back"), "Left", - N_("Go to the page viewed before this one"), - G_CALLBACK (ev_window_cmd_go_back) }, - { "GoForward", GTK_STOCK_GO_FORWARD, N_("Fo_rward"), "Right", - N_("Go to the page viewed before this one"), - G_CALLBACK (ev_window_cmd_go_forward) }, - { "GoPageDown", GTK_STOCK_GO_UP, N_("_Page Up"), "Page_Up", + { "GoPageUp", GTK_STOCK_GO_UP, N_("_Page Up"), "Page_Up", N_("Go to the previous page"), G_CALLBACK (ev_window_cmd_go_page_up) }, - { "GoPageUp", GTK_STOCK_GO_DOWN, N_("_Page Down"), "Page_Down", + { "GoPageDown", GTK_STOCK_GO_DOWN, N_("_Page Down"), "Page_Down", N_("Go to the next page"), G_CALLBACK (ev_window_cmd_go_page_down) }, { "GoFirstPage", GTK_STOCK_GOTO_FIRST, N_("_First Page"), "Home", @@ -1544,6 +1528,15 @@ static GtkToggleActionEntry toggle_entries[] = { G_CALLBACK (ev_window_cmd_view_fullscreen) }, }; +static GtkRadioActionEntry page_view_entries[] = { + { "SinglePage", GTK_STOCK_DND, N_("Single"), NULL, + N_("Show the document one page at a time"), + PAGE_MODE_SINGLE_PAGE }, + { "ContinuousPage", GTK_STOCK_DND_MULTIPLE, N_("Multi"), NULL, + N_("Show the full document at once"), + PAGE_MODE_CONTINUOUS_PAGE } +}; + static void goto_page_cb (GtkAction *action, int page_number, EvWindow *ev_window) { @@ -1559,33 +1552,6 @@ register_custom_actions (EvWindow *window, GtkActionGroup *group) { GtkAction *action; - action = g_object_new (EV_TYPE_NAVIGATION_ACTION, - "name", NAVIGATION_BACK_ACTION, - "label", _("Back"), - "stock_id", GTK_STOCK_GO_BACK, - "tooltip", _("Go back"), - "arrow-tooltip", _("Back history"), - "direction", EV_NAVIGATION_DIRECTION_BACK, - "is_important", TRUE, - NULL); - g_signal_connect (action, "activate", - G_CALLBACK (ev_window_cmd_go_back), window); - gtk_action_group_add_action (group, action); - g_object_unref (action); - - action = g_object_new (EV_TYPE_NAVIGATION_ACTION, - "name", NAVIGATION_FORWARD_ACTION, - "label", _("Forward"), - "stock_id", GTK_STOCK_GO_FORWARD, - "tooltip", _("Go forward"), - "arrow-tooltip", _("Forward history"), - "direction", EV_NAVIGATION_DIRECTION_FORWARD, - NULL); - g_signal_connect (action, "activate", - G_CALLBACK (ev_window_cmd_go_forward), window); - gtk_action_group_add_action (group, action); - g_object_unref (action); - action = g_object_new (EV_TYPE_PAGE_ACTION, "name", PAGE_SELECTOR_ACTION, "label", _("Page"), @@ -1622,6 +1588,7 @@ ev_window_init (EvWindow *ev_window) ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window); + ev_window->priv->page_mode = PAGE_MODE_SINGLE_PAGE; update_window_title (NULL, NULL, ev_window); ev_window->priv->main_box = gtk_vbox_new (FALSE, 0); @@ -1636,6 +1603,11 @@ ev_window_init (EvWindow *ev_window) gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), ev_window); + gtk_action_group_add_radio_actions (action_group, page_view_entries, + G_N_ELEMENTS (page_view_entries), + ev_window->priv->page_mode, + G_CALLBACK (ev_window_page_mode_cb), + ev_window); set_short_labels (action_group); register_custom_actions (ev_window, action_group); @@ -1707,15 +1679,19 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->scrolled_window); ev_window->priv->view = ev_view_new (); + ev_window->priv->page_view = ev_page_view_new (); ev_window->priv->password_view = ev_password_view_new (); g_signal_connect_swapped (ev_window->priv->password_view, "unlock", G_CALLBACK (ev_window_popup_password_dialog), ev_window); gtk_widget_show (ev_window->priv->view); + gtk_widget_show (ev_window->priv->page_view); gtk_widget_show (ev_window->priv->password_view); + /* We own a ref on these widgets, as we can swap them in and out */ g_object_ref (ev_window->priv->view); + g_object_ref (ev_window->priv->page_view); g_object_ref (ev_window->priv->password_view); gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window),