X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-window.c;h=fe1c2263a049c44c68051d1b328ce5e80a6ec040;hb=f7d8183b26d763d0501f40720aed357d5aa35029;hp=8a0ec4efc49b536c0630c4142aca51d13895b4f9;hpb=1cae373877770afcec33a277b4d52c945c0755bd;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 8a0ec4ef..fe1c2263 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -52,6 +52,9 @@ #include "egg-editable-toolbar.h" #include "ephy-zoom.h" #include "ephy-zoom-action.h" +#include "ev-application.h" +#include "ev-stock-icons.h" +#include "ev-file-helpers.h" #include #include @@ -66,9 +69,6 @@ #include -#include "ev-application.h" -#include "ev-stock-icons.h" - typedef enum { PAGE_MODE_SINGLE_PAGE, PAGE_MODE_CONTINUOUS_PAGE, @@ -252,9 +252,6 @@ update_action_sensitivity (EvWindow *ev_window) 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, PAGE_SELECTOR_ACTION, has_pages); @@ -341,6 +338,28 @@ update_chrome_flag (EvWindow *window, EvChrome flag, const char *pref, gboolean update_chrome_visibility (window); } +static void +ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window) +{ + GtkAction *action; + + action = gtk_action_group_get_action (window->priv->action_group, + PAGE_SELECTOR_ACTION); + ev_page_action_grab_focus (EV_PAGE_ACTION (action)); +} + +static void +ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) +{ + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_FORWARD); +} + +static void +ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window) +{ + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_BACKWARD); +} + static void ev_window_cmd_continuous (GtkAction *action, EvWindow *ev_window) { @@ -1065,6 +1084,8 @@ ev_window_print (EvWindow *ev_window) GnomePrintConfig *config; GnomePrintJob *job; GtkWidget *print_dialog; + EvPageCache *page_cache; + gchar *pages_label; EvPrintJob *print_job = NULL; g_return_if_fail (EV_IS_WINDOW (ev_window)); @@ -1073,9 +1094,21 @@ ev_window_print (EvWindow *ev_window) config = gnome_print_config_default (); job = gnome_print_job_new (config); + page_cache = ev_document_get_page_cache (ev_window->priv->document); + print_dialog = gnome_print_dialog_new (job, (guchar *) _("Print"), (GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES)); + + pages_label = g_strconcat (_("Pages"), " ", NULL); + gnome_print_dialog_construct_range_page (GNOME_PRINT_DIALOG (print_dialog), + GNOME_PRINT_RANGE_ALL | + GNOME_PRINT_RANGE_RANGE, + 1, + ev_page_cache_get_n_pages (page_cache), + NULL, (const guchar *)pages_label); + g_free (pages_label); + gtk_dialog_set_response_sensitive (GTK_DIALOG (print_dialog), GNOME_PRINT_DIALOG_RESPONSE_PREVIEW, FALSE); @@ -1643,8 +1676,10 @@ static void ev_window_cmd_edit_toolbar_cb (GtkDialog *dialog, gint response, gpointer data) { EvWindow *ev_window = EV_WINDOW (data); - egg_editable_toolbar_set_edit_mode (EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar), FALSE); - egg_toolbars_model_save (ev_window->priv->toolbar_model, ev_window->priv->toolbar_file, "1.0"); + egg_editable_toolbar_set_edit_mode + (EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar), FALSE); + egg_toolbars_model_save (ev_window->priv->toolbar_model, + ev_window->priv->toolbar_file, "1.0"); gtk_widget_destroy (GTK_WIDGET (dialog)); } @@ -2310,8 +2345,8 @@ static const GtkActionEntry entries[] = { { "EditFindNext", NULL, N_("Find Ne_xt"), "G", N_("Find next occurrence of the word or phrase"), G_CALLBACK (ev_window_cmd_edit_find_next) }, - { "EditToolbar", NULL, N_("Toolbar..."), NULL, - N_("Open Toolbar Editor Dialog"), + { "EditToolbar", NULL, N_("T_oolbar"), NULL, + N_("Customize the toolbar"), G_CALLBACK (ev_window_cmd_edit_toolbar) }, /* View menu */ @@ -2357,11 +2392,26 @@ static const GtkActionEntry entries[] = { G_CALLBACK (ev_window_cmd_leave_fullscreen) }, /* Accellerators */ - { "Escape", NULL, N_("Selection Caret"), "Escape", "", + { "Escape", NULL, "", "Escape", "", G_CALLBACK (ev_window_cmd_escape) }, { "Slash", GTK_STOCK_FIND, NULL, "slash", N_("Find a word or phrase in the document"), - G_CALLBACK (ev_window_cmd_edit_find) } + G_CALLBACK (ev_window_cmd_edit_find) }, + { "Space", NULL, "", "space", + N_("Scroll one page forward"), + G_CALLBACK (ev_window_cmd_scroll_forward) }, + { "ShiftSpace", NULL, "", "space", + N_("Scroll one page backward"), + G_CALLBACK (ev_window_cmd_scroll_backward) }, + { "BackSpace", NULL, "", "BackSpace", + N_("Scroll one page backward"), + G_CALLBACK (ev_window_cmd_scroll_backward) }, + { "ShiftBackSpace", NULL, "", "BackSpace", + N_("Scroll one page forward"), + G_CALLBACK (ev_window_cmd_scroll_forward) }, + { "FocusPageSelector", NULL, "", "l", + N_("Focus the page selector"), + G_CALLBACK (ev_window_cmd_focus_page_selector) } }; /* Toggle items */ @@ -2575,13 +2625,48 @@ sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links, ev_page_action_set_model (EV_PAGE_ACTION (action), model); } + +static void +set_view_actions_sensitivity (EvWindow *window, gboolean sensitive) +{ + if (window->priv->action_group) { + set_action_sensitive (window, "Space", sensitive); + set_action_sensitive (window, "ShiftSpace", sensitive); + set_action_sensitive (window, "BackSpace", sensitive); + set_action_sensitive (window, "ShiftBackSpace", sensitive); + } +} + +static void +view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window) +{ + set_view_actions_sensitivity (window, TRUE); +} + +static void +view_actions_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window) +{ + set_view_actions_sensitivity (window, FALSE); +} + +static void +enable_view_actions_for_widget (EvWindow *window, GtkWidget *widget) +{ + g_signal_connect_object (widget, "focus_in_event", + G_CALLBACK (view_actions_focus_in_cb), + window, 0); + g_signal_connect_object (widget, "focus_out_event", + G_CALLBACK (view_actions_focus_out_cb), + window, 0); +} + static void ev_window_init (EvWindow *ev_window) { GtkActionGroup *action_group; GtkAccelGroup *accel_group; GError *error = NULL; - GtkWidget *sidebar_widget, *toolbar_dock; + GtkWidget *sidebar_widget, *toolbar_dock, *tree_view; GConfValue *value; GConfClient *client; int sidebar_size; @@ -2619,6 +2704,8 @@ ev_window_init (EvWindow *ev_window) gtk_ui_manager_get_accel_group (ev_window->priv->ui_manager); gtk_window_add_accel_group (GTK_WINDOW (ev_window), accel_group); + set_view_actions_sensitivity (ev_window, FALSE); + g_signal_connect (ev_window->priv->ui_manager, "connect_proxy", G_CALLBACK (connect_proxy_cb), ev_window); g_signal_connect (ev_window->priv->ui_manager, "disconnect_proxy", @@ -2642,7 +2729,7 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->toolbar_model = egg_toolbars_model_new (); ev_window->priv->toolbar_file = g_build_filename - (g_get_home_dir (), ".gnome2/evince_toolbar.xml", NULL); + (ev_dot_dir (), "evince_toolbar.xml", NULL); if (!g_file_test (ev_window->priv->toolbar_file, G_FILE_TEST_EXISTS)) { egg_toolbars_model_load (ev_window->priv->toolbar_model, @@ -2651,6 +2738,9 @@ ev_window_init (EvWindow *ev_window) egg_toolbars_model_load (ev_window->priv->toolbar_model, ev_window->priv->toolbar_file); } + + egg_toolbars_model_set_flags (ev_window->priv->toolbar_model, 0, + EGG_TB_MODEL_NOT_REMOVABLE); /* This sucks, but there is no way to have a draw=no, expand=true separator * in a GtkUIManager-built toolbar. So, just add another toolbar. @@ -2707,11 +2797,17 @@ ev_window_init (EvWindow *ev_window) "notify::model", G_CALLBACK (sidebar_widget_model_set), ev_window); + tree_view = ev_sidebar_links_get_treeview + (EV_SIDEBAR_LINKS (sidebar_widget)); + enable_view_actions_for_widget (ev_window, tree_view); gtk_widget_show (sidebar_widget); ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), sidebar_widget); sidebar_widget = ev_sidebar_thumbnails_new (); + tree_view = ev_sidebar_thumbnails_get_treeview + (EV_SIDEBAR_THUMBNAILS (sidebar_widget)); + enable_view_actions_for_widget (ev_window, tree_view); gtk_widget_show (sidebar_widget); ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar), sidebar_widget); @@ -2731,8 +2827,8 @@ ev_window_init (EvWindow *ev_window) "unlock", G_CALLBACK (ev_window_popup_password_dialog), ev_window); + enable_view_actions_for_widget (ev_window, ev_window->priv->view); 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 */