Пример #1
0
        public com.canonical.dbusmenu.MenuItem[] GetGroupProperties(int[] ids,
                                                                    string[] propertyNames)
        {
#if DEBUG
            Console.WriteLine("GetGroupProperties - ids:{0}, propertyNames:{1}",
                              string.Join(", ", ids), string.Join(", ", propertyNames));
#endif
            if (propertyNames.Length == 0)
            {
                propertyNames = DefaultMenuItemProxy.GetAllDisplayNames();
            }
            var itemList = new List <com.canonical.dbusmenu.MenuItem>();
            foreach (var id in ids)
            {
                var item     = mMenuItemList[id];
                var menuItem = new com.canonical.dbusmenu.MenuItem();
                menuItem.id         = id;
                menuItem.properties = new Dictionary <string, object>();
                foreach (var property in propertyNames)
                {
                    try {
                        var value = item.GetValue(property);
                        if (!DefaultMenuItemProxy.IsDefaultValue(property, value))
                        {
                            menuItem.properties.Add(property, value);
                        }
                    } catch (Exception ex) {
                        Debug.Fail(ex.ToString());
                    }
                }
                itemList.Add(menuItem);
            }

            return(itemList.ToArray());
        }
Пример #2
0
        private void OnItemsPropertiesUpdated(com.canonical.dbusmenu.MenuItem[] updatedProps,
                                              MenuItemPropertyDescriptor[] removedProps)
        {
#if DEBUG
            Console.WriteLine("OnItemsPropertiesUpdated - ");
            Console.Write("  updatedProps - ");
            if (updatedProps == null)
            {
                Console.WriteLine("Empty");
            }
            else
            {
                foreach (var prop in updatedProps)
                {
                    Console.WriteLine("id:{0}, properties:{1}",
                                      prop.id, string.Join(", ", prop.properties));
                }
            }
            Console.Write("  removedProps - ");
            if (removedProps == null)
            {
                Console.WriteLine("Empty");
            }
            else
            {
                foreach (var prop in removedProps)
                {
                    Console.WriteLine("id:{0}, properties:{1}",
                                      prop.id, string.Join(", ", prop.properties));
                }
            }
#endif
            if (ItemsPropertiesUpdated != null)
            {
                if (updatedProps == null)
                {
                    updatedProps = new com.canonical.dbusmenu.MenuItem[0];
                }
                if (removedProps == null)
                {
                    removedProps = new MenuItemPropertyDescriptor[0];
                }
                foreach (var method in ItemsPropertiesUpdated.GetInvocationList())
                {
                    try {
                        method.DynamicInvoke(updatedProps, removedProps);
                    } catch (Exception ex) {
                        Debug.Fail(ex.ToString());
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Helper class for single property change.
        /// Raises the items properties updated event.
        /// </summary>
        private void OnItemPropertiesChanged(string[] properties, IMenuItemProxy item)
        {
            // TODO - cache property values so that we don't send unnessasary events
            var menuItem = new com.canonical.dbusmenu.MenuItem();

            menuItem.id         = mMenuItemList.IndexOf(item);
            menuItem.properties = new Dictionary <string, object>();
            foreach (var property in properties)
            {
                menuItem.properties.Add(property, item.GetValue(property));
            }
            OnItemsPropertiesUpdated(new[] { menuItem }, null);
            OnLayoutUpdated(mMenuItemList.IndexOf(item));
        }