diff options
Diffstat (limited to 'views/window/window_gtk.cc')
-rw-r--r-- | views/window/window_gtk.cc | 21 |
1 files changed, 18 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) { |