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 /views | |
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
Diffstat (limited to 'views')
-rw-r--r-- | views/window/window_gtk.cc | 21 | ||||
-rw-r--r-- | views/window/window_gtk.h | 10 |
2 files changed, 28 insertions, 3 deletions
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); }; |