Skip to content

Commit cab1427

Browse files
fix: draggable region edge calculation on resize (electron#26320)
* fix: draggable region edge calculation on resize * Feedback from review Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
1 parent ce243f8 commit cab1427

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

shell/browser/api/electron_api_browser_window.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "content/public/browser/render_view_host.h"
1515
#include "shell/browser/api/electron_api_web_contents_view.h"
1616
#include "shell/browser/browser.h"
17+
#include "shell/browser/native_browser_view.h"
1718
#include "shell/browser/unresponsive_suppressor.h"
1819
#include "shell/browser/web_contents_preferences.h"
1920
#include "shell/browser/window_list.h"
@@ -304,8 +305,15 @@ void BrowserWindow::OnWindowIsKeyChanged(bool is_key) {
304305

305306
void BrowserWindow::OnWindowResize() {
306307
#if defined(OS_MAC)
307-
if (!draggable_regions_.empty())
308+
if (!draggable_regions_.empty()) {
308309
UpdateDraggableRegions(draggable_regions_);
310+
} else {
311+
// Ensure draggable bounds are recalculated for BrowserViews if any exist.
312+
auto browser_views = window_->browser_views();
313+
for (NativeBrowserView* view : browser_views) {
314+
view->UpdateDraggableRegions(draggable_regions_);
315+
}
316+
}
309317
#endif
310318
BaseWindow::OnWindowResize();
311319
}

shell/browser/api/electron_api_browser_window_mac.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ - (NSView*)hitTest:(NSPoint)aPoint {
8282
if ([subview isKindOfClass:[ControlRegionView class]])
8383
[subview removeFromSuperview];
8484

85-
// Draggable regions is implemented by having the whole web view draggable
86-
// (mouseDownCanMoveWindow) and overlaying regions that are not draggable.
85+
// Draggable regions are implemented by having the whole web view draggable
86+
// and overlaying regions that are not draggable.
8787
if (&draggable_regions_ != &regions) {
8888
draggable_regions_.clear();
8989
for (const auto& r : regions)

shell/browser/native_browser_view_mac.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class NativeBrowserViewMac : public NativeBrowserView {
2828
const std::vector<mojom::DraggableRegionPtr>& regions) override;
2929

3030
private:
31+
std::vector<mojom::DraggableRegionPtr> draggable_regions_;
32+
3133
DISALLOW_COPY_AND_ASSIGN(NativeBrowserViewMac);
3234
};
3335

shell/browser/native_browser_view_mac.mm

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ - (BOOL)mouseDownCanMoveWindow {
206206
view.frame =
207207
NSMakeRect(bounds.x(), superview_height - bounds.y() - bounds.height(),
208208
bounds.width(), bounds.height());
209+
210+
// Ensure draggable regions are properly updated to reflect new bounds.
211+
UpdateDraggableRegions(draggable_regions_);
209212
}
210213

211214
gfx::Rect NativeBrowserViewMac::GetBounds() {
@@ -245,8 +248,22 @@ - (BOOL)mouseDownCanMoveWindow {
245248

246249
NSInteger webViewWidth = NSWidth([web_view bounds]);
247250
NSInteger webViewHeight = NSHeight([web_view bounds]);
248-
auto drag_exclude_rects = CalculateNonDraggableRegions(
249-
DraggableRegionsToSkRegion(regions), webViewWidth, webViewHeight);
251+
252+
std::vector<gfx::Rect> drag_exclude_rects;
253+
if (regions.empty()) {
254+
drag_exclude_rects.push_back(gfx::Rect(0, 0, webViewWidth, webViewHeight));
255+
} else {
256+
drag_exclude_rects = CalculateNonDraggableRegions(
257+
DraggableRegionsToSkRegion(regions), webViewWidth, webViewHeight);
258+
}
259+
260+
// Draggable regions are implemented by having the whole web view draggable
261+
// and overlaying regions that are not draggable.
262+
if (&draggable_regions_ != &regions) {
263+
draggable_regions_.clear();
264+
for (const auto& r : regions)
265+
draggable_regions_.push_back(r.Clone());
266+
}
250267

251268
// Remove all DragRegionViews that were added last time. Note that we need
252269
// to copy the `subviews` array to avoid mutation during iteration.

0 commit comments

Comments
 (0)