0

Remove MahiWidgetDelegate and use factory method for custom

NonClientFrameView

Bug: b:40128321
Change-Id: I65067f539d0e893039a0a66c7fe0267d2f84c064
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6126614
Commit-Queue: Zoraiz Naeem <zoraiznaeem@chromium.org>
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1401641}
This commit is contained in:
Zoraiz Naeem
2025-01-02 16:15:35 -08:00
committed by Chromium LUCI CQ
parent 6de1e093b5
commit 29fcd0feb3
4 changed files with 36 additions and 91 deletions

@ -2050,8 +2050,6 @@ component("ash") {
"system/mahi/mahi_ui_update.h",
"system/mahi/mahi_utils.cc",
"system/mahi/mahi_utils.h",
"system/mahi/mahi_widget_delegate.cc",
"system/mahi/mahi_widget_delegate.h",
"system/mahi/refresh_banner_view.cc",
"system/mahi/refresh_banner_view.h",
"system/mahi/summary_outlines_elucidation_section.cc",

@ -6,14 +6,15 @@
#include <cstdint>
#include <memory>
#include <utility>
#include "ash/frame/non_client_frame_view_ash.h"
#include "ash/public/cpp/shell_window_ids.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/mahi/mahi_constants.h"
#include "ash/system/mahi/mahi_panel_view.h"
#include "ash/system/mahi/mahi_ui_controller.h"
#include "ash/system/mahi/mahi_widget_delegate.h"
#include "ash/system/mahi/refresh_banner_view.h"
#include "ash/wm/window_properties.h"
#include "ash/wm/work_area_insets.h"
@ -34,6 +35,8 @@
#include "ui/views/view_utils.h"
#include "ui/views/widget/unique_widget_ptr.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
#include "ui/views/window/non_client_view.h"
namespace ash {
@ -107,6 +110,30 @@ std::unique_ptr<views::BoxLayoutView> CreateMahiPanelContentsView() {
.Build();
}
// TODO(zoraiznaem): Investigate if MahiFrameView needs NonClientFrameViewAsh.
class MahiFrameView : public NonClientFrameViewAsh {
public:
explicit MahiFrameView(views::Widget* frame) : NonClientFrameViewAsh(frame) {
SetFrameEnabled(false);
SetShouldPaintHeader(false);
}
MahiFrameView(const MahiFrameView&) = delete;
MahiFrameView& operator=(const MahiFrameView&) = delete;
~MahiFrameView() override = default;
// views::NonClientFrameView:
gfx::Size GetMinimumSize() const override {
return gfx::Size(mahi_constants::kPanelDefaultWidth,
mahi_constants::kPanelDefaultHeight);
}
gfx::Size GetMaximumSize() const override {
return gfx::Size(mahi_constants::kPanelMaximumWidth,
mahi_constants::kPanelMaximumHeight);
}
};
} // namespace
MahiPanelWidget::MahiPanelWidget(InitParams params,
@ -149,11 +176,18 @@ views::UniqueWidgetPtr MahiPanelWidget::CreateAndShowPanelWidget(
// so that it can be set on the client view. Else the contents view will be
// set on the widget directly as there will be no client view.
if (base::FeatureList::IsEnabled(chromeos::features::kMahiPanelResizable)) {
auto delegate = std::make_unique<MahiWidgetDelegate>();
auto delegate = std::make_unique<views::WidgetDelegate>();
// Set to true so that the delegate deletes itself.
delegate->SetOwnedByWidget(true);
delegate->SetCanResize(true);
delegate->SetContentsView(std::move(contents_view));
delegate->SetNonClientFrameViewFactory(
base::BindRepeating([](views::Widget* widget)
-> std::unique_ptr<views::NonClientFrameView> {
return std::make_unique<MahiFrameView>(widget);
}));
params.delegate = delegate.release();
// If resizable, disable the resize shadow on the window border.

@ -1,54 +0,0 @@
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/system/mahi/mahi_widget_delegate.h"
#include <memory>
#include "ash/frame/non_client_frame_view_ash.h"
#include "ash/system/mahi/mahi_constants.h"
#include "ui/chromeos/styles/cros_tokens_color_mappings.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/background.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/non_client_view.h"
namespace ash {
namespace {
class MahiFrameView : public NonClientFrameViewAsh {
public:
explicit MahiFrameView(views::Widget* frame) : NonClientFrameViewAsh(frame) {}
~MahiFrameView() override = default;
MahiFrameView(const MahiFrameView&) = delete;
MahiFrameView& operator=(const MahiFrameView&) = delete;
// views::NonClientFrameView:
gfx::Size GetMinimumSize() const override {
return gfx::Size(mahi_constants::kPanelDefaultWidth,
mahi_constants::kPanelDefaultHeight);
}
// views::NonClientFrameView:
gfx::Size GetMaximumSize() const override {
return gfx::Size(mahi_constants::kPanelMaximumWidth,
mahi_constants::kPanelMaximumHeight);
}
};
} // namespace
MahiWidgetDelegate::MahiWidgetDelegate() = default;
MahiWidgetDelegate::~MahiWidgetDelegate() = default;
std::unique_ptr<views::NonClientFrameView>
MahiWidgetDelegate::CreateNonClientFrameView(views::Widget* widget) {
auto frame = std::make_unique<MahiFrameView>(widget);
frame->SetFrameEnabled(false);
frame->SetShouldPaintHeader(false);
return frame;
}
} // namespace ash

@ -1,33 +0,0 @@
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_MAHI_MAHI_WIDGET_DELEGATE_H_
#define ASH_SYSTEM_MAHI_MAHI_WIDGET_DELEGATE_H_
#include <memory>
#include "ash/ash_export.h"
#include "ash/frame/non_client_frame_view_ash.h"
#include "ui/views/widget/widget_delegate.h"
namespace ash {
// A custom widget delegate for the Mahi window. Used to inject custom
// dependencies that are instantiated in the base widget class (like the custom
// Mahi frame view).
class ASH_EXPORT MahiWidgetDelegate : public views::WidgetDelegate {
public:
MahiWidgetDelegate();
MahiWidgetDelegate(const MahiWidgetDelegate&) = delete;
MahiWidgetDelegate& operator=(const MahiWidgetDelegate&) = delete;
~MahiWidgetDelegate() override;
// views::WidgetDelegate:
std::unique_ptr<views::NonClientFrameView> CreateNonClientFrameView(
views::Widget* widget) override;
};
} // namespace ash
#endif // ASH_SYSTEM_MAHI_MAHI_WIDGET_DELEGATE_H_