OLD | NEW |
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "window_manager/panel_bar.h" | 5 #include "window_manager/panel_bar.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include <gflags/gflags.h> | 9 #include <gflags/gflags.h> |
10 | 10 |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 << "window " << win->xid_str(); | 336 << "window " << win->xid_str(); |
337 return true; | 337 return true; |
338 } | 338 } |
339 if (msg.param(1)) { | 339 if (msg.param(1)) { |
340 ExpandPanel(panel, true); // create_anchor | 340 ExpandPanel(panel, true); // create_anchor |
341 } else { | 341 } else { |
342 CollapsePanel(panel); | 342 CollapsePanel(panel); |
343 } | 343 } |
344 break; | 344 break; |
345 } | 345 } |
346 case WmIpc::Message::WM_MOVE_PANEL: { | 346 case WmIpc::Message::WM_NOTIFY_PANEL_DRAGGED: { |
347 XWindow xid = msg.param(0); | 347 XWindow xid = msg.param(0); |
348 Window* win = wm_->GetWindow(xid); | 348 Window* win = wm_->GetWindow(xid); |
349 if (!win) { | 349 if (!win) { |
350 LOG(WARNING) << "Ignoring WM_MOVE_PANEL message for unknown window " | 350 LOG(WARNING) << "Ignoring WM_NOTIFY_PANEL_DRAGGED message for unknown " |
351 << XidStr(xid); | 351 << "window " << XidStr(xid); |
352 return true; | 352 return true; |
353 } | 353 } |
354 int x = msg.param(1); | 354 int x = msg.param(1); |
355 int y = msg.param(2); | 355 int y = msg.param(2); |
356 StorePanelPosition(win, x, y); | 356 StorePanelPosition(win, x, y); |
357 break; | 357 break; |
358 } | 358 } |
359 case WmIpc::Message::WM_NOTIFY_PANEL_DRAG_COMPLETE: { | 359 case WmIpc::Message::WM_NOTIFY_PANEL_DRAG_COMPLETE: { |
360 XWindow xid = msg.param(0); | 360 XWindow xid = msg.param(0); |
361 Window* win = wm_->GetWindow(xid); | 361 Window* win = wm_->GetWindow(xid); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 | 513 |
514 if (dragged_panel_event_coalescer_.IsRunning()) | 514 if (dragged_panel_event_coalescer_.IsRunning()) |
515 dragged_panel_event_coalescer_.Stop(); | 515 dragged_panel_event_coalescer_.Stop(); |
516 } | 516 } |
517 | 517 |
518 void PanelBar::MoveDraggedPanel() { | 518 void PanelBar::MoveDraggedPanel() { |
519 if (!dragged_panel_) | 519 if (!dragged_panel_) |
520 return; | 520 return; |
521 | 521 |
522 const int drag_x = dragged_panel_event_coalescer_.x(); | 522 const int drag_x = dragged_panel_event_coalescer_.x(); |
523 dragged_panel_->MoveX(drag_x + dragged_panel_->titlebar_width(), false, 0); | 523 dragged_panel_->MoveX((wm_->wm_ipc_version() >= 1) ? |
| 524 drag_x : |
| 525 drag_x + dragged_panel_->titlebar_width(), |
| 526 false, 0); |
524 | 527 |
525 // When an expanded panel is being dragged, we don't move the other | 528 // When an expanded panel is being dragged, we don't move the other |
526 // panels to make room for it until the drag is done. | 529 // panels to make room for it until the drag is done. |
527 if (GetPanelInfoOrDie(dragged_panel_)->is_expanded) | 530 if (GetPanelInfoOrDie(dragged_panel_)->is_expanded) |
528 return; | 531 return; |
529 | 532 |
530 // For collapsed panels, we first find the position of the dragged panel. | 533 // For collapsed panels, we first find the position of the dragged panel. |
531 Panels::iterator dragged_it = FindPanelInVectorByWindow( | 534 Panels::iterator dragged_it = FindPanelInVectorByWindow( |
532 collapsed_panels_, *(dragged_panel_->content_win())); | 535 collapsed_panels_, *(dragged_panel_->content_win())); |
533 CHECK(dragged_it != collapsed_panels_.end()); | 536 CHECK(dragged_it != collapsed_panels_.end()); |
534 | 537 |
535 // Next, check if the center of the panel has moved over another panel. | 538 // Next, check if the center of the panel has moved over another panel. |
536 const int center_x = drag_x + 0.5 * dragged_panel_->titlebar_width(); | 539 const int center_x = (wm_->wm_ipc_version() >= 1) ? |
| 540 drag_x - 0.5 * dragged_panel_->titlebar_width() : |
| 541 drag_x + 0.5 * dragged_panel_->titlebar_width(); |
537 Panels::iterator it = collapsed_panels_.begin(); | 542 Panels::iterator it = collapsed_panels_.begin(); |
538 for (; it != collapsed_panels_.end(); ++it) { | 543 for (; it != collapsed_panels_.end(); ++it) { |
539 int snapped_left = 0, snapped_right = 0; | 544 int snapped_left = 0, snapped_right = 0; |
540 if (it->get() == dragged_panel_) { | 545 if (it->get() == dragged_panel_) { |
541 // If we're comparing against ourselves, use our original position | 546 // If we're comparing against ourselves, use our original position |
542 // rather than wherever we've currently been dragged by the user. | 547 // rather than wherever we've currently been dragged by the user. |
543 PanelInfo* info = GetPanelInfoOrDie(dragged_panel_); | 548 PanelInfo* info = GetPanelInfoOrDie(dragged_panel_); |
544 snapped_left = info->snapped_right - dragged_panel_->titlebar_width(); | 549 snapped_left = info->snapped_right - dragged_panel_->titlebar_width(); |
545 snapped_right = info->snapped_right; | 550 snapped_right = info->snapped_right; |
546 } else { | 551 } else { |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1014 | 1019 |
1015 void PanelBar::MoveExpandedPanelOnscreen(Panel* panel, int anim_ms) { | 1020 void PanelBar::MoveExpandedPanelOnscreen(Panel* panel, int anim_ms) { |
1016 CHECK(GetPanelInfoOrDie(panel)->is_expanded); | 1021 CHECK(GetPanelInfoOrDie(panel)->is_expanded); |
1017 if (panel->content_x() < x_) | 1022 if (panel->content_x() < x_) |
1018 panel->MoveX(x_ + panel->content_width(), true, anim_ms); | 1023 panel->MoveX(x_ + panel->content_width(), true, anim_ms); |
1019 else if (panel->right() > x_ + width_) | 1024 else if (panel->right() > x_ + width_) |
1020 panel->MoveX(x_ + width_, true, anim_ms); | 1025 panel->MoveX(x_ + width_, true, anim_ms); |
1021 } | 1026 } |
1022 | 1027 |
1023 } // namespace window_manager | 1028 } // namespace window_manager |
OLD | NEW |