diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-06 22:52:08 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-06 22:52:08 +0000 |
commit | 1ece65b689630b02a77f1b06e6985259b430191d (patch) | |
tree | b4e93a0b73967eb5df387b9269fe64c7c7c8fba4 /chrome/views/widget | |
parent | 606116d2dc6822bb0a63802d982f9b4dae113a77 (diff) | |
download | chromium_src-1ece65b689630b02a77f1b06e6985259b430191d.zip chromium_src-1ece65b689630b02a77f1b06e6985259b430191d.tar.gz chromium_src-1ece65b689630b02a77f1b06e6985259b430191d.tar.bz2 |
Remove all traces of NotificationService from views.
Specifically, notifies the FocusManager and ViewStorage directly when the view hierarchy is adjusted rather than using notifications. This change is based on the assumption that there is one focus manager per toplevel window. I think I remember you saying this before Jay.
Removes the "window open/close" notifications since they aren't used at the Views level... the close notification is already sent manually by the BrowserView for automation so that continues to work.
Moves the HWNDNotificationSource to common, since it's used by BrowserView.
Rejiggers the BrowserList/Window to call a function implemented in the ViewsFE that handles closing non-app windows when the last browser window is closed.
http://crbug.com/11387
Review URL: http://codereview.chromium.org/113016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15468 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/views/widget')
-rw-r--r-- | chrome/views/widget/hwnd_notification_source.h | 24 | ||||
-rw-r--r-- | chrome/views/widget/root_view.cc | 25 | ||||
-rw-r--r-- | chrome/views/widget/widget_win.cc | 8 |
3 files changed, 20 insertions, 37 deletions
diff --git a/chrome/views/widget/hwnd_notification_source.h b/chrome/views/widget/hwnd_notification_source.h deleted file mode 100644 index 602ae44..0000000 --- a/chrome/views/widget/hwnd_notification_source.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_VIEWS_WIDGET_HWND_NOTIFICATION_SOURCE_H_ -#define CHROME_VIEWS_WIDGET_HWND_NOTIFICATION_SOURCE_H_ - -#include "chrome/common/notification_source.h" - -// Specialization of the Source class for HWND. This is needed as the Source -// class expects a pointer type. -template<> -class Source<HWND> : public NotificationSource { - public: - explicit Source(HWND hwnd) : NotificationSource(hwnd) {} - - explicit Source(const NotificationSource& other) - : NotificationSource(other) {} - - HWND operator->() const { return ptr(); } - HWND ptr() const { return static_cast<HWND>(ptr_); } -}; - -#endif // #define CHROME_VIEWS_WIDGET_HWND_NOTIFICATION_SOURCE_H_ diff --git a/chrome/views/widget/root_view.cc b/chrome/views/widget/root_view.cc index bd57fe4..e674aac 100644 --- a/chrome/views/widget/root_view.cc +++ b/chrome/views/widget/root_view.cc @@ -13,11 +13,12 @@ #endif #include "base/logging.h" #include "base/message_loop.h" -#include "chrome/common/notification_service.h" #if defined(OS_WIN) +#include "chrome/views/focus/view_storage.h" #include "chrome/views/widget/root_view_drop_target.h" #endif #include "chrome/views/widget/widget.h" +#include "chrome/views/window/window.h" namespace views { @@ -261,10 +262,24 @@ void RootView::ViewHierarchyChanged(bool is_add, View* parent, View* child) { if (default_keyboard_handler_ == child) { default_keyboard_handler_ = NULL; } - NotificationService::current()->Notify( - NotificationType::VIEW_REMOVED, - Source<View>(child), - Details<View>(parent)); + + // For a given widget hierarchy, focus is tracked by a FocusManager attached + // to our nearest enclosing Window. <-- Important Assumption! + // We may not have access to our window if this function is called as a + // result of teardown during the deletion of the RootView and its hierarchy, + // so we don't bother notifying the FocusManager in that case because it + // will have already been destroyed (the Widget that contains us is + // NCDESTROY'ed which in turn destroys the focus manager _before_ the + // RootView is deleted.) + Window* window = GetWindow(); + if (window) { + FocusManager* focus_manager = + FocusManager::GetFocusManager(window->GetNativeWindow()); + focus_manager->ViewRemoved(parent, child); + } +#if defined(OS_WIN) + ViewStorage::GetSharedInstance()->ViewRemoved(parent, child); +#endif } } diff --git a/chrome/views/widget/widget_win.cc b/chrome/views/widget/widget_win.cc index 0bb3e78..5ee065a 100644 --- a/chrome/views/widget/widget_win.cc +++ b/chrome/views/widget/widget_win.cc @@ -9,14 +9,12 @@ #include "base/string_util.h" #include "base/win_util.h" #include "chrome/app/chrome_dll_resource.h" -#include "chrome/common/notification_service.h" #include "chrome/common/win_util.h" #include "chrome/views/accessibility/view_accessibility.h" #include "chrome/views/controls/native_control_win.h" #include "chrome/views/fill_layout.h" #include "chrome/views/focus/focus_util_win.h" #include "chrome/views/widget/aero_tooltip_manager.h" -#include "chrome/views/widget/hwnd_notification_source.h" #include "chrome/views/widget/root_view.h" #include "chrome/views/window/window_win.h" @@ -467,12 +465,6 @@ void WidgetWin::OnCaptureChanged(HWND hwnd) { } void WidgetWin::OnClose() { - // WARNING: this method is NOT called for all WidgetWins. If you need to do - // cleanup code before WidgetWin is destroyed, put it in OnDestroy. - NotificationService::current()->Notify( - NotificationType::WINDOW_CLOSED, Source<HWND>(hwnd_), - NotificationService::NoDetails()); - Close(); } |