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.vala75
1 files changed, 75 insertions, 0 deletions
diff --git a/plugins/common/WebAuthenticationPane.vala b/plugins/common/WebAuthenticationPane.vala
new file mode 100644
index 0000000..0a77cf6
--- /dev/null
+++ b/plugins/common/WebAuthenticationPane.vala
@@ -0,0 +1,75 @@
+/* Copyright 2016 Jens Georg <mail@jensge.org>
+ *
+ * This software is licensed under the GNU LGPL (version 2.1 or later).
+ * See the COPYING file in this distribution.
+ */
+using Spit.Publishing;
+
+namespace Shotwell.Plugins.Common {
+ public abstract class WebAuthenticationPane : Spit.Publishing.DialogPane, Object {
+ public DialogPane.GeometryOptions preferred_geometry {
+ get; construct; default = DialogPane.GeometryOptions.NONE;
+ }
+
+ public string login_uri { owned get; construct; }
+
+ private WebKit.WebView webview;
+ private Gtk.Box pane_widget;
+
+ public override void constructed () {
+ base.constructed ();
+
+ this.webview = new WebKit.WebView ();
+ this.webview.get_settings ().enable_plugins = false;
+
+ this.webview.load_changed.connect (this.on_page_load_changed);
+ this.webview.context_menu.connect ( () => { return false; });
+
+ this.pane_widget = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
+ this.pane_widget.pack_start (this.webview, true, true, 0);
+ }
+
+ public abstract void on_page_load ();
+
+ protected void set_cursor (Gdk.CursorType type) {
+ var window = pane_widget.get_window ();
+ var display = window.get_display ();
+ var cursor = new Gdk.Cursor.for_display (display, type);
+ window.set_cursor (cursor);
+ }
+
+ 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;
+ }
+
+ public DialogPane.GeometryOptions get_preferred_geometry() {
+ return this.preferred_geometry;
+ }
+
+ public Gtk.Widget get_widget() {
+ return pane_widget;
+ }
+
+ public void on_pane_installed () {
+ this.get_view ().load_uri (this.login_uri);
+ }
+
+ public void on_pane_uninstalled() {
+ }
+ }
+}