summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-12 21:20:32 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-12 21:20:32 +0000
commita04e5f2d19aed5527a052e43a65ec66c88f355c5 (patch)
tree966a79348b91d0cf49dc5e7bdfab1c4535461761
parent4a59e4e9b293138235bbb4a1dc559cb2fb54d481 (diff)
downloadchromium_src-a04e5f2d19aed5527a052e43a65ec66c88f355c5.zip
chromium_src-a04e5f2d19aed5527a052e43a65ec66c88f355c5.tar.gz
chromium_src-a04e5f2d19aed5527a052e43a65ec66c88f355c5.tar.bz2
Close the task manager dialog on shutdown for aura. This is done by implementing views::Widget::CloseAllSecondaryWidgets()" on win aura.
Review URL: https://codereview.chromium.org/11359154 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167238 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/lifetime/application_lifetime_aura.cc4
-rw-r--r--chrome/browser/lifetime/application_lifetime_win.cc2
-rw-r--r--ui/views/widget/native_widget_aura.cc20
3 files changed, 21 insertions, 5 deletions
diff --git a/chrome/browser/lifetime/application_lifetime_aura.cc b/chrome/browser/lifetime/application_lifetime_aura.cc
index 9547e87..5cfca40 100644
--- a/chrome/browser/lifetime/application_lifetime_aura.cc
+++ b/chrome/browser/lifetime/application_lifetime_aura.cc
@@ -8,6 +8,7 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/notifications/notification_ui_manager.h"
+#include "ui/views/widget/widget.h"
#if defined(USE_ASH)
#include "ash/shell.h"
@@ -33,8 +34,7 @@ void HandleAppExitingForPlatform() {
g_browser_process->notification_ui_manager()->CancelAll();
#endif
- // TODO(oshima): Close all non browser windows here while
- // the message loop is still alive.
+ views::Widget::CloseAllSecondaryWidgets();
#if defined(OS_CHROMEOS)
if (!CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/chrome/browser/lifetime/application_lifetime_win.cc b/chrome/browser/lifetime/application_lifetime_win.cc
index 9370ad2..f590769 100644
--- a/chrome/browser/lifetime/application_lifetime_win.cc
+++ b/chrome/browser/lifetime/application_lifetime_win.cc
@@ -9,9 +9,7 @@
namespace browser {
void HandleAppExitingForPlatform() {
-#if !defined(USE_AURA)
views::Widget::CloseAllSecondaryWidgets();
-#endif
}
} // namespace browser
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 807c185..4e47ab2 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -45,6 +45,7 @@
#include "base/win/scoped_gdi_object.h"
#include "base/win/win_util.h"
#include "ui/base/l10n/l10n_util_win.h"
+#include "ui/views/widget/desktop_root_window_host_win.h"
#endif
#if !defined(OS_CHROMEOS)
@@ -895,9 +896,26 @@ void Widget::NotifyLocaleChanged() {
// Deliberately not implemented.
}
+#if defined(OS_WIN)
+namespace {
+BOOL CALLBACK WindowCallbackProc(HWND hwnd, LPARAM lParam) {
+ aura::Window* root_window =
+ DesktopRootWindowHostWin::GetContentWindowForHWND(hwnd);
+ if (root_window) {
+ Widget* widget = Widget::GetWidgetForNativeView(root_window);
+ if (widget && widget->is_secondary_widget())
+ widget->Close();
+ }
+ return TRUE;
+}
+} // namespace
+#endif
+
// static
void Widget::CloseAllSecondaryWidgets() {
- // Deliberately not implemented.
+#if defined(OS_WIN)
+ EnumThreadWindows(GetCurrentThreadId(), WindowCallbackProc, 0);
+#endif
}
bool Widget::ConvertRect(const Widget* source,