]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Fixes bug #542924. Makes enums static to fix Solaris build.
[evince.git] / shell / ev-window.c
index dd2947fff01d5a44a701c5dddce167b9a0a89ef9..d8d48ab13e39d456c8f89202c8f2e32357503f03 100644 (file)
@@ -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 <gtk/gtkprintunixdialog.h>
 
@@ -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"), "<alt>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"), "<alt>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);