|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* gnome-keyring
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Copyright (C) 2010 Stefan Walter
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
b00eeb |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
b00eeb |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
b00eeb |
* the License, or (at your option) any later version.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
b00eeb |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b00eeb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
b00eeb |
* Lesser General Public License for more details.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b00eeb |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "config.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "gcr-collection.h"
|
|
Packit |
b00eeb |
#include "gcr-single-collection.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include <string.h>
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrSingleCollection:
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* A single implementation of #GcrCollection.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
struct _GcrSingleCollection {
|
|
Packit |
b00eeb |
GObject parent;
|
|
Packit |
b00eeb |
GObject *object;
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/**
|
|
Packit |
b00eeb |
* GcrSingleCollectionClass:
|
|
Packit |
b00eeb |
* @parent_class: The parent class
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* The class for #GcrSingleCollection.
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
struct _GcrSingleCollectionClass {
|
|
Packit |
b00eeb |
GObjectClass parent_class;
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void _gcr_single_collection_iface (GcrCollectionIface *iface);
|
|
Packit |
b00eeb |
G_DEFINE_TYPE_WITH_CODE (GcrSingleCollection, _gcr_single_collection, G_TYPE_OBJECT,
|
|
Packit |
b00eeb |
G_IMPLEMENT_INTERFACE (GCR_TYPE_COLLECTION, _gcr_single_collection_iface));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* -----------------------------------------------------------------------------
|
|
Packit |
b00eeb |
* OBJECT
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_single_collection_init (GcrSingleCollection *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_single_collection_dispose (GObject *obj)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrSingleCollection *self = GCR_SINGLE_COLLECTION (obj);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
_gcr_single_collection_set_object (self, NULL);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_OBJECT_CLASS (_gcr_single_collection_parent_class)->dispose (obj);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_single_collection_class_init (GcrSingleCollectionClass *klass)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit |
b00eeb |
gobject_class->dispose = _gcr_single_collection_dispose;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static guint
|
|
Packit |
b00eeb |
_gcr_single_collection_real_get_length (GcrCollection *coll)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrSingleCollection *self = GCR_SINGLE_COLLECTION (coll);
|
|
Packit |
b00eeb |
return self->object == NULL ? 0 : 1;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static GList*
|
|
Packit |
b00eeb |
_gcr_single_collection_real_get_objects (GcrCollection *coll)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrSingleCollection *self = GCR_SINGLE_COLLECTION (coll);
|
|
Packit |
b00eeb |
return self->object == NULL ? NULL : g_list_append (NULL, self->object);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static gboolean
|
|
Packit |
b00eeb |
_gcr_single_collection_real_contains (GcrCollection *collection,
|
|
Packit |
b00eeb |
GObject *object)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrSingleCollection *self = GCR_SINGLE_COLLECTION (collection);
|
|
Packit |
b00eeb |
return self->object == object;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_single_collection_iface (GcrCollectionIface *iface)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
iface->get_length = _gcr_single_collection_real_get_length;
|
|
Packit |
b00eeb |
iface->get_objects = _gcr_single_collection_real_get_objects;
|
|
Packit |
b00eeb |
iface->contains = _gcr_single_collection_real_contains;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* -----------------------------------------------------------------------------
|
|
Packit |
b00eeb |
* PUBLIC
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrCollection *
|
|
Packit |
b00eeb |
_gcr_single_collection_new (GObject *object)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrSingleCollection *self;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
self = g_object_new (GCR_TYPE_SINGLE_COLLECTION, NULL);
|
|
Packit |
b00eeb |
_gcr_single_collection_set_object (self, object);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
return GCR_COLLECTION (self);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GObject *
|
|
Packit |
b00eeb |
_gcr_single_collection_get_object (GcrSingleCollection *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
g_return_val_if_fail (GCR_IS_SINGLE_COLLECTION (self), NULL);
|
|
Packit |
b00eeb |
return self->object;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
void
|
|
Packit |
b00eeb |
_gcr_single_collection_set_object (GcrSingleCollection *self,
|
|
Packit |
b00eeb |
GObject *object)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObject *obj;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_return_if_fail (GCR_IS_SINGLE_COLLECTION (self));
|
|
Packit |
b00eeb |
g_return_if_fail (object == NULL || G_IS_OBJECT (object));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (object == self->object)
|
|
Packit |
b00eeb |
return;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (self->object) {
|
|
Packit |
b00eeb |
obj = self->object;
|
|
Packit |
b00eeb |
self->object = NULL;
|
|
Packit |
b00eeb |
gcr_collection_emit_removed (GCR_COLLECTION (self), obj);
|
|
Packit |
b00eeb |
g_object_unref (obj);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
if (object) {
|
|
Packit |
b00eeb |
self->object = g_object_ref (object);
|
|
Packit |
b00eeb |
gcr_collection_emit_added (GCR_COLLECTION (self), self->object);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
}
|