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()); }
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()); } } } }
/// <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)); }