From f258e60737294d275711c83fe85351a227970759 Mon Sep 17 00:00:00 2001 From: "tc@google.com" Date: Mon, 10 Aug 2009 18:10:56 +0000 Subject: Work around a compiz bug where starting chrome and trying to maximize would render the window as maximized, but the window state wouldn't be set properly. TEST=Start chrome, maximize chrome, close chrome. Restart chrome. Window controls in compiz should be the maximized version and there should be no rounded corners. Review URL: http://codereview.chromium.org/165186 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22929 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/gtk/browser_window_gtk.cc | 17 +++++++++++------ chrome/browser/gtk/browser_window_gtk.h | 4 ++++ 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'chrome/browser/gtk') diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc index f5ddd75..fee9b62 100644 --- a/chrome/browser/gtk/browser_window_gtk.cc +++ b/chrome/browser/gtk/browser_window_gtk.cc @@ -390,7 +390,8 @@ BrowserWindowGtk::BrowserWindowGtk(Browser* browser) #endif frame_cursor_(NULL), is_active_(true), - last_click_time_(0) { + last_click_time_(0), + maximize_after_show_(false) { use_custom_frame_.Init(prefs::kUseCustomChromeFrame, browser_->profile()->GetPrefs(), this); @@ -640,8 +641,11 @@ void BrowserWindowGtk::Show() { } #endif - // If we are not already visible, this will just show the window. gtk_window_present(window_); + if (maximize_after_show_) { + gtk_window_maximize(window_); + maximize_after_show_ = false; + } } void BrowserWindowGtk::SetBounds(const gfx::Rect& bounds) { @@ -1221,10 +1225,11 @@ void BrowserWindowGtk::SetGeometryHints() { geometry.min_height = 1; gtk_window_set_geometry_hints(window_, NULL, &geometry, GDK_HINT_MIN_SIZE); - if (browser_->GetSavedMaximizedState()) - gtk_window_maximize(window_); - else - gtk_window_unmaximize(window_); + // If we call gtk_window_maximize followed by gtk_window_present, compiz gets + // confused and maximizes the window, but doesn't set the + // GDK_WINDOW_STATE_MAXIMIZED bit. So instead, we keep track of whether to + // maximize and call it after gtk_window_present. + maximize_after_show_ = browser_->GetSavedMaximizedState(); gfx::Rect bounds = browser_->GetSavedWindowBounds(); // We don't blindly call SetBounds here, that sets a forced position diff --git a/chrome/browser/gtk/browser_window_gtk.h b/chrome/browser/gtk/browser_window_gtk.h index c5e0ed3..92a1cf3 100644 --- a/chrome/browser/gtk/browser_window_gtk.h +++ b/chrome/browser/gtk/browser_window_gtk.h @@ -357,6 +357,10 @@ class BrowserWindowGtk : public BrowserWindow, guint32 last_click_time_; gfx::Point last_click_position_; + // If true, maximize the window after we call BrowserWindow::Show for the + // first time. This is to work around a compiz bug. + bool maximize_after_show_; + DISALLOW_COPY_AND_ASSIGN(BrowserWindowGtk); }; -- cgit v1.1