summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-10 18:10:56 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-10 18:10:56 +0000
commitf258e60737294d275711c83fe85351a227970759 (patch)
treed9c4d849384d69d4c1ad56dfeb33a42194798ae7 /chrome/browser/gtk
parent0f22837496378b11c7276ef0420a862e7c7c5128 (diff)
downloadchromium_src-f258e60737294d275711c83fe85351a227970759.zip
chromium_src-f258e60737294d275711c83fe85351a227970759.tar.gz
chromium_src-f258e60737294d275711c83fe85351a227970759.tar.bz2
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
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc17
-rw-r--r--chrome/browser/gtk/browser_window_gtk.h4
2 files changed, 15 insertions, 6 deletions
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);
};