1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/widget/any_widget_observer.h"
#include <utility>
#include "base/functional/bind.h"
#include "ui/views/widget/any_widget_observer_singleton.h"
#include "ui/views/widget/widget.h"
namespace views {
AnyWidgetObserver::AnyWidgetObserver(AnyWidgetPasskey passkey)
: AnyWidgetObserver() {}
AnyWidgetObserver::AnyWidgetObserver(test::AnyWidgetTestPasskey passkey)
: AnyWidgetObserver() {}
AnyWidgetObserver::AnyWidgetObserver() {
internal::AnyWidgetObserverSingleton::GetInstance()->AddObserver(this);
}
AnyWidgetObserver::~AnyWidgetObserver() {
internal::AnyWidgetObserverSingleton::GetInstance()->RemoveObserver(this);
}
#define PROPAGATE_NOTIFICATION(method, callback) \
void AnyWidgetObserver::method(Widget* widget) { \
if (callback) \
(callback).Run(widget); \
}
PROPAGATE_NOTIFICATION(OnAnyWidgetInitialized, initialized_callback_)
PROPAGATE_NOTIFICATION(OnAnyWidgetShown, shown_callback_)
PROPAGATE_NOTIFICATION(OnAnyWidgetHidden, hidden_callback_)
PROPAGATE_NOTIFICATION(OnAnyWidgetClosing, closing_callback_)
#undef PROPAGATE_NOTIFICATION
NamedWidgetShownWaiter::NamedWidgetShownWaiter(AnyWidgetPasskey passkey,
const std::string& name)
: NamedWidgetShownWaiter(name) {}
NamedWidgetShownWaiter::NamedWidgetShownWaiter(
test::AnyWidgetTestPasskey passkey,
const std::string& name)
: NamedWidgetShownWaiter(name) {}
NamedWidgetShownWaiter::~NamedWidgetShownWaiter() = default;
Widget* NamedWidgetShownWaiter::WaitIfNeededAndGet() {
run_loop_.Run();
return widget_.get();
}
NamedWidgetShownWaiter::NamedWidgetShownWaiter(const std::string& name)
: observer_(views::AnyWidgetPasskey{}), name_(name) {
observer_.set_shown_callback(base::BindRepeating(
&NamedWidgetShownWaiter::OnAnyWidgetShown, base::Unretained(this)));
}
void NamedWidgetShownWaiter::OnAnyWidgetShown(Widget* widget) {
if (widget->GetName() == name_) {
widget_ = widget->GetWeakPtr();
run_loop_.Quit();
}
}
} // namespace views
|