[Pkg-mozext-commits] [tabmixplus] 12/13: Follow up bug 1355507 - Releasing a tab while dragging through the tabstrip on the same window should show a transition to its final resting place
David Prévot
taffit at moszumanska.debian.org
Sat Aug 5 15:28:28 UTC 2017
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to tag 0.5.0.4pre.170525a1
in repository tabmixplus.
commit b34faa2fba78071cb8f9aab9331389310a58644d
Author: onemen <tabmix.onemen at gmail.com>
Date: Wed May 24 12:46:52 2017 +0300
Follow up bug 1355507 - Releasing a tab while dragging through the tabstrip on the same window should show a transition to its final resting place
---
chrome/content/minit/minit.js | 88 +++++++++++++++++++++++++++++++++++++++++--
chrome/content/tab/tab.js | 5 ++-
2 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/chrome/content/minit/minit.js b/chrome/content/minit/minit.js
index 2b0bfe9..2e5ff0d 100644
--- a/chrome/content/minit/minit.js
+++ b/chrome/content/minit/minit.js
@@ -402,6 +402,78 @@ var TMP_tabDNDObserver = {
this.setDragmark(newIndex, left_right);
},
+ // built-in drop method doesn't take into account different tab width
+ drop(event) {
+ if (!Tabmix.isVersion(550)) {
+ return;
+ }
+
+ var tabBar = gBrowser.tabContainer;
+ var dt = event.dataTransfer;
+ var dropEffect = dt.dropEffect;
+ var draggedTab;
+ if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) { // tab copy or move
+ draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
+ // not our drop then
+ if (!draggedTab)
+ return;
+ }
+
+ // fall back to build-in drop method
+ if (!draggedTab || dropEffect == "copy" || draggedTab.parentNode != tabBar) {
+ return;
+ }
+
+ tabBar._tabDropIndicator.collapsed = true;
+ event.stopPropagation();
+ let oldTranslateX = draggedTab._dragData.translateX;
+ let dropIndex = "animDropIndex" in draggedTab._dragData &&
+ draggedTab._dragData.animDropIndex;
+ if (dropIndex && dropIndex > draggedTab._tPos)
+ dropIndex--;
+
+ let newTranslateX = 0;
+ if (oldTranslateX && dropIndex !== false) {
+ let tabIndex = draggedTab._tPos;
+ if (dropIndex > tabIndex) {
+ for (let i = tabIndex + 1; i <= dropIndex; i++) {
+ newTranslateX += gBrowser.tabs[i].getBoundingClientRect().width;
+ }
+ } else if (dropIndex < tabIndex) {
+ for (let i = dropIndex; i < tabIndex; i++) {
+ newTranslateX -= gBrowser.tabs[i].getBoundingClientRect().width;
+ }
+ }
+ }
+
+ if (oldTranslateX && oldTranslateX != newTranslateX) {
+ draggedTab.setAttribute("tabdrop-samewindow", "true");
+ draggedTab.style.transform = "translateX(" + newTranslateX + "px)";
+ let onTransitionEnd = transitionendEvent => {
+ if (transitionendEvent.propertyName != "transform" ||
+ transitionendEvent.originalTarget != draggedTab) {
+ return;
+ }
+ draggedTab.removeEventListener("transitionend", onTransitionEnd);
+
+ draggedTab.removeAttribute("tabdrop-samewindow");
+
+ tabBar._finishAnimateTabMove();
+ if (dropIndex !== false)
+ gBrowser.moveTabTo(draggedTab, dropIndex);
+ };
+ draggedTab.addEventListener("transitionend", onTransitionEnd);
+ } else {
+ tabBar._finishAnimateTabMove();
+ if (dropIndex !== false)
+ gBrowser.moveTabTo(draggedTab, dropIndex);
+ }
+
+ if (draggedTab) {
+ delete draggedTab._dragData;
+ }
+ },
+
onDrop: function minit_onDrop(event) {
this.clearDragmark();
this.updateStatusField();
@@ -577,8 +649,20 @@ var TMP_tabDNDObserver = {
onDragEnd: function minit_onDragEnd(aEvent) {
var tabBar = gBrowser.tabContainer;
- if (!tabBar.useTabmixDnD(aEvent))
+
+ var dt = aEvent.dataTransfer;
+ var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
+
+ if (!tabBar.useTabmixDnD(aEvent)) {
+ // Prevent this code from running if a tabdrop animation is
+ // running since calling _finishAnimateTabMove would clear
+ // any CSS transition that is running.
+ if (draggedTab.hasAttribute("tabdrop-samewindow")) {
+ return;
+ }
+
tabBar._finishAnimateTabMove();
+ }
if (this.draggedTab) {
delete this.draggedTab.__tabmixDragStart;
@@ -586,8 +670,6 @@ var TMP_tabDNDObserver = {
this.draggedTab = null;
}
// see comment in gBrowser.tabContainer.dragEnd
- var dt = aEvent.dataTransfer;
- var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (dt.mozUserCancelled || dt.dropEffect != "none" || this._isCustomizing) {
delete draggedTab._dragData;
return;
diff --git a/chrome/content/tab/tab.js b/chrome/content/tab/tab.js
index f590e63..a422dbd 100644
--- a/chrome/content/tab/tab.js
+++ b/chrome/content/tab/tab.js
@@ -745,8 +745,11 @@ Tabmix.tabsUtils = {
break;
}
case "drop":
- if (this.tabBar.useTabmixDnD(aEvent))
+ if (this.tabBar.useTabmixDnD(aEvent)) {
TMP_tabDNDObserver.onDrop(aEvent);
+ } else {
+ TMP_tabDNDObserver.drop(aEvent);
+ }
break;
case "dragend":
if (this.tabBar.orient == "horizontal")
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list