+static void
+set_widget_visibility (GtkWidget *widget, gboolean visible)
+{
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+
+ if (visible)
+ gtk_widget_show (widget);
+ else
+ gtk_widget_hide (widget);
+}
+
+static void
+update_chrome_visibility (EvWindow *window)
+{
+ EvWindowPrivate *priv = window->priv;
+ gboolean menubar, toolbar, sidebar, findbar, statusbar, fullscreen_toolbar;
+
+ menubar = (priv->chrome & EV_CHROME_MENUBAR) != 0 && !priv->fullscreen_mode;
+ toolbar = (priv->chrome & EV_CHROME_TOOLBAR) != 0 && !priv->fullscreen_mode;
+ sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !priv->fullscreen_mode;
+ fullscreen_toolbar = (priv->chrome & EV_CHROME_TOOLBAR) != 0;
+ statusbar = (priv->chrome & EV_CHROME_STATUSBAR) != 0 && !priv->fullscreen_mode;
+ findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
+
+ set_widget_visibility (priv->menubar, menubar);
+ set_widget_visibility (priv->toolbar_dock, toolbar);
+ set_widget_visibility (priv->sidebar, sidebar);
+ set_widget_visibility (priv->find_bar, findbar);
+ set_widget_visibility (priv->statusbar, statusbar);
+ set_widget_visibility (priv->fullscreen_toolbar, fullscreen_toolbar);
+
+ if (priv->fullscreen_popup != NULL) {
+ set_widget_visibility (priv->fullscreen_popup, priv->fullscreen_mode);
+ }
+}
+
+static void
+update_chrome_flag (EvWindow *window, EvChrome flag, const char *pref, gboolean active)
+{
+ EvWindowPrivate *priv = window->priv;
+ GConfClient *client;
+
+ if (active) {
+ priv->chrome |= flag;
+ }
+ else {
+ priv->chrome &= ~flag;
+ }
+
+ if (pref != NULL) {
+ client = gconf_client_get_default ();
+ gconf_client_set_bool (client, pref, active, NULL);
+ g_object_unref (client);
+ }
+
+ update_chrome_visibility (window);
+}
+
+static void
+ev_window_cmd_view_best_fit (GtkAction *action, EvWindow *ev_window)
+{
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ ev_window_set_sizing_mode (ev_window, EV_SIZING_BEST_FIT);
+ } else {
+ ev_window_set_sizing_mode (ev_window, EV_SIZING_FREE);
+ }
+}
+
+static void
+ev_window_cmd_view_page_width (GtkAction *action, EvWindow *ev_window)
+{
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ ev_window_set_sizing_mode (ev_window, EV_SIZING_FIT_WIDTH);
+ } else {
+ ev_window_set_sizing_mode (ev_window, EV_SIZING_FREE);
+ }
+}
+
+static void
+update_sizing_buttons (EvWindow *window)
+{
+ GtkActionGroup *action_group = window->priv->action_group;
+ GtkAction *action;
+ gboolean best_fit, page_width;
+
+ switch (window->priv->sizing_mode) {
+ case EV_SIZING_BEST_FIT:
+ best_fit = TRUE;
+ page_width = FALSE;
+ break;
+ case EV_SIZING_FIT_WIDTH:
+ best_fit = FALSE;
+ page_width = TRUE;
+ break;
+
+ default:
+ best_fit = page_width = FALSE;
+ break;
+ }
+
+ action = gtk_action_group_get_action (action_group, "ViewBestFit");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_best_fit), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), best_fit);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_best_fit), window);
+
+ action = gtk_action_group_get_action (action_group, "ViewPageWidth");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_page_width), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), page_width);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_page_width), window);
+}
+