| Index: ui/base/gtk/g_object_destructor_filo.h
|
| diff --git a/ui/base/gtk/g_object_destructor_filo.h b/ui/base/gtk/g_object_destructor_filo.h
|
| deleted file mode 100644
|
| index 14c9e5ff3fd8a08e17a36378691903d0d04769ce..0000000000000000000000000000000000000000
|
| --- a/ui/base/gtk/g_object_destructor_filo.h
|
| +++ /dev/null
|
| @@ -1,91 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_
|
| -#define UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_
|
| -
|
| -#include <glib.h>
|
| -#include <list>
|
| -#include <map>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "ui/base/ui_base_export.h"
|
| -
|
| -template <typename T> struct DefaultSingletonTraits;
|
| -
|
| -typedef struct _GObject GObject;
|
| -
|
| -namespace ui {
|
| -
|
| -// This class hooks calls to g_object_weak_ref()/unref() and executes them in
|
| -// FILO order. This is important if there are several hooks to the single object
|
| -// (set up at different levels of class hierarchy) and the lowest hook (set up
|
| -// first) is deleting self - it must be called last (among hooks for the given
|
| -// object). Unfortunately Glib does not provide this guarantee.
|
| -//
|
| -// Use it as follows:
|
| -//
|
| -// static void OnDestroyedThunk(gpointer data, GObject *where_the_object_was) {
|
| -// reinterpret_cast<MyClass*>(data)->OnDestroyed(where_the_object_was);
|
| -// }
|
| -// void MyClass::OnDestroyed(GObject *where_the_object_was) {
|
| -// destroyed_ = true;
|
| -// delete this;
|
| -// }
|
| -// MyClass::Init() {
|
| -// ...
|
| -// ui::GObjectDestructorFILO::GetInstance()->Connect(
|
| -// G_OBJECT(my_widget), &OnDestroyedThunk, this);
|
| -// }
|
| -// MyClass::~MyClass() {
|
| -// if (!destroyed_) {
|
| -// ui::GObjectDestructorFILO::GetInstance()->Disconnect(
|
| -// G_OBJECT(my_widget), &OnDestroyedThunk, this);
|
| -// }
|
| -// }
|
| -//
|
| -// TODO(glotov): Probably worth adding ScopedGObjectDtor<T>.
|
| -//
|
| -// This class is a singleton. Not thread safe. Must be called within UI thread.
|
| -class UI_BASE_EXPORT GObjectDestructorFILO {
|
| - public:
|
| - typedef void (*DestructorHook)(void* context, GObject* where_the_object_was);
|
| -
|
| - static GObjectDestructorFILO* GetInstance();
|
| - void Connect(GObject* object, DestructorHook callback, void* context);
|
| - void Disconnect(GObject* object, DestructorHook callback, void* context);
|
| -
|
| - private:
|
| - struct Hook {
|
| - Hook(GObject* o, DestructorHook cb, void* ctx)
|
| - : object(o), callback(cb), context(ctx) {
|
| - }
|
| - bool equal(GObject* o, DestructorHook cb, void* ctx) const {
|
| - return object == o && callback == cb && context == ctx;
|
| - }
|
| - GObject* object;
|
| - DestructorHook callback;
|
| - void* context;
|
| - };
|
| - typedef std::list<Hook> HandlerList;
|
| - typedef std::map<GObject*, HandlerList> HandlerMap;
|
| -
|
| - GObjectDestructorFILO();
|
| - ~GObjectDestructorFILO();
|
| - friend struct DefaultSingletonTraits<GObjectDestructorFILO>;
|
| -
|
| - void WeakNotify(GObject* where_the_object_was);
|
| - static void WeakNotifyThunk(gpointer data, GObject* where_the_object_was) {
|
| - reinterpret_cast<GObjectDestructorFILO*>(data)->WeakNotify(
|
| - where_the_object_was);
|
| - }
|
| -
|
| - HandlerMap handler_map_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GObjectDestructorFILO);
|
| -};
|
| -
|
| -} // namespace ui
|
| -
|
| -#endif // UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_
|
|
|