summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-09 13:31:29 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-09 13:31:29 +0000
commitd8760869bb5f6b806f12cb7b17bbabdfea32f15d (patch)
tree72671996d8f68db587c4c9207294e585b7c698c4
parent00ecc283a232890bb13cbd15b5d433642b3e5810 (diff)
downloadchromium_src-d8760869bb5f6b806f12cb7b17bbabdfea32f15d.zip
chromium_src-d8760869bb5f6b806f12cb7b17bbabdfea32f15d.tar.gz
chromium_src-d8760869bb5f6b806f12cb7b17bbabdfea32f15d.tar.bz2
Adding a new window type for frameless non-transient top level windows, used by ChromeOS' window manager.
BUG=chromium-os:16323 TEST=none Review URL: http://codereview.chromium.org/7129033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88523 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/frame/panel_controller.cc3
-rw-r--r--chrome/browser/chromeos/login/background_view.cc2
-rw-r--r--chrome/browser/chromeos/login/screen_locker.cc3
-rw-r--r--chrome/browser/chromeos/login/user_controller.cc2
-rw-r--r--chrome/browser/chromeos/login/user_controller_gtk.cc3
-rw-r--r--chrome/browser/chromeos/login/views_oobe_display.cc2
-rw-r--r--chrome/browser/chromeos/login/webui_login_display_host.cc3
-rw-r--r--chrome/browser/chromeos/notifications/notification_panel.cc2
-rw-r--r--chrome/browser/chromeos/panels/panel_scroller.cc3
-rw-r--r--chrome/browser/ui/views/browser_bubble_gtk.cc3
-rw-r--r--chrome/browser/ui/views/bubble/bubble.cc4
-rw-r--r--views/widget/native_widget_gtk.cc16
-rw-r--r--views/widget/native_widget_win.cc3
-rw-r--r--views/widget/widget.h2
14 files changed, 36 insertions, 15 deletions
diff --git a/chrome/browser/chromeos/frame/panel_controller.cc b/chrome/browser/chromeos/frame/panel_controller.cc
index 2bed72b..37f07bc 100644
--- a/chrome/browser/chromeos/frame/panel_controller.cc
+++ b/chrome/browser/chromeos/frame/panel_controller.cc
@@ -184,7 +184,8 @@ void PanelController::Init(bool initial_focus,
gfx::Rect title_bounds(0, 0, window_bounds.width(), kTitleHeight);
title_window_ = new views::Widget;
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.transparent = true;
params.bounds = title_bounds;
title_window_->Init(params);
diff --git a/chrome/browser/chromeos/login/background_view.cc b/chrome/browser/chromeos/login/background_view.cc
index c0eca72..80bd3c7 100644
--- a/chrome/browser/chromeos/login/background_view.cc
+++ b/chrome/browser/chromeos/login/background_view.cc
@@ -129,7 +129,7 @@ views::Widget* BackgroundView::CreateWindowContainingView(
const GURL& background_url,
BackgroundView** view) {
Widget* window = new Widget;
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.bounds = bounds;
window->Init(params);
*view = new BackgroundView();
diff --git a/chrome/browser/chromeos/login/screen_locker.cc b/chrome/browser/chromeos/login/screen_locker.cc
index 06e6c6c..0e4f68de 100644
--- a/chrome/browser/chromeos/login/screen_locker.cc
+++ b/chrome/browser/chromeos/login/screen_locker.cc
@@ -734,7 +734,8 @@ void ScreenLocker::Init() {
LockWindow* lock_window = new LockWindow();
lock_window_ = lock_window->GetWidget();
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.bounds = init_bounds;
params.native_widget = lock_window;
lock_window_->Init(params);
diff --git a/chrome/browser/chromeos/login/user_controller.cc b/chrome/browser/chromeos/login/user_controller.cc
index 47fe14b..63a7a9f 100644
--- a/chrome/browser/chromeos/login/user_controller.cc
+++ b/chrome/browser/chromeos/login/user_controller.cc
@@ -421,7 +421,7 @@ void UserController::CreateBorderWindow(int index,
}
border_window_ = new Widget;
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.transparent = true;
params.bounds = gfx::Rect(0, 0, width, height);
border_window_->Init(params);
diff --git a/chrome/browser/chromeos/login/user_controller_gtk.cc b/chrome/browser/chromeos/login/user_controller_gtk.cc
index 1c59130..7ca2464 100644
--- a/chrome/browser/chromeos/login/user_controller_gtk.cc
+++ b/chrome/browser/chromeos/login/user_controller_gtk.cc
@@ -58,7 +58,8 @@ class ClickNotifyingWidget : public NativeWidgetGtk {
views::Widget* InitWidget(views::WidgetDelegate* delegate,
views::NativeWidget* native_widget,
const gfx::Rect& bounds) {
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.delegate = delegate;
params.transparent = true;
params.bounds = bounds;
diff --git a/chrome/browser/chromeos/login/views_oobe_display.cc b/chrome/browser/chromeos/login/views_oobe_display.cc
index 5296f1f..847ad6f 100644
--- a/chrome/browser/chromeos/login/views_oobe_display.cc
+++ b/chrome/browser/chromeos/login/views_oobe_display.cc
@@ -216,7 +216,7 @@ views::Widget* ViewsOobeDisplay::CreateScreenWindow(
const gfx::Rect& bounds, bool initial_show) {
widget_ = new views::Widget;
views::Widget::InitParams widget_params(
- views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
// Window transparency makes background flicker through controls that
// are constantly updating its contents (like image view with video
// stream). Hence enabling double buffer.
diff --git a/chrome/browser/chromeos/login/webui_login_display_host.cc b/chrome/browser/chromeos/login/webui_login_display_host.cc
index 3df3f7d..46d8be1 100644
--- a/chrome/browser/chromeos/login/webui_login_display_host.cc
+++ b/chrome/browser/chromeos/login/webui_login_display_host.cc
@@ -83,7 +83,8 @@ void WebUILoginDisplayHost::StartSignInScreen() {
void WebUILoginDisplayHost::LoadURL(const GURL& url) {
if (!login_window_) {
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.bounds = background_bounds();
login_window_ = new views::Widget;
diff --git a/chrome/browser/chromeos/notifications/notification_panel.cc b/chrome/browser/chromeos/notifications/notification_panel.cc
index 197a865..e1c2d87 100644
--- a/chrome/browser/chromeos/notifications/notification_panel.cc
+++ b/chrome/browser/chromeos/notifications/notification_panel.cc
@@ -426,7 +426,7 @@ void NotificationPanel::Show() {
panel_widget_ = new views::Widget;
// TODO(oshima): Using window because Popup widget behaves weird
// when resizing. This needs to be investigated.
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
// Enable double buffering because the panel has both pure views
// control and native controls (scroll bar).
params.double_buffer = true;
diff --git a/chrome/browser/chromeos/panels/panel_scroller.cc b/chrome/browser/chromeos/panels/panel_scroller.cc
index ee34659..1069d67 100644
--- a/chrome/browser/chromeos/panels/panel_scroller.cc
+++ b/chrome/browser/chromeos/panels/panel_scroller.cc
@@ -81,7 +81,8 @@ PanelScroller::~PanelScroller() {
// static
PanelScroller* PanelScroller::CreateWindow() {
views::Widget* widget = new views::Widget;
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.bounds = gfx::Rect(0, 0, 100, 800);
widget->Init(params);
diff --git a/chrome/browser/ui/views/browser_bubble_gtk.cc b/chrome/browser/ui/views/browser_bubble_gtk.cc
index 090eb99..dfd0506 100644
--- a/chrome/browser/ui/views/browser_bubble_gtk.cc
+++ b/chrome/browser/ui/views/browser_bubble_gtk.cc
@@ -95,7 +95,8 @@ void BrowserBubble::InitPopup(const gfx::Insets& content_margins) {
// TODO(port)
BubbleWidget* bubble_widget = new BubbleWidget(this, content_margins);
popup_ = bubble_widget->GetWidget();
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.transparent = true;
params.parent = frame_->GetNativeView();
params.native_widget = bubble_widget;
diff --git a/chrome/browser/ui/views/bubble/bubble.cc b/chrome/browser/ui/views/bubble/bubble.cc
index 91d077b..5fa32e7 100644
--- a/chrome/browser/ui/views/bubble/bubble.cc
+++ b/chrome/browser/ui/views/bubble/bubble.cc
@@ -68,7 +68,7 @@ Bubble* Bubble::ShowFocusless(
views::View* contents,
BubbleDelegate* delegate,
bool show_while_screen_is_locked) {
- Bubble* bubble = new Bubble(views::Widget::InitParams::TYPE_POPUP,
+ Bubble* bubble = new Bubble(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS,
show_while_screen_is_locked);
bubble->InitBubble(parent, position_relative_to, arrow_location,
contents, delegate);
@@ -134,7 +134,7 @@ Bubble::Bubble()
show_status_(kOpen),
fade_away_on_close_(false),
#if defined(TOOLKIT_USES_GTK)
- type_(views::Widget::InitParams::TYPE_POPUP),
+ type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS),
#endif
#if defined(OS_CHROMEOS)
show_while_screen_is_locked_(false),
diff --git a/views/widget/native_widget_gtk.cc b/views/widget/native_widget_gtk.cc
index 801a8ec..4d3c3a4 100644
--- a/views/widget/native_widget_gtk.cc
+++ b/views/widget/native_widget_gtk.cc
@@ -180,6 +180,18 @@ void RemoveExposeHandlerIfExists(GtkWidget* widget) {
}
}
+GtkWindowType WindowTypeToGtkWindowType(Widget::InitParams::Type type) {
+ switch (type) {
+ case Widget::InitParams::TYPE_WINDOW:
+ case Widget::InitParams::TYPE_WINDOW_FRAMELESS:
+ return GTK_WINDOW_TOPLEVEL;
+ default:
+ return GTK_WINDOW_POPUP;
+ }
+ NOTREACHED();
+ return GTK_WINDOW_TOPLEVEL;
+}
+
} // namespace
// During drag and drop GTK sends a drag-leave during a drop. This means we
@@ -1676,9 +1688,7 @@ void NativeWidgetGtk::CreateGtkWidget(const Widget::InitParams& params) {
}
} else {
// Use our own window class to override GtkWindow's move_focus method.
- widget_ = gtk_views_window_new(
- params.type == Widget::InitParams::TYPE_WINDOW ? GTK_WINDOW_TOPLEVEL
- : GTK_WINDOW_POPUP);
+ widget_ = gtk_views_window_new(WindowTypeToGtkWindowType(params.type));
gtk_widget_set_name(widget_, "views-gtkwidget-window");
if (transient_to_parent_) {
gtk_window_set_transient_for(GTK_WINDOW(widget_),
diff --git a/views/widget/native_widget_win.cc b/views/widget/native_widget_win.cc
index fe4d885..6d77bc6 100644
--- a/views/widget/native_widget_win.cc
+++ b/views/widget/native_widget_win.cc
@@ -1783,6 +1783,9 @@ void NativeWidgetWin::SetInitParams(const Widget::InitParams& params) {
case Widget::InitParams::TYPE_WINDOW:
case Widget::InitParams::TYPE_CONTROL:
break;
+ case Widget::InitParams::TYPE_WINDOW_FRAMELESS:
+ style |= WS_POPUP;
+ break;
case Widget::InitParams::TYPE_POPUP:
style |= WS_POPUP;
ex_style |= WS_EX_TOOLWINDOW;
diff --git a/views/widget/widget.h b/views/widget/widget.h
index b2699de..990d060 100644
--- a/views/widget/widget.h
+++ b/views/widget/widget.h
@@ -94,6 +94,8 @@ class Widget : public internal::NativeWidgetDelegate,
struct InitParams {
enum Type {
TYPE_WINDOW, // A Window, like a frame window.
+ TYPE_WINDOW_FRAMELESS,
+ // An undecorated Window.
TYPE_CONTROL, // A control, like a button.
TYPE_POPUP, // An undecorated Window, with transient properties.
TYPE_MENU // An undecorated Window, with transient properties