X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=fe1c2263a049c44c68051d1b328ce5e80a6ec040;hb=f7d8183b26d763d0501f40720aed357d5aa35029;hp=489c1cc01b9b3f8efae60077f683041a55e26e82;hpb=43f12b7663328557c87c4d579a21e37e520ebdb3;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 489c1cc0..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) { @@ -1657,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)); } @@ -2324,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 */ @@ -2371,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 */ @@ -2589,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; @@ -2633,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", @@ -2656,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, @@ -2665,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. @@ -2721,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); @@ -2745,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 */