summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/window.cc
blob: d3b0e561b988163014121d08bc3a7c7a9af70c4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Copyright (c) 2012 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/window.h"

#include "ui/views/bubble/bubble_delegate.h"
#include "ui/views/widget/widget.h"

#if defined(USE_AURA)
#include "ash/shell.h"
#include "ash/shell_window_ids.h"
#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
#endif

#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/frame/bubble_window.h"

#if defined(TOOLKIT_USES_GTK)
#include "chrome/browser/chromeos/legacy_window_manager/wm_ipc.h"
#include "third_party/cros_system_api/window_manager/chromeos_wm_ipc_enums.h"
#endif  // TOOLKIT_USES_GTK

#endif  // OS_CHROMEOS

// Note: This file should be removed after the old ChromeOS frontend is removed.
//       It is not needed for Aura.
//       The visual style implemented by BubbleFrameView/BubbleWindow for
//       ChromeOS should move to Ash.
//       Calling code should just call the standard views Widget creation
//       methods and "the right thing" should just happen.
//       The remainder of the code here is dealing with the legacy CrOS WM and
//       can also be removed.

namespace browser {

views::Widget* CreateViewsWindow(gfx::NativeWindow parent,
                                 views::WidgetDelegate* delegate,
                                 DialogStyle style) {
#if defined(OS_CHROMEOS) && !defined(USE_AURA)
  return chromeos::BubbleWindow::Create(parent, style, delegate);
#else
  return views::Widget::CreateWindowWithParent(delegate, parent);
#endif
}

views::Widget* CreateFramelessViewsWindow(gfx::NativeWindow parent,
                                          views::WidgetDelegate* delegate) {
#if defined(OS_CHROMEOS) && !defined(USE_AURA)
  return chromeos::BubbleWindow::Create(parent, STYLE_FLUSH, delegate);
#else
  return CreateFramelessWindowWithParentAndBounds(delegate,
      parent, gfx::Rect());
#endif
}

views::Widget* CreateFramelessWindowWithParentAndBounds(
    views::WidgetDelegate* delegate,
    gfx::NativeWindow parent,
    const gfx::Rect& bounds) {
  views::Widget* widget = new views::Widget;
  views::Widget::InitParams params(
      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
  params.delegate = delegate;
  // Will this function be called if !defined(USE_AURA)?
#if defined(OS_WIN) || defined(USE_AURA)
  params.parent = parent;
#endif
  params.bounds = bounds;
  widget->Init(params);
  return widget;
}

views::Widget* CreateViewsBubble(views::BubbleDelegateView* delegate) {
  views::Widget* bubble_widget =
      views::BubbleDelegateView::CreateBubble(delegate);
#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
  {
    std::vector<int> params;
    params.push_back(0);  // Do not show when screen is locked.
    chromeos::WmIpc::instance()->SetWindowType(
        bubble_widget->GetNativeView(),
        chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE,
        &params);
  }
#endif
  return bubble_widget;
}

views::Widget* CreateViewsBubbleAboveLockScreen(
    views::BubbleDelegateView* delegate) {
#if defined(USE_AURA)
  delegate->set_parent_window(
      ash::Shell::GetInstance()->GetContainer(
          ash::internal::kShellWindowId_SettingBubbleContainer));
#endif
  views::Widget* bubble_widget =
      views::BubbleDelegateView::CreateBubble(delegate);
#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
  std::vector<int> params;
  params.push_back(1);  // Show while screen is locked.
  chromeos::WmIpc::instance()->SetWindowType(
      bubble_widget->GetNativeView(),
      chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE,
      &params);
#endif
  return bubble_widget;
}

}  // namespace browser