Index: chrome/browser/ui/views/app_list/linux/app_list_linux.cc |
diff --git a/chrome/browser/ui/views/app_list/linux/app_list_linux.cc b/chrome/browser/ui/views/app_list/linux/app_list_linux.cc |
deleted file mode 100644 |
index 8333480a2839e542e39be17fa24b34e293f26ee4..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/app_list/linux/app_list_linux.cc |
+++ /dev/null |
@@ -1,112 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/views/app_list/linux/app_list_linux.h" |
- |
-#include "build/build_config.h" |
-#include "ui/app_list/app_list_switches.h" |
-#include "ui/app_list/views/app_list_view.h" |
-#include "ui/display/screen.h" |
-#include "ui/views/linux_ui/linux_ui.h" |
-#include "ui/views/widget/widget.h" |
- |
-// static |
-AppListPositioner::ScreenEdge AppListLinux::ShelfLocationInDisplay( |
- const display::Display& display) { |
- // On Linux, it is difficult to find the shelf (due to the large variety of |
- // desktop environments). The shelf can usually be found on the edge where the |
- // display edge and work area do not match up, but there can be more than one |
- // such edge. The shelf is assumed to be on the side of the screen with the |
- // largest delta between the display edge and the work area edge. Ties are |
- // broken in the order: top, left, right, bottom. |
- const gfx::Rect work_area = display.work_area(); |
- const gfx::Rect display_bounds = display.bounds(); |
- |
- int winning_margin = 0; |
- AppListPositioner::ScreenEdge winning_edge = |
- AppListPositioner::SCREEN_EDGE_UNKNOWN; |
- |
- if (work_area.y() - display_bounds.y() > winning_margin) { |
- winning_margin = work_area.y() - display_bounds.y(); |
- winning_edge = AppListPositioner::SCREEN_EDGE_TOP; |
- } |
- |
- if (work_area.x() - display_bounds.x() > winning_margin) { |
- winning_margin = work_area.x() - display_bounds.x(); |
- winning_edge = AppListPositioner::SCREEN_EDGE_LEFT; |
- } |
- |
- if (display_bounds.right() - work_area.right() > winning_margin) { |
- winning_margin = display_bounds.right() - work_area.right(); |
- winning_edge = AppListPositioner::SCREEN_EDGE_RIGHT; |
- } |
- |
- if (display_bounds.bottom() - work_area.bottom() > winning_margin) { |
- winning_margin = display_bounds.bottom() - work_area.bottom(); |
- winning_edge = AppListPositioner::SCREEN_EDGE_BOTTOM; |
- } |
- |
- return winning_edge; |
-} |
- |
-// static |
-gfx::Point AppListLinux::FindAnchorPoint(const gfx::Size& view_size, |
- const display::Display& display, |
- const gfx::Point& cursor, |
- AppListPositioner::ScreenEdge edge, |
- bool center_window) { |
- AppListPositioner positioner(display, view_size, 0); |
- |
- // Special case for app list in the center of the screen. |
- if (center_window) |
- return positioner.GetAnchorPointForScreenCenter(); |
- |
- gfx::Point anchor; |
- // Snap to the shelf edge. If the cursor is greater than the window |
- // width/height away, anchor to the corner. Otherwise, anchor to the cursor |
- // position. |
- if (edge == AppListPositioner::SCREEN_EDGE_UNKNOWN) { |
- // If we can't find the shelf, snap to the top left. |
- return positioner.GetAnchorPointForScreenCorner( |
- AppListPositioner::SCREEN_CORNER_TOP_LEFT); |
- } |
- |
- int snap_distance = edge == AppListPositioner::SCREEN_EDGE_BOTTOM || |
- edge == AppListPositioner::SCREEN_EDGE_TOP |
- ? view_size.height() |
- : view_size.width(); |
- if (positioner.GetCursorDistanceFromShelf(edge, cursor) > snap_distance) |
- return positioner.GetAnchorPointForShelfCorner(edge); |
- |
- return positioner.GetAnchorPointForShelfCursor(edge, cursor); |
-} |
- |
-// static |
-void AppListLinux::MoveNearCursor(app_list::AppListView* view) { |
- display::Screen* screen = display::Screen::GetScreen(); |
- gfx::Point cursor = screen->GetCursorScreenPoint(); |
- display::Display display = screen->GetDisplayNearestPoint(cursor); |
- |
- view->SetBubbleArrow(views::BubbleBorder::FLOAT); |
- |
- AppListPositioner::ScreenEdge edge; |
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
- // In the Unity desktop environment, special case SCREEN_EDGE_LEFT. It is |
- // always on the left side in Unity, but ShelfLocationInDisplay will not |
- // detect this if the shelf is hidden. |
- // TODO(mgiuca): Apply this special case in Gnome Shell also. The same logic |
- // applies, but we currently have no way to detect whether Gnome Shell is |
- // running. |
- views::LinuxUI* ui = views::LinuxUI::instance(); |
- if (ui && ui->UnityIsRunning()) |
- edge = AppListPositioner::SCREEN_EDGE_LEFT; |
- else |
-#endif |
- edge = ShelfLocationInDisplay(display); |
- view->SetAnchorPoint(FindAnchorPoint(view->GetPreferredSize(), |
- display, |
- cursor, |
- edge, |
- view->ShouldCenterWindow())); |
-} |