#! /bin/sh /usr/share/dpatch/dpatch-run ## 20_refresh-menus-on-extensions.dpatch by Stephane Delcroix ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Refresh the Export and Tools menus on new or removed extensions (upstream SVN 3478) @DPATCH@ --- trunk/src/MainWindow.cs 2007/12/05 11:08:58 3472 +++ trunk/src/MainWindow.cs 2007/12/07 12:37:10 3478 @@ -433,24 +433,8 @@ this.selection.Changed += HandleSelectionChanged; this.selection.ItemsChanged += HandleSelectionItemsChanged; - try { - if (export.Submenu != null) - export.RemoveSubmenu (); - - export.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetMenuItem ().Submenu; - } catch { - Console.WriteLine ("There's (maybe) something wrong with some of the installed extensions. You can try removing the directory addin-db-000 from ~/.gnome2/f-spot/"); - } - - try { - if (tools.Submenu != null) - tools.RemoveSubmenu (); - - tools.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Tools") as FSpot.Extensions.SubmenuNode).GetMenuItem ().Submenu; - } catch { - Console.WriteLine ("There's (maybe) something wrong with some of the installed extensions. You can try removing the directory addin-db-000 from ~/.gnome2/f-spot/"); - tools.Visible = false; - } + Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus; + PopulateExtendableMenus (null, null); UpdateMenus (); @@ -2918,6 +2902,27 @@ //} } + void PopulateExtendableMenus (object o, EventArgs args) + { + try { + if (export.Submenu != null) + export.Submenu.Dispose (); + if (tools.Submenu != null) + tools.RemoveSubmenu (); + + export.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Exports") as FSpot.Extensions.SubmenuNode).GetSubmenu (); + export.Submenu.ShowAll (); + + tools.Submenu = (Mono.Addins.AddinManager.GetExtensionNode ("/FSpot/Menus/Tools") as FSpot.Extensions.SubmenuNode).GetSubmenu (); + tools.Submenu.ShowAll (); + + tools.Visible = (tools.Submenu as Menu).Children.Length > 0; + } catch { + Console.WriteLine ("There's (maybe) something wrong with some of the installed extensions. You can try removing the directory addin-db-000 from ~/.gnome2/f-spot/"); + tools.Visible = false; + } + } + public void HandleOpenWith (object sender, Gnome.Vfs.MimeApplication mime_application) { Photo[] selected = SelectedPhotos (); --- trunk/src/Extensions/MenuNode.cs 2007/07/26 08:03:48 3250 +++ trunk/src/Extensions/MenuNode.cs 2007/12/07 12:37:10 3478 @@ -25,15 +25,25 @@ { public override Gtk.MenuItem GetMenuItem () { - Gtk.MenuItem item = base.GetMenuItem ();; + Gtk.MenuItem item = base.GetMenuItem (); + + Gtk.Menu submenu = GetSubmenu (); + if (item.Submenu != null) + item.Submenu.Dispose (); + + item.Submenu = submenu; + return item; + } + + public Gtk.Menu GetSubmenu () + { Gtk.Menu submenu = new Gtk.Menu (); foreach (MenuNode node in ChildNodes) submenu.Insert (node.GetMenuItem (), -1); - item.Submenu = submenu; - return item; + return submenu; } }