author | Brian R. Bondy <netzen@gmail.com> |
Tue, 12 May 2015 09:22:33 -0400 | |
changeset 243543 | 678c2a90dd64a20766153fcedbc2648fc2a27c13 |
parent 243542 | 12e87a6861d743ba8992c3347ac2d368b064bc7f |
child 243544 | e861531c04fa39a72ac16687578f0371bdcc11e7 |
push id | 28741 |
push user | kwierso@gmail.com |
push date | Tue, 12 May 2015 23:24:40 +0000 |
treeherder | mozilla-central@d476776d920d [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jimm |
bugs | 1163113 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
widget/windows/nsWindow.cpp | file | annotate | diff | comparison | revisions | |
widget/windows/nsWindow.h | file | annotate | diff | comparison | revisions |
--- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -2668,16 +2668,33 @@ void nsWindow::UpdateOpaqueRegion(const // Only update glass area if there are changes if (memcmp(&mGlassMargins, &margins, sizeof mGlassMargins)) { mGlassMargins = margins; UpdateGlass(); } } +/************************************************************** +* +* SECTION: nsIWidget::UpdateWindowDraggingRegion +* +* For setting the draggable titlebar region from CSS +* with -moz-window-dragging: drag. +* +**************************************************************/ + +void +nsWindow::UpdateWindowDraggingRegion(const nsIntRegion& aRegion) +{ + if (mDraggableRegion != aRegion) { + mDraggableRegion = aRegion; + } +} + void nsWindow::UpdateGlass() { MARGINS margins = mGlassMargins; // DWMNCRP_USEWINDOWSTYLE - The non-client rendering area is // rendered based on the window style. // DWMNCRP_ENABLED - The non-client area rendering is // enabled; the window style is ignored. @@ -5577,38 +5594,39 @@ nsWindow::ClientMarginHitTestPoint(int32 testResult = HTBORDER; } if (!sIsInMouseCapture && allowContentOverride) { POINT pt = { mx, my }; ::ScreenToClient(mWnd, &pt); if (pt.x == mCachedHitTestPoint.x && pt.y == mCachedHitTestPoint.y && TimeStamp::Now() - mCachedHitTestTime < TimeDuration::FromMilliseconds(HITTEST_CACHE_LIFETIME_MS)) { - testResult = mCachedHitTestResult; + return mCachedHitTestResult; + } else if (mDraggableRegion.Contains(pt.x, pt.y)) { + testResult = HTCAPTION; } else { WidgetMouseEvent event(true, NS_MOUSE_MOZHITTEST, this, WidgetMouseEvent::eReal, WidgetMouseEvent::eNormal); event.refPoint = LayoutDeviceIntPoint(pt.x, pt.y); event.inputSource = MOUSE_INPUT_SOURCE(); event.mFlags.mOnlyChromeDispatch = true; bool result = ConvertStatus(DispatchInputEvent(&event)); if (result) { // The mouse is over a blank area testResult = testResult == HTCLIENT ? HTCAPTION : testResult; - } else { // There's content over the mouse pointer. Set HTCLIENT // to possibly override a resizer border. testResult = HTCLIENT; } - mCachedHitTestPoint = pt; - mCachedHitTestTime = TimeStamp::Now(); - mCachedHitTestResult = testResult; - } + } + mCachedHitTestPoint = pt; + mCachedHitTestTime = TimeStamp::Now(); + mCachedHitTestResult = testResult; } return testResult; } TimeStamp nsWindow::GetMessageTimeStamp(LONG aEventTime) {
--- a/widget/windows/nsWindow.h +++ b/widget/windows/nsWindow.h @@ -189,16 +189,17 @@ public: virtual void UpdateOpaqueRegion(const nsIntRegion& aOpaqueRegion); #endif // MOZ_XUL virtual nsIMEUpdatePreference GetIMEUpdatePreference(); NS_IMETHOD GetNonClientMargins(nsIntMargin &margins); NS_IMETHOD SetNonClientMargins(nsIntMargin &margins); void SetDrawsInTitlebar(bool aState); mozilla::TemporaryRef<mozilla::gfx::DrawTarget> StartRemoteDrawing() override; virtual void EndRemoteDrawing() override; + virtual void UpdateWindowDraggingRegion(const nsIntRegion& aRegion) override; virtual void UpdateThemeGeometries(const nsTArray<ThemeGeometry>& aThemeGeometries) override; virtual uint32_t GetMaxTouchPoints() const override; /** * Event helpers */ virtual bool DispatchMouseEvent(uint32_t aEventType, WPARAM wParam, @@ -514,16 +515,19 @@ protected: // Cached copy of L&F's resize border int32_t mHorResizeMargin; int32_t mVertResizeMargin; // Height of the caption plus border int32_t mCaptionHeight; nsCOMPtr<nsIIdleServiceInternal> mIdleService; + // Draggable titlebar region maintained by UpdateWindowDraggingRegion + nsIntRegion mDraggableRegion; + // Hook Data Memebers for Dropdowns. sProcessHook Tells the // hook methods whether they should be processing the hook // messages. static HHOOK sMsgFilterHook; static HHOOK sCallProcHook; static HHOOK sCallMouseHook; static bool sProcessHook; static UINT sRollupMsgId;