Commit d8760869 authored by ben@chromium.org's avatar ben@chromium.org

Adding a new window type for frameless non-transient top level windows, used...

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
parent 00ecc283
......@@ -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);
......
......@@ -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();
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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.
......
......@@ -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;
......
......@@ -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;
......
......@@ -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);
......
......@@ -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;
......
......@@ -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),
......
......@@ -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_),
......
......@@ -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;
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment