diff options
author | calamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-01 21:53:21 +0000 |
---|---|---|
committer | calamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-01 21:53:21 +0000 |
commit | 8f471efe17352dd8d4831f97f5f5c03812b6f082 (patch) | |
tree | 45e4f92e4062991ad772a4386e6c250f4d36415d /apps | |
parent | 1dca97bbf3d4c109ae93be900cf6823dc87c154f (diff) | |
download | chromium_src-8f471efe17352dd8d4831f97f5f5c03812b6f082.zip chromium_src-8f471efe17352dd8d4831f97f5f5c03812b6f082.tar.gz chromium_src-8f471efe17352dd8d4831f97f5f5c03812b6f082.tar.bz2 |
Reland a portion of https://codereview.chromium.org/234673002/
This CL is a reland of a portion of https://codereview.chromium.org/234673002/
with all changes #ifdefed for ChromeOS only. This will allow for a ChromeOS
only merge of the fix.
BUG=360896
TBR=stevenjb@chromium.org, skuhne@chromium.org
Review URL: https://codereview.chromium.org/269613003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267639 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_window.cc | 12 | ||||
-rw-r--r-- | apps/app_window_registry.cc | 21 | ||||
-rw-r--r-- | apps/app_window_registry.h | 14 |
3 files changed, 46 insertions, 1 deletions
diff --git a/apps/app_window.cc b/apps/app_window.cc index cf20eea..113d8ee 100644 --- a/apps/app_window.cc +++ b/apps/app_window.cc @@ -284,6 +284,12 @@ void AppWindow::Init(const GURL& url, // Panels are not activated by default. Show(window_type_is_panel() || !new_params.focused ? SHOW_INACTIVE : SHOW_ACTIVE); +#if defined(OS_CHROMEOS) + } else { + // Although the window starts hidden by default, calling Hide() here + // notifies observers of the window being hidden. + Hide(); +#endif } if (new_params.state == ui::SHOW_STATE_FULLSCREEN) @@ -672,6 +678,9 @@ void AppWindow::Show(ShowType show_type) { GetBaseWindow()->ShowInactive(); break; } +#if defined(OS_CHROMEOS) + AppWindowRegistry::Get(browser_context_)->AppWindowShown(this); +#endif } void AppWindow::Hide() { @@ -681,6 +690,9 @@ void AppWindow::Hide() { // show will not be delayed. show_on_first_paint_ = false; GetBaseWindow()->Hide(); +#if defined(OS_CHROMEOS) + AppWindowRegistry::Get(browser_context_)->AppWindowHidden(this); +#endif } void AppWindow::SetAlwaysOnTop(bool always_on_top) { diff --git a/apps/app_window_registry.cc b/apps/app_window_registry.cc index b362a5b..8c5574f 100644 --- a/apps/app_window_registry.cc +++ b/apps/app_window_registry.cc @@ -45,6 +45,17 @@ std::string GetWindowKeyForRenderViewHost( namespace apps { +#if defined(OS_CHROMEOS) +void AppWindowRegistry::Observer::OnAppWindowHidden(AppWindow* app_window) { +} + +void AppWindowRegistry::Observer::OnAppWindowShown(AppWindow* app_window) { +} +#endif + +AppWindowRegistry::Observer::~Observer() { +} + AppWindowRegistry::AppWindowRegistry(content::BrowserContext* context) : context_(context), devtools_callback_(base::Bind(&AppWindowRegistry::OnDevToolsStateChanged, @@ -77,6 +88,16 @@ void AppWindowRegistry::AppWindowActivated(AppWindow* app_window) { BringToFront(app_window); } +#if defined(OS_CHROMEOS) +void AppWindowRegistry::AppWindowHidden(AppWindow* app_window) { + FOR_EACH_OBSERVER(Observer, observers_, OnAppWindowHidden(app_window)); +} + +void AppWindowRegistry::AppWindowShown(AppWindow* app_window) { + FOR_EACH_OBSERVER(Observer, observers_, OnAppWindowShown(app_window)); +} +#endif + void AppWindowRegistry::RemoveAppWindow(AppWindow* app_window) { const AppWindowList::iterator it = std::find(app_windows_.begin(), app_windows_.end(), app_window); diff --git a/apps/app_window_registry.h b/apps/app_window_registry.h index cc3ee35..895bbe2 100644 --- a/apps/app_window_registry.h +++ b/apps/app_window_registry.h @@ -37,9 +37,17 @@ class AppWindowRegistry : public KeyedService { virtual void OnAppWindowIconChanged(apps::AppWindow* app_window) = 0; // Called just after a app window was removed. virtual void OnAppWindowRemoved(apps::AppWindow* app_window) = 0; +#if defined(OS_CHROMEOS) + // Called just after a app window was hidden. This is different from + // window visibility as a minimize does not hide a window, but does make + // it not visible. + virtual void OnAppWindowHidden(apps::AppWindow* app_window); + // Called just after a app window was shown. + virtual void OnAppWindowShown(apps::AppWindow* app_window); +#endif protected: - virtual ~Observer() {} + virtual ~Observer(); }; typedef std::list<apps::AppWindow*> AppWindowList; @@ -58,6 +66,10 @@ class AppWindowRegistry : public KeyedService { void AppWindowIconChanged(apps::AppWindow* app_window); // Called by |app_window| when it is activated. void AppWindowActivated(apps::AppWindow* app_window); +#if defined(OS_CHROMEOS) + void AppWindowHidden(apps::AppWindow* app_window); + void AppWindowShown(apps::AppWindow* app_window); +#endif void RemoveAppWindow(apps::AppWindow* app_window); void AddObserver(Observer* observer); |