Branch: refs/heads/master Author: Chow Loong Jin hyperair@debian.org Committer: Colomban Wendling ban@herbesfolles.org Date: Sun, 05 Feb 2023 22:10:44 UTC Commit: 941d15da06da22c352233586791271f95efdb599 https://github.com/geany/geany-plugins/commit/941d15da06da22c352233586791271...
Log Message: ----------- webhelper: Port context menu to WebKitContextMenu
Modified Paths: -------------- webhelper/src/gwh-browser.c webhelper/src/gwh-browser.h webhelper/src/gwh-plugin.c
Modified: webhelper/src/gwh-browser.c 152 lines changed, 89 insertions(+), 63 deletions(-) =================================================================== @@ -27,6 +27,7 @@ #include <string.h> #include <glib.h> #include <glib/gi18n-lib.h> +#include <gio/gio.h> #include <gtk/gtk.h> #include <webkit2/webkit2.h>
@@ -597,8 +598,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 @@ -607,20 +609,24 @@ 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) { WebKitSettings *settings; + gboolean zoom_text_only; + settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (self->priv->web_view));
- webkit_settings_set_zoom_text_only (settings, !gtk_check_menu_item_get_active (item)); + 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 web_view_zoom (WebKitWebView *view, gdouble factor) @@ -639,68 +645,88 @@ static void web_view_zoom_out (WebKitWebView *view) web_view_zoom (view, zoom_out_factor); }
-static void -on_web_view_populate_popup (WebKitWebView *view, - GtkMenu *menu, - GwhBrowser *self) +static gboolean +on_web_view_context_menu (WebKitWebView *view, + WebKitContextMenu *context_menu, + GdkEvent *event, + WebKitHitTestResult *hit_test_result, + GwhBrowser *self) { - 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); - + 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", + action = g_simple_action_new ("zoom-in", NULL); + g_signal_connect_swapped (action, "activate", G_CALLBACK (web_view_zoom_in), view); - gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item); + 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", + action = g_simple_action_new ("zoom-out", NULL); + g_signal_connect_swapped (action, "activate", G_CALLBACK (web_view_zoom_out), view); - gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item); + 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_settings_get_zoom_text_only (webkit_web_view_get_settings(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 @@ -905,7 +931,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, @@ -1221,8 +1247,8 @@ gwh_browser_init (GwhBrowser *self) 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), "populate-popup", - G_CALLBACK (on_web_view_populate_popup), 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",
Modified: webhelper/src/gwh-browser.h 4 lines changed, 2 insertions(+), 2 deletions(-) =================================================================== @@ -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).