[banshee] [OsxBackend] Code cleanup and use OsxIntegration



commit 0c70ca4d1a6de6a8b34d93816e17c9276ffbb534
Author: Aaron Bockover <abockover novell com>
Date:   Wed Feb 24 15:57:11 2010 -0500

    [OsxBackend] Code cleanup and use OsxIntegration
    
    This migrates from using ige-mac-integration-sharp to using the
    new OsxIntegration.Framework APIs and the thin ige-mac-integration
    binding for proxying the GTK menu to the OSX menu bar.
    
    Also fixes the very awful bug where all key events were being
    sent to the main window.

 .../Banshee.Osx/Banshee.OsxBackend/OsxService.cs   |  119 +++++++++----------
 1 files changed, 56 insertions(+), 63 deletions(-)
---
diff --git a/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs b/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
index b44eb09..fd7ef78 100644
--- a/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
+++ b/src/Backends/Banshee.Osx/Banshee.OsxBackend/OsxService.cs
@@ -34,7 +34,8 @@ using Mono.Unix;
 using Banshee.ServiceStack;
 using Banshee.Gui;
 
-using IgeMacIntegration;
+using OsxIntegration.Ige;
+using OsxIntegration.Framework;
 
 namespace Banshee.OsxBackend
 {
@@ -78,9 +79,10 @@ namespace Banshee.OsxBackend
             return true;
         }
 
-
-        void Initialize ()
+        private void Initialize ()
         {
+            elements_service.PrimaryWindow.WindowStateEvent += OnWindowStateEvent;
+
             // add close action
             interface_action_service.GlobalActions.Add (new ActionEntry [] {
                 new ActionEntry ("CloseAction", Stock.Close,
@@ -89,21 +91,32 @@ namespace Banshee.OsxBackend
             });
 
             // merge close menu item
-            ui_manager_id = interface_action_service.UIManager.AddUiFromResource ("osx-ui-actions-layout.xml");
-            RegisterCloseHandler ();
+            ui_manager_id = interface_action_service.UIManager.AddUiFromString (@"
+              <ui>
+                <menubar name=""MainMenu"">
+                  <menu name=""MediaMenu"" action=""MediaMenuAction"">
+                    <placeholder name=""ClosePlaceholder"">
+                    <menuitem name=""Close"" action=""CloseAction""/>
+                    </placeholder>
+                  </menu>
+                </menubar>
+              </ui>
+            ");
 
-            elements_service.PrimaryWindow.WindowStateEvent += WindowStateHandler;
+            RegisterCloseHandler ();
+            ConfigureOsxMainMenu ();
 
-            // bind gtk menu to global osx menu
-            BindMenuBar ();
+            IgeMacMenu.GlobalKeyHandlerEnabled = false;
 
-            // make menu more osx-like
-            AdjustMainMenu ();
+            ApplicationEvents.Quit += (o, e) => {
+                Banshee.ServiceStack.Application.Shutdown ();
+                e.Handled = true;
+            };
 
-            // add dock handlers
-            IgeMacDock doc = IgeMacDock.Default;
-            doc.Clicked += OnDockClicked;
-            doc.QuitActivate += OnDockQuitActivated;
+            ApplicationEvents.Reopen += (o, e) => {
+                SetWindowVisibility (true);
+                e.Handled = true;
+            };
         }
 
         public void Dispose ()
@@ -120,82 +133,62 @@ namespace Banshee.OsxBackend
             disposed = true;
         }
 
-        string IService.ServiceName {
-            get { return "OsxService"; }
-        }
-
-        private void OnDockClicked (object o, System.EventArgs args)
+        private void ConfigureOsxMainMenu ()
         {
-            SetWindowVisibility (true);
-        }
+            IgeMacMenu.MenuBar = (MenuShell)interface_action_service.UIManager.GetWidget ("/MainMenu");
 
-        private void OnDockQuitActivated (object o, System.EventArgs args)
-        {
-            Banshee.ServiceStack.Application.Shutdown ();
-        }
-
-        private void BindMenuBar ()
-        {
-            IgeMacMenu.MenuBar =(MenuShell)interface_action_service.UIManager.GetWidget ("/MainMenu");
-        }
+            var ui = interface_action_service.UIManager;
 
-        private void AdjustMainMenu () {
-            UIManager ui = interface_action_service.UIManager;
+            IgeMacMenu.QuitMenuItem = ui.GetWidget ("/MainMenu/MediaMenu/Quit") as MenuItem;
 
-            MenuItem about_item = ui.GetWidget ("/MainMenu/HelpMenu/About") as MenuItem;
-            MenuItem prefs_item = ui.GetWidget ("/MainMenu/EditMenu/Preferences") as MenuItem;
-            MenuItem quit_item  = ui.GetWidget ("/MainMenu/MediaMenu/Quit") as MenuItem;
-
-            IgeMacMenuGroup about_group = IgeMacMenu.AddAppMenuGroup ();
-            IgeMacMenuGroup prefs_group = IgeMacMenu.AddAppMenuGroup ();
-
-            IgeMacMenu.QuitMenuItem = quit_item;
-
-            about_group.AddMenuItem (about_item, null);
-            prefs_group.AddMenuItem (prefs_item, null);
+            var group = IgeMacMenu.AddAppMenuGroup ();
+            group.AddMenuItem (ui.GetWidget ("/MainMenu/HelpMenu/About") as MenuItem, null);
+            group.AddMenuItem (ui.GetWidget ("/MainMenu/EditMenu/Preferences") as MenuItem, null);
         }
 
         private void RegisterCloseHandler ()
         {
             if (elements_service.PrimaryWindowClose == null) {
-                elements_service.PrimaryWindowClose = OnPrimaryWindowClose;
+                elements_service.PrimaryWindowClose = () => {
+                    CloseWindow (null, null);
+                    return true;
+                };
             }
         }
 
-        private bool OnPrimaryWindowClose ()
-        {
-            CloseWindow (null, null);
-            return true;
-        }
-
         private void CloseWindow (object o, EventArgs args)
         {
-            SetWindowVisibility(false);
+            SetWindowVisibility (false);
         }
 
-        private void SetCloseMenuItemSensitivity (bool sensitivity) {
-            UIManager ui = interface_action_service.UIManager;
-            MenuItem close_item = ui.GetWidget ("/MainMenu/MediaMenu/ClosePlaceholder/Close") as MenuItem;
-            close_item.Sensitive = sensitivity;
+        private void SetCloseMenuItemSensitivity (bool sensitivity)
+        {
+            ((MenuItem)interface_action_service.UIManager.GetWidget (
+                "/MainMenu/MediaMenu/ClosePlaceholder/Close")).Sensitive = sensitivity;
         }
 
         private void SetWindowVisibility (bool visible)
         {
-            SetCloseMenuItemSensitivity(visible);
+            SetCloseMenuItemSensitivity (visible);
             if (elements_service.PrimaryWindow.Visible != visible) {
                 elements_service.PrimaryWindow.ToggleVisibility ();
             }
         }
 
-        private void WindowStateHandler (object obj, WindowStateEventArgs args) {
+        private void OnWindowStateEvent (object obj, WindowStateEventArgs args)
+        {
             switch (args.Event.NewWindowState) {
-            case Gdk.WindowState.Iconified:
-                SetCloseMenuItemSensitivity(false);
-                break;
-            case (Gdk.WindowState) 0:
-                SetCloseMenuItemSensitivity(true);
-                break;
+                case Gdk.WindowState.Iconified:
+                    SetCloseMenuItemSensitivity (false);
+                    break;
+                case (Gdk.WindowState)0:
+                    SetCloseMenuItemSensitivity (true);
+                    break;
             }
         }
+
+        string IService.ServiceName {
+            get { return "OsxService"; }
+        }
     }
 }



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