summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorcalamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-01 21:53:21 +0000
committercalamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-01 21:53:21 +0000
commit8f471efe17352dd8d4831f97f5f5c03812b6f082 (patch)
tree45e4f92e4062991ad772a4386e6c250f4d36415d /apps
parent1dca97bbf3d4c109ae93be900cf6823dc87c154f (diff)
downloadchromium_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.cc12
-rw-r--r--apps/app_window_registry.cc21
-rw-r--r--apps/app_window_registry.h14
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);