diff options
Diffstat (limited to 'views/window/window_gtk.cc')
-rw-r--r-- | views/window/window_gtk.cc | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/views/window/window_gtk.cc b/views/window/window_gtk.cc index 7e833cb..2a9fd97 100644 --- a/views/window/window_gtk.cc +++ b/views/window/window_gtk.cc @@ -68,7 +68,7 @@ GdkCursorType HitTestCodeToGdkCursorType(int hittest_code) { break; } // Default to something defaultish. - return GDK_ARROW; + return GDK_LEFT_PTR; } } // namespace @@ -76,6 +76,7 @@ GdkCursorType HitTestCodeToGdkCursorType(int hittest_code) { namespace views { WindowGtk::~WindowGtk() { + ActiveWindowWatcherX::RemoveObserver(this); } // static @@ -158,7 +159,7 @@ void WindowGtk::Restore() { } bool WindowGtk::IsActive() const { - return force_active_ || WidgetGtk::IsActive(); + return is_active_; } bool WindowGtk::IsVisible() const { @@ -189,7 +190,8 @@ void WindowGtk::EnableClose(bool enable) { } void WindowGtk::DisableInactiveRendering() { - force_active_ = true; + // TODO(sky): this doesn't make sense as bubbles are popups, which don't + // trigger a change in active status. } void WindowGtk::UpdateWindowTitle() { @@ -336,9 +338,17 @@ gboolean WindowGtk::OnWindowStateEvent(GtkWidget* widget, return FALSE; } +void WindowGtk::ActiveWindowChanged(GdkWindow* active_window) { + if (!GetNativeWindow()) + return; + + bool was_active = IsActive(); + is_active_ = (active_window == GTK_WIDGET(GetNativeWindow())->window); + if (was_active != IsActive()) + IsActiveChanged(); +} + void WindowGtk::IsActiveChanged() { - if (force_active_ && WidgetGtk::IsActive()) - force_active_ = false; } //////////////////////////////////////////////////////////////////////////////// @@ -351,9 +361,11 @@ WindowGtk::WindowGtk(WindowDelegate* window_delegate) non_client_view_(new NonClientView(this)), window_state_(GDK_WINDOW_STATE_WITHDRAWN), window_closed_(false), - force_active_(false) { + is_active_(false) { is_window_ = true; window_delegate_->window_.reset(this); + + ActiveWindowWatcherX::AddObserver(this); } void WindowGtk::Init(GtkWindow* parent, const gfx::Rect& bounds) { @@ -369,8 +381,6 @@ 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); @@ -403,13 +413,6 @@ 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) { |