X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=250c119a20ded79f40f6bf6ec776e128f1ce4ab5;hb=ffd817da58c15bc17cc1a5534b53f7ad6766c876;hp=dc88f7096c159906f4a3d6d79dcc04ad334be53e;hpb=6d7f9e7cf7678b48828be0722ae2e998ce85b7a7;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index dc88f709..250c119a 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -278,30 +278,60 @@ update_chrome_flag (EvWindow *window, EvChrome flag, const char *pref, gboolean } static void -update_sizing_buttons (EvWindow *ev_window) +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) { - GtkWidget *best_fit; - GtkWidget *fit_width; + 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); + } +} - best_fit = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, - "/ToolBar/ViewBestFit"); - fit_width = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, - "/ToolBar/ViewPageWidth"); +static void +update_sizing_buttons (EvWindow *window) +{ + GtkActionGroup *action_group = window->priv->action_group; + GtkAction *action; + gboolean best_fit, page_width; - switch (ev_window->priv->sizing_mode) { + switch (window->priv->sizing_mode) { case EV_SIZING_BEST_FIT: - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (best_fit), TRUE); - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (fit_width), FALSE); + best_fit = TRUE; + page_width = FALSE; break; case EV_SIZING_FIT_WIDTH: - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (best_fit), FALSE); - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (fit_width), TRUE); + best_fit = FALSE; + page_width = TRUE; break; - case EV_SIZING_FREE: - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (best_fit), FALSE); - gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (fit_width), FALSE); + + 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); } void @@ -1376,56 +1406,6 @@ ev_window_cmd_view_normal_size (GtkAction *action, EvWindow *ev_window) ev_view_set_size (EV_VIEW (ev_window->priv->view), -1, -1); } -static void -ev_window_cmd_view_best_fit (GtkAction *action, EvWindow *ev_window) -{ - EvWindowPrivate *priv = ev_window->priv; - GtkWidget *button; - - g_return_if_fail (EV_IS_WINDOW (ev_window)); - - button = gtk_ui_manager_get_widget (priv->ui_manager, "/ToolBar/ViewBestFit"); - if (! gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (button))) - return; - - ev_window_set_sizing_mode (ev_window, EV_SIZING_BEST_FIT); -} - -static void -ev_window_cmd_view_page_width (GtkAction *action, EvWindow *ev_window) -{ - EvWindowPrivate *priv = ev_window->priv; - GtkWidget *button; - int width, height; - GtkRequisition vsb_requisition; - int scrollbar_spacing; - - g_return_if_fail (EV_IS_WINDOW (ev_window)); - - button = gtk_ui_manager_get_widget (priv->ui_manager, "/ToolBar/ViewPageWidth"); - if (! gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (button))) - return; - - - width = priv->scrolled_window->allocation.width; - height = priv->scrolled_window->allocation.height; - - /* the scrolled window has a GTK_SHADOW_IN */ - width -= 2 * priv->view->style->xthickness; - height -= 2 * priv->view->style->ythickness; - - gtk_widget_size_request ( - GTK_SCROLLED_WINDOW (priv->scrolled_window)->vscrollbar, - &vsb_requisition); - gtk_widget_style_get (priv->scrolled_window, - "scrollbar_spacing", &scrollbar_spacing, - NULL); - - ev_window_set_sizing_mode (ev_window, EV_SIZING_FIT_WIDTH); - - ev_view_set_size (EV_VIEW (ev_window->priv->view), width, height); -} - static void ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window) { @@ -1475,35 +1455,41 @@ ev_window_cmd_leave_fullscreen (GtkAction *action, EvWindow *window) } static void -size_allocate_cb (GtkWidget *scrolled_window, - GtkAllocation *allocation, - EvWindow *ev_window) +update_view_size (EvWindow *window) { int width, height; GtkRequisition vsb_requisition; int scrollbar_spacing; - width = ev_window->priv->scrolled_window->allocation.width; - height = ev_window->priv->scrolled_window->allocation.height; + width = window->priv->scrolled_window->allocation.width; + height = window->priv->scrolled_window->allocation.height; /* the scrolled window has a GTK_SHADOW_IN */ - width -= 2 * ev_window->priv->view->style->xthickness; - height -= 2 * ev_window->priv->view->style->ythickness; + width -= 2 * window->priv->view->style->xthickness; + height -= 2 * window->priv->view->style->ythickness; - if (ev_window->priv->sizing_mode == EV_SIZING_BEST_FIT) { - ev_view_set_size (EV_VIEW (ev_window->priv->view), + if (window->priv->sizing_mode == EV_SIZING_BEST_FIT) { + ev_view_set_size (EV_VIEW (window->priv->view), MAX (1, width), MAX (1, height)); - } else if (ev_window->priv->sizing_mode == EV_SIZING_FIT_WIDTH) { - gtk_widget_size_request (GTK_SCROLLED_WINDOW (ev_window->priv->scrolled_window)->vscrollbar, + } else if (window->priv->sizing_mode == EV_SIZING_FIT_WIDTH) { + gtk_widget_size_request (GTK_SCROLLED_WINDOW (window->priv->scrolled_window)->vscrollbar, &vsb_requisition); - gtk_widget_style_get (ev_window->priv->scrolled_window, + gtk_widget_style_get (window->priv->scrolled_window, "scrollbar_spacing", &scrollbar_spacing, NULL); - ev_view_set_size (EV_VIEW (ev_window->priv->view), + ev_view_set_size (EV_VIEW (window->priv->view), width - vsb_requisition.width - scrollbar_spacing, -1); } } +static void +size_allocate_cb (GtkWidget *scrolled_window, + GtkAllocation *allocation, + EvWindow *window) +{ + update_view_size (window); +} + static void ev_window_set_sizing_mode (EvWindow *ev_window, EvSizingMode sizing_mode) @@ -1518,6 +1504,8 @@ ev_window_set_sizing_mode (EvWindow *ev_window, g_signal_handlers_disconnect_by_func (scrolled_window, size_allocate_cb, ev_window); + update_view_size (ev_window); + switch (sizing_mode) { case EV_SIZING_BEST_FIT: g_object_set (G_OBJECT (scrolled_window),