mirror of
https://gitlab.gnome.org/GNOME/eog
synced 2024-10-19 14:34:42 +00:00
24668119e7
* libeog/test-eog-job.c: (test_jobs): * shell/eog-window.c: (eog_window_drag_data_received), (obtain_desired_size): #if 0 some unused code and fix compiler warnings. Fixes bug #308918.
160 lines
2.8 KiB
C
160 lines
2.8 KiB
C
#include <unistd.h>
|
|
#include <gtk/gtk.h>
|
|
#include "eog-job-manager.h"
|
|
|
|
typedef struct {
|
|
gboolean cancel;
|
|
} TestData;
|
|
|
|
static int n_jobs = 0;
|
|
|
|
static void
|
|
action_cb (EogJob *job, gpointer data, GError **error)
|
|
{
|
|
TestData *td = (TestData*) data;
|
|
int i;
|
|
int n_runs;
|
|
|
|
g_print ("Job %.3i: action ...\n", eog_job_get_id (job));
|
|
|
|
n_runs = g_random_int_range (2, 5);
|
|
|
|
for (i = 0; i < n_runs; i++) {
|
|
g_usleep (1000000);
|
|
eog_job_set_progress (job, (float) i / (float) (n_runs-1));
|
|
if (td->cancel) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
g_print ("Job %.3i: action end ...\n", eog_job_get_id (job));
|
|
}
|
|
|
|
static void
|
|
finished_cb (EogJob *job, gpointer data, GError *error)
|
|
{
|
|
if (eog_job_get_status (job) == EOG_JOB_STATUS_CANCELED) {
|
|
g_print ("Job %.3i: finished but canceled.\n", eog_job_get_id (job));
|
|
}
|
|
else {
|
|
g_print ("Job %.3i: finished - %s\n", eog_job_get_id (job),
|
|
eog_job_get_success (job) ? "success" : "failed");
|
|
}
|
|
|
|
--n_jobs;
|
|
|
|
g_print ("n_jobs: %i\n", n_jobs);
|
|
if (n_jobs == 0)
|
|
gtk_main_quit ();
|
|
}
|
|
|
|
static void
|
|
cancel_cb (EogJob *job, gpointer data)
|
|
{
|
|
g_print ("Job %.3i: cancel job ...\n", eog_job_get_id (job));
|
|
((TestData*)data)->cancel = TRUE;
|
|
}
|
|
|
|
static void
|
|
progress_cb (EogJob *job, gpointer data, float progress)
|
|
{
|
|
g_print ("Job %.3i: %.0f%%\n", eog_job_get_id (job), (progress * 100.0));
|
|
}
|
|
|
|
static void
|
|
free_data_cb (gpointer data)
|
|
{
|
|
g_free (data);
|
|
}
|
|
|
|
#if 0
|
|
static gboolean
|
|
cancel_job_one (gpointer data)
|
|
{
|
|
gboolean result;
|
|
|
|
g_print ("Job %.3i: canceling job from manager.\n", 1);
|
|
result = eog_job_manager_cancel_job (1);
|
|
g_print ("Job %.3i: cancel %s\n", 1, result ? "successfull" : "failed");
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|
|
static gboolean
|
|
cancel_all_jobs (gpointer data)
|
|
{
|
|
eog_job_manager_cancel_all_jobs ();
|
|
|
|
/* Let the main loop finish all the idle loop
|
|
* handler for finishing the jobs
|
|
*/
|
|
while (gtk_events_pending ())
|
|
gtk_main_iteration ();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static gboolean
|
|
test_jobs (gpointer d)
|
|
{
|
|
int i;
|
|
EogJob *job;
|
|
#if 0
|
|
GRand *rand;
|
|
#endif
|
|
for (i = 0; i < 20; i++) {
|
|
TestData *data = g_new0 (TestData, 1);
|
|
data->cancel = FALSE;
|
|
|
|
job = eog_job_new_full (data,
|
|
action_cb,
|
|
finished_cb,
|
|
cancel_cb,
|
|
progress_cb,
|
|
free_data_cb);
|
|
|
|
eog_job_manager_add (job);
|
|
|
|
g_object_unref (G_OBJECT (job));
|
|
|
|
n_jobs++;
|
|
}
|
|
|
|
g_timeout_add (4000, cancel_all_jobs, NULL);
|
|
|
|
#if 0
|
|
g_timeout_add (8000, cancel_job_one, NULL);
|
|
|
|
rand = g_rand_new_with_seed (2023424);
|
|
|
|
for (i = 0; i < 7; i++) {
|
|
int id = g_rand_int_range (rand, 2, 20);
|
|
gboolean result;
|
|
|
|
g_print ("Job %.3i: canceling job from manager.\n", id);
|
|
result = eog_job_manager_cancel_job (id);
|
|
g_print ("Job %.3i: cancel %s\n", id,
|
|
result ? "successfull" : "failed");
|
|
}
|
|
|
|
g_rand_free (rand);
|
|
#endif
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
|
|
gtk_init (&argc, &argv);
|
|
g_thread_init (NULL);
|
|
|
|
g_idle_add (test_jobs, NULL);
|
|
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|