#include "ash/wm/drag_window_resizer.h"
#include "ash/display/mouse_cursor_event_filter.h"
-#include "ash/root_window_controller.h"
#include "ash/screen_util.h"
#include "ash/shell.h"
-#include "ash/system/tray/system_tray.h"
-#include "ash/system/user/tray_user.h"
#include "ash/wm/coordinate_conversion.h"
#include "ash/wm/drag_window_controller.h"
#include "ash/wm/window_state.h"
#include "base/memory/weak_ptr.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/env.h"
-#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
#include "ui/aura/window_delegate.h"
+#include "ui/aura/window_event_dispatcher.h"
#include "ui/base/hit_test.h"
#include "ui/base/ui_base_types.h"
#include "ui/gfx/screen.h"
-#include "ui/views/corewm/window_util.h"
+#include "ui/wm/core/window_util.h"
namespace ash {
-namespace internal {
-
namespace {
// The maximum opacity of the drag phantom window.
const float kMaxOpacity = 0.8f;
-// The opacity of the window when dragging it over a user item in the tray.
-const float kOpacityWhenDraggedOverUserIcon = 0.4f;
-
// Returns true if Ash has more than one root window.
bool HasSecondaryRootWindow() {
return Shell::GetAllRootWindows().size() > 1;
void DragWindowResizer::Drag(const gfx::Point& location, int event_flags) {
base::WeakPtr<DragWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr());
-
- // If we are on top of a window to desktop transfer button, we move the window
- // temporarily back to where it was initially and make it semi-transparent.
- GetTarget()->layer()->SetOpacity(
- GetTrayUserItemAtPoint(location) ? kOpacityWhenDraggedOverUserIcon :
- details().initial_opacity);
-
next_window_resizer_->Drag(location, event_flags);
if (!resizer)
}
void DragWindowResizer::CompleteDrag() {
- if (TryDraggingToNewUser())
- return;
-
next_window_resizer_->CompleteDrag();
GetTarget()->layer()->SetOpacity(details().initial_opacity);
bool DragWindowResizer::ShouldAllowMouseWarp() {
return (details().window_component == HTCAPTION) &&
- !views::corewm::GetTransientParent(GetTarget()) &&
+ !::wm::GetTransientParent(GetTarget()) &&
(GetTarget()->type() == ui::wm::WINDOW_TYPE_NORMAL ||
GetTarget()->type() == ui::wm::WINDOW_TYPE_PANEL);
}
-TrayUser* DragWindowResizer::GetTrayUserItemAtPoint(
- const gfx::Point& point_in_screen) {
- // Unit tests might not have an ash shell.
- if (!ash::Shell::GetInstance())
- return NULL;
-
- // Check that this is a drag move operation from a suitable window.
- if (details().window_component != HTCAPTION ||
- views::corewm::GetTransientParent(GetTarget()) ||
- (GetTarget()->type() != ui::wm::WINDOW_TYPE_NORMAL &&
- GetTarget()->type() != ui::wm::WINDOW_TYPE_PANEL &&
- GetTarget()->type() != ui::wm::WINDOW_TYPE_POPUP))
- return NULL;
-
- // We only allow to drag the window onto a tray of it's own RootWindow.
- SystemTray* tray = internal::GetRootWindowController(
- GetTarget()->GetRootWindow())->GetSystemTray();
-
- // Again - unit tests might not have a tray.
- if (!tray)
- return NULL;
-
- const std::vector<internal::TrayUser*> tray_users = tray->GetTrayUserItems();
- if (tray_users.size() <= 1)
- return NULL;
-
- std::vector<internal::TrayUser*>::const_iterator it = tray_users.begin();
- for (; it != tray_users.end(); ++it) {
- if ((*it)->CanDropWindowHereToTransferToUser(point_in_screen))
- return *it;
- }
- return NULL;
-}
-
-bool DragWindowResizer::TryDraggingToNewUser() {
- TrayUser* tray_user = GetTrayUserItemAtPoint(last_mouse_location_);
- // No need to try dragging if there is no user.
- if (!tray_user)
- return false;
-
- // We have to avoid a brief flash caused by the RevertDrag operation.
- // To do this, we first set the opacity of our target window to 0, so that no
- // matter what the RevertDrag does the window will stay hidden. Then transfer
- // the window to the new owner (which will hide it). RevertDrag will then do
- // it's thing and return the transparency to its original value.
- int old_opacity = GetTarget()->layer()->opacity();
- GetTarget()->layer()->SetOpacity(0);
- GetTarget()->SetBounds(details().initial_bounds_in_parent);
- if (!tray_user->TransferWindowToUser(GetTarget())) {
- GetTarget()->layer()->SetOpacity(old_opacity);
- return false;
- }
- RevertDrag();
- return true;
-}
-
-} // namespace internal
} // namespace ash