Browse Source

Fix ics drag drop and mini cleanup

Frank-Rainer Grahl 3 months ago
parent
commit
d14cbe4127

+ 153 - 0
comm-release/patches/1479449-602.patch

@@ -0,0 +1,153 @@
+# HG changeset patch
+# User MakeMyDay <makemyday@gmx-topmail.de>
+# Date 1533328118 -7200
+# Node ID b015e76f95e34ec2432bde120706a5b22f681876
+# Parent  fba8ffb861bbff50fb2b8138ffe4f5fb9208b561
+Bug 1479449 - Avoid an additional prompt when deleting as part of cutting a recurring event. r+a=philipp
+
+diff --git a/calendar/base/content/calendar-clipboard.js b/calendar/base/content/calendar-clipboard.js
+--- a/calendar/base/content/calendar-clipboard.js
++++ b/calendar/base/content/calendar-clipboard.js
+@@ -36,53 +36,64 @@ function canPaste() {
+     return Services.clipboard.hasDataMatchingFlavors(flavors,
+                                                      flavors.length,
+                                                      Ci.nsIClipboard.kGlobalClipboard);
+ }
+ 
+ /**
+  * Copy the ics data of the current view's selected events to the clipboard and
+  * deletes the events on success
++ *
++ * @param aCalendarItemArray    (optional) an array of items to cut. If not
++ *                                passed, the current view's selected items will
++ *                                be used.
+  */
+-function cutToClipboard() {
+-    if (copyToClipboard(null, true)) {
+-        deleteSelectedItems();
+-    }
++function cutToClipboard(aCalendarItemArray=null) {
++    copyToClipboard(aCalendarItemArray, true);
+ }
+ 
+ /**
+  * Copy the ics data of the items in calendarItemArray to the clipboard. Fills
+  * both text/unicode and text/calendar mime types.
+  *
+  * @param aCalendarItemArray    (optional) an array of items to copy. If not
+  *                                passed, the current view's selected items will
+  *                                be used.
+  * @param aCutMode              (optional) set to true, if this is a cut operation
+- * @return                      A boolean indicating if the operation succeeded.
+  */
+ function copyToClipboard(aCalendarItemArray=null, aCutMode=false) {
+     let calendarItemArray = aCalendarItemArray || getSelectedItems();
+     if (!calendarItemArray.length) {
+-        cal.LOG("[calendar-clipboard] No items to copy.");
+-        return false;
++        cal.LOG("[calendar-clipboard] No items selected.");
++        return;
++    }
++    if (aCutMode) {
++        let items = calendarItemArray.filter(aItem =>
++            cal.acl.userCanModifyItem(aItem) ||
++            (aItem.calendar && cal.acl.userCanDeleteItemsFromCalendar(aItem.calendar))
++        );
++        if (items.length < calendarItemArray.length) {
++            cal.LOG("[calendar-clipboard] No priviledge to delete some or all selected items.");
++            return;
++        }
++        calendarItemArray = items;
+     }
+     let [targetItems, , response] = promptOccurrenceModification(
+         calendarItemArray,
+         true,
+         aCutMode ? "cut" : "copy"
+     );
+     if (!response) {
+         // The user canceled the dialog, bail out
+-        return false;
++        return;
+     }
+-    calendarItemArray = targetItems;
+ 
+     let icsSerializer = Cc["@mozilla.org/calendar/ics-serializer;1"]
+                         .createInstance(Ci.calIIcsSerializer);
+-    icsSerializer.addItems(calendarItemArray, calendarItemArray.length);
++    icsSerializer.addItems(targetItems, targetItems.length);
+     let icsString = icsSerializer.serializeToString();
+ 
+     let clipboard = Services.clipboard;
+     let trans = Cc["@mozilla.org/widget/transferable;1"]
+                 .createInstance(Ci.nsITransferable);
+ 
+     if (trans && clipboard) {
+         // Register supported data flavors
+@@ -101,20 +112,25 @@ function copyToClipboard(aCalendarItemAr
+         trans.setTransferData("text/calendar",
+                               icsWrapper,
+                               icsWrapper.data.length * 2); // double byte data
+         trans.setTransferData("text/unicode",
+                               icsWrapper,
+                               icsWrapper.data.length * 2);
+ 
+         clipboard.setData(trans, null, Ci.nsIClipboard.kGlobalClipboard);
+-
+-        return true;
++        if (aCutMode) {
++            // check for MODIFICATION_PARENT
++            let useParent = (response == 3);
++            calendarViewController.deleteOccurrences(targetItems.length,
++                                                     targetItems,
++                                                     useParent,
++                                                     true);
++        }
+     }
+-    return false;
+ }
+ 
+ /**
+  * Reads ics data from the clipboard, parses it into items and inserts the items
+  * into the currently selected calendar.
+  */
+ function pasteFromClipboard() {
+     if (!canPaste()) {
+@@ -227,17 +243,17 @@ function pasteFromClipboard() {
+                                    });
+                 if (calendars.length > 1) {
+                     let args = {};
+                     args.calendars = calendars;
+                     args.promptText = cal.l10n.getCalString("pastePrompt");
+ 
+                     if (validPasteText) {
+                         pasteText = cal.l10n.getCalString(pasteText);
+-                        let note = cal.l10n.getCalString("pasteNotifyAbout", pasteText);
++                        let note = cal.l10n.getCalString("pasteNotifyAbout", [pasteText]);
+                         args.promptNotify = note;
+ 
+                         args.labelExtra1 = cal.l10n.getCalString("pasteDontNotifyLabel");
+                         args.onExtra1 = (aCal) => {
+                             destCal = aCal;
+                             notify = Ci.calIItipItem.NONE;
+                         };
+                         args.labelOk = cal.l10n.getCalString("pasteAndNotifyLabel");
+@@ -269,17 +285,17 @@ function pasteFromClipboard() {
+                 // clipboard content.
+                 newItem.id = cal.getUUID();
+                 if (offset) {
+                     cal.item.shiftOffset(newItem, offset);
+                 }
+ 
+                 let extResp = { responseMode: Ci.calIItipItem.NONE };
+                 if (item.getAttendees({}).length > 0) {
+-                    Ci.calIItipItem.USERextResp.responseMode = notify;
++                    extResp.responseMode = notify;
+                 }
+ 
+                 doTransaction("add", newItem, destCal, null, null, extResp);
+             }
+             endBatchTransaction();
+             break;
+         }
+         default:
+

+ 0 - 0
comm-release/patches/NOBUG-dummyvenv-25316.patch → comm-release/patches/TOP-NOBUG-dummyvenv-25316.patch


+ 2 - 1
comm-release/patches/series

@@ -1916,7 +1916,6 @@ NOBUG-moderndup-25316.patch
 1816667-macosplist-25316.patch
 1816667-macosplisttabs-25316.patch
 1795774-2-version-beta-cr-25316.patch
-NOBUG-dummyvenv-25316.patch
 1816667-cc-25316.patch
 1817655-version-release-cr-25316.patch
 1817654-1-version-prebeta-cr-25317.patch
@@ -2143,6 +2142,7 @@ TOP-1534155-PARTIAL-69a1.patch
 TOP-NOBUG-comm-linting-25314.patch
 TOP-1628506-2-PARTIAL-77a1.patch
 TOP-1635849-PARTIAL-77a1.patch
+TOP-NOBUG-dummyvenv-25316.patch
 TOP-NOBUG-PY3-support-25317.patch
 TOP-NOBUG-PY3-switch-25317.patch
 TOP-1859386-mailfluent-25318.patch
@@ -2160,6 +2160,7 @@ WIP-1070492-composer-findbar-v3-25319.patch
 TOP-1378089-4-WIP-bookmarks-25319.patch
 TOP-1872623-cancelbookmark-25319.patch
 1861843-2-version-beta-cr-25319.patch
+1479449-602.patch
 1902849-version-release-cr-25319.patch
 1902851-1-version-prebeta-cr-25320.patch
 TOP-1906540-mozdevice-removal-comm-25320.patch