summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorerg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 02:59:21 +0000
committererg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-29 02:59:21 +0000
commit0d06de4116d615007945635c8cd9d70cddccd231 (patch)
tree25e41d7718074f2fa4e2a229d09d5a89fe93480a /ui
parent6ce0bbc6b09f14ce21d1af2bb34790ca2e2f52d0 (diff)
downloadchromium_src-0d06de4116d615007945635c8cd9d70cddccd231.zip
chromium_src-0d06de4116d615007945635c8cd9d70cddccd231.tar.gz
chromium_src-0d06de4116d615007945635c8cd9d70cddccd231.tar.bz2
linux_aura: Close window when the OS requests it.
Alt-F4 key events are handled by the window manager, who then sends an X11 message telling us that we should close. This used to be hooked up, but it looks like it broke when we merged with the crossplatform DesktopNativeWidgetAura code that we also use on Windows. BUG=176783 Review URL: https://chromiumcodereview.appspot.com/15827009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202758 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/views/widget/desktop_aura/desktop_native_widget_aura.cc12
-rw-r--r--ui/views/widget/desktop_aura/desktop_native_widget_aura.h8
2 files changed, 19 insertions, 1 deletions
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index 4e6c1c4..26828e0 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -178,6 +178,8 @@ DesktopNativeWidgetAura::~DesktopNativeWidgetAura() {
CloseNow();
stacking_client_.reset(); // Uses root_window_ at destruction.
+
+ root_window_->RemoveRootWindowObserver(this);
root_window_.reset(); // Uses input_method_event_filter_ at destruction.
input_method_event_filter_.reset();
}
@@ -235,6 +237,8 @@ void DesktopNativeWidgetAura::InitNativeWidget(
this, params.bounds);
root_window_.reset(
desktop_root_window_host_->Init(window_, params));
+ root_window_->AddRootWindowObserver(this);
+
stacking_client_.reset(
new DesktopNativeWidgetAuraStackingClient(root_window_.get()));
drop_helper_.reset(new DropHelper(
@@ -842,4 +846,12 @@ int DesktopNativeWidgetAura::OnPerformDrop(const ui::DropTargetEvent& event) {
last_drop_operation_);
}
+////////////////////////////////////////////////////////////////////////////////
+// DesktopNativeWidgetAura, aura::RootWindowObserver implementation:
+
+void DesktopNativeWidgetAura::OnRootWindowHostCloseRequested(
+ const aura::RootWindow* root) {
+ Close();
+}
+
} // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
index 7a79db8..d46f0ba 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
@@ -10,6 +10,7 @@
#include "ui/aura/client/activation_delegate.h"
#include "ui/aura/client/drag_drop_delegate.h"
#include "ui/aura/client/focus_change_observer.h"
+#include "ui/aura/root_window_observer.h"
#include "ui/aura/window_delegate.h"
#include "ui/views/ime/input_method_delegate.h"
#include "ui/views/widget/native_widget_private.h"
@@ -44,7 +45,8 @@ class VIEWS_EXPORT DesktopNativeWidgetAura
public aura::client::ActivationChangeObserver,
public aura::client::FocusChangeObserver,
public views::internal::InputMethodDelegate,
- public aura::client::DragDropDelegate {
+ public aura::client::DragDropDelegate,
+ public aura::RootWindowObserver {
public:
explicit DesktopNativeWidgetAura(internal::NativeWidgetDelegate* delegate);
virtual ~DesktopNativeWidgetAura();
@@ -193,6 +195,10 @@ class VIEWS_EXPORT DesktopNativeWidgetAura
virtual void OnDragExited() OVERRIDE;
virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE;
+ // Overridden from aura::RootWindowObserver:
+ virtual void OnRootWindowHostCloseRequested(
+ const aura::RootWindow* root) OVERRIDE;
+
private:
// See class documentation for Widget in widget.h for a note about ownership.
Widget::InitParams::Ownership ownership_;