[banshee] Started implementing navigation for OssiferWebView



commit e0fd60a9e8ec569b46a0ad26a771bf006301ae7d
Author: Aaron Bockover <abockover novell com>
Date:   Sat Jul 10 13:26:53 2010 -0400

    Started implementing navigation for OssiferWebView
    
    Basic widgets are implemented, but not connected to Ossifer. Removed the
    DocumentLoadFinished event in favor of the LoadStatusChanged event,
    which is more detailed.
    
    Provied LoadStatus, Title, and Uri properties on OssiferWebView.

 .../Banshee.WebBrowser/Banshee.WebBrowser.csproj   |   18 ++++---
 .../Banshee.WebBrowser/NavigationControl.cs        |   55 ++++++++++++++++++++
 .../Banshee.WebBrowser/OssiferDownloadStatus.cs    |    1 +
 .../Banshee.WebBrowser/OssiferLoadStatus.cs        |   39 ++++++++++++++
 .../Banshee.WebBrowser/OssiferWebView.cs           |   38 ++++++++++---
 src/Core/Banshee.WebBrowser/Makefile.am            |    2 +
 .../libossifer/ossifer-web-view.c                  |   42 +++++++++++----
 .../Banshee.AmazonMp3.Store.csproj                 |   16 +++---
 .../Banshee.AmazonMp3.Store/StoreSource.cs         |    2 +
 .../Banshee.AmazonMp3.Store/StoreView.cs           |    5 ++
 .../Banshee.AmazonMp3.Store/WebBrowserShell.cs     |   27 ++++++++--
 .../Banshee.Wikipedia/ContextPage.cs               |    6 ++-
 12 files changed, 210 insertions(+), 41 deletions(-)
---
diff --git a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser.csproj b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser.csproj
index a0cc1ac..c466b4f 100644
--- a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser.csproj
+++ b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser.csproj
@@ -50,14 +50,6 @@
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
-    <ProjectReference Include="..\..\Libraries\Hyena.Gui\Hyena.Gui.csproj">
-      <Project>{C856EFD8-E812-4E61-8B76-E3583D94C233}</Project>
-      <Name>Hyena.Gui</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Libraries\Hyena\Hyena.csproj">
-      <Project>{95374549-9553-4C1E-9D89-667755F90E12}</Project>
-      <Name>Hyena</Name>
-    </ProjectReference>
     <ProjectReference Include="..\Banshee.Core\Banshee.Core.csproj">
       <Project>{2ADB831A-A050-47D0-B6B9-9C19D60233BB}</Project>
       <Name>Banshee.Core</Name>
@@ -70,6 +62,14 @@
       <Project>{AC839523-7BDF-4AB6-8115-E17921B96EC6}</Project>
       <Name>Banshee.ThickClient</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\Hyena\Hyena.Gui\Hyena.Gui.csproj">
+      <Project>{C856EFD8-E812-4E61-8B76-E3583D94C233}</Project>
+      <Name>Hyena.Gui</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Hyena\Hyena\Hyena.csproj">
+      <Project>{95374549-9553-4C1E-9D89-667755F90E12}</Project>
+      <Name>Hyena</Name>
+    </ProjectReference>
   </ItemGroup>
   <ProjectExtensions>
     <MonoDevelop>
@@ -97,5 +97,7 @@
     <Compile Include="Banshee.WebBrowser\OssiferWebView.cs" />
     <Compile Include="Banshee.WebBrowser\OssiferNavigationResponse.cs" />
     <Compile Include="Banshee.WebBrowser\OssiferDownloadStatus.cs" />
+    <Compile Include="Banshee.WebBrowser\NavigationControl.cs" />
+    <Compile Include="Banshee.WebBrowser\OssiferLoadStatus.cs" />
   </ItemGroup>
 </Project>
diff --git a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/NavigationControl.cs b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/NavigationControl.cs
new file mode 100644
index 0000000..ebf9d9d
--- /dev/null
+++ b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/NavigationControl.cs
@@ -0,0 +1,55 @@
+// 
+// NavigationControl.cs
+// 
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2010 Novell, Inc.
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+using Gtk;
+
+namespace Banshee.WebBrowser
+{
+    public class NavigationControl : HBox
+    {
+        private Button back_button = new Button (new Image (Stock.GoBack, IconSize.Button)) { Relief = ReliefStyle.None };
+        private Button forward_button = new Button (new Image (Stock.GoForward, IconSize.Button)) { Relief = ReliefStyle.None };
+        private Button reload_button = new Button (new Image (Stock.Refresh, IconSize.Button)) { Relief = ReliefStyle.None };
+        private Button home_button = new Button (new Image (Stock.Home, IconSize.Button)) { Relief = ReliefStyle.None };
+
+        public NavigationControl ()
+        {
+            PackStart (back_button, false, false, 0);
+            PackStart (forward_button, false, false, 0);
+            PackStart (reload_button, false, false, 5);
+            PackStart (home_button, false, false, 0);
+            ShowAll ();
+        }
+
+        private OssiferWebView web_view;
+        public OssiferWebView WebView {
+            get { return web_view; }
+            set { web_view = value; }
+        }
+    }
+}
diff --git a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferDownloadStatus.cs b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferDownloadStatus.cs
index 6fc4f2e..23bc8ef 100644
--- a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferDownloadStatus.cs
+++ b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferDownloadStatus.cs
@@ -23,6 +23,7 @@
 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 // THE SOFTWARE.
+
 using System;
 
 namespace Banshee.WebBrowser
diff --git a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferLoadStatus.cs b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferLoadStatus.cs
new file mode 100644
index 0000000..a8f8a9a
--- /dev/null
+++ b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferLoadStatus.cs
@@ -0,0 +1,39 @@
+//
+// OssiferLoadStatus.cs
+// 
+// Author:
+//   Aaron Bockover <abockover novell com>
+// 
+// Copyright 2010 Novell, Inc.
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Banshee.WebBrowser
+{
+    public enum OssiferLoadStatus
+    {
+        Provisional,
+        Committed,
+        Finished,
+        FirstVisuallyNonEmptyLayout,
+        Failed
+    }
+}
\ No newline at end of file
diff --git a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferWebView.cs b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferWebView.cs
index 5c35df9..de004c4 100644
--- a/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferWebView.cs
+++ b/src/Core/Banshee.WebBrowser/Banshee.WebBrowser/OssiferWebView.cs
@@ -33,7 +33,7 @@ namespace Banshee.WebBrowser
     {
         private delegate OssiferNavigationResponse MimeTypePolicyDecisionRequestedCallback (IntPtr ossifer, IntPtr mimetype);
         private delegate IntPtr DownloadRequestedCallback (IntPtr ossifer, IntPtr mimetype, IntPtr uri, IntPtr suggested_filename);
-        private delegate void DocumentLoadFinishedCallback (IntPtr ossifer, IntPtr uri);
+        private delegate void LoadStatusChangedCallback (IntPtr ossifer, OssiferLoadStatus status);
         private delegate void DownloadStatusChangedCallback (IntPtr ossifer, OssiferDownloadStatus status, IntPtr mimetype, IntPtr destnation_uri);
 
         [StructLayout (LayoutKind.Sequential)]
@@ -41,7 +41,7 @@ namespace Banshee.WebBrowser
         {
             public MimeTypePolicyDecisionRequestedCallback MimeTypePolicyDecisionRequested;
             public DownloadRequestedCallback DownloadRequested;
-            public DocumentLoadFinishedCallback DocumentLoadFinished;
+            public LoadStatusChangedCallback LoadStatusChanged;
             public DownloadStatusChangedCallback DownloadStatusChanged;
         }
 
@@ -49,8 +49,7 @@ namespace Banshee.WebBrowser
 
         private Callbacks callbacks;
 
-        // FIXME: provide more complete events here to match the protected virtuals
-        public event EventHandler DocumentLoadFinished;
+        public event EventHandler LoadStatusChanged;
 
         [DllImport (LIBOSSIFER)]
         private static extern IntPtr ossifer_web_view_get_type ();
@@ -75,7 +74,7 @@ namespace Banshee.WebBrowser
                 MimeTypePolicyDecisionRequested =
                     new MimeTypePolicyDecisionRequestedCallback (HandleMimeTypePolicyDecisionRequested),
                 DownloadRequested = new DownloadRequestedCallback (HandleDownloadRequested),
-                DocumentLoadFinished = new DocumentLoadFinishedCallback (HandleDocumentLoadFinished),
+                LoadStatusChanged = new LoadStatusChangedCallback (HandleLoadStatusChanged),
                 DownloadStatusChanged = new DownloadStatusChangedCallback (HandleDownloadStatusChanged)
             };
 
@@ -110,14 +109,14 @@ namespace Banshee.WebBrowser
             return null;
         }
 
-        private void HandleDocumentLoadFinished (IntPtr ossifer, IntPtr uri)
+        private void HandleLoadStatusChanged (IntPtr ossifer, OssiferLoadStatus status)
         {
-            OnDocumentLoadFinished (GLib.Marshaller.Utf8PtrToString (uri));
+            OnLoadStatusChanged (status);
         }
 
-        protected virtual void OnDocumentLoadFinished (string uri)
+        protected virtual void OnLoadStatusChanged (OssiferLoadStatus status)
         {
-            var handler = DocumentLoadFinished;
+            var handler = LoadStatusChanged;
             if (handler != null) {
                 handler (this, EventArgs.Empty);
             }
@@ -177,6 +176,27 @@ namespace Banshee.WebBrowser
             }
         }
 
+        [DllImport (LIBOSSIFER)]
+        private static extern IntPtr ossifer_web_view_get_uri (IntPtr ossifer);
+
+        public string Uri {
+            get { return GLib.Marshaller.Utf8PtrToString (ossifer_web_view_get_uri (Handle)); }
+        }
+
+        [DllImport (LIBOSSIFER)]
+        private static extern IntPtr ossifer_web_view_get_title (IntPtr ossifer);
+
+        public string Title {
+            get { return GLib.Marshaller.Utf8PtrToString (ossifer_web_view_get_title (Handle)); }
+        }
+
+        [DllImport (LIBOSSIFER)]
+        private static extern OssiferLoadStatus ossifer_web_view_get_load_status (IntPtr ossifer);
+
+        public OssiferLoadStatus LoadStatus {
+            get { return ossifer_web_view_get_load_status (Handle); }
+        }
+
 #endregion
 
 #region Static API
diff --git a/src/Core/Banshee.WebBrowser/Makefile.am b/src/Core/Banshee.WebBrowser/Makefile.am
index d63d12d..5aff845 100644
--- a/src/Core/Banshee.WebBrowser/Makefile.am
+++ b/src/Core/Banshee.WebBrowser/Makefile.am
@@ -6,7 +6,9 @@ LINK = $(REF_BANSHEE_WEBBROWSER)
 INSTALL_DIR = $(DEFAULT_INSTALL_DIR)
 
 SOURCES =  \
+	Banshee.WebBrowser/NavigationControl.cs \
 	Banshee.WebBrowser/OssiferDownloadStatus.cs \
+	Banshee.WebBrowser/OssiferLoadStatus.cs \
 	Banshee.WebBrowser/OssiferNavigationResponse.cs \
 	Banshee.WebBrowser/OssiferWebView.cs
 
diff --git a/src/Core/Banshee.WebBrowser/libossifer/ossifer-web-view.c b/src/Core/Banshee.WebBrowser/libossifer/ossifer-web-view.c
index 72237ca..3b8e0ad 100644
--- a/src/Core/Banshee.WebBrowser/libossifer/ossifer-web-view.c
+++ b/src/Core/Banshee.WebBrowser/libossifer/ossifer-web-view.c
@@ -39,16 +39,16 @@ typedef WebKitNavigationResponse (* OssiferWebViewMimeTypePolicyDecisionRequeste
 typedef gchar * (* OssiferWebViewDownloadRequestedCallback)
     (OssiferWebView *ossifer, const gchar *mimetype, const gchar *uri, const gchar *suggested_filename);
 
-typedef void (* OssiferWebViewDocumentLoadFinishedCallback)
-    (OssiferWebView *ossifer, const gchar *uri);
-
 typedef void (* OssiferWebViewDownloadStatusChanged)
     (OssiferWebView *ossifer, WebKitDownloadStatus status, const gchar *mimetype, const gchar *uri);
 
+typedef void (* OssiferWebViewLoadStatusChanged)
+    (OssiferWebView *ossifer, WebKitLoadStatus status);
+
 typedef struct {
     OssiferWebViewMimeTypePolicyDecisionRequestedCallback mime_type_policy_decision_requested;
     OssiferWebViewDownloadRequestedCallback download_requested;
-    OssiferWebViewDocumentLoadFinishedCallback document_load_finished;
+    OssiferWebViewLoadStatusChanged load_status_changed;
     OssiferWebViewDownloadStatusChanged download_status_changed;
 } OssiferWebViewCallbacks;
 
@@ -143,12 +143,13 @@ ossifer_web_view_download_requested (WebKitWebView *web_view, WebKitDownload *do
 }
 
 static void
-ossifer_web_view_document_load_finished (WebKitWebView *web_view, WebKitWebFrame *web_frame, gpointer user_data)
+ossifer_web_view_notify_load_status (GObject* object, GParamSpec* pspec, gpointer user_data)
 {
-    OssiferWebView *ossifer = OSSIFER_WEB_VIEW (web_view);
+    OssiferWebView *ossifer = OSSIFER_WEB_VIEW (object);
 
-    if (ossifer->priv->callbacks.document_load_finished != NULL) {
-        ossifer->priv->callbacks.document_load_finished (ossifer, webkit_web_frame_get_uri (web_frame));
+    if (ossifer->priv->callbacks.load_status_changed != NULL) {
+        ossifer->priv->callbacks.load_status_changed (ossifer,
+            webkit_web_view_get_load_status (WEBKIT_WEB_VIEW (ossifer)));
     }
 }
 
@@ -194,8 +195,8 @@ ossifer_web_view_init (OssiferWebView *ossifer)
     g_signal_connect (ossifer, "download-requested",
         G_CALLBACK (ossifer_web_view_download_requested), NULL);
 
-    g_signal_connect (ossifer, "document-load-finished",
-        G_CALLBACK (ossifer_web_view_document_load_finished), NULL);
+    g_signal_connect (ossifer, "notify::load-status",
+        G_CALLBACK (ossifer_web_view_notify_load_status), NULL);
 }
 
 
@@ -277,4 +278,25 @@ ossifer_web_view_load_string (OssiferWebView *ossifer, const gchar *content,
 {
     g_return_if_fail (OSSIFER_WEB_VIEW (ossifer));
     webkit_web_view_load_string (WEBKIT_WEB_VIEW (ossifer), content, mimetype, encoding, base_uri);
+}
+
+const gchar *
+ossifer_web_view_get_uri (OssiferWebView *ossifer)
+{
+    g_return_val_if_fail (OSSIFER_WEB_VIEW (ossifer), NULL);
+    return webkit_web_view_get_uri (WEBKIT_WEB_VIEW (ossifer));
+}
+
+const gchar *
+ossifer_web_view_get_title (OssiferWebView *ossifer)
+{
+    g_return_val_if_fail (OSSIFER_WEB_VIEW (ossifer), NULL);
+    return webkit_web_view_get_title (WEBKIT_WEB_VIEW (ossifer));
+}
+
+WebKitLoadStatus
+ossifer_web_view_get_load_status (OssiferWebView *ossifer)
+{
+    g_return_val_if_fail (OSSIFER_WEB_VIEW (ossifer), WEBKIT_LOAD_FAILED);
+    return webkit_web_view_get_load_status (WEBKIT_WEB_VIEW (ossifer));
 }
\ No newline at end of file
diff --git a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store.csproj b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store.csproj
index f365043..362807c 100644
--- a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store.csproj
+++ b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store.csproj
@@ -68,18 +68,10 @@
       <Project>{B28354F0-BA87-44E8-989F-B864A3C7C09F}</Project>
       <Name>Banshee.Services</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\Libraries\Hyena.Gui\Hyena.Gui.csproj">
-      <Project>{C856EFD8-E812-4E61-8B76-E3583D94C233}</Project>
-      <Name>Hyena.Gui</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\Core\Banshee.ThickClient\Banshee.ThickClient.csproj">
       <Project>{AC839523-7BDF-4AB6-8115-E17921B96EC6}</Project>
       <Name>Banshee.ThickClient</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\Libraries\Hyena\Hyena.csproj">
-      <Project>{95374549-9553-4C1E-9D89-667755F90E12}</Project>
-      <Name>Hyena</Name>
-    </ProjectReference>
     <ProjectReference Include="..\Banshee.AmazonMp3\Banshee.AmazonMp3.csproj">
       <Project>{930ADBFD-07F1-4044-A1C5-8B28BD23DB5C}</Project>
       <Name>Banshee.AmazonMp3</Name>
@@ -88,6 +80,14 @@
       <Project>{E7660EC3-6CBD-4809-93ED-B4B88E65D3D3}</Project>
       <Name>Banshee.WebBrowser</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\Hyena\Hyena.Gui\Hyena.Gui.csproj">
+      <Project>{C856EFD8-E812-4E61-8B76-E3583D94C233}</Project>
+      <Name>Hyena.Gui</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Hyena\Hyena\Hyena.csproj">
+      <Project>{95374549-9553-4C1E-9D89-667755F90E12}</Project>
+      <Name>Hyena</Name>
+    </ProjectReference>
   </ItemGroup>
   <ProjectExtensions>
     <MonoDevelop>
diff --git a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreSource.cs b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreSource.cs
index 981d87f..11d47b5 100644
--- a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreSource.cs
+++ b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreSource.cs
@@ -31,6 +31,7 @@ using Hyena;
 
 using Banshee.Sources;
 using Banshee.Sources.Gui;
+using Banshee.WebBrowser;
 
 namespace Banshee.AmazonMp3.Store
 {
@@ -43,6 +44,7 @@ namespace Banshee.AmazonMp3.Store
         {
             TypeUniqueId = "amazon-mp3-store";
             Properties.SetString ("Icon.Name", "amazon-mp3-source");
+            Properties.Set<bool> ("Nereid.SourceContents.HeaderVisible", false);
         }
 
         public override void Activate ()
diff --git a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreView.cs b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreView.cs
index 7863bb2..e33403f 100644
--- a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreView.cs
+++ b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/StoreView.cs
@@ -63,6 +63,11 @@ namespace Banshee.AmazonMp3.Store
             }
         }
 
+        protected override void OnLoadStatusChanged (OssiferLoadStatus status)
+        {
+            Console.WriteLine ("LOAD STATUS: {0} -> {1} ({2}, {3})", status, LoadStatus, Uri, Title);
+        }
+
         protected override string OnDownloadRequested (string mimetype, string uri, string suggestedFilename)
         {
             switch (mimetype) {
diff --git a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/WebBrowserShell.cs b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/WebBrowserShell.cs
index aea9346..786daa6 100644
--- a/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/WebBrowserShell.cs
+++ b/src/Extensions/Banshee.AmazonMp3.Store/Banshee.AmazonMp3.Store/WebBrowserShell.cs
@@ -28,16 +28,33 @@ using System;
 
 using Gtk;
 
+using Banshee.WebBrowser;
+
 namespace Banshee.AmazonMp3.Store
 {
-    public class WebBrowserShell : Gtk.ScrolledWindow, Banshee.Gui.IDisableKeybindings
+    public class WebBrowserShell : Table, Banshee.Gui.IDisableKeybindings
     {
-        public StoreView View { get; private set; }
+        private ScrolledWindow store_view_scroll = new ScrolledWindow ();
+        private StoreView store_view = new StoreView ();
+        private NavigationControl navigation_control = new NavigationControl ();
 
-        public WebBrowserShell ()
+        public WebBrowserShell () : base (2, 1, false)
         {
-            ShadowType = ShadowType.In;
-            Add (View = new StoreView ());
+            navigation_control.WebView = store_view;
+
+            Attach (navigation_control, 0, 1, 0, 1,
+                AttachOptions.Expand | AttachOptions.Fill,
+                AttachOptions.Shrink,
+                0, 0);
+
+            store_view_scroll.Add (store_view);
+            store_view_scroll.ShadowType = ShadowType.In;
+
+            Attach (store_view_scroll, 0, 1, 1, 2,
+                AttachOptions.Expand | AttachOptions.Fill,
+                AttachOptions.Expand | AttachOptions.Fill,
+                0, 0);
+
             ShowAll ();
         }
     }
diff --git a/src/Extensions/Banshee.Wikipedia/Banshee.Wikipedia/ContextPage.cs b/src/Extensions/Banshee.Wikipedia/Banshee.Wikipedia/ContextPage.cs
index 701873c..5637252 100644
--- a/src/Extensions/Banshee.Wikipedia/Banshee.Wikipedia/ContextPage.cs
+++ b/src/Extensions/Banshee.Wikipedia/Banshee.Wikipedia/ContextPage.cs
@@ -57,7 +57,11 @@ namespace Banshee.Wikipedia
             get {
                 if (view == null) {
                     view = new WikipediaView ();
-                    view.view.DocumentLoadFinished += delegate { State = ContextState.Loaded; };
+                    view.view.LoadStatusChanged += delegate {
+                        if (view.view.LoadStatus == Banshee.WebBrowser.OssiferLoadStatus.FirstVisuallyNonEmptyLayout) {
+                            State = ContextState.Loaded;
+                        }
+                    };
                     view.ShowAll ();
                 }
                 return view;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]