X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=d8d48ab13e39d456c8f89202c8f2e32357503f03;hb=f343927df4325959193353c52cff1ea4b20b2286;hp=dd2947fff01d5a44a701c5dddce167b9a0a89ef9;hpb=17f37a4bdb3e37586121edebd9e48cb24340b677;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index dd2947ff..d8d48ab1 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -68,6 +68,9 @@ #include "ev-message-area.h" #include "ev-mount-operation.h" #include "ev-file-monitor.h" +#ifdef ENABLE_DBUS +#include "ev-media-player-keys.h" +#endif /* ENABLE_DBUS */ #include @@ -631,9 +634,9 @@ ev_window_set_message_area (EvWindow *window, } static void -ev_window_error_message_response_cb (EvMessageArea *area, - gint response_id, - EvWindow *window) +ev_window_message_area_response_cb (EvMessageArea *area, + gint response_id, + EvWindow *window) { ev_window_set_message_area (window, NULL); } @@ -654,7 +657,28 @@ ev_window_error_message (GtkWindow *window, const gchar *msg, GError *error) if (error) ev_message_area_set_secondary_text (EV_MESSAGE_AREA (area), error->message); g_signal_connect (area, "response", - G_CALLBACK (ev_window_error_message_response_cb), + G_CALLBACK (ev_window_message_area_response_cb), + window); + gtk_widget_show (area); + ev_window_set_message_area (EV_WINDOW (window), area); +} + +static void +ev_window_warning_message (GtkWindow *window, const gchar *msg) +{ + GtkWidget *area; + + if (EV_WINDOW (window)->priv->message_area) + return; + + area = ev_message_area_new (GTK_MESSAGE_WARNING, + msg, + GTK_STOCK_CLOSE, + GTK_RESPONSE_CANCEL, + NULL); + + g_signal_connect (area, "response", + G_CALLBACK (ev_window_message_area_response_cb), window); gtk_widget_show (area); ev_window_set_message_area (EV_WINDOW (window), area); @@ -1085,7 +1109,8 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window, int rotation) gdouble scale; EvDocument *document = ev_window->priv->document; - if (!EV_IS_DOCUMENT_THUMBNAILS (document)) { + if (!EV_IS_DOCUMENT_THUMBNAILS (document) || + ev_page_cache_get_n_pages (ev_window->priv->page_cache) <= 0) { return; } @@ -1170,6 +1195,9 @@ ev_window_set_document (EvWindow *ev_window, EvDocument *document) if (ev_page_cache_get_n_pages (ev_window->priv->page_cache) > 0) { ev_view_set_document (view, document); + } else { + ev_window_warning_message (GTK_WINDOW (ev_window), + _("The document contains no pages")); } g_idle_add ((GSourceFunc)ev_window_setup_document, ev_window); @@ -3206,6 +3234,12 @@ ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window) ev_view_previous_page (EV_VIEW (ev_window->priv->view)); } +void +ev_window_go_previous_page (EvWindow *ev_window) +{ + ev_window_cmd_go_previous_page (NULL, ev_window); +} + static void ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window) { @@ -3214,6 +3248,12 @@ ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window) ev_view_next_page (EV_VIEW (ev_window->priv->view)); } +void +ev_window_go_next_page (EvWindow *ev_window) +{ + ev_window_cmd_go_next_page (NULL, ev_window); +} + static void ev_window_cmd_go_first_page (GtkAction *action, EvWindow *ev_window) { @@ -3222,6 +3262,12 @@ ev_window_cmd_go_first_page (GtkAction *action, EvWindow *ev_window) ev_page_cache_set_current_page (ev_window->priv->page_cache, 0); } +void +ev_window_go_first_page (EvWindow *ev_window) +{ + ev_window_cmd_go_first_page (NULL, ev_window); +} + static void ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window) { @@ -3233,6 +3279,12 @@ ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window) ev_page_cache_set_current_page (ev_window->priv->page_cache, n_pages - 1); } +void +ev_window_go_last_page (EvWindow *ev_window) +{ + ev_window_cmd_go_last_page (NULL, ev_window); +} + static void ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window) { @@ -3333,6 +3385,12 @@ ev_window_cmd_start_presentation (GtkAction *action, EvWindow *window) ev_window_run_presentation (window); } +void +ev_window_start_presentation (EvWindow *ev_window) +{ + ev_window_run_presentation (ev_window); +} + static gboolean ev_window_enumerate_printer_cb (GtkPrinter *printer, EvWindow *window) @@ -4076,6 +4134,15 @@ ev_window_dispose (GObject *object) { EvWindow *window = EV_WINDOW (object); EvWindowPrivate *priv = window->priv; +#ifdef ENABLE_DBUS + GObject *keys; + + keys = ev_application_get_media_keys (EV_APP); + if (keys) { + ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys), NULL); + g_object_unref (keys); + } +#endif /* ENABLE_DBUS */ if (priv->monitor) { g_object_unref (priv->monitor); @@ -4298,9 +4365,9 @@ static const GtkActionEntry entries[] = { G_CALLBACK (ev_window_cmd_edit_find_previous) }, { "EditToolbar", NULL, N_("T_oolbar"), NULL, NULL, G_CALLBACK (ev_window_cmd_edit_toolbar) }, - { "EditRotateLeft", EV_STOCK_ROTATE_LEFT, N_("Rotate _Left"), NULL, NULL, + { "EditRotateLeft", EV_STOCK_ROTATE_LEFT, N_("Rotate _Left"), "Left", NULL, G_CALLBACK (ev_window_cmd_edit_rotate_left) }, - { "EditRotateRight", EV_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), NULL, NULL, + { "EditRotateRight", EV_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "Right", NULL, G_CALLBACK (ev_window_cmd_edit_rotate_right) }, /* View menu */ @@ -4599,6 +4666,16 @@ sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links, static gboolean view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window) { +#ifdef ENABLE_DBUS + GObject *keys; + + keys = ev_application_get_media_keys (EV_APP); + if (keys) { + ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys), window); + g_object_unref (keys); + } +#endif /* ENABLE_DBUS */ + update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, FALSE); ev_window_set_action_sensitive (window, "ViewToolbar", TRUE);