// 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.
#ifndef COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_
#define COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_
#include <cstdint>
#include "base/memory/raw_ptr.h"
#include "components/exo/data_offer_observer.h"
namespace exo {
class DataOffer;
class ExtendedDragOffer : public DataOfferObserver {
public:
class Delegate {
public:
virtual void OnDataOfferDestroying() = 0;
protected:
virtual ~Delegate() = default;
};
ExtendedDragOffer(DataOffer* offer, Delegate* delegate);
ExtendedDragOffer(const ExtendedDragOffer&) = delete;
ExtendedDragOffer& operator=(const ExtendedDragOffer&) = delete;
~ExtendedDragOffer() override;
private:
// DataOfferObserver:
void OnDataOfferDestroying(DataOffer* offer) override;
raw_ptr<DataOffer> offer_ = nullptr;
// Created and destroyed at wayland/zcr_extended_drag.cc and its lifetime is
// tied to the zcr_extended_drag_source_v1 object it's attached to.
const raw_ptr<Delegate> delegate_;
};
} // namespace exo
#endif // COMPONENTS_EXO_EXTENDED_DRAG_OFFER_H_