The Birdfont Source Code


All Repositories / birdfont.git / blob – RSS feed

Task.vala in /libbirdfont

This file is a part of the Birdfont project.

Contributing

Send patches or pull requests to johan.mattsson.m@gmail.com.
Clone this repository: git clone https://github.com/johanmattssonm/birdfont.git
Circle boundaries heads/master
1 /* 2 Copyright (C) 2014 2015 Johan Mattsson 3 4 This library is free software; you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as 6 published by the Free Software Foundation; either version 3 of the 7 License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, but 10 WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 */ 14 15 namespace BirdFont { 16 17 public class Task : GLib.Object { 18 19 public delegate void Runnable (); 20 Runnable task; 21 bool cancelled = false; 22 bool cancelable = false; 23 24 public Task.empty () { 25 } 26 27 public Task (owned Runnable? r, bool cancelable = false) { 28 if (r != null) { 29 task = (!) ((owned) r); 30 } 31 32 this.cancelable = cancelable; 33 } 34 35 public bool is_cancellable () { 36 bool c; 37 38 lock (cancelled) { 39 c = cancelable; 40 } 41 42 return c; 43 } 44 45 public void cancel () { 46 lock (cancelled) { 47 if (unlikely (!cancelable)) { 48 warning ("Task is not cancelable."); 49 } 50 51 cancelled = true; 52 } 53 } 54 55 public bool is_cancelled () { 56 bool c; 57 58 lock (cancelled) { 59 c = cancelled; 60 } 61 62 return c; 63 } 64 65 public virtual void run () { 66 if (task == null) { 67 warning ("No task set."); 68 return; 69 } 70 71 task (); 72 } 73 74 public void* perform_task() { 75 run (); 76 return null; 77 } 78 } 79 80 } 81