Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Unified Diff: mash/wm/user_window_controller_impl.cc

Issue 1824183002: Mash: Show app icons in shelf based on the Widget's app icon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: //ui/resources Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mash/wm/user_window_controller_impl.cc
diff --git a/mash/wm/user_window_controller_impl.cc b/mash/wm/user_window_controller_impl.cc
index be2f24e2d43984c9e9be06bcfcc1eca8f585f558..3e81da94970db3888795b422e25ce49f5eeb0f71 100644
--- a/mash/wm/user_window_controller_impl.cc
+++ b/mash/wm/user_window_controller_impl.cc
@@ -11,6 +11,7 @@
#include "mash/wm/public/interfaces/container.mojom.h"
#include "mash/wm/root_window_controller.h"
#include "mojo/common/common_type_converters.h"
+#include "ui/resources/grit/ui_resources.h"
namespace mash {
namespace wm {
@@ -26,6 +27,17 @@ mojo::String GetWindowTitle(mus::Window* window) {
return mojo::String(std::string());
}
+// Get the serialized app icon bitmap from a mus::Window.
+mojo::Array<uint8_t> GetWindowAppIcon(mus::Window* window) {
+ if (window->HasSharedProperty(
+ mus::mojom::WindowManager::kWindowAppIcon_Property)) {
+ return mojo::Array<uint8_t>::From(
+ window->GetSharedProperty<const std::vector<uint8_t>>(
+ mus::mojom::WindowManager::kWindowAppIcon_Property));
+ }
+ return mojo::Array<uint8_t>();
+}
+
// Returns |window|, or an ancestor thereof, parented to |container|, or null.
mus::Window* GetTopLevelWindow(mus::Window* window, mus::Window* container) {
while (window && window->parent() != container)
@@ -38,6 +50,7 @@ mojom::UserWindowPtr GetUserWindow(mus::Window* window) {
mojom::UserWindowPtr user_window(mojom::UserWindow::New());
user_window->window_id = window->id();
user_window->window_title = GetWindowTitle(window);
+ user_window->window_app_icon = GetWindowAppIcon(window);
mus::Window* focused = window->connection()->GetFocusedWindow();
focused = GetTopLevelWindow(focused, window->parent());
user_window->window_has_focus = focused == window;
@@ -46,13 +59,14 @@ mojom::UserWindowPtr GetUserWindow(mus::Window* window) {
} // namespace
-// Observes title changes on user windows. UserWindowControllerImpl uses this
-// separate observer to avoid observing duplicate tree change notifications.
-class WindowTitleObserver : public mus::WindowObserver {
+// Observes property changes on user windows. UserWindowControllerImpl uses
+// this separate observer to avoid observing duplicate tree change
+// notifications.
+class WindowPropertyObserver : public mus::WindowObserver {
public:
- explicit WindowTitleObserver(UserWindowControllerImpl* controller)
+ explicit WindowPropertyObserver(UserWindowControllerImpl* controller)
: controller_(controller) {}
- ~WindowTitleObserver() override {}
+ ~WindowPropertyObserver() override {}
private:
// mus::WindowObserver:
@@ -61,15 +75,20 @@ class WindowTitleObserver : public mus::WindowObserver {
const std::string& name,
const std::vector<uint8_t>* old_data,
const std::vector<uint8_t>* new_data) override {
- if (controller_->user_window_observer() &&
- name == mus::mojom::WindowManager::kWindowTitle_Property) {
+ if (!controller_->user_window_observer())
+ return;
+ if (name == mus::mojom::WindowManager::kWindowTitle_Property) {
controller_->user_window_observer()->OnUserWindowTitleChanged(
window->id(), GetWindowTitle(window));
+ } else if (name == mus::mojom::WindowManager::kWindowAppIcon_Property) {
+ controller_->user_window_observer()->OnUserWindowAppIconChanged(
+ window->id(), new_data ? mojo::Array<uint8_t>::From(*new_data)
msw 2016/03/24 17:40:54 Too bad we need to do another copy here...
James Cook 2016/03/25 15:39:28 Acknowledged.
+ : mojo::Array<uint8_t>());
}
}
UserWindowControllerImpl* controller_;
- DISALLOW_COPY_AND_ASSIGN(WindowTitleObserver);
+ DISALLOW_COPY_AND_ASSIGN(WindowPropertyObserver);
};
UserWindowControllerImpl::UserWindowControllerImpl()
@@ -87,7 +106,7 @@ UserWindowControllerImpl::~UserWindowControllerImpl() {
user_container->RemoveObserver(this);
for (auto iter : user_container->children())
- iter->RemoveObserver(window_title_observer_.get());
+ iter->RemoveObserver(window_property_observer_.get());
}
void UserWindowControllerImpl::Initialize(
@@ -97,9 +116,9 @@ void UserWindowControllerImpl::Initialize(
root_controller_ = root_controller;
GetUserWindowContainer()->AddObserver(this);
GetUserWindowContainer()->connection()->AddObserver(this);
- window_title_observer_.reset(new WindowTitleObserver(this));
+ window_property_observer_.reset(new WindowPropertyObserver(this));
for (auto iter : GetUserWindowContainer()->children())
- iter->AddObserver(window_title_observer_.get());
+ iter->AddObserver(window_property_observer_.get());
}
mus::Window* UserWindowControllerImpl::GetUserWindowContainer() const {
@@ -110,11 +129,11 @@ mus::Window* UserWindowControllerImpl::GetUserWindowContainer() const {
void UserWindowControllerImpl::OnTreeChanging(const TreeChangeParams& params) {
DCHECK(root_controller_);
if (params.new_parent == GetUserWindowContainer()) {
- params.target->AddObserver(window_title_observer_.get());
+ params.target->AddObserver(window_property_observer_.get());
if (user_window_observer_)
user_window_observer_->OnUserWindowAdded(GetUserWindow(params.target));
} else if (params.old_parent == GetUserWindowContainer()) {
- params.target->RemoveObserver(window_title_observer_.get());
+ params.target->RemoveObserver(window_property_observer_.get());
if (user_window_observer_)
user_window_observer_->OnUserWindowRemoved(params.target->id());
}

Powered by Google App Engine
This is Rietveld 408576698