From 57a8ca8e4c7ee8cd49081ba500563d33cfa048d0 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Tue, 18 Jan 2005 12:45:49 +0000 Subject: Fix bugs in the links implementation and change cursor when hovering a 2005-01-18 Marco Pesenti Gritti * pdf/xpdf/pdf-document.cc: * shell/ev-view.c: (status_message_from_link), (ev_view_set_status), (ev_view_set_cursor), (ev_view_motion_notify_event), (ev_view_init): * shell/ev-window.c: (view_status_changed_cb), (ev_window_init): Fix bugs in the links implementation and change cursor when hovering a link. --- (limited to 'shell') diff --git a/shell/ev-view.c b/shell/ev-view.c index 8e18ec4..7ca3630 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -55,6 +55,11 @@ static const GtkTargetEntry targets[] = { { "UTF8_STRING", 0, TARGET_UTF8_STRING }, }; +typedef enum { + EV_VIEW_CURSOR_NORMAL, + EV_VIEW_CURSOR_HAND +} EvViewCursor; + struct _EvView { GtkWidget parent_instance; @@ -72,6 +77,7 @@ struct _EvView { gboolean pressed_button; gboolean has_selection; GdkRectangle selection; + EvViewCursor cursor; GtkAdjustment *hadjustment; GtkAdjustment *vadjustment; @@ -552,7 +558,7 @@ status_message_from_link (EvLink *link) break; case EV_LINK_TYPE_PAGE: page = ev_link_get_page (link); - msg = g_strdup_printf (_("Page %d"), page); + msg = g_strdup_printf (_("Go to page %d"), page); break; case EV_LINK_TYPE_EXTERNAL_URI: msg = g_strdup (ev_link_get_uri (link)); @@ -569,9 +575,11 @@ ev_view_set_status (EvView *view, const char *message) { g_return_if_fail (EV_IS_VIEW (view)); - g_free (view->status); - view->status = g_strdup (message); - g_object_notify (G_OBJECT (view), "status"); + if (message != view->status) { + g_free (view->status); + view->status = g_strdup (message); + g_object_notify (G_OBJECT (view), "status"); + } } static void @@ -584,6 +592,31 @@ ev_view_set_find_status (EvView *view, const char *message) g_object_notify (G_OBJECT (view), "find-status"); } +static void +ev_view_set_cursor (EvView *view, EvViewCursor new_cursor) +{ + GdkCursor *cursor; + GtkWidget *widget = GTK_WIDGET (view); + + if (view->cursor == new_cursor) { + return; + } + + 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); + break; + } + + view->cursor = new_cursor; +} + static gboolean ev_view_motion_notify_event (GtkWidget *widget, GdkEventMotion *event) @@ -605,10 +638,14 @@ 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); g_free (msg); g_object_unref (link); - } + } else { + ev_view_set_status (view, NULL); + ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL); + } } gtk_widget_queue_draw (widget); @@ -871,6 +908,7 @@ ev_view_init (EvView *view) view->scale = 1.0; view->pressed_button = -1; + view->cursor = EV_VIEW_CURSOR_NORMAL; gtk_widget_modify_bg (GTK_WIDGET (view), GTK_STATE_NORMAL, &white); diff --git a/shell/ev-window.c b/shell/ev-window.c index 0b8679c..54effcd 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -73,6 +73,7 @@ struct _EvWindowPrivate { GtkUIManager *ui_manager; GtkWidget *statusbar; guint help_message_cid; + guint view_message_cid; GtkWidget *exit_fullscreen_popup; char *uri; @@ -1166,9 +1167,14 @@ view_status_changed_cb (EvView *view, { const char *message; + gtk_statusbar_pop (GTK_STATUSBAR (ev_window->priv->statusbar), + ev_window->priv->view_message_cid); + message = ev_view_get_status (view); - gtk_statusbar_push (GTK_STATUSBAR (ev_window->priv->statusbar), - ev_window->priv->help_message_cid, message); + if (message) { + gtk_statusbar_push (GTK_STATUSBAR (ev_window->priv->statusbar), + ev_window->priv->view_message_cid, message); + } } static void @@ -1582,6 +1588,8 @@ ev_window_init (EvWindow *ev_window) FALSE, TRUE, 0); ev_window->priv->help_message_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (ev_window->priv->statusbar), "help_message"); + ev_window->priv->view_message_cid = gtk_statusbar_get_context_id + (GTK_STATUSBAR (ev_window->priv->statusbar), "view_message"); ev_window->priv->find_bar = egg_find_bar_new (); gtk_box_pack_end (GTK_BOX (ev_window->priv->main_box), -- cgit v0.9.1