зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 6 changesets (bug 1075670) for bustage on a CLOSED TREE
Backed out changeset 4d68750b4e28 (bug 1075670) Backed out changeset 4d34eb58c46d (bug 1075670) Backed out changeset d3ac4fd82311 (bug 1075670) Backed out changeset 8b72b1201661 (bug 1075670) Backed out changeset cd6cf15b27cc (bug 1075670) Backed out changeset bf710daef92b (bug 1075670)
This commit is contained in:
Родитель
bc64a1699e
Коммит
4da2cda544
|
@ -3202,7 +3202,8 @@
|
||||||
addonInfo: aMessage.data.addonInfo };
|
addonInfo: aMessage.data.addonInfo };
|
||||||
let popup = browser.ownerDocument.getElementById("contentAreaContextMenu");
|
let popup = browser.ownerDocument.getElementById("contentAreaContextMenu");
|
||||||
let event = gContextMenuContentData.event;
|
let event = gContextMenuContentData.event;
|
||||||
popup.openPopupAtScreen(event.screenX, event.screenY, true);
|
let pos = browser.mapScreenCoordinatesFromContent(event.screenX, event.screenY);
|
||||||
|
popup.openPopupAtScreen(pos.x, pos.y, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "DOMWebNotificationClicked": {
|
case "DOMWebNotificationClicked": {
|
||||||
|
|
|
@ -914,7 +914,8 @@ nsFrameLoader::ShowRemoteFrame(const nsIntSize& size,
|
||||||
|
|
||||||
// Don't show remote iframe if we are waiting for the completion of reflow.
|
// Don't show remote iframe if we are waiting for the completion of reflow.
|
||||||
if (!aFrame || !(aFrame->GetStateBits() & NS_FRAME_FIRST_REFLOW)) {
|
if (!aFrame || !(aFrame->GetStateBits() & NS_FRAME_FIRST_REFLOW)) {
|
||||||
mRemoteBrowser->UpdateDimensions(dimensions, size);
|
nsIntPoint chromeDisp = aFrame->GetChromeDisplacement();
|
||||||
|
mRemoteBrowser->UpdateDimensions(dimensions, size, chromeDisp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1959,7 +1960,8 @@ nsFrameLoader::UpdatePositionAndSize(nsSubDocumentFrame *aIFrame)
|
||||||
nsIntSize size = aIFrame->GetSubdocumentSize();
|
nsIntSize size = aIFrame->GetSubdocumentSize();
|
||||||
nsIntRect dimensions;
|
nsIntRect dimensions;
|
||||||
NS_ENSURE_SUCCESS(GetWindowDimensions(dimensions), NS_ERROR_FAILURE);
|
NS_ENSURE_SUCCESS(GetWindowDimensions(dimensions), NS_ERROR_FAILURE);
|
||||||
mRemoteBrowser->UpdateDimensions(dimensions, size);
|
nsIntPoint chromeDisp = aIFrame->GetChromeDisplacement();
|
||||||
|
mRemoteBrowser->UpdateDimensions(dimensions, size, chromeDisp);
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -227,9 +227,6 @@ public:
|
||||||
void ActivateUpdateHitRegion();
|
void ActivateUpdateHitRegion();
|
||||||
void DeactivateUpdateHitRegion();
|
void DeactivateUpdateHitRegion();
|
||||||
|
|
||||||
// Properly retrieves documentSize of any subdocument type.
|
|
||||||
nsresult GetWindowDimensions(nsIntRect& aRect);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void SetOwnerContent(mozilla::dom::Element* aContent);
|
void SetOwnerContent(mozilla::dom::Element* aContent);
|
||||||
|
@ -285,6 +282,9 @@ private:
|
||||||
nsresult MaybeCreateDocShell();
|
nsresult MaybeCreateDocShell();
|
||||||
nsresult EnsureMessageManager();
|
nsresult EnsureMessageManager();
|
||||||
|
|
||||||
|
// Properly retrieves documentSize of any subdocument type.
|
||||||
|
nsresult GetWindowDimensions(nsIntRect& aRect);
|
||||||
|
|
||||||
// Updates the subdocument position and size. This gets called only
|
// Updates the subdocument position and size. This gets called only
|
||||||
// when we have our own in-process DocShell.
|
// when we have our own in-process DocShell.
|
||||||
void UpdateBaseWindowPositionAndSize(nsSubDocumentFrame *aIFrame);
|
void UpdateBaseWindowPositionAndSize(nsSubDocumentFrame *aIFrame);
|
||||||
|
|
|
@ -2051,7 +2051,7 @@ TabChild::RecvUpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||||
ScreenIntSize oldScreenSize = mInnerSize;
|
ScreenIntSize oldScreenSize = mInnerSize;
|
||||||
mInnerSize = ScreenIntSize::FromUnknownSize(
|
mInnerSize = ScreenIntSize::FromUnknownSize(
|
||||||
gfx::IntSize(size.width, size.height));
|
gfx::IntSize(size.width, size.height));
|
||||||
mWidget->Resize(rect.x + chromeDisp.x, rect.y + chromeDisp.y, size.width, size.height,
|
mWidget->Resize(0, 0, size.width, size.height,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());
|
nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());
|
||||||
|
|
|
@ -78,7 +78,6 @@
|
||||||
#include "nsICancelable.h"
|
#include "nsICancelable.h"
|
||||||
#include "gfxPrefs.h"
|
#include "gfxPrefs.h"
|
||||||
#include "nsILoginManagerPrompter.h"
|
#include "nsILoginManagerPrompter.h"
|
||||||
#include "nsPIWindowRoot.h"
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
using namespace mozilla::dom;
|
using namespace mozilla::dom;
|
||||||
|
@ -319,27 +318,7 @@ TabParent::RemoveTabParentFromTable(uint64_t aLayersId)
|
||||||
void
|
void
|
||||||
TabParent::SetOwnerElement(Element* aElement)
|
TabParent::SetOwnerElement(Element* aElement)
|
||||||
{
|
{
|
||||||
// If we held previous content then unregister for its events.
|
|
||||||
if (mFrameElement && mFrameElement->OwnerDoc()->GetWindow()) {
|
|
||||||
nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow();
|
|
||||||
nsCOMPtr<EventTarget> eventTarget = window->GetTopWindowRoot();
|
|
||||||
if (eventTarget) {
|
|
||||||
eventTarget->RemoveEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"),
|
|
||||||
this, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update to the new content, and register to listen for events from it.
|
|
||||||
mFrameElement = aElement;
|
mFrameElement = aElement;
|
||||||
if (mFrameElement && mFrameElement->OwnerDoc()->GetWindow()) {
|
|
||||||
nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow();
|
|
||||||
nsCOMPtr<EventTarget> eventTarget = window->GetTopWindowRoot();
|
|
||||||
if (eventTarget) {
|
|
||||||
eventTarget->AddEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"),
|
|
||||||
this, false, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TryCacheDPIAndScale();
|
TryCacheDPIAndScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,8 +354,6 @@ TabParent::Destroy()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetOwnerElement(nullptr);
|
|
||||||
|
|
||||||
// If this fails, it's most likely due to a content-process crash,
|
// If this fails, it's most likely due to a content-process crash,
|
||||||
// and auto-cleanup will kick in. Otherwise, the child side will
|
// and auto-cleanup will kick in. Otherwise, the child side will
|
||||||
// destroy itself and send back __delete__().
|
// destroy itself and send back __delete__().
|
||||||
|
@ -885,7 +862,8 @@ TabParent::RecvSetDimensions(const uint32_t& aFlags,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size)
|
TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||||
|
const nsIntPoint& aChromeDisp)
|
||||||
{
|
{
|
||||||
if (mIsDestroyed) {
|
if (mIsDestroyed) {
|
||||||
return;
|
return;
|
||||||
|
@ -896,20 +874,12 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const nsIntSize& size)
|
||||||
|
|
||||||
if (!mUpdatedDimensions || mOrientation != orientation ||
|
if (!mUpdatedDimensions || mOrientation != orientation ||
|
||||||
mDimensions != size || !mRect.IsEqualEdges(rect)) {
|
mDimensions != size || !mRect.IsEqualEdges(rect)) {
|
||||||
nsCOMPtr<nsIWidget> widget = GetWidget();
|
|
||||||
nsIntRect contentRect = rect;
|
|
||||||
if (widget) {
|
|
||||||
contentRect.x += widget->GetClientOffset().x;
|
|
||||||
contentRect.y += widget->GetClientOffset().y;
|
|
||||||
}
|
|
||||||
|
|
||||||
mUpdatedDimensions = true;
|
mUpdatedDimensions = true;
|
||||||
mRect = contentRect;
|
mRect = rect;
|
||||||
mDimensions = size;
|
mDimensions = size;
|
||||||
mOrientation = orientation;
|
mOrientation = orientation;
|
||||||
|
|
||||||
nsIntPoint chromeOffset = -GetChildProcessOffset();
|
unused << SendUpdateDimensions(mRect, mDimensions, mOrientation, aChromeDisp);
|
||||||
unused << SendUpdateDimensions(mRect, mDimensions, mOrientation, chromeOffset);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2672,27 +2642,6 @@ TabParent::DeallocPPluginWidgetParent(mozilla::plugins::PPluginWidgetParent* aAc
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
|
||||||
TabParent::HandleEvent(nsIDOMEvent* aEvent)
|
|
||||||
{
|
|
||||||
nsAutoString eventType;
|
|
||||||
aEvent->GetType(eventType);
|
|
||||||
|
|
||||||
if (eventType.EqualsLiteral("MozUpdateWindowPos")) {
|
|
||||||
// This event is sent when the widget moved. Therefore we only update
|
|
||||||
// the position.
|
|
||||||
nsRefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
|
|
||||||
if (!frameLoader) {
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
nsIntRect windowDims;
|
|
||||||
NS_ENSURE_SUCCESS(frameLoader->GetWindowDimensions(windowDims), NS_ERROR_FAILURE);
|
|
||||||
UpdateDimensions(windowDims, mDimensions);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeChannel MOZ_FINAL : public nsIChannel,
|
class FakeChannel MOZ_FINAL : public nsIChannel,
|
||||||
public nsIAuthPromptCallback,
|
public nsIAuthPromptCallback,
|
||||||
public nsIInterfaceRequestor,
|
public nsIInterfaceRequestor,
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "Units.h"
|
#include "Units.h"
|
||||||
#include "WritingModes.h"
|
#include "WritingModes.h"
|
||||||
#include "js/TypeDecls.h"
|
#include "js/TypeDecls.h"
|
||||||
#include "nsIDOMEventListener.h"
|
|
||||||
|
|
||||||
class nsFrameLoader;
|
class nsFrameLoader;
|
||||||
class nsIFrameLoader;
|
class nsIFrameLoader;
|
||||||
|
@ -59,8 +58,7 @@ class nsIContentParent;
|
||||||
class Element;
|
class Element;
|
||||||
struct StructuredCloneData;
|
struct StructuredCloneData;
|
||||||
|
|
||||||
class TabParent : public PBrowserParent
|
class TabParent : public PBrowserParent
|
||||||
, public nsIDOMEventListener
|
|
||||||
, public nsITabParent
|
, public nsITabParent
|
||||||
, public nsIAuthPromptProvider
|
, public nsIAuthPromptProvider
|
||||||
, public nsISecureBrowserUI
|
, public nsISecureBrowserUI
|
||||||
|
@ -101,9 +99,6 @@ public:
|
||||||
mBrowserDOMWindow = aBrowserDOMWindow;
|
mBrowserDOMWindow = aBrowserDOMWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
// nsIDOMEventListener interfaces
|
|
||||||
NS_DECL_NSIDOMEVENTLISTENER
|
|
||||||
|
|
||||||
already_AddRefed<nsILoadContext> GetLoadContext();
|
already_AddRefed<nsILoadContext> GetLoadContext();
|
||||||
|
|
||||||
nsIXULBrowserWindow* GetXULBrowserWindow();
|
nsIXULBrowserWindow* GetXULBrowserWindow();
|
||||||
|
@ -241,7 +236,8 @@ public:
|
||||||
// message-sending functions under a layer of indirection and
|
// message-sending functions under a layer of indirection and
|
||||||
// eating the return values
|
// eating the return values
|
||||||
void Show(const nsIntSize& size, bool aParentIsActive);
|
void Show(const nsIntSize& size, bool aParentIsActive);
|
||||||
void UpdateDimensions(const nsIntRect& rect, const nsIntSize& size);
|
void UpdateDimensions(const nsIntRect& rect, const nsIntSize& size,
|
||||||
|
const nsIntPoint& chromeDisp);
|
||||||
void UpdateFrame(const layers::FrameMetrics& aFrameMetrics);
|
void UpdateFrame(const layers::FrameMetrics& aFrameMetrics);
|
||||||
void UIResolutionChanged();
|
void UIResolutionChanged();
|
||||||
void AcknowledgeScrollUpdate(const ViewID& aScrollId, const uint32_t& aScrollGeneration);
|
void AcknowledgeScrollUpdate(const ViewID& aScrollId, const uint32_t& aScrollGeneration);
|
||||||
|
|
|
@ -789,6 +789,7 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||||
tabContentBounds.ScaleInverseRoundOut(scaleFactor);
|
tabContentBounds.ScaleInverseRoundOut(scaleFactor);
|
||||||
int32_t windowH = tabContentBounds.height + int(chromeSize.y);
|
int32_t windowH = tabContentBounds.height + int(chromeSize.y);
|
||||||
|
|
||||||
|
// This is actually relative to window-chrome.
|
||||||
nsPoint pluginPosition = AsNsPoint(pluginFrame->GetScreenRect().TopLeft());
|
nsPoint pluginPosition = AsNsPoint(pluginFrame->GetScreenRect().TopLeft());
|
||||||
|
|
||||||
// Convert (sourceX, sourceY) to 'real' (not PuppetWidget) screen space.
|
// Convert (sourceX, sourceY) to 'real' (not PuppetWidget) screen space.
|
||||||
|
@ -798,8 +799,8 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||||
nsPoint screenPoint;
|
nsPoint screenPoint;
|
||||||
switch (sourceSpace) {
|
switch (sourceSpace) {
|
||||||
case NPCoordinateSpacePlugin:
|
case NPCoordinateSpacePlugin:
|
||||||
screenPoint = sourcePoint + pluginPosition +
|
screenPoint = sourcePoint + pluginFrame->GetContentRectRelativeToSelf().TopLeft() +
|
||||||
pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel();
|
chromeSize + pluginPosition + windowPosition;
|
||||||
break;
|
break;
|
||||||
case NPCoordinateSpaceWindow:
|
case NPCoordinateSpaceWindow:
|
||||||
screenPoint = nsPoint(sourcePoint.x, windowH-sourcePoint.y) +
|
screenPoint = nsPoint(sourcePoint.x, windowH-sourcePoint.y) +
|
||||||
|
@ -822,8 +823,8 @@ NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget *widget,
|
||||||
nsPoint destPoint;
|
nsPoint destPoint;
|
||||||
switch (destSpace) {
|
switch (destSpace) {
|
||||||
case NPCoordinateSpacePlugin:
|
case NPCoordinateSpacePlugin:
|
||||||
destPoint = screenPoint - pluginPosition -
|
destPoint = screenPoint - pluginFrame->GetContentRectRelativeToSelf().TopLeft() -
|
||||||
pluginFrame->GetContentRectRelativeToSelf().TopLeft() / nsPresContext::AppUnitsPerCSSPixel();
|
chromeSize - pluginPosition - windowPosition;
|
||||||
break;
|
break;
|
||||||
case NPCoordinateSpaceWindow:
|
case NPCoordinateSpaceWindow:
|
||||||
destPoint = screenPoint - windowPosition;
|
destPoint = screenPoint - windowPosition;
|
||||||
|
|
|
@ -1453,14 +1453,9 @@ ChromeTooltipListener::sTooltipCallback(nsITimer *aTimer,
|
||||||
if (textFound) {
|
if (textFound) {
|
||||||
nsString tipText(tooltipText);
|
nsString tipText(tooltipText);
|
||||||
LayoutDeviceIntPoint screenDot = widget->WidgetToScreenOffset();
|
LayoutDeviceIntPoint screenDot = widget->WidgetToScreenOffset();
|
||||||
double scaleFactor = 1.0;
|
self->ShowTooltip(self->mMouseScreenX - screenDot.x,
|
||||||
if (shell->GetPresContext()) {
|
self->mMouseScreenY - screenDot.y,
|
||||||
scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel())/
|
tipText);
|
||||||
shell->GetPresContext()->DeviceContext()->AppUnitsPerDevPixelAtUnitFullZoom();
|
|
||||||
}
|
|
||||||
// ShowTooltip expects widget-relative position.
|
|
||||||
self->ShowTooltip(self->mMouseScreenX - screenDot.x / scaleFactor,
|
|
||||||
self->mMouseScreenY - screenDot.y / scaleFactor,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1274,3 +1274,24 @@ nsSubDocumentFrame::ObtainIntrinsicSizeFrame()
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIntPoint
|
||||||
|
nsSubDocumentFrame::GetChromeDisplacement()
|
||||||
|
{
|
||||||
|
nsIFrame* nextFrame = nsLayoutUtils::GetCrossDocParentFrame(this);
|
||||||
|
if (!nextFrame) {
|
||||||
|
NS_WARNING("Couldn't find window chrome to calculate displacement to.");
|
||||||
|
return nsIntPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIFrame* rootFrame = nextFrame;
|
||||||
|
while (nextFrame) {
|
||||||
|
rootFrame = nextFrame;
|
||||||
|
nextFrame = nsLayoutUtils::GetCrossDocParentFrame(rootFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsPoint offset = GetOffsetToCrossDoc(rootFrame);
|
||||||
|
int32_t appUnitsPerDevPixel = rootFrame->PresContext()->AppUnitsPerDevPixel();
|
||||||
|
return nsIntPoint((int)(offset.x/appUnitsPerDevPixel),
|
||||||
|
(int)(offset.y/appUnitsPerDevPixel));
|
||||||
|
}
|
||||||
|
|
|
@ -127,6 +127,8 @@ public:
|
||||||
*/
|
*/
|
||||||
bool PassPointerEventsToChildren();
|
bool PassPointerEventsToChildren();
|
||||||
|
|
||||||
|
nsIntPoint GetChromeDisplacement();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class AsyncFrameInit;
|
friend class AsyncFrameInit;
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,9 @@ this.AutoCompleteE10S = {
|
||||||
this.popup.hidden = false;
|
this.popup.hidden = false;
|
||||||
this.popup.setAttribute("width", rect.width);
|
this.popup.setAttribute("width", rect.width);
|
||||||
|
|
||||||
this.x = rect.left;
|
let {x, y} = this.browser.mapScreenCoordinatesFromContent(rect.left, rect.top + rect.height);
|
||||||
this.y = rect.top + rect.height;
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showPopup: function(results) {
|
_showPopup: function(results) {
|
||||||
|
|
|
@ -868,7 +868,8 @@
|
||||||
if (!this.autoscrollEnabled) {
|
if (!this.autoscrollEnabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.startScroll(data.scrolldir, data.screenX, data.screenY);
|
let pos = this.mapScreenCoordinatesFromContent(data.screenX, data.screenY);
|
||||||
|
this.startScroll(data.scrolldir, pos.x, pos.y);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "Autoscroll:Cancel":
|
case "Autoscroll:Cancel":
|
||||||
|
@ -1049,6 +1050,25 @@
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
For out-of-process code, event.screen[XY] is relative to the
|
||||||
|
left/top of the content view. For in-process code,
|
||||||
|
event.screen[XY] is relative to the left/top of the screen. We
|
||||||
|
use this method to map screen coordinates received from a
|
||||||
|
(possibly out-of-process) <browser> element to coordinates
|
||||||
|
that are relative to the screen. This code handles the
|
||||||
|
in-process case, where we return the coordinates unchanged.
|
||||||
|
-->
|
||||||
|
<method name="mapScreenCoordinatesFromContent">
|
||||||
|
<parameter name="aScreenX"/>
|
||||||
|
<parameter name="aScreenY"/>
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
return { x: aScreenX, y: aScreenY };
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
<method name="swapDocShells">
|
<method name="swapDocShells">
|
||||||
<parameter name="aOtherBrowser"/>
|
<parameter name="aOtherBrowser"/>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -385,6 +385,27 @@
|
||||||
]]></body>
|
]]></body>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
For out-of-process code, event.screen[XY] is relative to the
|
||||||
|
left/top of the content view. For in-process code,
|
||||||
|
event.screen[XY] is relative to the left/top of the screen. We
|
||||||
|
use this method to map screen coordinates received from a
|
||||||
|
(possibly out-of-process) <browser> element to coordinates
|
||||||
|
that are relative to the screen. This code handles the
|
||||||
|
out-of-process case, where we need to translate by the screen
|
||||||
|
position of the <browser> element.
|
||||||
|
-->
|
||||||
|
<method name="mapScreenCoordinatesFromContent">
|
||||||
|
<parameter name="aScreenX"/>
|
||||||
|
<parameter name="aScreenY"/>
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
return { x: aScreenX + this.boxObject.screenX,
|
||||||
|
y: aScreenY + this.boxObject.screenY };
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
<method name="enableDisableCommands">
|
<method name="enableDisableCommands">
|
||||||
<parameter name="aAction"/>
|
<parameter name="aAction"/>
|
||||||
<parameter name="aEnabledLength"/>
|
<parameter name="aEnabledLength"/>
|
||||||
|
|
|
@ -28,7 +28,8 @@ this.SelectParentHelper = {
|
||||||
currentBrowser = browser;
|
currentBrowser = browser;
|
||||||
this._registerListeners(menulist.menupopup);
|
this._registerListeners(menulist.menupopup);
|
||||||
|
|
||||||
menulist.menupopup.openPopupAtScreen(rect.left, rect.top + rect.height);
|
let {x, y} = browser.mapScreenCoordinatesFromContent(rect.left, rect.top + rect.height);
|
||||||
|
menulist.menupopup.openPopupAtScreen(x, y);
|
||||||
menulist.selectedItem.scrollIntoView();
|
menulist.selectedItem.scrollIntoView();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -960,13 +960,6 @@ PuppetWidget::GetWindowPosition()
|
||||||
return nsIntPoint(winX, winY);
|
return nsIntPoint(winX, winY);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_METHOD
|
|
||||||
PuppetWidget::GetScreenBounds(nsIntRect &aRect) {
|
|
||||||
aRect.MoveTo(WidgetToScreenOffset());
|
|
||||||
aRect.SizeTo(mBounds.Size());
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
PuppetScreen::PuppetScreen(void *nativeScreen)
|
PuppetScreen::PuppetScreen(void *nativeScreen)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ public:
|
||||||
int32_t* aY) MOZ_OVERRIDE
|
int32_t* aY) MOZ_OVERRIDE
|
||||||
{ *aX = kMaxDimension; *aY = kMaxDimension; return NS_OK; }
|
{ *aX = kMaxDimension; *aY = kMaxDimension; return NS_OK; }
|
||||||
|
|
||||||
// Widget position is controlled by the parent process via TabChild.
|
// We're always at <0, 0>, and so ignore move requests.
|
||||||
NS_IMETHOD Move(double aX, double aY) MOZ_OVERRIDE
|
NS_IMETHOD Move(double aX, double aY) MOZ_OVERRIDE
|
||||||
{ return NS_OK; }
|
{ return NS_OK; }
|
||||||
|
|
||||||
|
@ -92,14 +92,8 @@ public:
|
||||||
double aWidth,
|
double aWidth,
|
||||||
double aHeight,
|
double aHeight,
|
||||||
bool aRepaint) MOZ_OVERRIDE
|
bool aRepaint) MOZ_OVERRIDE
|
||||||
{
|
// (we're always at <0, 0>)
|
||||||
if (mBounds.x != aX || mBounds.y != aY) {
|
{ return Resize(aWidth, aHeight, aRepaint); }
|
||||||
NotifyWindowMoved(aX, aY);
|
|
||||||
}
|
|
||||||
mBounds.x = aX;
|
|
||||||
mBounds.y = aY;
|
|
||||||
return Resize(aWidth, aHeight, aRepaint);
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX/cjones: copying gtk behavior here; unclear what disabling a
|
// XXX/cjones: copying gtk behavior here; unclear what disabling a
|
||||||
// widget is supposed to entail
|
// widget is supposed to entail
|
||||||
|
@ -129,8 +123,9 @@ public:
|
||||||
NS_IMETHOD SetTitle(const nsAString& aTitle) MOZ_OVERRIDE
|
NS_IMETHOD SetTitle(const nsAString& aTitle) MOZ_OVERRIDE
|
||||||
{ return NS_ERROR_UNEXPECTED; }
|
{ return NS_ERROR_UNEXPECTED; }
|
||||||
|
|
||||||
|
// PuppetWidgets are always at <0, 0>.
|
||||||
virtual mozilla::LayoutDeviceIntPoint WidgetToScreenOffset() MOZ_OVERRIDE
|
virtual mozilla::LayoutDeviceIntPoint WidgetToScreenOffset() MOZ_OVERRIDE
|
||||||
{ return GetWindowPosition() + GetChromeDimensions(); }
|
{ return mozilla::LayoutDeviceIntPoint(0, 0); }
|
||||||
|
|
||||||
void InitEvent(WidgetGUIEvent& aEvent, nsIntPoint* aPoint = nullptr);
|
void InitEvent(WidgetGUIEvent& aEvent, nsIntPoint* aPoint = nullptr);
|
||||||
|
|
||||||
|
@ -203,8 +198,6 @@ public:
|
||||||
// Get the screen position of the application window.
|
// Get the screen position of the application window.
|
||||||
nsIntPoint GetWindowPosition();
|
nsIntPoint GetWindowPosition();
|
||||||
|
|
||||||
NS_IMETHOD GetScreenBounds(nsIntRect &aRect) MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
bool mVisible;
|
bool mVisible;
|
||||||
|
|
|
@ -71,8 +71,6 @@
|
||||||
#include "mozilla/DebugOnly.h"
|
#include "mozilla/DebugOnly.h"
|
||||||
#include "mozilla/MouseEvents.h"
|
#include "mozilla/MouseEvents.h"
|
||||||
|
|
||||||
#include "nsPIWindowRoot.h"
|
|
||||||
|
|
||||||
#ifdef XP_MACOSX
|
#ifdef XP_MACOSX
|
||||||
#include "nsINativeMenuService.h"
|
#include "nsINativeMenuService.h"
|
||||||
#define USE_NATIVE_MENUS
|
#define USE_NATIVE_MENUS
|
||||||
|
@ -259,15 +257,6 @@ nsWebShellWindow::WindowMoved(nsIWidget* aWidget, int32_t x, int32_t y)
|
||||||
pm->AdjustPopupsOnWindowChange(window);
|
pm->AdjustPopupsOnWindowChange(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify all tabs that the widget moved.
|
|
||||||
if (mDocShell && mDocShell->GetWindow()) {
|
|
||||||
nsCOMPtr<EventTarget> eventTarget = mDocShell->GetWindow()->GetTopWindowRoot();
|
|
||||||
nsContentUtils::DispatchChromeEvent(mDocShell->GetDocument(),
|
|
||||||
eventTarget,
|
|
||||||
NS_LITERAL_STRING("MozUpdateWindowPos"),
|
|
||||||
false, false, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Persist position, but not immediately, in case this OS is firing
|
// Persist position, but not immediately, in case this OS is firing
|
||||||
// repeated move events as the user drags the window
|
// repeated move events as the user drags the window
|
||||||
SetPersistenceTimer(PAD_POSITION);
|
SetPersistenceTimer(PAD_POSITION);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче