Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@gnome.org>2005-01-20 12:16:53 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-01-20 12:16:53 (GMT)
commitac6e61a0860b741e22072696e0ac6a78e386db0d (patch)
tree0a64003e1f656e08e289a0a4a4107d7f42df92f2 /shell
parenta601c252dae06def4379c838ed176955903b34c9 (diff)
Show a wait cursor while the page is rendering
2005-01-20 Marco Pesenti Gritti <marco@gnome.org> * pdf/xpdf/pdf-document.cc: * shell/ev-view.c: (ev_view_set_cursor), (ev_view_motion_notify_event), (document_changed_callback), (set_document_page): Show a wait cursor while the page is rendering
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-view.c55
1 files changed, 36 insertions, 19 deletions
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 2033962..e76f5b8 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -57,7 +57,8 @@ static const GtkTargetEntry targets[] = {
typedef enum {
EV_VIEW_CURSOR_NORMAL,
- EV_VIEW_CURSOR_HAND
+ EV_VIEW_CURSOR_LINK,
+ EV_VIEW_CURSOR_WAIT
} EvViewCursor;
struct _EvView {
@@ -595,26 +596,35 @@ ev_view_set_find_status (EvView *view, const char *message)
static void
ev_view_set_cursor (EvView *view, EvViewCursor new_cursor)
{
- GdkCursor *cursor;
- GtkWidget *widget = GTK_WIDGET (view);
+ GdkCursor *cursor = NULL;
+ GdkDisplay *display;
+ GtkWidget *widget;
if (view->cursor == new_cursor) {
return;
}
+ widget = gtk_widget_get_toplevel (GTK_WIDGET (view));
+ display = gtk_widget_get_display (widget);
+ view->cursor = new_cursor;
+
switch (new_cursor) {
case EV_VIEW_CURSOR_NORMAL:
gdk_window_set_cursor (widget->window, NULL);
break;
- case EV_VIEW_CURSOR_HAND:
- cursor = gdk_cursor_new_for_display
- (gdk_display_get_default(), GDK_HAND2);
- gdk_window_set_cursor (widget->window, cursor);
- gdk_cursor_unref (cursor);
+ case EV_VIEW_CURSOR_LINK:
+ cursor = gdk_cursor_new_for_display (display, GDK_HAND2);
+ break;
+ case EV_VIEW_CURSOR_WAIT:
+ cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
break;
}
- view->cursor = new_cursor;
+ if (cursor) {
+ gdk_window_set_cursor (widget->window, cursor);
+ gdk_cursor_unref (cursor);
+ gdk_flush();
+ }
}
static gboolean
@@ -638,13 +648,15 @@ ev_view_motion_notify_event (GtkWidget *widget,
msg = status_message_from_link (link);
ev_view_set_status (view, msg);
- ev_view_set_cursor (view, EV_VIEW_CURSOR_HAND);
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
g_free (msg);
g_object_unref (link);
} else {
ev_view_set_status (view, NULL);
- ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+ if (view->cursor == EV_VIEW_CURSOR_LINK) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+ }
}
}
@@ -1038,6 +1050,14 @@ found_results_callback (EvDocument *document,
gtk_widget_queue_draw (GTK_WIDGET (view));
}
+static void
+document_changed_callback (EvDocument *document,
+ EvView *view)
+{
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+}
+
/*** Public API ***/
GtkWidget*
@@ -1046,13 +1066,6 @@ ev_view_new (void)
return g_object_new (EV_TYPE_VIEW, NULL);
}
-static void
-document_changed_callback (EvDocument *document,
- EvView *view)
-{
- gtk_widget_queue_draw (GTK_WIDGET (view));
-}
-
void
ev_view_set_document (EvView *view,
EvDocument *document)
@@ -1100,8 +1113,12 @@ set_document_page (EvView *view, int page)
{
if (view->document) {
int old_page = ev_document_get_page (view->document);
- if (old_page != page)
+
+ if (old_page != page) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_WAIT);
ev_document_set_page (view->document, page);
+ }
+
if (old_page != ev_document_get_page (view->document)) {
g_signal_emit (view, page_changed_signal, 0);