diff options
Diffstat (limited to 'src/track-specific-items-manager.vala')
-rw-r--r-- | src/track-specific-items-manager.vala | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/src/track-specific-items-manager.vala b/src/track-specific-items-manager.vala index 3949727..67b8bbf 100644 --- a/src/track-specific-items-manager.vala +++ b/src/track-specific-items-manager.vala @@ -1,6 +1,5 @@ /* -This service primarily controls PulseAudio and is driven by the sound indicator menu on the panel. -Copyright 2010 Canonical Ltd. +Copyright 2011 Canonical Ltd. Authors: Conor Curran <conor.curran@canonical.com> @@ -21,10 +20,52 @@ with this program. If not, see <http://www.gnu.org/licenses/>. using Dbusmenu; using Gee; -public class TrackSpecificMenuitemsManager : GLib.Object +public class SpecificItemsManager : GLib.Object { - public TrackSpecificMenuitemsManager() + private PlayerController owner {get; set;} + private string dbus_path; + private Dbusmenu.Client client; + private Gee.ArrayList<Dbusmenu.MenuitemProxy> proxy_items; + + public SpecificItemsManager (PlayerController controller, string path) { + this.proxy_items = new ArrayList<Dbusmenu.MenuitemProxy>(); + this.owner = controller; + this.dbus_path = path; + this.client = new Dbusmenu.Client (this.owner.dbus_name, this.dbus_path); + this.client.root_changed.connect (on_root_changed); } -} + + private void on_root_changed (GLib.Object newroot) + { + Dbusmenu.Menuitem root = this.client.get_root(); + root.child_added.connect (on_child_added); + root.child_removed.connect (on_child_removed); + + // Fetch what children are there already. + GLib.List<weak void*> children = root.get_children().copy(); + + debug ("on_root_changed - size of children list : %i", + (int)children.length()); + foreach (void* child in children) { + Dbusmenu.Menuitem* item = (Dbusmenu.Menuitem*)child; + Dbusmenu.MenuitemProxy proxy = new Dbusmenu.MenuitemProxy(*item); + proxy_items.add (proxy); + debug ("Proxy item of label = %s added to collection", + item->property_get (MENUITEM_PROP_LABEL)); + this.owner.root_menu.child_add_position (proxy.menu_item, + this.owner.menu_offset + 3); + } + } + + private void on_child_added (GLib.Object child, uint position) + { + debug ("On child added Specific root node"); + } + private void on_child_removed (GLib.Object child) + { + debug ("On child removed Specific root node"); + } + +} |