Index: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
index 1fd497f8b0197acafe82684fec3ffbc2739a1352..d82843a4072eec9ca3d038e24f53c64f879f9194 100644 |
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
@@ -138,6 +138,7 @@ DesktopWindowTreeHostX11::DesktopWindowTreeHostX11( |
is_fullscreen_(false), |
is_always_on_top_(false), |
use_native_frame_(false), |
+ should_maximize_after_map_(false), |
use_argb_visual_(false), |
drag_drop_client_(NULL), |
native_widget_delegate_(native_widget_delegate), |
@@ -366,9 +367,6 @@ void DesktopWindowTreeHostX11::ShowWindowWithState( |
if (show_state == ui::SHOW_STATE_NORMAL || |
show_state == ui::SHOW_STATE_MAXIMIZED) { |
- // Note: XFCE ignores a maximize hint given before mapping the window. |
- if (show_state == ui::SHOW_STATE_MAXIMIZED) |
- Maximize(); |
Activate(); |
} |
@@ -541,6 +539,10 @@ void DesktopWindowTreeHostX11::Maximize() { |
SetBounds(adjusted_bounds); |
} |
+ // Some WMs do not respect maximization hints on unmapped windows, so we |
+ // save this one for later too. |
+ should_maximize_after_map_ = !window_mapped_; |
+ |
// When we are in the process of requesting to maximize a window, we can |
// accurately keep track of our restored bounds instead of relying on the |
// heuristics that are in the PropertyNotify and ConfigureNotify handlers. |
@@ -559,6 +561,7 @@ void DesktopWindowTreeHostX11::Minimize() { |
} |
void DesktopWindowTreeHostX11::Restore() { |
+ should_maximize_after_map_ = false; |
Elliot Glaysher
2014/09/04 17:37:04
This seems fragile.
Could you please test in the
Arjan van Leeuwen
2014/09/05 11:23:26
You can't restore the window through the window ma
|
SetWMSpecState(false, |
atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"), |
atom_cache_.GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ")); |
@@ -1583,6 +1586,13 @@ void DesktopWindowTreeHostX11::MapWindow(ui::WindowShowState show_state) { |
if (ui::X11EventSource::GetInstance()) |
ui::X11EventSource::GetInstance()->BlockUntilWindowMapped(xwindow_); |
window_mapped_ = true; |
+ |
+ // Some WMs only respect maximize hints after the window has been mapped. |
+ // Check whether we need to re-do a maximization. |
+ if (should_maximize_after_map_) { |
+ Maximize(); |
+ should_maximize_after_map_ = false; |
+ } |
} |
void DesktopWindowTreeHostX11::SetWindowTransparency() { |