Skip to content

Commit f6d5bc5

Browse files
Diego-Ivanlw64
authored andcommitted
library: Port Web View demo to Vala (#795)
Ports the Web View demo to Vala
1 parent df9e2d6 commit f6d5bc5

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#! /usr/bin/env -S vala workbench.vala --pkg gtk4 --pkg libadwaita-1 --pkg webkitgtk-6.0
2+
3+
public void main () {
4+
var button_back = (Gtk.Button) workbench.builder.get_object ("button_back");
5+
var button_forward = (Gtk.Button) workbench.builder.get_object ("button_forward");
6+
var button_reload = (Gtk.Button) workbench.builder.get_object ("button_reload");
7+
var button_stop = (Gtk.Button) workbench.builder.get_object ("button_stop");
8+
9+
var url_bar = (Gtk.Entry) workbench.builder.get_object ("url_bar");
10+
var web_view = (WebKit.WebView) workbench.builder.get_object ("web_view");
11+
12+
web_view.bind_property ("uri", url_bar.buffer, "text", DEFAULT);
13+
web_view.load_uri ("https://www.gnome.org/");
14+
15+
url_bar.activate.connect (() => {
16+
string url = url_bar.buffer.text;
17+
string? scheme = Uri.peek_scheme (url);
18+
if (scheme == null) {
19+
url = @"http://$url";
20+
}
21+
web_view.load_uri (url);
22+
});
23+
24+
button_back.clicked.connect (() => web_view.go_back ());
25+
button_forward.clicked.connect (() => web_view.go_forward ());
26+
button_reload.clicked.connect (() => web_view.reload ());
27+
button_stop.clicked.connect (() => web_view.stop_loading ());
28+
29+
web_view.load_changed.connect ((load_event) => {
30+
switch (load_event) {
31+
case STARTED:
32+
message ("Loading page started");
33+
break;
34+
case FINISHED:
35+
message ("Loading page finished");
36+
break;
37+
default:
38+
break;
39+
}
40+
});
41+
42+
web_view.load_failed.connect ((load_event, failed_url, error) => {
43+
// Loading failed as a result of calling stop_loading
44+
if (error is WebKit.NetworkError.CANCELLED) {
45+
return false;
46+
}
47+
48+
web_view.load_alternate_html (
49+
create_error_page (failed_url, error.message), // HTML Content
50+
failed_url, // Content URI for the alternate page content
51+
null // Base URI for relative locations
52+
);
53+
return true;
54+
});
55+
56+
web_view.notify["estimated-load-progress"].connect (() => {
57+
url_bar.progress_fraction = web_view.estimated_load_progress;
58+
if (url_bar.progress_fraction == 1) {
59+
// Reset the url_bar progress 500ms after the page has completely loaded
60+
Timeout.add_once (500, () => {
61+
url_bar.progress_fraction = 0;
62+
});
63+
}
64+
});
65+
}
66+
67+
private string create_error_page (string failed_url, string message) {
68+
string page =
69+
@"<div style=\"text-align:center; margin:24px;\">
70+
<h2>An error has occurred while loading $failed_url</h2>
71+
<p>$message</p>
72+
</div>";
73+
74+
return page;
75+
}

0 commit comments

Comments
 (0)