[geany/geany-plugins] 341cab: Merge pull request #677 from hyperair/webkit2gtk

Frank Lanitz git-noreply at xxxxx
Wed May 30 05:21:02 UTC 2018


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   GitHub <noreply at github.com>
Date:        Wed, 30 May 2018 05:21:02 UTC
Commit:      341cab4e13c122b2b74e6f31a43be9adc653f8af
             https://github.com/geany/geany-plugins/commit/341cab4e13c122b2b74e6f31a43be9adc653f8af

Log Message:
-----------
Merge pull request #677 from hyperair/webkit2gtk

Port both webhelper and markdown to webkit2gtk


Modified Paths:
--------------
    build/markdown.m4
    build/webhelper.m4
    markdown/src/Makefile.am
    markdown/src/viewer.c
    markdown/src/viewer.h
    webhelper/src/Makefile.am
    webhelper/src/gwh-browser.c
    webhelper/src/gwh-browser.h
    webhelper/src/gwh-plugin.c

Modified: build/markdown.m4
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -49,13 +49,13 @@ AC_DEFUN([GP_CHECK_MARKDOWN],
     GTK_VERSION=2.16
     WEBKIT_VERSION=1.1.13
 
-    GP_CHECK_GTK3([webkit_package=webkitgtk-3.0],
+    GP_CHECK_GTK3([webkit_package=webkit2gtk-4.0],
                   [webkit_package=webkit-1.0])
-
     GP_CHECK_PLUGIN_DEPS([markdown], [MARKDOWN],
                          [$GP_GTK_PACKAGE >= ${GTK_VERSION}
                           $webkit_package >= ${WEBKIT_VERSION}
                           gthread-2.0])
+    AM_CONDITIONAL([MARKDOWN_WEBKIT2], [test "$webkit_package" = webkit2gtk-4.0])
 
     GP_COMMIT_PLUGIN_STATUS([Markdown])
 


Modified: build/webhelper.m4
5 lines changed, 2 insertions(+), 3 deletions(-)
===================================================================
@@ -19,14 +19,13 @@ AC_DEFUN([GP_CHECK_WEBHELPER],
         fi
     fi
 
-    GP_CHECK_GTK3([webkit_package=webkitgtk-3.0],
-                  [webkit_package=webkit-1.0])
+    GP_CHECK_PLUGIN_GTK3_ONLY([webhelper])
     GP_CHECK_PLUGIN_DEPS([WebHelper], [WEBHELPER],
                          [$GP_GTK_PACKAGE >= ${GTK_VERSION}
                           glib-2.0 >= ${GLIB_VERSION}
                           gio-2.0 >= ${GIO_VERSION}
                           gdk-pixbuf-2.0 >= ${GDK_PIXBUF_VERSION}
-                          $webkit_package >= ${WEBKIT_VERSION}
+                          webkit2gtk-4.0 >= ${WEBKIT_VERSION}
                           gthread-2.0])
 
 


Modified: markdown/src/Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -35,4 +35,8 @@ markdown_la_CFLAGS += $(LIBMARKDOWN_CFLAGS)
 markdown_la_LIBADD += $(LIBMARKDOWN_LIBS)
 endif
 
+if MARKDOWN_WEBKIT2
+markdown_la_CFLAGS += -DMARKDOWN_WEBKIT2
+endif
+
 include $(top_srcdir)/build/cppcheck.mk


Modified: markdown/src/viewer.c
29 lines changed, 28 insertions(+), 1 deletions(-)
===================================================================
@@ -22,7 +22,11 @@
 #include "config.h"
 #include <string.h>
 #include <gtk/gtk.h>
-#include <webkit/webkitwebview.h>
+#ifdef MARKDOWN_WEBKIT2
+# include <webkit2/webkit2.h>
+#else
+# include <webkit/webkitwebview.h>
+#endif
 #include <geanyplugin.h>
 #ifndef FULL_PRICE
 # include <mkdio.h>
@@ -296,6 +300,18 @@ pop_scroll_pos(MarkdownViewer *self)
   return popped;
 }
 
+#ifdef MARKDOWN_WEBKIT2
+static void
+on_webview_load_changed(MarkdownViewer  *self,
+                        WebKitLoadEvent  load_event,
+                        WebKitWebView   *web_view)
+{
+  /* When the webkit is done loading, reset the scroll position. */
+  if (load_event == WEBKIT_LOAD_FINISHED) {
+    pop_scroll_pos(self);
+  }
+}
+#else
 static void
 on_webview_load_status_notify(WebKitWebView *view, GParamSpec *pspec,
   MarkdownViewer *self)
@@ -309,6 +325,7 @@ on_webview_load_status_notify(WebKitWebView *view, GParamSpec *pspec,
     pop_scroll_pos(self);
   }
 }
+#endif
 
 gchar *
 markdown_viewer_get_html(MarkdownViewer *self)
@@ -388,13 +405,23 @@ markdown_viewer_update_view(MarkdownViewer *self)
     /* Connect a signal handler (only needed once) to restore the scroll
      * position once the webview is reloaded. */
     if (self->priv->load_handle == 0) {
+#ifdef MARKDOWN_WEBKIT2
+      self->priv->load_handle =
+        g_signal_connect_swapped(WEBKIT_WEB_VIEW(self), "load-changed",
+          G_CALLBACK(on_webview_load_changed), self);
+#else
       self->priv->load_handle =
         g_signal_connect_swapped(WEBKIT_WEB_VIEW(self), "notify::load-status",
           G_CALLBACK(on_webview_load_status_notify), self);
+#endif
     }
 
+#ifdef MARKDOWN_WEBKIT2
+    webkit_web_view_load_html(WEBKIT_WEB_VIEW(self), html, base_uri);
+#else
     webkit_web_view_load_string(WEBKIT_WEB_VIEW(self), html, "text/html",
       self->priv->enc, base_uri);
+#endif
 
     g_free(base_uri);
     g_free(html);


Modified: markdown/src/viewer.h
6 lines changed, 5 insertions(+), 1 deletions(-)
===================================================================
@@ -23,7 +23,11 @@
 #define MARKDOWN_VIEWER_H 1
 
 #include <gtk/gtk.h>
-#include <webkit/webkitwebview.h>
+#ifdef MARKDOWN_WEBKIT2
+# include <webkit2/webkit2.h>
+#else
+# include <webkit/webkitwebview.h>
+#endif
 
 G_BEGIN_DECLS
 


Modified: webhelper/src/Makefile.am
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -34,7 +34,8 @@ webhelper_la_CPPFLAGS = $(AM_CPPFLAGS) \
 webhelper_la_CFLAGS   = $(AM_CFLAGS) \
                         $(WEBHELPER_CFLAGS)
 webhelper_la_LIBADD   = $(COMMONLIBS) \
-                        $(WEBHELPER_LIBS)
+                        $(WEBHELPER_LIBS) \
+                        -lm
 
 # These are generated in $(srcdir) because they are part of the distribution,
 # and should anyway only be regenerated if the .tpl changes, which is a


Modified: webhelper/src/gwh-browser.c
490 lines changed, 204 insertions(+), 286 deletions(-)
===================================================================
@@ -21,13 +21,15 @@
 
 #include "config.h"
 
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
 #include <glib/gi18n-lib.h>
+#include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <webkit/webkit.h>
+#include <webkit2/webkit2.h>
 
 #include "gwh-utils.h"
 #include "gwh-settings.h"
@@ -124,33 +126,35 @@ enum {
 };
 
 static guint signals[LAST_SIGNAL] = {0};
+static const gdouble zoom_in_factor = 1.2;
+static const gdouble zoom_out_factor = 1.0 / 1.2;
 
 
 G_DEFINE_TYPE_WITH_CODE (GwhBrowser, gwh_browser, GTK_TYPE_VBOX,
                          G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL))
 
 
-static void       inspector_set_detached      (GwhBrowser *self,
-                                               gboolean    detached);
-
-
 static void
 set_location_icon (GwhBrowser  *self,
-                   const gchar *icon_uri)
+                   const cairo_surface_t *icon_surface)
 {
   gboolean success = FALSE;
-  
-  if (icon_uri) {
+
+  if (icon_surface) {
     GdkPixbuf *icon;
-    
-    icon = gwh_pixbuf_new_from_uri (icon_uri, NULL);
-    if (icon) {
-      gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (self->priv->url_entry),
-                                      GTK_ENTRY_ICON_PRIMARY, icon);
-      g_object_unref (icon);
-      success = TRUE;
-    }
+
+    icon = gdk_pixbuf_get_from_surface (
+      icon_surface, 0, 0,
+      cairo_image_surface_get_width (icon_surface),
+      cairo_image_surface_get_height (icon_surface)
+    );
+
+    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (self->priv->url_entry),
+                                    GTK_ENTRY_ICON_PRIMARY, icon);
+    g_object_unref (icon);
+    success = TRUE;
   }
+  
   if (! success) {
     if (G_UNLIKELY (self->priv->default_icon == NULL)) {
       gchar *ctype;
@@ -243,17 +247,6 @@ on_settings_inspector_window_geometry_notify (GObject    *object,
   g_free (geometry);
 }
 
-static void
-on_settings_inspector_detached_notify (GObject    *object,
-                                       GParamSpec *pspec,
-                                       GwhBrowser *self)
-{
-  gboolean detached;
-  
-  g_object_get (object, pspec->name, &detached, NULL);
-  inspector_set_detached (self, detached);
-}
-
 static void
 on_settings_wm_windows_skip_taskbar_notify (GObject    *object,
                                             GParamSpec *pspec,
@@ -290,10 +283,10 @@ on_settings_wm_windows_type_notify (GObject    *object,
 /* web inspector events handling */
 
 #define INSPECTOR_DETACHED(self) \
-  (gtk_bin_get_child (GTK_BIN ((self)->priv->inspector_window)) != NULL)
+  (webkit_web_inspector_is_attached ((self)->priv->inspector))
 
 #define INSPECTOR_VISIBLE(self) \
-  (gtk_widget_get_visible ((self)->priv->inspector_view))
+  (webkit_web_inspector_get_web_view ((self)->priv->inspector) != NULL)
 
 static void
 inspector_set_visible (GwhBrowser *self,
@@ -308,117 +301,22 @@ inspector_set_visible (GwhBrowser *self,
   }
 }
 
-static void
-inspector_hide_window (GwhBrowser *self)
-{
-  if (gtk_widget_get_visible (self->priv->inspector_window)) {
-    gtk_window_get_position (GTK_WINDOW (self->priv->inspector_window),
-                             &self->priv->inspector_window_x,
-                             &self->priv->inspector_window_y);
-    gtk_widget_hide (self->priv->inspector_window);
-  }
-}
-
-static void
-inspector_show_window (GwhBrowser *self)
-{
-  if (! gtk_widget_get_visible (self->priv->inspector_window)) {
-    gtk_widget_show (self->priv->inspector_window);
-    gtk_window_move (GTK_WINDOW (self->priv->inspector_window),
-                     self->priv->inspector_window_x,
-                     self->priv->inspector_window_y);
-  }
-}
-
-static void
-inspector_set_detached (GwhBrowser *self,
-                        gboolean    detached)
-{
-  if (detached != INSPECTOR_DETACHED (self)) {
-    if (detached) {
-      gtk_widget_reparent (self->priv->inspector_view,
-                           self->priv->inspector_window);
-      if (INSPECTOR_VISIBLE (self)) {
-        inspector_show_window (self);
-      }
-    } else {
-      gtk_widget_reparent (self->priv->inspector_view, self->priv->paned);
-      inspector_hide_window (self);
-    }
-    g_object_set (self->priv->settings, "inspector-detached", detached, NULL);
-  }
-}
-
-static WebKitWebView *
-on_inspector_inspect_web_view (WebKitWebInspector *inspector,
-                               WebKitWebView      *view,
-                               GwhBrowser         *self)
-{
-  if (self->priv->inspector_web_view) {
-    gtk_widget_destroy (self->priv->inspector_web_view);
-  }
-  
-  self->priv->inspector_web_view = webkit_web_view_new ();
-  gtk_widget_show (self->priv->inspector_web_view);
-  gtk_container_add (GTK_CONTAINER (self->priv->inspector_view),
-                     self->priv->inspector_web_view);
-  
-  return WEBKIT_WEB_VIEW (self->priv->inspector_web_view);
-}
-
-static gboolean
-on_inspector_show_window (WebKitWebInspector *inspector,
-                          GwhBrowser         *self)
-{
-  gtk_widget_show (self->priv->inspector_view);
-  if (INSPECTOR_DETACHED (self)) {
-    inspector_show_window (self);
-  }
-  gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (self->priv->item_inspector),
-                                     TRUE);
-  
-  return TRUE;
-}
-
 static gboolean
-on_inspector_close_window (WebKitWebInspector *inspector,
-                           GwhBrowser         *self)
+on_inspector_closed (WebKitWebInspector *inspector,
+                     GwhBrowser         *self)
 {
-  gtk_widget_hide (self->priv->inspector_view);
-  inspector_hide_window (self);
   gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (self->priv->item_inspector),
                                      FALSE);
-  gtk_widget_grab_focus (gtk_widget_get_toplevel (self->priv->web_view));
-  
-  return TRUE;
-}
-
-static gboolean
-on_inspector_detach_window (WebKitWebInspector *inspector,
-                            GwhBrowser         *self)
-{
-  inspector_set_detached (self, TRUE);
-  
-  return TRUE;
-}
-
-static gboolean
-on_inspector_attach_window (WebKitWebInspector *inspector,
-                            GwhBrowser         *self)
-{
-  inspector_set_detached (self, FALSE);
-  
-  return TRUE;
+  return FALSE;
 }
 
 static gboolean
-on_inspector_window_delete_event (GtkWidget  *window,
-                                  GdkEvent   *event,
-                                  GwhBrowser *self)
+on_inspector_opened (WebKitWebInspector *inspector,
+                          GwhBrowser         *self)
 {
-  webkit_web_inspector_close (self->priv->inspector);
-  
-  return TRUE;
+  gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (self->priv->item_inspector),
+                                     TRUE);
+  return FALSE;
 }
 
 /* web view events hanlding */
@@ -519,20 +417,9 @@ update_load_status (GwhBrowser *self)
 {
   gboolean        loading = FALSE;
   WebKitWebView  *web_view = WEBKIT_WEB_VIEW (self->priv->web_view);
-  
-  switch (webkit_web_view_get_load_status (web_view)) {
-    case WEBKIT_LOAD_PROVISIONAL:
-    case WEBKIT_LOAD_COMMITTED:
-    case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT:
-      loading = TRUE;
-      break;
-    
-    case WEBKIT_LOAD_FINISHED:
-    case WEBKIT_LOAD_FAILED:
-      loading = FALSE;
-      break;
-  }
-  
+
+  loading = webkit_web_view_is_loading (web_view);
+
   gtk_widget_set_sensitive (GTK_WIDGET (self->priv->item_reload), ! loading);
   gtk_widget_set_visible   (GTK_WIDGET (self->priv->item_reload), ! loading);
   gtk_widget_set_sensitive (GTK_WIDGET (self->priv->item_cancel), loading);
@@ -542,23 +429,23 @@ update_load_status (GwhBrowser *self)
 }
 
 static void
-on_web_view_load_status_notify (GObject    *object,
-                                GParamSpec *pspec,
-                                GwhBrowser *self)
+on_web_view_load_changed (WebKitWebView   *object,
+                          WebKitLoadEvent  load_event,
+                          GwhBrowser      *self)
 {
   update_load_status (self);
 }
 
 static gboolean
-on_web_view_load_error (WebKitWebView  *web_view,
-                        WebKitWebFrame *web_frame,
-                        gchar          *uri,
-                        gpointer        web_error,
-                        GwhBrowser     *self)
+on_web_view_load_failed (WebKitWebView   *web_view,
+                         WebKitLoadEvent  load_event,
+                         gchar           *failing_uri,
+                         GError          *error,
+                         GwhBrowser      *self)
 {
   update_load_status (self);
   
-  return FALSE; /* we didn't really handled the error, so return %FALSE */
+  return FALSE; /* we didn't really handle the error, so return %FALSE */
 }
 
 static void
@@ -575,14 +462,14 @@ on_web_view_uri_notify (GObject    *object,
 }
 
 static void
-on_web_view_icon_uri_notify (GObject    *object,
-                             GParamSpec *pspec,
-                             GwhBrowser *self)
+on_web_view_favicon_notify (GObject    *object,
+                            GParamSpec *pspec,
+                            GwhBrowser *self)
 {
-  const gchar *icon_uri;
+  const cairo_surface_t *icon_surface;
   
-  icon_uri = webkit_web_view_get_icon_uri (WEBKIT_WEB_VIEW (self->priv->web_view));
-  set_location_icon (self, icon_uri);
+  icon_surface = webkit_web_view_get_favicon (WEBKIT_WEB_VIEW (self->priv->web_view));
+  set_location_icon (self, icon_surface);
 }
 
 static void
@@ -592,7 +479,7 @@ on_web_view_progress_notify (GObject    *object,
 {
   gdouble value;
   
-  value = webkit_web_view_get_progress (WEBKIT_WEB_VIEW (self->priv->web_view));
+  value = webkit_web_view_get_estimated_load_progress (WEBKIT_WEB_VIEW (self->priv->web_view));
   if (value >= 1.0) {
     value = 0.0;
   }
@@ -601,8 +488,9 @@ on_web_view_progress_notify (GObject    *object,
 
 
 static void
-on_item_flip_orientation_activate (GtkMenuItem *item,
-                                   GwhBrowser  *self)
+on_item_flip_orientation_activate (GSimpleAction *action,
+                                   GVariant *parameter,
+                                   GwhBrowser    *self)
 {
   gtk_orientable_set_orientation (GTK_ORIENTABLE (self),
                                   gtk_orientable_get_orientation (GTK_ORIENTABLE (self)) == GTK_ORIENTATION_VERTICAL
@@ -611,82 +499,124 @@ on_item_flip_orientation_activate (GtkMenuItem *item,
 }
 
 static void
-on_item_zoom_100_activate (GtkMenuItem *item,
-                           GwhBrowser  *self)
+on_item_zoom_100_activate (WebKitWebView *view)
 {
-  webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (self->priv->web_view), 1.0);
+  webkit_web_view_set_zoom_level (view, 1.0);
 }
 
 static void
-on_item_full_content_zoom_activate (GtkCheckMenuItem *item,
-                                    GwhBrowser       *self)
+on_item_full_content_zoom_activate (GSimpleAction *action,
+                                    GVariant      *dummy_parameter,
+                                    GwhBrowser    *self)
 {
-  webkit_web_view_set_full_content_zoom (WEBKIT_WEB_VIEW (self->priv->web_view),
-                                         gtk_check_menu_item_get_active (item));
+  WebKitSettings *settings;
+  gboolean        zoom_text_only;
+
+  settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (self->priv->web_view));
+
+  zoom_text_only = !webkit_settings_get_zoom_text_only (settings);
+  webkit_settings_set_zoom_text_only (settings, zoom_text_only);
+  g_simple_action_set_state (action, g_variant_new_boolean (!zoom_text_only));
 }
 
-static void
-on_web_view_populate_popup (WebKitWebView *view,
-                            GtkMenu       *menu,
-                            GwhBrowser    *self)
+static void web_view_zoom (WebKitWebView *view, gdouble factor)
 {
-  GtkWidget *item;
-  GtkWidget *submenu;
-  
-  #define ADD_SEPARATOR(menu) \
-    item = gtk_separator_menu_item_new (); \
-    gtk_widget_show (item); \
-    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item)
-  
-  ADD_SEPARATOR (menu);
-  
+  gdouble zoom_level = webkit_web_view_get_zoom_level (view);
+  webkit_web_view_set_zoom_level (view, zoom_level * factor);
+}
+
+static void web_view_zoom_in (WebKitWebView *view)
+{
+  web_view_zoom (view, zoom_in_factor);
+}
+
+static void web_view_zoom_out (WebKitWebView *view)
+{
+  web_view_zoom (view, zoom_out_factor);
+}
+
+static gboolean
+on_web_view_context_menu (WebKitWebView       *view,
+                          WebKitContextMenu   *context_menu,
+                          GdkEvent            *event,
+                          WebKitHitTestResult *hit_test_result,
+                          GwhBrowser          *self)
+{
+  WebKitContextMenuItem    *item;
+  WebKitContextMenu        *submenu;
+  GAction                  *action;
+  GVariant                 *action_state;
+
+  webkit_context_menu_append (context_menu,
+                              webkit_context_menu_item_new_separator ());
+
   /* Zoom menu */
-  submenu = gtk_menu_new ();
-  item = gtk_menu_item_new_with_mnemonic (_("_Zoom"));
-  gtk_widget_show (item);
-  gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  submenu = webkit_context_menu_new ();
+  item = webkit_context_menu_item_new_with_submenu (_("_Zoom"), submenu);
+  webkit_context_menu_append (context_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_shell_append (GTK_MENU_SHELL (submenu), item);
+  action = g_simple_action_new ("zoom-in", NULL);
+  g_signal_connect_swapped (action, "activate",
+                            G_CALLBACK (web_view_zoom_in), view);
+  item = webkit_context_menu_item_new_from_gaction (action, _("Zoom _In"),
+                                                    NULL);
+  webkit_context_menu_append (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_shell_append (GTK_MENU_SHELL (submenu), item);
+  action = g_simple_action_new ("zoom-out", NULL);
+  g_signal_connect_swapped (action, "activate",
+                            G_CALLBACK (web_view_zoom_out), view);
+  item = webkit_context_menu_item_new_from_gaction (action, _("Zoom _Out"),
+                                                    NULL);
+  webkit_context_menu_append (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_shell_append (GTK_MENU_SHELL (submenu), item);
+  webkit_context_menu_append (submenu,
+                              webkit_context_menu_item_new_separator ());
+  action = g_simple_action_new ("zoom-reset", NULL);
+  g_signal_connect_swapped (action, "activate",
+                            G_CALLBACK (on_item_zoom_100_activate), view);
+  item = webkit_context_menu_item_new_from_gaction (action, _("_Reset Zoom"),
+                                                    NULL);
+  webkit_context_menu_append (submenu, item);
+
   /* full content zoom */
-  ADD_SEPARATOR (submenu);
-  item = gtk_check_menu_item_new_with_mnemonic (_("Full-_content zoom"));
-  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
-                                  webkit_web_view_get_full_content_zoom (view));
-  g_signal_connect (item, "activate",
-                    G_CALLBACK (on_item_full_content_zoom_activate), self);
-  gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
-  /* show zoom sumbenu */
-  gtk_widget_show_all (submenu);
-  
-  ADD_SEPARATOR (menu);
-  
-  item = gtk_menu_item_new_with_label (_("Flip panes orientation"));
-  g_signal_connect (item, "activate",
-                    G_CALLBACK (on_item_flip_orientation_activate), self);
-  gtk_widget_show (item);
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  webkit_context_menu_append (submenu,
+                              webkit_context_menu_item_new_separator ());
+  action_state = g_variant_new_boolean (
+    webkit_settings_get_zoom_text_only (webkit_web_view_get_settings (view)));
+
+  action = g_simple_action_new_stateful (
+    "full-content-zoom",
+    NULL,
+    action_state
+  );
+  item = webkit_context_menu_item_new_from_gaction (action,
+                                                    _("Full-_content zoom"),
+                                                    NULL);
+  g_simple_action_set_enabled (action, TRUE);
+  webkit_context_menu_append (submenu, item);
+  g_signal_connect (action, "activate",
+                    on_item_full_content_zoom_activate, self);
+
+  /* flip panes orientation */
+  webkit_context_menu_append (context_menu,
+                              webkit_context_menu_item_new_separator ());
+  action = g_simple_action_new ("flip-panes", NULL);
+  g_signal_connect_swapped (action, "activate",
+                            G_CALLBACK (on_item_flip_orientation_activate),
+                            view);
+  item = webkit_context_menu_item_new_from_gaction (
+    action, _("_Flip panes orientation"), NULL);
+  webkit_context_menu_append (context_menu, item);
   if (! INSPECTOR_VISIBLE (self) || INSPECTOR_DETACHED (self)) {
-    gtk_widget_set_sensitive (item, FALSE);
+    g_simple_action_set_enabled (action, FALSE);
   }
-  
-  #undef ADD_SEPARATOR
-  
-  g_signal_emit (self, signals[POPULATE_POPUP], 0, menu);
+
+  g_signal_emit (self, signals[POPULATE_POPUP], 0, context_menu);
+
+  return FALSE;
 }
 
 static gboolean
@@ -696,18 +626,32 @@ on_web_view_scroll_event (GtkWidget      *widget,
 {
   guint     mods = event->state & gtk_accelerator_get_default_mod_mask ();
   gboolean  handled = FALSE;
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+  gdouble   delta;
+  gdouble   factor;
+#endif
   
   if (mods == GDK_CONTROL_MASK) {
     handled = TRUE;
     switch (event->direction) {
       case GDK_SCROLL_DOWN:
-        webkit_web_view_zoom_out (WEBKIT_WEB_VIEW (self->priv->web_view));
+        web_view_zoom_out (WEBKIT_WEB_VIEW (self->priv->web_view));
         break;
       
       case GDK_SCROLL_UP:
-        webkit_web_view_zoom_in (WEBKIT_WEB_VIEW (self->priv->web_view));
+        web_view_zoom_in (WEBKIT_WEB_VIEW (self->priv->web_view));
         break;
-      
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+      case GDK_SCROLL_SMOOTH:
+        delta = event->delta_x + event->delta_y;
+        factor = pow (delta < 0 ? zoom_in_factor : zoom_out_factor,
+                      fabs (delta));
+        web_view_zoom (WEBKIT_WEB_VIEW (self->priv->web_view), factor);
+        break;
+#endif
+
       default:
         handled = FALSE;
     }
@@ -877,7 +821,7 @@ gwh_browser_class_init (GwhBrowserClass *klass)
                                           G_STRUCT_OFFSET (GwhBrowserClass, populate_popup),
                                           NULL, NULL,
                                           g_cclosure_marshal_VOID__OBJECT,
-                                          G_TYPE_NONE, 1, GTK_TYPE_MENU);
+                                          G_TYPE_NONE, 1, WEBKIT_TYPE_CONTEXT_MENU);
   
   g_object_class_override_property (object_class,
                                     PROP_ORIENTATION,
@@ -1019,33 +963,6 @@ create_toolbar (GwhBrowser *self)
   return toolbar;
 }
 
-static GtkWidget *
-create_inspector_window (GwhBrowser *self)
-{
-  gboolean skips_taskbar;
-  gboolean window_type;
-  
-  g_object_get (self->priv->settings,
-                "wm-secondary-windows-skip-taskbar", &skips_taskbar,
-                "wm-secondary-windows-type", &window_type,
-                NULL);
-  self->priv->inspector_window_x = self->priv->inspector_window_y = 0;
-  self->priv->inspector_window = g_object_new (GTK_TYPE_WINDOW,
-                                               "type", GTK_WINDOW_TOPLEVEL,
-                                               "skip-taskbar-hint", skips_taskbar,
-                                               "type-hint", window_type,
-                                               "title", _("Web inspector"),
-                                               NULL);
-  g_signal_connect (self->priv->inspector_window, "delete-event",
-                    G_CALLBACK (on_inspector_window_delete_event), self);
-  g_signal_connect (self->priv->settings, "notify::wm-secondary-windows-skip-taskbar",
-                    G_CALLBACK (on_settings_wm_windows_skip_taskbar_notify), self);
-  g_signal_connect (self->priv->settings, "notify::wm-secondary-windows-type",
-                    G_CALLBACK (on_settings_wm_windows_type_notify), self);
-  
-  return self->priv->inspector_window;
-}
-
 static guint
 get_statusbar_context_id (GtkStatusbar *statusbar)
 {
@@ -1059,18 +976,24 @@ get_statusbar_context_id (GtkStatusbar *statusbar)
 }
 
 static void
-on_web_view_hovering_over_link (WebKitWebView *view,
-                                gchar         *title,
-                                gchar         *uri,
-                                GwhBrowser    *self)
+on_web_view_mouse_target_changed (WebKitWebView       *view,
+                                  WebKitHitTestResult *hit_test_result,
+                                  guint                modifiers,
+                                  GwhBrowser          *self)
 {
   GtkStatusbar *statusbar = GTK_STATUSBAR (self->priv->statusbar);
-  
+  const gchar *uri;
+
   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 (!webkit_hit_test_result_context_is_link (hit_test_result))
+    return;
+
+  uri = webkit_hit_test_result_get_link_uri (hit_test_result);
   if (uri && *uri) {
     self->priv->hovered_link = g_strdup (uri);
     gtk_statusbar_push (statusbar, get_statusbar_context_id (statusbar),
@@ -1114,7 +1037,8 @@ static void
 gwh_browser_init (GwhBrowser *self)
 {
   GtkWidget          *scrolled;
-  WebKitWebSettings  *wkws;
+  WebKitSettings     *wkws;
+  WebKitWebContext   *wkcontext;
   gboolean            inspector_detached;
   
   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GWH_TYPE_BROWSER,
@@ -1125,6 +1049,9 @@ gwh_browser_init (GwhBrowser *self)
   self->priv->web_view = webkit_web_view_new ();
   wkws = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (self->priv->web_view));
   g_object_set (wkws, "enable-developer-extras", TRUE, NULL);
+
+  wkcontext = webkit_web_view_get_context (WEBKIT_WEB_VIEW (self->priv->web_view));
+  webkit_web_context_set_favicon_database_directory (wkcontext, NULL);
   
   self->priv->settings = gwh_settings_get_default ();
   g_object_get (self->priv->settings,
@@ -1149,7 +1076,6 @@ gwh_browser_init (GwhBrowser *self)
                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
   self->priv->inspector_web_view = NULL;
   
-  self->priv->inspector_window = create_inspector_window (self);
   gtk_container_add (GTK_CONTAINER (inspector_detached
                                     ? self->priv->inspector_window
                                     : self->priv->paned),
@@ -1168,33 +1094,27 @@ gwh_browser_init (GwhBrowser *self)
                     G_CALLBACK (on_orientation_notify), self);
   
   self->priv->inspector = webkit_web_view_get_inspector (WEBKIT_WEB_VIEW (self->priv->web_view));
-  g_signal_connect (self->priv->inspector, "inspect-web-view",
-                    G_CALLBACK (on_inspector_inspect_web_view), self);
-  g_signal_connect (self->priv->inspector, "show-window",
-                    G_CALLBACK (on_inspector_show_window), self);
-  g_signal_connect (self->priv->inspector, "close-window",
-                    G_CALLBACK (on_inspector_close_window), self);
-  g_signal_connect (self->priv->inspector, "detach-window",
-                    G_CALLBACK (on_inspector_detach_window), self);
-  g_signal_connect (self->priv->inspector, "attach-window",
-                    G_CALLBACK (on_inspector_attach_window), self);
+  g_signal_connect (self->priv->inspector, "bring-to-front",
+                    G_CALLBACK (on_inspector_opened), self);
+  g_signal_connect (self->priv->inspector, "closed",
+                    G_CALLBACK (on_inspector_closed), self);
   
   g_signal_connect (G_OBJECT (self->priv->web_view), "notify::progress",
                     G_CALLBACK (on_web_view_progress_notify), self);
   g_signal_connect (G_OBJECT (self->priv->web_view), "notify::uri",
                     G_CALLBACK (on_web_view_uri_notify), self);
-  g_signal_connect (G_OBJECT (self->priv->web_view), "notify::load-status",
-                    G_CALLBACK (on_web_view_load_status_notify), self);
-  g_signal_connect (G_OBJECT (self->priv->web_view), "notify::load-error",
-                    G_CALLBACK (on_web_view_load_error), self);
-  g_signal_connect (G_OBJECT (self->priv->web_view), "notify::icon-uri",
-                    G_CALLBACK (on_web_view_icon_uri_notify), self);
-  g_signal_connect (G_OBJECT (self->priv->web_view), "populate-popup",
-                    G_CALLBACK (on_web_view_populate_popup), self);
+  g_signal_connect (G_OBJECT (self->priv->web_view), "load-changed",
+                    G_CALLBACK (on_web_view_load_changed), self);
+  g_signal_connect (G_OBJECT (self->priv->web_view), "load-failed",
+                    G_CALLBACK (on_web_view_load_failed), self);
+  g_signal_connect (G_OBJECT (self->priv->web_view), "notify::favicon",
+                    G_CALLBACK (on_web_view_favicon_notify), self);
+  g_signal_connect (G_OBJECT (self->priv->web_view), "context-menu",
+                    G_CALLBACK (on_web_view_context_menu), 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), "mouse-target-changed",
+                    G_CALLBACK (on_web_view_mouse_target_changed), 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",
@@ -1215,8 +1135,6 @@ gwh_browser_init (GwhBrowser *self)
                     G_CALLBACK (on_settings_browser_bookmarks_notify), self);
   g_signal_connect (self->priv->settings, "notify::browser-orientation",
                     G_CALLBACK (on_settings_browser_orientation_notify), self);
-  g_signal_connect (self->priv->settings, "notify::inspector-detached",
-                    G_CALLBACK (on_settings_inspector_detached_notify), self);
   g_signal_connect (self->priv->settings, "notify::inspector-window-geometry",
                     G_CALLBACK (on_settings_inspector_window_geometry_notify), self);
 }
@@ -1251,7 +1169,7 @@ gwh_browser_set_uri (GwhBrowser  *self,
   }
   g_free (scheme);
   if (g_strcmp0 (real_uri, gwh_browser_get_uri (self)) != 0) {
-    webkit_web_view_open (WEBKIT_WEB_VIEW (self->priv->web_view), real_uri);
+    webkit_web_view_load_uri (WEBKIT_WEB_VIEW (self->priv->web_view), real_uri);
     g_object_notify (G_OBJECT (self), "uri");
   }
   g_free (real_uri);


Modified: webhelper/src/gwh-browser.h
6 lines changed, 3 insertions(+), 3 deletions(-)
===================================================================
@@ -22,7 +22,7 @@
 
 #include <glib.h>
 #include <gtk/gtk.h>
-#include <webkit/webkit.h>
+#include <webkit2/webkit2.h>
 
 G_BEGIN_DECLS
 
@@ -56,8 +56,8 @@ struct _GwhBrowserClass
 {
   GtkVBoxClass parent_class;
   
-  void        (*populate_popup)       (GwhBrowser *browser,
-                                       GtkMenu    *menu);
+  void        (*populate_popup)       (GwhBrowser        *browser,
+                                       WebKitContextMenu *menu);
 };
 
 


Modified: webhelper/src/gwh-plugin.c
50 lines changed, 31 insertions(+), 19 deletions(-)
===================================================================
@@ -240,33 +240,45 @@ on_document_save (GObject        *obj,
 }
 
 static void
-on_item_auto_reload_toggled (GtkCheckMenuItem *item,
-                             gpointer          dummy)
+on_item_auto_reload_toggled (GAction  *action,
+                             GVariant *parameter,
+                             gpointer  dummy)
 {
+  gboolean browser_auto_reload;
+
+  g_object_get (G_OBJECT (G_settings),
+                "browser-auto-reload", &browser_auto_reload, NULL);
   g_object_set (G_OBJECT (G_settings), "browser-auto-reload",
-                gtk_check_menu_item_get_active (item), NULL);
+                !browser_auto_reload, NULL);
+  g_simple_action_set_state (action, g_variant_new_boolean (browser_auto_reload));
 }
 
 static void
-on_browser_populate_popup (GwhBrowser *browser,
-                           GtkMenu    *menu,
-                           gpointer    dummy)
+on_browser_populate_popup (GwhBrowser        *browser,
+                           WebKitContextMenu *menu,
+                           gpointer           dummy)
 {
-  GtkWidget  *item;
-  gboolean    auto_reload = FALSE;
-  
-  item = gtk_separator_menu_item_new ();
-  gtk_widget_show (item);
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-  
+  GAction               *action;
+  gboolean               auto_reload = FALSE;
+  GVariant              *action_state;
+  WebKitContextMenuItem *item;
+
+  webkit_context_menu_append (menu,
+                              webkit_context_menu_item_new_separator ());
+
   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_shell_append (GTK_MENU_SHELL (menu), item);
-  g_signal_connect (item, "toggled", G_CALLBACK (on_item_auto_reload_toggled),
-                    NULL);
+  action_state = g_variant_new_boolean (auto_reload);
+  action = g_simple_action_new_stateful (
+    "browser-auto-reload",
+    NULL,
+    action_state
+  );
+  item = webkit_context_menu_item_new_from_gaction (
+    action, _("Reload upon document saving"), NULL);
+  webkit_context_menu_append (menu, item);
+  g_signal_connect (action, "activate",
+                    on_item_auto_reload_toggled, NULL);
 }
 
 static void



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list