X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=944a469663bf25a9c4a4255c8f4e2175b997b8d1;hb=8c04c59b0a860e482d1e796f24d6be7e9c2bd76c;hp=15d671f5e938d164a1f0200a28729875591a29ff;hpb=43398c4ea1a940bc2ee2921d5811fe8ee4144a65;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 15d671f5..944a4696 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -37,7 +37,6 @@ #include "ev-view.h" #include "ev-password.h" #include "ev-password-view.h" -#include "ev-print-job.h" #include "ev-properties-dialog.h" #include "ev-ps-exporter.h" #include "ev-document-thumbnails.h" @@ -65,12 +64,16 @@ #include "ev-utils.h" #include "ev-debug.h" +#ifdef WITH_GNOME_PRINT +#include "ev-print-job.h" +#include +#endif + #include #include #include #include -#include #include #include @@ -102,14 +105,15 @@ struct _EvWindowPrivate { GtkWidget *find_bar; GtkWidget *scrolled_window; GtkWidget *view; - GtkWidget *page_view; GtkWidget *password_view; GtkWidget *sidebar_thumbs; GtkWidget *sidebar_links; /* Dialogs */ GtkWidget *properties; +#ifdef WITH_GNOME_PRINT GtkWidget *print_dialog; +#endif GtkWidget *password_dialog; /* UI Builders */ @@ -140,7 +144,9 @@ struct _EvWindowPrivate { /* Job used to load document */ EvJob *xfer_job; EvJob *load_job; +#ifdef WITH_GNOME_PRINT GnomePrintJob *print_job; +#endif }; static const GtkTargetEntry ev_drop_types[] = { @@ -276,6 +282,10 @@ update_action_sensitivity (EvWindow *ev_window) ok_to_copy_text = ev_view_get_has_selection (view); } +#ifndef WITH_GNOME_PRINT + ok_to_print = FALSE; +#endif + /* File menu */ /* "FileOpen": always sensitive */ set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy); @@ -309,8 +319,8 @@ update_action_sensitivity (EvWindow *ev_window) /* Go menu */ if (document) { - set_action_sensitive (ev_window, "GoPreviousPage", ev_view_can_previous_page (view)); - set_action_sensitive (ev_window, "GoNextPage", ev_view_can_next_page (view)); + set_action_sensitive (ev_window, "GoPreviousPage", page > 0); + set_action_sensitive (ev_window, "GoNextPage", page < n_pages - 1); set_action_sensitive (ev_window, "GoFirstPage", page > 0); set_action_sensitive (ev_window, "GoLastPage", page < n_pages - 1); } else { @@ -472,13 +482,13 @@ ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window) static void ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) { - ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_FORWARD); + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_FORWARD, FALSE); } static void ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window) { - ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_BACKWARD); + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_BACKWARD, FALSE); } static void @@ -751,14 +761,14 @@ setup_view_from_metadata (EvWindow *window) /* Presentation */ if (ev_metadata_manager_get (uri, "presentation", &presentation, FALSE)) { - if (g_value_get_boolean (&presentation)) { + if (g_value_get_boolean (&presentation) && uri) { ev_window_run_presentation (window); } } /* Fullscreen */ if (ev_metadata_manager_get (uri, "fullscreen", &fullscreen, FALSE)) { - if (g_value_get_boolean (&fullscreen)) { + if (g_value_get_boolean (&fullscreen) && uri) { ev_window_run_fullscreen (window); } } @@ -954,6 +964,8 @@ ev_window_load_job_cb (EvJobLoad *job, g_assert (document); g_assert (document != ev_window->priv->document); g_assert (job->uri); + + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); if (ev_window->priv->password_document) { g_object_unref (ev_window->priv->password_document); @@ -1007,6 +1019,7 @@ ev_window_xfer_job_cb (EvJobXfer *job, if (job->error != NULL) { unable_to_load (ev_window, job->error->message); ev_window_clear_jobs (ev_window); + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); } else { char *uri; @@ -1045,12 +1058,14 @@ ev_window_close_dialogs (EvWindow *ev_window) gtk_widget_destroy (ev_window->priv->password_dialog); ev_window->priv->password_dialog = NULL; +#ifdef WITH_GNOME_PRINT if (ev_window->priv->print_dialog) { gtk_widget_destroy (ev_window->priv->print_dialog); g_object_unref (ev_window->priv->print_job); } ev_window->priv->print_dialog = NULL; ev_window->priv->print_job = NULL; +#endif if (ev_window->priv->properties) gtk_widget_destroy (ev_window->priv->properties); @@ -1069,6 +1084,7 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri) ev_window_close_dialogs (ev_window); ev_window_clear_jobs (ev_window); ev_window_clear_local_uri (ev_window); + ev_view_set_loading (EV_VIEW (ev_window->priv->view), TRUE); ev_window->priv->xfer_job = ev_job_xfer_new (uri); g_signal_connect (ev_window->priv->xfer_job, @@ -1093,6 +1109,8 @@ file_open_dialog_response_cb (GtkWidget *chooser, g_slist_foreach (uris, (GFunc)g_free, NULL); g_slist_free (uris); } + ev_application_set_chooser_uri (EV_APP, + gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser))); gtk_widget_destroy (chooser); } @@ -1113,7 +1131,10 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *window) ev_document_types_add_filters (chooser, NULL); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE); - + if (ev_application_get_chooser_uri (EV_APP) != NULL) + gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (chooser), + ev_application_get_chooser_uri (EV_APP)); + g_signal_connect (chooser, "response", G_CALLBACK (file_open_dialog_response_cb), window); @@ -1230,7 +1251,10 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window) ev_document_types_add_filters (fc, ev_window->priv->document); gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK); - + +#ifdef HAVE_GTK_FILE_CHOOSER_SET_DO_OVERWRITE_CONFIRMATION + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER (fc), TRUE); +#endif file_name = gnome_vfs_format_uri_for_display (ev_window->priv->uri); base_name = g_path_get_basename (file_name); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), base_name); @@ -1253,10 +1277,13 @@ ev_window_print (EvWindow *window) page_cache = ev_page_cache_get (window->priv->document); last_page = ev_page_cache_get_n_pages (page_cache); +#ifdef WITH_GNOME_PRINT ev_window_print_range (window, 1, last_page); +#endif } +#ifdef WITH_GNOME_PRINT static gboolean ev_window_print_dialog_response_cb (GtkDialog *print_dialog, gint response, gpointer data) { @@ -1360,6 +1387,7 @@ ev_window_print_range (EvWindow *ev_window, int first_page, int last_page) gtk_widget_show (ev_window->priv->print_dialog); return; } +#endif /* WITH_GNOME_PRINT */ static void ev_window_cmd_file_print (GtkAction *action, EvWindow *ev_window) @@ -2487,6 +2515,9 @@ view_menu_popup_cb (EvView *view, gboolean show_external = FALSE; gboolean show_internal = FALSE; GtkAction *action; + + if (ev_view_get_presentation (EV_VIEW (ev_window->priv->view))) + return FALSE; if (ev_window->priv->link) g_object_unref (ev_window->priv->link); @@ -2530,7 +2561,7 @@ view_menu_popup_cb (EvView *view, gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, 3, gtk_get_current_event_time ()); - return TRUE; + return FALSE; } static void @@ -2590,6 +2621,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, #if 0 g_printerr ("search for '%s'\n", search_string ? search_string : "(nil)"); #endif + ev_view_search_changed (EV_VIEW(ev_window->priv->view)); if (ev_window->priv->document && EV_IS_DOCUMENT_FIND (ev_window->priv->document)) { @@ -2613,6 +2645,12 @@ find_bar_search_changed_cb (EggFindBar *find_bar, } } +static void +find_bar_scroll(EggFindBar *find_bar, GtkScrollType scroll, EvWindow* ev_window) +{ + ev_view_scroll(EV_VIEW(ev_window->priv->view), scroll, FALSE); +} + static void zoom_control_changed_cb (EphyZoomAction *action, float zoom, @@ -2697,11 +2735,6 @@ ev_window_dispose (GObject *object) priv->view = NULL; } - if (priv->page_view) { - g_object_unref (priv->page_view); - priv->page_view = NULL; - } - if (priv->load_job || priv->xfer_job) { ev_window_clear_jobs (window); } @@ -2889,7 +2922,7 @@ static const GtkToggleActionEntry toggle_entries[] = { { "ViewToolbar", NULL, N_("_Toolbar"), "T", N_("Show or hide the toolbar"), G_CALLBACK (ev_window_view_toolbar_cb), TRUE }, - { "ViewSidebar", NULL, N_("Side _Pane"), "F9", + { "ViewSidebar", GTK_STOCK_INDEX, N_("Side _Pane"), "F9", N_("Show or hide the side pane"), G_CALLBACK (ev_window_view_sidebar_cb), TRUE }, { "ViewContinuous", EV_STOCK_VIEW_CONTINUOUS, N_("_Continuous"), NULL, @@ -3426,7 +3459,6 @@ ev_window_init (EvWindow *ev_window) /* 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), @@ -3496,6 +3528,10 @@ ev_window_init (EvWindow *ev_window) "notify::visible", G_CALLBACK (find_bar_search_changed_cb), ev_window); + g_signal_connect (ev_window->priv->find_bar, + "scroll", + G_CALLBACK (find_bar_scroll), + ev_window); /* Popups */ ev_window->priv->popup = gtk_ui_manager_get_widget (ev_window->priv->ui_manager,