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

Unified Diff: ash/sticky_keys/sticky_keys_overlay.cc

Issue 754763005: Speculative fix for sticky keys overlay crash. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove WidgetDelegateView inheritance Created 6 years 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: ash/sticky_keys/sticky_keys_overlay.cc
diff --git a/ash/sticky_keys/sticky_keys_overlay.cc b/ash/sticky_keys/sticky_keys_overlay.cc
index 0766ba25ad2e7cdda2ac5ed875254de6622073e0..3826f7350027df4c23f7a5e510c500a2cd9663b7 100644
--- a/ash/sticky_keys/sticky_keys_overlay.cc
+++ b/ash/sticky_keys/sticky_keys_overlay.cc
@@ -101,13 +101,16 @@ void StickyKeyOverlayLabel::SetKeyState(StickyKeyState state) {
///////////////////////////////////////////////////////////////////////////////
// StickyKeysOverlayView
-class StickyKeysOverlayView : public views::WidgetDelegateView {
+class StickyKeysOverlayView : public views::View {
public:
+ // This object is not owned by the views hiearchy or by the widget. The
+ // StickyKeysOverlay is the only class that should create and destroy this
+ // view.
StickyKeysOverlayView();
~StickyKeysOverlayView() override;
- // views::WidgetDelegateView overrides:
+ // views::View overrides:
void OnPaint(gfx::Canvas* canvas) override;
void SetKeyState(ui::EventFlags modifier, StickyKeyState state);
@@ -127,6 +130,9 @@ class StickyKeysOverlayView : public views::WidgetDelegateView {
};
StickyKeysOverlayView::StickyKeysOverlayView() {
+ // The parent StickyKeysOverlay object owns this view.
+ set_owned_by_client();
+
const gfx::Font& font =
ui::ResourceBundle::GetSharedInstance().GetFont(kKeyLabelFontStyle);
int font_size = font.GetFontSize();
@@ -163,7 +169,7 @@ void StickyKeysOverlayView::OnPaint(gfx::Canvas* canvas) {
paint.setStyle(SkPaint::kFill_Style);
paint.setColor(SkColorSetARGB(0xB3, 0x55, 0x55, 0x55));
canvas->DrawRoundRect(GetLocalBounds(), 2, paint);
- views::WidgetDelegateView::OnPaint(canvas);
+ views::View::OnPaint(canvas);
}
void StickyKeysOverlayView::SetKeyState(ui::EventFlags modifier,
@@ -215,14 +221,13 @@ StickyKeysOverlay::StickyKeysOverlay()
params.accept_events = false;
params.keep_on_top = true;
params.remove_standard_frame = true;
- params.delegate = overlay_view_;
params.bounds = CalculateOverlayBounds();
params.parent = Shell::GetContainer(Shell::GetTargetRootWindow(),
kShellWindowId_OverlayContainer);
overlay_widget_.reset(new views::Widget);
overlay_widget_->Init(params);
overlay_widget_->SetVisibilityChangedAnimationsEnabled(false);
- overlay_widget_->SetContentsView(overlay_view_);
+ overlay_widget_->SetContentsView(overlay_view_.get());
overlay_widget_->GetNativeView()->SetName("StickyKeysOverlay");
}
@@ -279,6 +284,10 @@ StickyKeyState StickyKeysOverlay::GetModifierKeyState(
return overlay_view_->GetKeyState(modifier);
}
+views::Widget* StickyKeysOverlay::GetWidgetForTesting() {
+ return overlay_widget_.get();
+}
+
gfx::Rect StickyKeysOverlay::CalculateOverlayBounds() {
int x = is_visible_ ? kHorizontalOverlayOffset : -widget_size_.width();
return gfx::Rect(gfx::Point(x, kVerticalOverlayOffset), widget_size_);

Powered by Google App Engine
This is Rietveld 408576698