Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorDave Malcolm <dmalcolm@redhat.com>2005-01-14 05:26:54 (GMT)
committer David Malcolm <dave_malcolm@src.gnome.org>2005-01-14 05:26:54 (GMT)
commit3e3ca2bb5e6206bdb5af6b097cd9b92252e7a6c2 (patch)
treecea73ecdc00fe2fe7603bc7bd01e2677cc0bea1d /shell
parente7088d0b30431821a31a2a7c64b1d8e921362f0d (diff)
new functions to help with implementation of sensitivity code Fix
2005-01-14 Dave Malcolm <dmalcolm@redhat.com> * 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.
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-view.c34
-rw-r--r--shell/ev-view.h2
-rw-r--r--shell/ev-window.c66
3 files changed, 90 insertions, 12 deletions
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