summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-24 15:51:26 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-24 15:51:26 +0000
commit717382da5931a2d43e7f6aa825dd63286b6f5b76 (patch)
tree61b769bd7d5300678cd65746a94cb355ba5d4b38 /views
parent3a132291568bb003761703e4230772712fbc8e0d (diff)
downloadchromium_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.cc21
-rw-r--r--views/window/window_gtk.h10
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);
};