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-18 12:45:49 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-01-18 12:45:49 (GMT)
commit57a8ca8e4c7ee8cd49081ba500563d33cfa048d0 (patch)
tree1b384c21e10e64d8b66e09d612abd98c8f52d8e7 /shell
parentd5023779f9c79df5f0b0441ef76a14caa07d71b8 (diff)
Fix bugs in the links implementation and change cursor when hovering a
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.
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-view.c48
-rw-r--r--shell/ev-window.c12
2 files changed, 53 insertions, 7 deletions
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),