[banshee] MediaPanel: Allow switching between MediaPanel and main UI



commit 45975acbbde3242ac4101ec7a6f5e4e566107b3b
Author: Bertrand Lorentz <bertrand lorentz gmail com>
Date:   Sun Oct 20 17:11:23 2013 +0200

    MediaPanel: Allow switching between MediaPanel and main UI
    
    The MediaPanel extension does not display itself systematically
    anomore, only if Banshee is started through the MediaPanel client. It
    now adds an item in the View menu to allow switching to it after
    starting Banshee normally.

 po/POTFILES.in                                     |    3 +-
 .../Banshee.MediaPanel/MediaPanel.cs               |    7 +++
 .../Banshee.MediaPanel/MediaPanelService.cs        |   43 +++++++++++++-------
 3 files changed, 37 insertions(+), 16 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a2433b4..f0c360d 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -12,8 +12,8 @@ data/audio-profiles/vorbis.xml.in
 data/audio-profiles/wavpack.xml.in
 data/audio-profiles/wav.xml.in
 data/audio-profiles/wma.xml.in
-data/desktop-files/common.desktop.in
 data/banshee.appdata.xml.in
+data/desktop-files/common.desktop.in
 src/Backends/Banshee.Gnome/Banshee.GnomeBackend/Brasero.cs
 src/Backends/Banshee.Gnome/Banshee.GnomeBackend/GnomeScreensaverManager.cs
 src/Backends/Banshee.GStreamer/Banshee.GStreamer/AudioCdRipper.cs
@@ -262,6 +262,7 @@ src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming/StationSource.cs
 src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming/StationType.cs
 src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel.addin.xml
 src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelContents.cs
+src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelService.cs
 src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/SearchEntry.cs
 src/Extensions/Banshee.MiniMode/Banshee.MiniMode.addin.xml
 src/Extensions/Banshee.MiniMode/Banshee.MiniMode/MiniModeService.cs
diff --git a/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanel.cs 
b/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanel.cs
index ba6f762..a2e3e5a 100644
--- a/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanel.cs
+++ b/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanel.cs
@@ -77,6 +77,13 @@ namespace Banshee.MediaPanel
             }
         }
 
+        public void Show ()
+        {
+            if (window_panel != null) {
+                window_panel.Show ();
+            }
+        }
+
         public void Hide ()
         {
             if (window_panel != null) {
diff --git a/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelService.cs 
b/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelService.cs
index b261f56..c2465d7 100644
--- a/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelService.cs
+++ b/src/Extensions/Banshee.MediaPanel/Banshee.MediaPanel/MediaPanelService.cs
@@ -28,6 +28,7 @@
 
 using System;
 using Gtk;
+using Mono.Unix;
 
 using Hyena;
 
@@ -46,6 +47,8 @@ namespace Banshee.MediaPanel
         private InterfaceActionService interface_action_service;
         private SourceManager source_manager;
         private PlayerEngineService player;
+        private Menu view_menu;
+        private MenuItem menu_item;
         private MediaPanel panel;
 
         void IExtensionService.Initialize ()
@@ -91,36 +94,46 @@ namespace Banshee.MediaPanel
 
         private void Initialize ()
         {
+            view_menu = (interface_action_service.UIManager.GetWidget ("/MainMenu/ViewMenu") as 
MenuItem).Submenu as Menu;
+            menu_item = new MenuItem (Catalog.GetString ("Media _Panel"));
+            menu_item.Activated += delegate { PresentMediaPanel (); };
+            view_menu.Insert (menu_item, 2);
+            menu_item.Show ();
+
             // If Banshee is running from the MediaPanel client entry assembly,
-            // the MediaPanel will have already been created. If not, we just 
-            // create the panel here (which is likely to just be a separate 
-            // top-level window for testing).
-            panel = MediaPanel.Instance ?? new MediaPanel ();
+            // the MediaPanel instance will have already been created.
+            panel = MediaPanel.Instance;
 
-            if (panel == null) {
-                Log.Warning ("MediaPanel extension initialized without a panel");
-                return;
+            if (panel != null) {
+                panel.BuildContents ();
+                PresentMediaPanel ();
             }
-
-            panel.BuildContents ();
-
-            elements_service.PrimaryWindowClose = () => {
-                elements_service.PrimaryWindow.Hide ();
-                return true;
-            };
         }
 
         public void PresentPrimaryInterface ()
         {
-            elements_service.PrimaryWindow.Maximize ();
             elements_service.PrimaryWindow.Present ();
             if (panel != null) {
                 panel.Hide ();
             }
         }
 
+        public void PresentMediaPanel ()
+        {
+            if (panel == null) {
+                panel = new MediaPanel ();
+                panel.BuildContents ();
+            }
+            elements_service.PrimaryWindow.Hide ();
+            panel.Show ();
+        }
+
         public void Dispose ()
         {
+            if (view_menu != null && menu_item != null) {
+                view_menu.Remove (menu_item);
+            }
+
             if (panel != null) {
                 panel.Dispose ();
                 panel = null;


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