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

Unified Diff: mash/wm/frame/non_client_frame_view_mash.cc

Issue 1848653006: Random wm frame painting fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: override 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
« no previous file with comments | « mash/wm/frame/non_client_frame_view_mash.h ('k') | mash/wm/non_client_frame_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mash/wm/frame/non_client_frame_view_mash.cc
diff --git a/mash/wm/frame/non_client_frame_view_mash.cc b/mash/wm/frame/non_client_frame_view_mash.cc
index 68cff5ecef378ed95091e8d1780106ba0fbc8147..a3ebeb1313a937f2ee383cc8392340daf807f775 100644
--- a/mash/wm/frame/non_client_frame_view_mash.cc
+++ b/mash/wm/frame/non_client_frame_view_mash.cc
@@ -9,6 +9,7 @@
#include "base/macros.h"
#include "components/mus/public/cpp/window.h"
+#include "components/mus/public/cpp/window_tree_connection.h"
#include "grit/mash_wm_resources.h"
#include "mash/wm/frame/caption_buttons/frame_caption_button_container_view.h"
#include "mash/wm/frame/default_header_painter.h"
@@ -36,7 +37,7 @@ namespace wm {
class NonClientFrameViewMash::HeaderView : public views::View {
public:
// |frame| is the widget that the caption buttons act on.
- explicit HeaderView(views::Widget* frame);
+ HeaderView(views::Widget* frame, mus::Window* window);
~HeaderView() override;
// Schedules a repaint for the entire title.
@@ -74,13 +75,17 @@ class NonClientFrameViewMash::HeaderView : public views::View {
// View which contains the window caption buttons.
FrameCaptionButtonContainerView* caption_button_container_;
+ mus::Window* window_;
+
DISALLOW_COPY_AND_ASSIGN(HeaderView);
};
-NonClientFrameViewMash::HeaderView::HeaderView(views::Widget* frame)
+NonClientFrameViewMash::HeaderView::HeaderView(views::Widget* frame,
+ mus::Window* window)
: frame_(frame),
header_painter_(new DefaultHeaderPainter),
- caption_button_container_(nullptr) {
+ caption_button_container_(nullptr),
+ window_(window) {
caption_button_container_ = new FrameCaptionButtonContainerView(frame_);
caption_button_container_->UpdateSizeButtonVisibility();
AddChildView(caption_button_container_);
@@ -126,8 +131,9 @@ void NonClientFrameViewMash::HeaderView::Layout() {
}
void NonClientFrameViewMash::HeaderView::OnPaint(gfx::Canvas* canvas) {
- bool paint_as_active =
- frame_->non_client_view()->frame_view()->ShouldPaintAsActive();
+ const mus::Window* focused_window = window_->connection()->GetFocusedWindow();
+ const bool paint_as_active =
+ focused_window && window_->Contains(focused_window);
caption_button_container_->SetPaintAsActive(paint_as_active);
HeaderPainter::Mode header_mode = paint_as_active
@@ -155,16 +161,18 @@ const char NonClientFrameViewMash::kViewClassName[] = "NonClientFrameViewMash";
NonClientFrameViewMash::NonClientFrameViewMash(views::Widget* frame,
mus::Window* window)
- : frame_(frame), window_(window), header_view_(new HeaderView(frame)) {
+ : frame_(frame),
+ window_(window),
+ header_view_(new HeaderView(frame, window)) {
// |header_view_| is set as the non client view's overlay view so that it can
// overlay the web contents in immersive fullscreen.
AddChildView(header_view_);
window_->AddObserver(this);
+ window_->connection()->AddObserver(this);
}
NonClientFrameViewMash::~NonClientFrameViewMash() {
- if (window_)
- window_->RemoveObserver(this);
+ RemoveObservers();
}
// static
@@ -308,8 +316,18 @@ void NonClientFrameViewMash::OnWindowClientAreaChanged(
}
void NonClientFrameViewMash::OnWindowDestroyed(mus::Window* window) {
- window_->RemoveObserver(this);
- window_ = nullptr;
+ RemoveObservers();
+}
+
+void NonClientFrameViewMash::OnWindowSharedPropertyChanged(
+ mus::Window* window,
+ const std::string& name,
+ const std::vector<uint8_t>* old_data,
+ const std::vector<uint8_t>* new_data) {
+ if (name == mus::mojom::WindowManager::kResizeBehavior_Property)
+ header_view_->SizeConstraintsChanged();
+ else if (name == mus::mojom::WindowManager::kWindowTitle_Property)
+ header_view_->SchedulePaintForTitle();
}
views::View* NonClientFrameViewMash::GetHeaderView() {
@@ -323,5 +341,22 @@ int NonClientFrameViewMash::NonClientTopBorderHeight() const {
return header_view_->GetPreferredHeight();
}
+void NonClientFrameViewMash::RemoveObservers() {
+ if (!window_)
+ return;
+
+ window_->RemoveObserver(this);
+ window_->connection()->RemoveObserver(this);
+ window_ = nullptr;
+}
+
+void NonClientFrameViewMash::OnWindowTreeFocusChanged(mus::Window* gained_focus,
+ mus::Window* lost_focus) {
+ const bool had_focus = lost_focus && window_->Contains(lost_focus);
+ const bool has_focus = gained_focus && window_->Contains(gained_focus);
+ if (had_focus != has_focus)
+ SchedulePaint();
+}
+
} // namespace wm
} // namespace mash
« no previous file with comments | « mash/wm/frame/non_client_frame_view_mash.h ('k') | mash/wm/non_client_frame_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698