summaryrefslogtreecommitdiff
path: root/plugins/common/WebAuthenticationPane.vala
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/common/WebAuthenticationPane.vala')
-rw-r--r--plugins/common/WebAuthenticationPane.vala129
1 files changed, 31 insertions, 98 deletions
diff --git a/plugins/common/WebAuthenticationPane.vala b/plugins/common/WebAuthenticationPane.vala
index b9f7280..f745252 100644
--- a/plugins/common/WebAuthenticationPane.vala
+++ b/plugins/common/WebAuthenticationPane.vala
@@ -6,109 +6,44 @@
using Spit.Publishing;
namespace Shotwell.Plugins.Common {
- public abstract class WebAuthenticationPane : Spit.Publishing.DialogPane, Object {
+ public class ExternalWebPane : Spit.Publishing.DialogPane, Object {
public DialogPane.GeometryOptions preferred_geometry {
get; construct; default = DialogPane.GeometryOptions.COLOSSAL_SIZE;
}
-
public string login_uri { owned get; construct; }
- public Error load_error { get; private set; default = null; }
-
- private WebKit.WebView webview;
- private Gtk.Widget widget;
- private Gtk.Entry entry;
+ public Gtk.Widget widget;
- public void clear() {
- debug("Clearing the data of WebKit...");
- this.webview.get_website_data_manager().clear.begin(WebKit.WebsiteDataTypes.ALL, (GLib.TimeSpan)0);
+ public ExternalWebPane(string uri) {
+ Object(login_uri: uri);
}
+ public signal void browser_toggled();
+
public override void constructed () {
base.constructed ();
- var ctx = WebKit.WebContext.get_default();
- if (!ctx.get_sandbox_enabled()) {
- ctx.set_sandbox_enabled(true);
- }
-
- var box = new Gtk.Box(Gtk.Orientation.VERTICAL, 4);
- this.widget = box;
- this.entry = new Gtk.Entry();
- this.entry.editable = false;
- this.entry.get_style_context().add_class("flat");
- this.entry.get_style_context().add_class("read-only");
- box.pack_start (entry, false, false, 6);
-
- this.webview = new WebKit.WebView ();
-
- this.webview.load_changed.connect (this.on_page_load_changed);
- this.webview.load_failed.connect (this.on_page_load_failed);
- this.webview.context_menu.connect ( () => { return false; });
- this.webview.decide_policy.connect (this.on_decide_policy);
- this.webview.bind_property("uri", this.entry, "text", GLib.BindingFlags.DEFAULT);
- box.pack_end (this.webview);
- }
-
- private bool on_decide_policy(WebKit.PolicyDecision decision, WebKit.PolicyDecisionType type) {
- switch (type) {
- case WebKit.PolicyDecisionType.NEW_WINDOW_ACTION: {
- var navigation = (WebKit.NavigationPolicyDecision) decision;
- var action = navigation.get_navigation_action();
- var uri = action.get_request().uri;
- decision.ignore();
- AppInfo.launch_default_for_uri_async.begin(uri, null);
- return true;
- }
- default:
- break;
- }
-
- return false;
- }
-
- public abstract void on_page_load ();
-
- protected void set_cursor (Gdk.CursorType type) {
- var window = webview.get_window ();
- if (window == null)
- return;
-
- var display = window.get_display ();
- if (display == null)
- return;
-
- var cursor = new Gdk.Cursor.for_display (display, type);
- window.set_cursor (cursor);
- }
-
- private bool on_page_load_failed (WebKit.LoadEvent load_event, string uri, Error error) {
- // OAuth call-back scheme. Produces a load error because it is not HTTP(S)
- // Do not set the load_error, but continue the error handling
- if (uri.has_prefix ("shotwell-auth://"))
- return false;
-
- critical ("Failed to load uri %s: %s", uri, error.message);
- this.load_error = error;
-
- return false;
- }
-
- private void on_page_load_changed (WebKit.LoadEvent load_event) {
- switch (load_event) {
- case WebKit.LoadEvent.STARTED:
- case WebKit.LoadEvent.REDIRECTED:
- this.set_cursor (Gdk.CursorType.WATCH);
- break;
- case WebKit.LoadEvent.FINISHED:
- this.set_cursor (Gdk.CursorType.LEFT_PTR);
- this.on_page_load ();
- break;
- default:
- break;
- }
- }
-
- public WebKit.WebView get_view () {
- return this.webview;
+ var box = new Gtk.Box(Gtk.Orientation.VERTICAL, 18);
+ box.set_halign(Gtk.Align.CENTER);
+ box.hexpand = true;
+ box.set_valign(Gtk.Align.CENTER);
+ box.vexpand = true;
+ var image = new Gtk.Image.from_icon_name ("web-browser-symbolic", Gtk.IconSize.DIALOG);
+ image.get_style_context().add_class("dim-label");
+ image.set_pixel_size(128);
+ box.add(image);
+
+ var label = new Gtk.Label(_("Sign in with your browser to setup an account"));
+ label.get_style_context().add_class("heading");
+ box.add(label);
+ var button = new Gtk.Button.with_label (_("Continue"));
+ button.set_halign(Gtk.Align.CENTER);
+ button.get_style_context().add_class ("suggested-action");
+ button.clicked.connect(() => {
+ AppInfo.launch_default_for_uri_async.begin(login_uri, null);
+ browser_toggled();
+ });
+ box.pack_end(button);
+
+ widget = box;
}
public DialogPane.GeometryOptions get_preferred_geometry() {
@@ -120,11 +55,9 @@ namespace Shotwell.Plugins.Common {
}
public void on_pane_installed () {
- this.get_view ().load_uri (this.login_uri);
}
public void on_pane_uninstalled() {
- this.clear();
- }
- }
+ }
+ }
}