[geany/geany-plugins] fefb46: WebHelper: Fix hovered link display when the mouse leaves the view
Colomban Wendling
git-noreply at geany.org
Mon Dec 24 13:04:21 UTC 2012
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Mon, 03 Dec 2012 16:33:03 UTC
Commit: fefb46357efb2751fb2b78e77743f0c33bf27758
https://github.com/geany/geany-plugins/commit/fefb46357efb2751fb2b78e77743f0c33bf27758
Log Message:
-----------
WebHelper: Fix hovered link display when the mouse leaves the view
The web view doesn't emit an hovered link change when the mouse leaves
the view area. So, handle the case ourselves.
Modified Paths:
--------------
webhelper/src/gwh-browser.c
Modified: webhelper/src/gwh-browser.c
71 files changed, 64 insertions(+), 7 deletions(-)
===================================================================
@@ -75,6 +75,8 @@ struct _GwhBrowserPrivate
GtkToolItem *item_cancel;
GtkToolItem *item_reload;
GtkToolItem *item_inspector;
+
+ gchar *hovered_link;
};
enum {
@@ -645,6 +647,7 @@ static void inspector_set_detached (GwhBrowser *self,
g_object_unref (self->priv->default_icon);
}
g_object_unref (self->priv->settings);
+ g_free (self->priv->hovered_link);
G_OBJECT_CLASS (gwh_browser_parent_class)->finalize (object);
}
@@ -883,11 +886,8 @@ static void inspector_set_detached (GwhBrowser *self,
return self->priv->inspector_window;
}
-static void
-on_web_view_hovering_over_link (WebKitWebView *view,
- gchar *title,
- gchar *uri,
- GwhBrowser *self)
+static guint
+get_statusbar_context_id (GtkStatusbar *statusbar)
{
static guint id = 0;
@@ -896,13 +896,62 @@ static void inspector_set_detached (GwhBrowser *self,
"gwh-browser-hovered-link");
}
- gtk_statusbar_pop (GTK_STATUSBAR (ui_widgets.statusbar), id);
+ return id;
+}
+
+static void
+on_web_view_hovering_over_link (WebKitWebView *view,
+ gchar *title,
+ gchar *uri,
+ GwhBrowser *self)
+{
+ GtkStatusbar *statusbar = GTK_STATUSBAR (ui_widgets.statusbar);
+
+ if (self->priv->hovered_link) {
+ gtk_statusbar_pop (statusbar, get_statusbar_context_id (statusbar));
+ g_free (self->priv->hovered_link);
+ self->priv->hovered_link = NULL;
+ }
if (uri && *uri) {
- gtk_statusbar_push (GTK_STATUSBAR (ui_widgets.statusbar), id, uri);
+ self->priv->hovered_link = g_strdup (uri);
+ gtk_statusbar_push (statusbar, get_statusbar_context_id (statusbar),
+ self->priv->hovered_link);
}
}
static void
+on_web_view_leave_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event,
+ GwhBrowser *self)
+{
+ if (self->priv->hovered_link) {
+ GtkStatusbar *statusbar = GTK_STATUSBAR (ui_widgets.statusbar);
+
+ gtk_statusbar_pop (statusbar, get_statusbar_context_id (statusbar));
+ }
+}
+
+static void
+on_web_view_enter_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event,
+ GwhBrowser *self)
+{
+ if (self->priv->hovered_link) {
+ GtkStatusbar *statusbar = GTK_STATUSBAR (ui_widgets.statusbar);
+
+ gtk_statusbar_push (statusbar, get_statusbar_context_id (statusbar),
+ self->priv->hovered_link);
+ }
+}
+
+static void
+on_web_view_realize (GtkWidget *widget,
+ GwhBrowser *self)
+{
+ gtk_widget_add_events (widget, GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
+}
+
+static void
gwh_browser_init (GwhBrowser *self)
{
GtkWidget *scrolled;
@@ -947,6 +996,8 @@ static void inspector_set_detached (GwhBrowser *self,
: self->priv->paned),
self->priv->inspector_view);
+ self->priv->hovered_link = NULL;
+
g_signal_connect (self, "notify::orientation",
G_CALLBACK (on_orientation_notify), self);
@@ -978,6 +1029,12 @@ static void inspector_set_detached (GwhBrowser *self,
G_CALLBACK (on_web_view_scroll_event), self);
g_signal_connect (G_OBJECT (self->priv->web_view), "hovering-over-link",
G_CALLBACK (on_web_view_hovering_over_link), self);
+ g_signal_connect (G_OBJECT (self->priv->web_view), "leave-notify-event",
+ G_CALLBACK (on_web_view_leave_notify_event), self);
+ g_signal_connect (G_OBJECT (self->priv->web_view), "enter-notify-event",
+ G_CALLBACK (on_web_view_enter_notify_event), self);
+ g_signal_connect_after (self->priv->web_view, "realize",
+ G_CALLBACK (on_web_view_realize), self);
g_signal_connect (self->priv->web_view, "key-press-event",
G_CALLBACK (gwh_keybindings_handle_event), self);
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Plugins-Commits
mailing list