#include "ev-window.h"
#include "ev-sidebar.h"
+#include "ev-sidebar-bookmarks.h"
+#include "ev-sidebar-thumbnails.h"
#include "ev-view.h"
#include "eggfindbar.h"
GtkWidget *find_bar;
GtkWidget *bonobo_widget;
GtkWidget *view;
+ GtkActionGroup *action_group;
GtkUIManager *ui_manager;
GtkWidget *statusbar;
guint help_message_cid;
}
#endif
+static void
+set_action_sensitive (EvWindow *ev_window,
+ const char *name,
+ gboolean sensitive)
+{
+ GtkAction *action = gtk_action_group_get_action (ev_window->priv->action_group,
+ name);
+ gtk_action_set_sensitive (action, sensitive);
+}
+
+static void
+update_action_sensitivity (EvWindow *ev_window)
+{
+ int n_pages;
+ int page;
+
+ if (ev_window->priv->document)
+ n_pages = ev_document_get_n_pages (ev_window->priv->document);
+ else
+ n_pages = 1;
+
+ page = ev_view_get_page (EV_VIEW (ev_window->priv->view));
+
+ set_action_sensitive (ev_window, "GoFirstPage", page > 1);
+ set_action_sensitive (ev_window, "GoPreviousPage", page > 1);
+ set_action_sensitive (ev_window, "GoNextPage", page < n_pages);
+ set_action_sensitive (ev_window, "GoLastPage", page < n_pages);
+}
+
gboolean
ev_window_is_empty (const EvWindow *ev_window)
{
ev_view_set_document (EV_VIEW (ev_window->priv->view),
document);
+
+ update_action_sensitivity (ev_window);
} else {
GtkWidget *dialog;
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
"%s", error->message);
gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
g_error_free (error);
}
{
g_return_if_fail (EV_IS_WINDOW (ev_window));
- /* FIXME */
+ ev_view_set_page (EV_VIEW (ev_window->priv->view),
+ ev_view_get_page (EV_VIEW (ev_window->priv->view)) - 1);
}
static void
{
g_return_if_fail (EV_IS_WINDOW (ev_window));
- /* FIXME */
+ ev_view_set_page (EV_VIEW (ev_window->priv->view),
+ ev_view_get_page (EV_VIEW (ev_window->priv->view)) + 1);
}
static void
{
g_return_if_fail (EV_IS_WINDOW (ev_window));
- /* FIXME */
+ ev_view_set_page (EV_VIEW (ev_window->priv->view), 1);
}
static void
{
g_return_if_fail (EV_IS_WINDOW (ev_window));
- /* FIXME */
+ ev_view_set_page (EV_VIEW (ev_window->priv->view), G_MAXINT);
}
static void
}
}
+static void
+view_page_changed_cb (EvView *view,
+ EvWindow *ev_window)
+{
+ update_action_sensitivity (ev_window);
+}
+
static void
find_bar_previous_cb (EggFindBar *find_bar,
EvWindow *ev_window)
priv->ui_manager = NULL;
}
+ if (priv->action_group) {
+ g_object_unref (priv->action_group);
+ priv->action_group = NULL;
+ }
+
G_OBJECT_CLASS (parent_class)->dispose (object);
}
GtkWidget *scrolled_window;
GtkWidget *menubar;
GtkWidget *toolbar;
+ GtkWidget *sidebar_widget;
ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
ev_window->priv->main_box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (ev_window), ev_window->priv->main_box);
gtk_widget_show (ev_window->priv->main_box);
-
+
action_group = gtk_action_group_new ("MenuActions");
+ ev_window->priv->action_group = action_group;
gtk_action_group_set_translation_domain (action_group, NULL);
gtk_action_group_add_actions (action_group, entries,
G_N_ELEMENTS (entries), ev_window);
gtk_paned_add1 (GTK_PANED (ev_window->priv->hpaned),
ev_window->priv->sidebar);
+ /* Stub sidebar, for now */
+ sidebar_widget = ev_sidebar_bookmarks_new ();
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ "bookmarks",
+ _("Bookmarks"),
+ sidebar_widget);
+
+ sidebar_widget = ev_sidebar_thumbnails_new ();
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ "thumbnails",
+ _("Thumbnails"),
+ sidebar_widget);
+
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolled_window);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
gtk_paned_add2 (GTK_PANED (ev_window->priv->hpaned),
scrolled_window);
gtk_widget_show (ev_window->priv->view);
gtk_container_add (GTK_CONTAINER (scrolled_window),
ev_window->priv->view);
+ g_signal_connect (ev_window->priv->view,
+ "page-changed",
+ G_CALLBACK (view_page_changed_cb),
+ ev_window);
ev_window->priv->statusbar = gtk_statusbar_new ();
gtk_widget_show (ev_window->priv->statusbar);
"notify::visible",
G_CALLBACK (find_bar_search_changed_cb),
ev_window);
+
+ update_action_sensitivity (ev_window);
}