Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2844)

Unified Diff: ash/wm/panels/panel_window_resizer.cc

Issue 17431003: Dragging panels near screen edge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Dragging panels near screen edge (comments) Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/wm/panels/panel_window_resizer.cc
diff --git a/ash/wm/panels/panel_window_resizer.cc b/ash/wm/panels/panel_window_resizer.cc
index 1c054b4c36f20c00128ae0d763a53588d1e62589..7f142806983507df3cca8e68094cc18e5cbb75fc 100644
--- a/ash/wm/panels/panel_window_resizer.cc
+++ b/ash/wm/panels/panel_window_resizer.cc
@@ -64,13 +64,11 @@ void PanelWindowResizer::Drag(const gfx::Point& location, int event_flags) {
did_move_or_resize_ = true;
StartedDragging();
}
- gfx::Point location_in_screen = location;
- wm::ConvertPointToScreen(GetTarget()->parent(), &location_in_screen);
// Check if the destination has changed displays.
gfx::Screen* screen = Shell::GetScreen();
const gfx::Display dst_display =
- screen->GetDisplayNearestPoint(location_in_screen);
+ screen->GetDisplayNearestPoint(last_location_);
if (dst_display.id() !=
screen->GetDisplayNearestWindow(panel_container_->GetRootWindow()).id()) {
// The panel is being dragged to a new display. If the previous container is
@@ -198,9 +196,11 @@ void PanelWindowResizer::StartedDragging() {
// Attach the panel while dragging placing it in front of other panels.
GetTarget()->SetProperty(internal::kContinueDragAfterReparent, true);
GetTarget()->SetProperty(internal::kPanelAttachedKey, true);
+ // We use root window coordinates to ensure that during the drag the panel
+ // is reparented to a container in the root window that has that window.
GetTarget()->SetDefaultParentByRootWindow(
GetTarget()->GetRootWindow(),
- GetTarget()->GetBoundsInScreen());
+ GetTarget()->GetRootWindow()->GetBoundsInScreen());
}
}
@@ -210,9 +210,11 @@ void PanelWindowResizer::FinishDragging() {
if (GetTarget()->GetProperty(internal::kPanelAttachedKey) !=
should_attach_) {
GetTarget()->SetProperty(internal::kPanelAttachedKey, should_attach_);
- gfx::Rect near_last_location(last_location_, gfx::Size());
- GetTarget()->SetDefaultParentByRootWindow(GetTarget()->GetRootWindow(),
- near_last_location);
+ // We use last known location to ensure that after the drag the panel
+ // is reparented to a container in the root window that has that location.
+ GetTarget()->SetDefaultParentByRootWindow(
+ GetTarget()->GetRootWindow(),
+ gfx::Rect(last_location_, gfx::Size()));
}
if (panel_container_)
GetPanelLayoutManager(panel_container_)->FinishDragging();

Powered by Google App Engine
This is Rietveld 408576698