Ejemplo n.º 1
0
static void fm_file_info_job_class_init(FmFileInfoJobClass *klass)
{
    GObjectClass *g_object_class;
    FmJobClass* job_class;

    g_object_class = G_OBJECT_CLASS(klass);
    g_object_class->dispose = fm_file_info_job_dispose;
    /* use finalize from parent class */

    job_class = FM_JOB_CLASS(klass);
    job_class->run = fm_file_info_job_run;

    /**
     * FmDirInfoJob::got-info
     * @job: a job that emitted the signal
     * @info: #FmFileInfo of file which info is completed
     *
     * The #FmDirInfoJob::got-info signal is emitted for every file info
     * during a job with FM_FILE_INFO_JOB_EMIT_FOR_EACH_FILE flag set.
     * This signal may be emitted only if info retrieving was successful.
     *
     * Since: 1.2.0
     */
    signals[GOT_INFO] =
        g_signal_new("got-info",
                     G_TYPE_FROM_CLASS(klass),
                     G_SIGNAL_RUN_LAST,
                     G_STRUCT_OFFSET(FmFileInfoJobClass, got_info),
                     NULL, NULL,
                     g_cclosure_marshal_VOID__POINTER,
                     G_TYPE_NONE, 1, G_TYPE_POINTER);
}
Ejemplo n.º 2
0
static void fm_dir_list_job_class_init(FmDirListJobClass *klass)
{
    GObjectClass *g_object_class;
    FmJobClass* job_class = FM_JOB_CLASS(klass);
    g_object_class = G_OBJECT_CLASS(klass);
    g_object_class->dispose = fm_dir_list_job_dispose;
    /* use finalize from parent class */

    job_class->run = fm_dir_list_job_run;
    job_class->finished = fm_dir_list_job_finished;

    /**
     * FmDirListJob::files-found
     * @job: a job that emitted the signal
     * @files: (element-type FmFileInfo): #GSList of found files
     *
     * The #FmDirListJob::files-found signal is emitted for every file
     * found during directory listing. By default the signal is not
     * emitted for performance reason. This can be turned on by calling
     * fm_dir_list_job_set_incremental().
     *
     * Since: 1.0.2
     */
    signals[FILES_FOUND] =
        g_signal_new("files-found",
                     G_TYPE_FROM_CLASS(klass),
                     G_SIGNAL_RUN_LAST,
                     G_STRUCT_OFFSET(FmDirListJobClass, files_found),
                     NULL, NULL,
                     g_cclosure_marshal_VOID__POINTER,
                     G_TYPE_NONE, 1, G_TYPE_POINTER);

}
Ejemplo n.º 3
0
/* this is called from working thread */
static void job_thread(FmJob* job, gpointer unused)
{
    FmJobClass* klass = FM_JOB_CLASS(G_OBJECT_GET_CLASS(job));
    klass->run(job);

    /* let the main thread know that we're done, and free the job
     * in idle handler if neede. */
    fm_job_finish(job);
}
Ejemplo n.º 4
0
/* cancel the job */
void fm_job_cancel(FmJob* job)
{
    FmJobClass* klass = FM_JOB_CLASS(G_OBJECT_GET_CLASS(job));
    job->cancel = TRUE;
    if(job->cancellable)
        g_cancellable_cancel(job->cancellable);
    if(klass->cancel)
        klass->cancel(job);
}
Ejemplo n.º 5
0
static void fm_deep_count_job_class_init(FmDeepCountJobClass *klass)
{
    GObjectClass *g_object_class;
    FmJobClass* job_class;
    g_object_class = G_OBJECT_CLASS(klass);
    g_object_class->dispose = fm_deep_count_job_dispose;
    /* use finalize from parent class */

    job_class = FM_JOB_CLASS(klass);
    job_class->run = fm_deep_count_job_run;
}
Ejemplo n.º 6
0
static void fm_file_info_job_class_init (FmFileInfoJobClass *klass)
{
	GObjectClass *g_object_class;
	FmJobClass *job_class;

	g_object_class = G_OBJECT_CLASS (klass);
	g_object_class->finalize = fm_file_info_job_finalize;

	job_class = FM_JOB_CLASS (klass);
	job_class->run = fm_file_info_job_run;
}
Ejemplo n.º 7
0
static void fm_deep_count_job_class_init(FmDeepCountJobClass *klass)
{
    GObjectClass *g_object_class;
    FmJobClass* job_class;
    g_object_class = G_OBJECT_CLASS(klass);
    g_object_class->finalize = fm_deep_count_job_finalize;

    job_class = FM_JOB_CLASS(klass);
    job_class->run = fm_deep_count_job_run;
    job_class->finished = NULL;
}
Ejemplo n.º 8
0
/* run a job in current thread in a blocking fashion.  */
gboolean fm_job_run_sync(FmJob* job)
{
    FmJobClass* klass = FM_JOB_CLASS(G_OBJECT_GET_CLASS(job));
    gboolean ret;
    job->running = TRUE;
    ret = klass->run(job);
    job->running = FALSE;
    if(job->cancel)
        fm_job_emit_cancelled(job);
    else
        fm_job_emit_finished(job);
    return ret;
}
Ejemplo n.º 9
0
/**
 * fm_job_run_async
 * @job: a job to run
 *
 * Starts the @job asyncronously creating new thread. If job starts
 * successfully then the #FmJob::finished signal will be emitted when
 * @job is either succeeded or was cancelled. If @job could not be
 * started then #FmJob::cancelled signal is emitted before return from
 * this function.
 *
 * Returns: %TRUE if job started successfully.
 *
 * Since: 0.1.0
 */
gboolean fm_job_run_async(FmJob* job)
{
    FmJobClass* klass = FM_JOB_CLASS(G_OBJECT_GET_CLASS(job));
    gboolean ret;
    job->running = TRUE;
    g_object_ref(job); /* acquire a ref, it will be unrefed by on_idle_cleanup() */
    ret = klass->run_async(job);
    if(G_UNLIKELY(!ret)) /* failed? */
    {
        fm_job_emit_cancelled(job);
        g_object_unref(job);
    }
    return ret;
}
Ejemplo n.º 10
0
static void fm_dir_list_job_finished(FmJob* job)
{
    FmDirListJob* dirlist_job = FM_DIR_LIST_JOB(job);
    FmJobClass* job_class = FM_JOB_CLASS(fm_dir_list_job_parent_class);

    if(dirlist_job->emit_files_found)
    {
        if(dirlist_job->delay_add_files_handler)
        {
            g_source_remove(dirlist_job->delay_add_files_handler);
            emit_found_files(dirlist_job);
        }
    }
    if(job_class->finished)
        job_class->finished(job);
}