+2005-01-18 Marco Pesenti Gritti <marco@gnome.org>
+
+ * 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.
+
2005-01-17 Bryan Clark <clarkbw@cvs.gnome.org>
* viewer/.cvsignore: added cvsignore file for viewer directory
{ "UTF8_STRING", 0, TARGET_UTF8_STRING },
};
+typedef enum {
+ EV_VIEW_CURSOR_NORMAL,
+ EV_VIEW_CURSOR_HAND
+} EvViewCursor;
+
struct _EvView {
GtkWidget parent_instance;
gboolean pressed_button;
gboolean has_selection;
GdkRectangle selection;
+ EvViewCursor cursor;
GtkAdjustment *hadjustment;
GtkAdjustment *vadjustment;
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));
{
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
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)
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);
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);
GtkUIManager *ui_manager;
GtkWidget *statusbar;
guint help_message_cid;
+ guint view_message_cid;
GtkWidget *exit_fullscreen_popup;
char *uri;
{
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
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),