/usr/share/lightning/chrome/calendar/content/calendar$ diff -u calendar-summary-dialog.js.orig calendar-summary-dialog.js
--- calendar-summary-dialog.js.orig 2010-01-01 01:00:00.000000000 +0100
+++ calendar-summary-dialog.js 2019-03-25 11:38:34.884247457 +0100
@@ -102,11 +102,7 @@
document.getElementById("item-location").value = location;
}
- let categories = item.getCategories({});
- if (categories.length > 0) {
- document.getElementById("category-row").removeAttribute("hidden");
- document.getElementById("item-category").value = categories.join(", "); // TODO l10n-unfriendly
- }
+ loadCategories(item);
let organizer = item.organizer;
if (organizer && organizer.id) {
@@ -244,6 +240,62 @@
}
/**
+ * Loads the item's categories into the category panel
+ *
+ * @param aItem The item to load into the category panel
+ */
+function loadCategories(aItem) {
+ let categoryPanel = document.getElementById("item-categories-panel");
+ categoryPanel.loadItem(aItem);
+ updateCategoryMenulist();
+}
+
+/**
+ * Updates the category menulist to show the correct label, depending on the
+ * selected categories in the category panel
+ */
+function updateCategoryMenulist() {
+ let categoryMenulist = document.getElementById("item-categories");
+ let categoryPanel = document.getElementById("item-categories-panel");
+
+ // Make sure the maximum number of categories is applied to the listbox
+ let calendar = getCurrentCalendar();
+ let maxCount = calendar.getProperty("capabilities.categories.maxCount");
+ categoryPanel.maxCount = (maxCount === null ? -1 : maxCount);
+
+
+ // Hide the categories listbox and label in case categories are not
+ // supported
+ setBooleanAttribute("item-categories", "hidden", (maxCount === 0));
+ setBooleanAttribute("item-categories-label", "hidden", (maxCount === 0));
+ setBooleanAttribute("item-calendar-label", "hidden", (maxCount === 0));
+ setBooleanAttribute("item-calendar-aux-label", "hidden", (maxCount !== 0));
+
+ let label;
+ let categoryList = categoryPanel.categories;
+ if (categoryList.length > 1) {
+ label = cal.calGetString("calendar", "multipleCategories");
+ } else if (categoryList.length == 1) {
+ label = categoryList[0];
+ } else {
+ label = cal.calGetString("calendar", "None");
+ }
+ categoryMenulist.setAttribute("label", label);
+}
+
+/**
+ * Saves the selected categories into the passed item
+ *
+ * @param aItem The item to set the categories on
+ */
+function saveCategories(aItem) {
+ let categoryPanel = document.getElementById("item-categories-panel");
+ let categoryList = categoryPanel.categories;
+ aItem.setCategories(categoryList.length, categoryList);
+}
+
+
+/**
* Saves any changed information to the item.
*
* @return Returns true if the dialog
@@ -261,6 +313,7 @@
let oldItem = args.calendarEvent;
let newItem = window.calendarItem;
let calendar = newItem.calendar;
+ saveCategories(newItem);
saveReminder(newItem);
adaptScheduleAgent(newItem);
args.onOk(newItem, calendar, oldItem, null, respMode);
/usr/share/lightning/chrome/calendar/content/calendar$ diff -u calendar-summary-dialog.xul.orig calendar-summary-dialog.xul
--- calendar-summary-dialog.xul.orig 2019-03-25 11:36:07.455681099 +0100
+++ calendar-summary-dialog.xul 2019-03-25 11:39:41.984468921 +0100
@@ -7,6 +7,7 @@
+
@@ -167,9 +168,25 @@
-
-
-
+
+
+
+
+
+
+
+
+