[geany/geany-plugins] df2e56: Merge pull request #74 from b4n/wip/webhelper

Frank Lanitz git-noreply at geany.org
Mon Dec 24 13:04:06 UTC 2012


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   Frank Lanitz <frank at frank.uvena.de>
Date:        Mon, 24 Dec 2012 13:04:06 UTC
Commit:      df2e569c3168924438c35117773aeb7c4356a307
             https://github.com/geany/geany-plugins/commit/df2e569c3168924438c35117773aeb7c4356a307

Log Message:
-----------
Merge pull request #74 from b4n/wip/webhelper

Don't use long-deprecated API and show hovered link in the statusbar


Modified Paths:
--------------
    webhelper/src/gwh-browser.c
    webhelper/src/gwh-plugin.c

Modified: webhelper/src/gwh-browser.c
93 files changed, 86 insertions(+), 7 deletions(-)
===================================================================
@@ -30,6 +30,7 @@
 #include "gwh-utils.h"
 #include "gwh-settings.h"
 #include "gwh-keybindings.h"
+#include "gwh-plugin.h"
 
 
 #if ! GTK_CHECK_VERSION (2, 18, 0)
@@ -74,6 +75,8 @@ struct _GwhBrowserPrivate
   GtkToolItem  *item_cancel;
   GtkToolItem  *item_reload;
   GtkToolItem  *item_inspector;
+  
+  gchar        *hovered_link;
 };
 
 enum {
@@ -515,7 +518,7 @@ static void       inspector_set_detached      (GwhBrowser *self,
   #define ADD_SEPARATOR(menu) \
     item = gtk_separator_menu_item_new (); \
     gtk_widget_show (item); \
-    gtk_menu_append (menu, item)
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item)
   
   ADD_SEPARATOR (menu);
   
@@ -524,23 +527,23 @@ static void       inspector_set_detached      (GwhBrowser *self,
   item = gtk_menu_item_new_with_mnemonic (_("_Zoom"));
   gtk_widget_show (item);
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
-  gtk_menu_append (menu, item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   /* zoom in */
   item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_IN, NULL);
   g_signal_connect_swapped (item, "activate",
                             G_CALLBACK (webkit_web_view_zoom_in), view);
-  gtk_menu_append (GTK_MENU (submenu), item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
   /* zoom out */
   item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_OUT, NULL);
   g_signal_connect_swapped (item, "activate",
                             G_CALLBACK (webkit_web_view_zoom_out), view);
-  gtk_menu_append (GTK_MENU (submenu), item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
   /* zoom 1:1 */
   ADD_SEPARATOR (submenu);
   item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_100, NULL);
   g_signal_connect (item, "activate",
                     G_CALLBACK (on_item_zoom_100_activate), self);
-  gtk_menu_append (GTK_MENU (submenu), item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
   /* full content zoom */
   ADD_SEPARATOR (submenu);
   item = gtk_check_menu_item_new_with_mnemonic (_("Full-_content zoom"));
@@ -548,7 +551,7 @@ static void       inspector_set_detached      (GwhBrowser *self,
                                   webkit_web_view_get_full_content_zoom (view));
   g_signal_connect (item, "activate",
                     G_CALLBACK (on_item_full_content_zoom_activate), self);
-  gtk_menu_append (GTK_MENU (submenu), item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
   /* show zoom sumbenu */
   gtk_widget_show_all (submenu);
   
@@ -558,7 +561,7 @@ static void       inspector_set_detached      (GwhBrowser *self,
   g_signal_connect (item, "activate",
                     G_CALLBACK (on_item_flip_orientation_activate), self);
   gtk_widget_show (item);
-  gtk_menu_append (menu, item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   if (! INSPECTOR_VISIBLE (self) || INSPECTOR_DETACHED (self)) {
     gtk_widget_set_sensitive (item, FALSE);
   }
@@ -644,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);
 }
@@ -882,6 +886,71 @@ static void       inspector_set_detached      (GwhBrowser *self,
   return self->priv->inspector_window;
 }
 
+static guint
+get_statusbar_context_id (GtkStatusbar *statusbar)
+{
+  static guint id = 0;
+  
+  if (id == 0) {
+    id = gtk_statusbar_get_context_id (GTK_STATUSBAR (ui_widgets.statusbar),
+                                       "gwh-browser-hovered-link");
+  }
+  
+  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) {
+    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)
 {
@@ -927,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);
   
@@ -956,6 +1027,14 @@ static void       inspector_set_detached      (GwhBrowser *self,
                     G_CALLBACK (on_web_view_populate_popup), self);
   g_signal_connect (G_OBJECT (self->priv->web_view), "scroll-event",
                     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);


Modified: webhelper/src/gwh-plugin.c
4 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -258,14 +258,14 @@ enum {
   
   item = gtk_separator_menu_item_new ();
   gtk_widget_show (item);
-  gtk_menu_append (menu, item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   
   g_object_get (G_OBJECT (G_settings), "browser-auto-reload", &auto_reload,
                 NULL);
   item = gtk_check_menu_item_new_with_mnemonic (_("Reload upon document saving"));
   gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), auto_reload);
   gtk_widget_show (item);
-  gtk_menu_append (menu, item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   g_signal_connect (item, "toggled", G_CALLBACK (on_item_auto_reload_toggled),
                     NULL);
 }



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).


More information about the Plugins-Commits mailing list