From 3e3ca2bb5e6206bdb5af6b097cd9b92252e7a6c2 Mon Sep 17 00:00:00 2001 From: Dave Malcolm Date: Fri, 14 Jan 2005 05:26:54 +0000 Subject: new functions to help with implementation of sensitivity code Fix 2005-01-14 Dave Malcolm * shell/ev-view.h: * shell/ev-view.c (ev_view_can_go_back), (ev_view_can_go_forward): new functions to help with implementation of sensitivity code * shell/ev-window.c (update_action_sensitivity): Fix sensitivity of all actions that might require it. Fixes a crash when you click on the Zoom actions in a window lacking a document. --- (limited to 'shell') diff --git a/shell/ev-view.c b/shell/ev-view.c index 41bf94b..8e18ec4 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1123,6 +1123,23 @@ go_to_index (EvView *view, int index) go_to_link (view, link); } +gboolean +ev_view_can_go_back (EvView *view) +{ + int index, n; + + g_return_val_if_fail (EV_IS_HISTORY (view->history), FALSE); + + index = ev_history_get_current_index (view->history); + n = ev_history_get_n_links (view->history); + + if (n > 0) { + return index != MAX (0, index - 1); + } else { + return FALSE; + } +} + void ev_view_go_back (EvView *view) { @@ -1139,6 +1156,23 @@ ev_view_go_back (EvView *view) } } +gboolean +ev_view_can_go_forward (EvView *view) +{ + int index, n; + + g_return_val_if_fail (EV_IS_HISTORY (view->history), FALSE); + + index = ev_history_get_current_index (view->history); + n = ev_history_get_n_links (view->history); + + if (n > 0) { + return index != MIN (n - 1, index + 1); + } else { + return FALSE; + } +} + void ev_view_go_forward (EvView *view) { diff --git a/shell/ev-view.h b/shell/ev-view.h index 0e7237d..e57371a 100644 --- a/shell/ev-view.h +++ b/shell/ev-view.h @@ -47,7 +47,9 @@ void ev_view_copy (EvView *view); void ev_view_select_all (EvView *view); /* Navigation */ +gboolean ev_view_can_go_back (EvView *view); void ev_view_go_back (EvView *view); +gboolean ev_view_can_go_forward (EvView *view); void ev_view_go_forward (EvView *view); void ev_view_go_to_link (EvView *view, EvLink *link); diff --git a/shell/ev-window.c b/shell/ev-window.c index a1bb4db..0b8679c 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -178,29 +178,71 @@ static void update_action_sensitivity (EvWindow *ev_window) { EvDocument *document; - int n_pages; - int page; + EvView *view; + + gboolean can_go_back = FALSE; + gboolean can_go_forward = FALSE; document = ev_window->priv->document; - if (document) - n_pages = ev_document_get_n_pages (document); - else - n_pages = 1; + view = EV_VIEW (ev_window->priv->view); - page = ev_view_get_page (EV_VIEW (ev_window->priv->view)); + if (document) { + can_go_back = ev_view_can_go_back (view); + can_go_forward = ev_view_can_go_forward (view); + } + + /* File menu */ + /* "FileOpen": always sensitive */ + set_action_sensitive (ev_window, "FileSaveAs", document!=NULL); + set_action_sensitive (ev_window, "FilePrint", document!=NULL); + /* "FileCloseWindow": always sensitive */ - set_action_sensitive (ev_window, "GoFirstPage", page > 1); - set_action_sensitive (ev_window, "GoPageDown", page > 1); - set_action_sensitive (ev_window, "GoPageUp", page < n_pages); - set_action_sensitive (ev_window, "GoLastPage", page < n_pages); + /* Edit menu */ + set_action_sensitive (ev_window, "EditCopy", document!=NULL); + set_action_sensitive (ev_window, "EditSelectAll", document!=NULL); if (document) set_action_sensitive (ev_window, "EditFind", EV_IS_DOCUMENT_FIND (document)); else set_action_sensitive (ev_window, "EditFind", FALSE); - + /* View menu */ + set_action_sensitive (ev_window, "ViewZoomIn", document!=NULL); + set_action_sensitive (ev_window, "ViewZoomOut", document!=NULL); + set_action_sensitive (ev_window, "ViewNormalSize", document!=NULL); + set_action_sensitive (ev_window, "ViewBestFit", document!=NULL); + set_action_sensitive (ev_window, "ViewPageWidth", document!=NULL); + + /* Go menu */ + set_action_sensitive (ev_window, "GoBack", can_go_back); + set_action_sensitive (ev_window, "GoForward", can_go_forward); + if (document) { + int n_pages; + int page; + + page = ev_view_get_page (EV_VIEW (ev_window->priv->view)); + n_pages = ev_document_get_n_pages (document); + + set_action_sensitive (ev_window, "GoPageDown", page > 1); + set_action_sensitive (ev_window, "GoPageUp", page < n_pages); + set_action_sensitive (ev_window, "GoFirstPage", page > 1); + set_action_sensitive (ev_window, "GoLastPage", page < n_pages); + } else { + set_action_sensitive (ev_window, "GoFirstPage", FALSE); + set_action_sensitive (ev_window, "GoPageDown", FALSE); + set_action_sensitive (ev_window, "GoPageUp", FALSE); + set_action_sensitive (ev_window, "GoLastPage", FALSE); + } + + /* Help menu */ + /* "HelpContents": always sensitive */ + /* "HelpAbout": always sensitive */ + + /* Toolbar-specific actions: */ + set_action_sensitive (ev_window, NAVIGATION_BACK_ACTION, can_go_back); + set_action_sensitive (ev_window, NAVIGATION_FORWARD_ACTION, can_go_forward); + set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, document!=NULL); } void -- cgit v0.9.1