[banshee] [OsxBackend] Code cleanup and use OsxIntegration
- From: Aaron Bockover <abock src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] [OsxBackend] Code cleanup and use OsxIntegration
- Date: Wed, 24 Feb 2010 21:00:10 +0000 (UTC)
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]