[Pkg-mozext-commits] [tabmixplus] 11/32: Update TMP_tabDNDObserver.onDragStart, follow up bugs: 863512, 1194311, 1214428
David Prévot
taffit at moszumanska.debian.org
Sun Feb 7 19:23:13 UTC 2016
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit 707b075fb501e257d923a021e34dd6ba399f2e5e
Author: onemen <tabmix.onemen at gmail.com>
Date: Thu Dec 31 00:40:43 2015 +0200
Update TMP_tabDNDObserver.onDragStart, follow up bugs: 863512, 1194311, 1214428
---
chrome/content/minit/minit.js | 65 +++++++++++++++++++++++++++++++++----------
chrome/content/tab/tab.js | 9 ++++--
2 files changed, 56 insertions(+), 18 deletions(-)
diff --git a/chrome/content/minit/minit.js b/chrome/content/minit/minit.js
index dc8713d..4be2c12 100644
--- a/chrome/content/minit/minit.js
+++ b/chrome/content/minit/minit.js
@@ -81,7 +81,7 @@ var TMP_tabDNDObserver = {
tabBar.useTabmixDnD = function(aEvent) {
function checkTab(dt) {
let tab = TMP_tabDNDObserver.getSourceNode(dt);
- return !tab || "__tabmixDragStart" in tab ||
+ return !tab || tab.__tabmixDragStart ||
TMP_tabDNDObserver.getDragType(tab) == TMP_tabDNDObserver.DRAG_TAB_TO_NEW_WINDOW;
}
@@ -108,7 +108,7 @@ var TMP_tabDNDObserver = {
return Tabmix.isVersion(280) && gBrowser.tabContainer._isCustomizing;
},
- onDragStart: function(event) {
+ onDragStart: function(event, tabmixDragstart) {
// we get here on capturing phase before "tabbrowser-close-tab-button"
// binding stop the event propagation
if (event.originalTarget.getAttribute("anonid") == "tmp-close-button") {
@@ -116,11 +116,12 @@ var TMP_tabDNDObserver = {
return;
}
- var tab = gBrowser.tabContainer._getDragTargetTab(event, false);
+ let tabBar = gBrowser.tabContainer;
+ let tab = tabBar._getDragTargetTab(event, false);
if (!tab || this._isCustomizing)
return;
- tab.__tabmixDragStart = true;
+ tab.__tabmixDragStart = tabmixDragstart;
this.draggedTab = tab;
tab.setAttribute("dragged", true);
TabmixTabbar.removeShowButtonAttr();
@@ -142,31 +143,65 @@ var TMP_tabDNDObserver = {
// canvas size (in CSS pixels) to the window's backing resolution in order
// to get a full-resolution drag image for use on HiDPI displays.
let windowUtils = window.getInterface(Ci.nsIDOMWindowUtils);
- let scale = !Tabmix.isVersion(180) ? 1 :
- windowUtils.screenPixelsPerCSSPixel / windowUtils.fullZoom;
- let canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
+ let scale = windowUtils.screenPixelsPerCSSPixel / windowUtils.fullZoom;
+ let canvas = tabBar._dndCanvas ? tabBar._dndCanvas :
+ document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
canvas.mozOpaque = true;
canvas.width = 160 * scale;
canvas.height = 90 * scale;
- if (!Tabmix.isVersion(340) || !gMultiProcessBrowser) {
- // Bug 863512 - Make page thumbnails work in e10s
+ let toDrag;
+ let dragImageOffsetX = -16;
+ let dragImageOffsetY = TabmixTabbar.visibleRows == 1 ? -16 : -30;
+ if (gMultiProcessBrowser) {
+ let context = canvas.getContext('2d');
+ context.fillStyle = "white";
+ context.fillRect(0, 0, canvas.width, canvas.height);
+ // Create a panel to use it in setDragImage
+ // which will tell xul to render a panel that follows
+ // the pointer while a dnd session is on.
+ if (!tabBar._dndPanel) {
+ tabBar._dndCanvas = canvas;
+ tabBar._dndPanel = document.createElement("panel");
+ tabBar._dndPanel.setAttribute("type", "drag");
+ let wrapper = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
+ wrapper.style.width = "160px";
+ wrapper.style.height = "90px";
+ wrapper.appendChild(canvas);
+ canvas.style.width = "100%";
+ canvas.style.height = "100%";
+ tabBar._dndPanel.appendChild(wrapper);
+ document.documentElement.appendChild(tabBar._dndPanel);
+ }
+ // PageThumb is async with e10s but that's fine
+ // since we can update the panel during the dnd.
+ PageThumbs.captureToCanvas(browser, canvas);
+ toDrag = tabBar._dndPanel;
+ } else {
+ // For the non e10s case we can just use PageThumbs
+ // sync. No need for xul magic, the native dnd will
+ // be fine, so let's use the canvas for setDragImage.
let elm = Tabmix.isVersion(360) ? browser : browser.contentWindow;
PageThumbs.captureToCanvas(elm, canvas);
+ toDrag = canvas;
+ dragImageOffsetX = dragImageOffsetX * scale;
+ dragImageOffsetY = dragImageOffsetY * scale;
+ }
+ if (TabmixTabbar.position == 1) {
+ dragImageOffsetY = canvas.height - dragImageOffsetY;
}
- let offset = (TabmixTabbar.visibleRows == 1 ? -16 : -30) * scale;
- if (TabmixTabbar.position == 1)
- offset = canvas.height - offset;
- dt.setDragImage(canvas, -16 * scale, offset);
+ dt.setDragImage(toDrag, dragImageOffsetX, dragImageOffsetY);
// _dragData.offsetX/Y give the coordinates that the mouse should be
// positioned relative to the corner of the new window created upon
// dragend such that the mouse appears to have the same position
// relative to the corner of the dragged tab.
let clientX = ele => ele.getBoundingClientRect().left;
- let tabOffsetX = clientX(tab) - clientX(gBrowser.tabContainer);
+ let tabOffsetX = clientX(tab) - clientX(tabBar);
tab._dragData = {
offsetX: event.screenX - window.screenX - tabOffsetX,
- offsetY: event.screenY - window.screenY
+ offsetY: event.screenY - window.screenY,
+ scrollX: tabBar.mTabstrip.scrollPosition,
+ screenX: event.screenX
};
event.stopPropagation();
diff --git a/chrome/content/tab/tab.js b/chrome/content/tab/tab.js
index eab3f17..902092c 100644
--- a/chrome/content/tab/tab.js
+++ b/chrome/content/tab/tab.js
@@ -686,10 +686,13 @@ Tabmix.tabsUtils = {
case "click":
TabmixTabClickOptions.onTabClick(aEvent);
break;
- case "dragstart":
- if (this.tabBar.useTabmixDragstart(aEvent))
- TMP_tabDNDObserver.onDragStart(aEvent);
+ case "dragstart": {
+ let tabmixDragstart = this.tabBar.useTabmixDragstart(aEvent);
+ if (tabmixDragstart || TabmixTabbar.position == 1) {
+ TMP_tabDNDObserver.onDragStart(aEvent, tabmixDragstart);
+ }
break;
+ }
case "dragover": {
let target = aEvent.target.localName;
if (target != "tab" && target != "tabs")
--
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