[gnome-builder/wip/gtk4-port: 1356/1774] libide/webkit: switch between reload/stop buttons while loading
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port: 1356/1774] libide/webkit: switch between reload/stop buttons while loading
- Date: Mon, 11 Jul 2022 22:31:43 +0000 (UTC)
commit f66245eb66e09ad4599b85aa2804056b7dad858e
Author: Christian Hergert <chergert redhat com>
Date: Fri Jun 3 16:16:05 2022 -0700
libide/webkit: switch between reload/stop buttons while loading
When loading we need to show the stop button so the user can stop the
loading if desired.
.../scalable/actions/stop-sign-symbolic.svg | 2 ++
src/libide/webkit/ide-webkit-page.c | 41 ++++++++++++++++++++++
src/libide/webkit/ide-webkit-page.ui | 26 ++++++++++++--
3 files changed, 66 insertions(+), 3 deletions(-)
---
diff --git a/data/icons/hicolor/scalable/actions/stop-sign-symbolic.svg
b/data/icons/hicolor/scalable/actions/stop-sign-symbolic.svg
new file mode 100644
index 000000000..b5a56aaa3
--- /dev/null
+++ b/data/icons/hicolor/scalable/actions/stop-sign-symbolic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g
fill="#222222"><path d="m 5.679688 1.988281 l -0.289063 0.289063 l -3.390625 3.359375 v 4.644531 l 3.675781
3.707031 h 4.648438 l 3.675781 -3.707031 v -4.644531 l -3.679688 -3.648438 z m 0.828124 2 h 2.992188 l 2.5
2.480469 v 2.988281 l -2.507812 2.53125 h -2.980469 l -2.511719 -2.53125 v -2.988281 z m 0 0"/><path d="m
6.855469 4.988281 l -1.855469 1.835938 v 2.289062 l 1.855469 1.875 h 2.289062 l 1.855469 -1.875 v -2.289062 l
-1.855469 -1.835938 z m 0 0"/></g></svg>
diff --git a/src/libide/webkit/ide-webkit-page.c b/src/libide/webkit/ide-webkit-page.c
index 0179e9e68..2e2fd2f40 100644
--- a/src/libide/webkit/ide-webkit-page.c
+++ b/src/libide/webkit/ide-webkit-page.c
@@ -29,9 +29,11 @@
typedef struct
{
+ GtkStack *reload_stack;
GtkCenterBox *toolbar;
IdeUrlBar *url_bar;
WebKitWebView *web_view;
+
GSimpleActionGroup *actions;
} IdeWebkitPagePrivate;
@@ -195,10 +197,29 @@ reload_action (GSimpleAction *action,
IDE_EXIT;
}
+static void
+stop_action (GSimpleAction *action,
+ GVariant *param,
+ gpointer user_data)
+{
+ IdeWebkitPage *self = user_data;
+ IdeWebkitPagePrivate *priv = ide_webkit_page_get_instance_private (self);
+
+ IDE_ENTRY;
+
+ g_assert (G_IS_SIMPLE_ACTION (action));
+ g_assert (IDE_IS_WEBKIT_PAGE (self));
+
+ webkit_web_view_stop_loading (priv->web_view);
+
+ IDE_EXIT;
+}
+
static const GActionEntry actions[] = {
{ "go-forward", go_forward_action },
{ "go-back", go_back_action },
{ "reload", reload_action },
+ { "stop", stop_action },
};
static void
@@ -264,6 +285,12 @@ ide_webkit_page_update_reload (IdeWebkitPage *self)
uri = webkit_web_view_get_uri (priv->web_view);
set_action_enabled (self, "reload", !loading && !ide_str_empty0 (uri));
+ set_action_enabled (self, "stop", loading);
+
+ if (loading)
+ gtk_stack_set_visible_child_name (priv->reload_stack, "stop");
+ else
+ gtk_stack_set_visible_child_name (priv->reload_stack, "reload");
IDE_EXIT;
}
@@ -283,6 +310,17 @@ ide_webkit_page_constructed (GObject *object)
webkit_web_view_set_background_color (WEBKIT_WEB_VIEW (priv->web_view), &color);
}
+static void
+ide_webkit_page_dispose (GObject *object)
+{
+ IdeWebkitPage *self = (IdeWebkitPage *)object;
+ IdeWebkitPagePrivate *priv = ide_webkit_page_get_instance_private (self);
+
+ g_clear_object (&priv->actions);
+
+ G_OBJECT_CLASS (ide_webkit_page_parent_class)->dispose (object);
+}
+
static void
ide_webkit_page_get_property (GObject *object,
guint prop_id,
@@ -328,6 +366,7 @@ ide_webkit_page_class_init (IdeWebkitPageClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->constructed = ide_webkit_page_constructed;
+ object_class->dispose = ide_webkit_page_dispose;
object_class->get_property = ide_webkit_page_get_property;
object_class->set_property = ide_webkit_page_set_property;
@@ -344,6 +383,7 @@ ide_webkit_page_class_init (IdeWebkitPageClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/plugins/webkit/ide-webkit-page.ui");
+ gtk_widget_class_bind_template_child_private (widget_class, IdeWebkitPage, reload_stack);
gtk_widget_class_bind_template_child_private (widget_class, IdeWebkitPage, toolbar);
gtk_widget_class_bind_template_child_private (widget_class, IdeWebkitPage, url_bar);
gtk_widget_class_bind_template_child_private (widget_class, IdeWebkitPage, web_view);
@@ -388,6 +428,7 @@ ide_webkit_page_init (IdeWebkitPage *self)
set_action_enabled (self, "go-forward", FALSE);
set_action_enabled (self, "go-back", FALSE);
set_action_enabled (self, "reload", FALSE);
+ set_action_enabled (self, "stop", FALSE);
}
IdeWebkitPage *
diff --git a/src/libide/webkit/ide-webkit-page.ui b/src/libide/webkit/ide-webkit-page.ui
index d534f2503..84d88e880 100644
--- a/src/libide/webkit/ide-webkit-page.ui
+++ b/src/libide/webkit/ide-webkit-page.ui
@@ -42,9 +42,29 @@
</object>
</child>
<child>
- <object class="GtkButton">
- <property name="icon-name">view-refresh-symbolic</property>
- <property name="action-name">web.reload</property>
+ <object class="GtkStack" id="reload_stack">
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">reload</property>
+ <property name="child">
+ <object class="GtkButton">
+ <property name="icon-name">view-refresh-symbolic</property>
+ <property name="action-name">web.reload</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">stop</property>
+ <property name="child">
+ <object class="GtkButton">
+ <property name="icon-name">stop-sign-symbolic</property>
+ <property name="action-name">web.stop</property>
+ </object>
+ </property>
+ </object>
+ </child>
</object>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]