Index: /trunk/gnome-rdp/configure.ac
===================================================================
--- /trunk/gnome-rdp/configure.ac (revision 263)
+++ /trunk/gnome-rdp/configure.ac (revision 264)
@@ -50,6 +50,7 @@
 PKG_CHECK_MODULES([GLIB_SHARP_20], [glib-sharp-2.0])
 PKG_CHECK_MODULES([GLADE_SHARP_20], [glade-sharp-2.0])
 PKG_CHECK_MODULES([GNOME_KEYRING_SHARP_10], [gnome-keyring-sharp-1.0])
+PKG_CHECK_MODULES([APPINDICATOR_SHARP_01], [appindicator-sharp-0.1])
 
 dnl package checks, per config
 
Index: /trunk/gnome-rdp/MainWindow.cs
===================================================================
--- /trunk/gnome-rdp/MainWindow.cs (revision 257)
+++ /trunk/gnome-rdp/MainWindow.cs (revision 264)
@@ -31,14 +31,18 @@
 using GnomeRDP.Vnc;
 
+using AppIndicator;
+
 namespace GnomeRDP
 {
 	public partial class MainWindow: Gtk.Window
 	{			
-		private StatusIcon statusIcon;
+		private ApplicationIndicator applicationIndicator;
 		private Gtk.Action actionQuit;
+		private Gtk.Action actionToggleVisible;
+		private bool hideOnDelete = false;
 				
 		private const string sessionKey = "Session";
 		
-		public MainWindow(): base (Gtk.WindowType.Toplevel)
+		public MainWindow (): base (Gtk.WindowType.Toplevel)
 		{
 			Build ();
@@ -46,72 +50,80 @@
 			this.DeleteEvent += (s, e) =>
 			{
-				Visible = false;
-				e.RetVal = true;
+				if (hideOnDelete) 
+				{
+					Visible = false;
+					e.RetVal = true;
+				}
 			};
 			
-			this.actionQuit = new Gtk.Action("QuitAction", "Quit");
-			this.actionQuit.Activated+= (s, e) => Application.Quit();
+			this.actionQuit = new Gtk.Action ("QuitAction", "Quit");
+			this.actionQuit.Activated += (s, e) => Application.Quit ();
+		
+			this.actionToggleVisible = new Gtk.Action("ToggleVisibleAction", "Show/Hide");
+			this.actionToggleVisible.Activated += (s, e) => { this.Visible = !this.Visible; };
+
+			this.applicationIndicator = new ApplicationIndicator ("gnome-rdp", "gnome-rdp", Category.ApplicationStatus);
+			this.applicationIndicator.ConnectionChanged += (s, e) => { hideOnDelete = this.applicationIndicator.Connected; };
 			
-			this.statusIcon = new StatusIcon(ResourceLoader.Find(ResourceLoader.Icons.gnomeRdp));
-			this.statusIcon.Visible = true;
-			this.statusIcon.Tooltip = "GnomeRDP";
-			this.statusIcon.Activate += OnStatusIcon_Activate;
-			this.statusIcon.PopupMenu += OnStatusIcon_PopupMenu;	
-
+			this.applicationIndicator.Menu = CreateMenu();
+			this.applicationIndicator.Status = Status.Active;
+						
 			this.Icon = ResourceLoader.Find(ResourceLoader.Icons.gnomeRdp);
 		}
-		
-		private void OnStatusIcon_Activate(object sender, EventArgs e)
+
+		public void UpdateMenu()
 		{
-			Visible = !Visible;
+			Menu oldMenu = this.applicationIndicator.Menu;
+			
+			this.applicationIndicator.Menu = CreateMenu();
+			
+			oldMenu.Dispose();
 		}
-		
-		private void OnStatusIcon_PopupMenu(object sender, PopupMenuArgs e)
+										
+		private Menu CreateMenu()
 		{
-			try
-			{
-				Menu topMenu = new Menu();
-				topMenu.Popup();
+			Menu topMenu = new Menu();
+			
+			topMenu.Append(actionToggleVisible.CreateMenuItem());
+			topMenu.Append(new SeparatorMenuItem());
 				
-				foreach (var group in Program.SessionCollection.Groups) 
-				{	
-					MenuItem groupMenu = new MenuItem(group);
-					topMenu.Append(groupMenu);
-					
-					Menu subMenu = new Menu();
-					foreach(var session in Program.SessionCollection.Items.Where(s => s.Group == group).OrderBy(s => s.Server))
-					{
-						MenuItem menuItem = new MenuItem(session.MenuFormat);
-						menuItem.TooltipText = session.Tooltip;
-						menuItem.Activated += PopupMenuItem_Activated;
-						menuItem.Data[sessionKey] = session;
-											
-						subMenu.Append(menuItem);
-					}
-					groupMenu.Submenu = subMenu;
-				}
-
-				topMenu.Append(new SeparatorMenuItem());
-
-				foreach (var session in Program.SessionCollection.Items.Where(s => string.IsNullOrEmpty(s.Group)).OrderBy(s => s.Server)) 
+			foreach (var group in Program.SessionCollection.Groups) 
+			{	
+				MenuItem groupMenu = new MenuItem(group);
+				
+				Menu subMenu = new Menu();
+				foreach(var session in Program.SessionCollection.Items.Where(s => s.Group == group).OrderBy(s => s.Server))
 				{
 					MenuItem menuItem = new MenuItem(session.MenuFormat);
 					menuItem.TooltipText = session.Tooltip;
 					menuItem.Activated += PopupMenuItem_Activated;
-					menuItem.Data[sessionKey] = session;					
-					
-					topMenu.Append(menuItem);
+					menuItem.Data[sessionKey] = session;
+										
+					subMenu.Append(menuItem);
 				}
+				groupMenu.Submenu = subMenu;
+
+				topMenu.Append(groupMenu);
+			}
+
+			topMenu.Append(new SeparatorMenuItem());
+
+			foreach (var session in Program.SessionCollection.Items.Where(s => string.IsNullOrEmpty(s.Group)).OrderBy(s => s.Server)) 
+			{
+				MenuItem menuItem = new MenuItem(session.MenuFormat);
+				menuItem.TooltipText = session.Tooltip;
+				menuItem.Activated += PopupMenuItem_Activated;
+				menuItem.Data[sessionKey] = session;					
 				
-				topMenu.Append(new SeparatorMenuItem());
-				topMenu.Append(actionQuit.CreateMenuItem());
-				topMenu.ShowAll();
-//				topMenu.Popup();
+				topMenu.Append(menuItem);
 			}
-			catch
-			{
-			}
-		}	
-		
+			
+			topMenu.Append(new SeparatorMenuItem());
+			topMenu.Append(actionQuit.CreateMenuItem());
+			
+			topMenu.ShowAll();
+			return topMenu;
+		}
+				
 		private void PopupMenuItem_Activated(object sender, EventArgs e)
 		{
@@ -126,20 +138,4 @@
 			}
 		}
-		
-		protected virtual void OnNewRdpActionActivated (object sender, System.EventArgs e)
-		{
-		}
-		
-		protected virtual void OnNewVncActionActivated (object sender, System.EventArgs e)
-		{
-		}
-		
-		protected virtual void OnNewSshActionActivated (object sender, System.EventArgs e)
-		{
-		}
-		
-		
-		
-		
 	}
 }
Index: /trunk/gnome-rdp/ChangeLog
===================================================================
--- /trunk/gnome-rdp/ChangeLog (revision 262)
+++ /trunk/gnome-rdp/ChangeLog (revision 264)
@@ -1,2 +1,11 @@
+2011-11-02  James P Michels III  <jmichels@bluefintrading.com>
+
+	* Program.cs:
+	* gnome-rdp.sln:
+	* MainWindow.cs:
+	* gnome-rdp.csproj:
+	* gui.stetic:
+	* SessionsWidget.cs: Changes to support AppIndicator
+
 2011-05-22  James P Michels III  <james.p.michels@gmail.com>
 
Index: /trunk/gnome-rdp/Sessions/SessionsWidget.cs
===================================================================
--- /trunk/gnome-rdp/Sessions/SessionsWidget.cs (revision 257)
+++ /trunk/gnome-rdp/Sessions/SessionsWidget.cs (revision 264)
@@ -205,4 +205,5 @@
 				}
 				
+				Program.UpdateMainWindowMenu();
 			}
 			catch (Exception ex)
Index: /trunk/gnome-rdp/gtk-gui/gui.stetic
===================================================================
--- /trunk/gnome-rdp/gtk-gui/gui.stetic (revision 261)
+++ /trunk/gnome-rdp/gtk-gui/gui.stetic (revision 264)
@@ -7,5 +7,6 @@
   <import>
     <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <widget-library name="../bin/Debug/gnome-rdp.exe" internal="true" />
+    <widget-library name="appindicator-sharp, Version=0.2.0.0, Culture=neutral, PublicKeyToken=bcae265d1c7ab4c2" />
+    <widget-library name="../bin/Release/gnome-rdp.exe" internal="true" />
   </import>
   <widget class="Gtk.Window" id="GnomeRDP.MainWindow" design-size="798 565">
Index: /trunk/gnome-rdp/Program.cs
===================================================================
--- /trunk/gnome-rdp/Program.cs (revision 261)
+++ /trunk/gnome-rdp/Program.cs (revision 264)
@@ -196,5 +196,14 @@
 			});
 		}
-				
+		
+		public static void UpdateMainWindowMenu()
+		{
+			GLib.Timeout.Add(0, () =>
+			{
+				mainWindow.UpdateMenu();
+				return false;
+			});
+		}		
+		
 		public static void SetMainWindowVisible(bool visible)
 		{
