/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Pix
*
* Copyright (C) 2009 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a reorder of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include "gth-reorder-task.h"
struct _GthReorderTaskPrivate {
GthFileSource *file_source;
GthFileData *destination;
GList *visible_files;
GList *files_to_move;
int new_pos;
};
G_DEFINE_TYPE_WITH_CODE (GthReorderTask,
gth_reorder_task,
GTH_TYPE_TASK,
G_ADD_PRIVATE (GthReorderTask))
static void
gth_reorder_task_finalize (GObject *object)
{
GthReorderTask *self;
self = GTH_REORDER_TASK (object);
_g_object_list_unref (self->priv->visible_files);
_g_object_list_unref (self->priv->files_to_move);
_g_object_unref (self->priv->destination);
_g_object_unref (self->priv->file_source);
G_OBJECT_CLASS (gth_reorder_task_parent_class)->finalize (object);
}
static void
reorder_done_cb (GObject *object,
GError *error,
gpointer user_data)
{
gth_task_completed (GTH_TASK (user_data), error);
}
static void
gth_reorder_task_exec (GthTask *task)
{
GthReorderTask *self;
g_return_if_fail (GTH_IS_REORDER_TASK (task));
self = GTH_REORDER_TASK (task);
gth_file_source_reorder (self->priv->file_source,
self->priv->destination,
self->priv->visible_files,
self->priv->files_to_move,
self->priv->new_pos,
reorder_done_cb,
self);
}
static void
gth_reorder_task_cancelled (GthTask *task)
{
gth_file_source_cancel (GTH_REORDER_TASK (task)->priv->file_source);
}
static void
gth_reorder_task_class_init (GthReorderTaskClass *klass)
{
GObjectClass *object_class;
GthTaskClass *task_class;
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gth_reorder_task_finalize;
task_class = GTH_TASK_CLASS (klass);
task_class->exec = gth_reorder_task_exec;
task_class->cancelled = gth_reorder_task_cancelled;
}
static void
gth_reorder_task_init (GthReorderTask *self)
{
self->priv = gth_reorder_task_get_instance_private (self);
}
GthTask *
gth_reorder_task_new (GthFileSource *file_source,
GthFileData *destination,
GList *visible_files, /* GFile list */
GList *files_to_move, /* GFile list */
int new_pos)
{
GthReorderTask *self;
self = GTH_REORDER_TASK (g_object_new (GTH_TYPE_REORDER_TASK, NULL));
self->priv->file_source = g_object_ref (file_source);
self->priv->destination = g_object_ref (destination);
self->priv->new_pos = new_pos;
self->priv->visible_files = _g_object_list_ref (visible_files);
self->priv->files_to_move = _g_object_list_ref (files_to_move);
return (GthTask *) self;
}