diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 15:51:26 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 15:51:26 +0000 |
commit | 717382da5931a2d43e7f6aa825dd63286b6f5b76 (patch) | |
tree | 61b769bd7d5300678cd65746a94cb355ba5d4b38 | |
parent | 3a132291568bb003761703e4230772712fbc8e0d (diff) | |
download | chromium_src-717382da5931a2d43e7f6aa825dd63286b6f5b76.zip chromium_src-717382da5931a2d43e7f6aa825dd63286b6f5b76.tar.gz chromium_src-717382da5931a2d43e7f6aa825dd63286b6f5b76.tar.bz2 |
Changes from listening to focus-out/focus-in for active status to
listening for is-active.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/219016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27071 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/views/frame/browser_frame_gtk.cc | 14 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_frame_gtk.h | 3 | ||||
-rw-r--r-- | views/window/window_gtk.cc | 21 | ||||
-rw-r--r-- | views/window/window_gtk.h | 10 |
4 files changed, 33 insertions, 15 deletions
diff --git a/chrome/browser/views/frame/browser_frame_gtk.cc b/chrome/browser/views/frame/browser_frame_gtk.cc index 7ca24f9..2e7b734 100644 --- a/chrome/browser/views/frame/browser_frame_gtk.cc +++ b/chrome/browser/views/frame/browser_frame_gtk.cc @@ -82,16 +82,10 @@ views::RootView* BrowserFrameGtk::CreateRootView() { return root_view_; } -gboolean BrowserFrameGtk::OnFocusIn(GtkWidget* widget, - GdkEventFocus* event) { - browser_view_->ActivationChanged(true); - return views::WindowGtk::OnFocusIn(widget, event); -} - -gboolean BrowserFrameGtk::OnFocusOut(GtkWidget* widget, - GdkEventFocus* event) { - browser_view_->ActivationChanged(false); - return views::WindowGtk::OnFocusOut(widget, event); +void BrowserFrameGtk::IsActiveChanged() { + GetRootView()->SchedulePaint(); + browser_view_->ActivationChanged(IsActive()); + views::WindowGtk::IsActiveChanged(); } diff --git a/chrome/browser/views/frame/browser_frame_gtk.h b/chrome/browser/views/frame/browser_frame_gtk.h index 1e1f308..75ec308 100644 --- a/chrome/browser/views/frame/browser_frame_gtk.h +++ b/chrome/browser/views/frame/browser_frame_gtk.h @@ -36,8 +36,7 @@ class BrowserFrameGtk : public BrowserFrame, // Overridden from views::Widget. virtual ThemeProvider* GetThemeProvider() const; virtual ThemeProvider* GetDefaultThemeProvider() const; - virtual gboolean OnFocusIn(GtkWidget* widget, GdkEventFocus* event); - virtual gboolean OnFocusOut(GtkWidget* widget, GdkEventFocus* event); + virtual void IsActiveChanged(); protected: // WidgetGtk overrides. diff --git a/views/window/window_gtk.cc b/views/window/window_gtk.cc index 26c3669..8550fe7 100644 --- a/views/window/window_gtk.cc +++ b/views/window/window_gtk.cc @@ -156,7 +156,7 @@ void WindowGtk::Restore() { } bool WindowGtk::IsActive() const { - return gtk_window_is_active(GetNativeWindow()); + return force_active_ || WidgetGtk::IsActive(); } bool WindowGtk::IsVisible() const { @@ -187,7 +187,7 @@ void WindowGtk::EnableClose(bool enable) { } void WindowGtk::DisableInactiveRendering() { - NOTIMPLEMENTED(); + force_active_ = true; } void WindowGtk::UpdateWindowTitle() { @@ -334,6 +334,11 @@ gboolean WindowGtk::OnWindowStateEvent(GtkWidget* widget, return FALSE; } +void WindowGtk::IsActiveChanged() { + if (force_active_ && WidgetGtk::IsActive()) + force_active_ = false; +} + //////////////////////////////////////////////////////////////////////////////// // WindowGtk, protected: @@ -343,7 +348,8 @@ WindowGtk::WindowGtk(WindowDelegate* window_delegate) window_delegate_(window_delegate), non_client_view_(new NonClientView(this)), window_state_(GDK_WINDOW_STATE_WITHDRAWN), - window_closed_(false) { + window_closed_(false), + force_active_(false) { is_window_ = true; window_delegate_->window_.reset(this); } @@ -361,6 +367,8 @@ void WindowGtk::Init(GtkWindow* parent, const gfx::Rect& bounds) { g_signal_connect(G_OBJECT(GetNativeWindow()), "configure-event", G_CALLBACK(CallConfigureEvent), this); + g_signal_connect(G_OBJECT(GetNativeWindow()), "notify::is-active", + G_CALLBACK(CallIsActiveChanged), this); g_signal_connect(G_OBJECT(GetNativeWindow()), "window-state-event", G_CALLBACK(CallWindowStateEvent), this); @@ -393,6 +401,13 @@ gboolean WindowGtk::CallConfigureEvent(GtkWidget* widget, } // static +void WindowGtk::CallIsActiveChanged(GtkWidget* widget, + GParamSpec* pspec, + WindowGtk* window_gtk) { + return window_gtk->IsActiveChanged(); +} + +// static gboolean WindowGtk::CallWindowStateEvent(GtkWidget* widget, GdkEventWindowState* event, WindowGtk* window_gtk) { diff --git a/views/window/window_gtk.h b/views/window/window_gtk.h index 237b6f9..74482ad 100644 --- a/views/window/window_gtk.h +++ b/views/window/window_gtk.h @@ -68,6 +68,9 @@ class WindowGtk : public WidgetGtk, public Window { virtual gboolean OnWindowStateEvent(GtkWidget* widget, GdkEventWindowState* event); + // WindowGtk specific. + virtual void IsActiveChanged(); + protected: // For the constructor. friend class Window; @@ -82,6 +85,9 @@ class WindowGtk : public WidgetGtk, public Window { static gboolean CallConfigureEvent(GtkWidget* widget, GdkEventConfigure* event, WindowGtk* window_gtk); + static void CallIsActiveChanged(GtkWidget* widget, + GParamSpec* pspec, + WindowGtk* window_gtk); static gboolean CallWindowStateEvent(GtkWidget* widget, GdkEventWindowState* event, WindowGtk* window_gtk); @@ -112,6 +118,10 @@ class WindowGtk : public WidgetGtk, public Window { // Set to true if the window is in the process of closing. bool window_closed_; + // If true, IsActive returns true. This is set by DisableInactiveRendering + // to force the window to be treated as active even though it isn't. + bool force_active_; + DISALLOW_COPY_AND_ASSIGN(WindowGtk); }; |