summaryrefslogtreecommitdiff
path: root/frontends/kolibrios/browser_table.h
blob: 2ee11826b5afcc9930d750c422e0196672b52493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* ------------------------------ */
/* Part about Browser table. Will contain all functions required as well. */
/* ------------------------------ */
nserror kolibri_schedule_cb(int t, void (*callback)(void *p), void *p);
void kolibri_browser_quit(void);

struct kolibri_callback {
  void (*cb)(void *p);
  void *arg;
  struct kolibri_callback *next_cb;
} head_dummy;

struct kolibri_callback *kcb_head = &head_dummy;
struct kolibri_callback *kcb_tail = &head_dummy;

static struct gui_browser_table kolibri_browser_table = {
    .schedule = kolibri_schedule_cb,
    .quit = kolibri_browser_quit,
    };

nserror kolibri_schedule_cb(int t, void (*callback)(void *p), void *p)
{
  /* debug_board_write_str("kolibri_schedule_cb called!\n"); */
  struct kolibri_callback *new_cb = malloc(sizeof(struct kolibri_callback));
  new_cb->arg = p;
  new_cb->cb = callback;
  new_cb->next_cb = NULL;

  kcb_tail -> next_cb = new_cb;
  kcb_tail = new_cb;

  return NSERROR_OK;
}

bool kolibri_schedule_run(void)
{
  if(kcb_head != kcb_tail)
    return false;

  struct kolibri_callback *runner = kcb_head -> next_cb;

  while(runner != NULL)
    {
      runner->cb(runner->arg);
      runner = runner -> next_cb;
    }

  return true;
  /* TODO: Free the whole list of callbacks */
}

void kolibri_browser_quit(void)
{
  debug_board_write_str("Netsurf is shutting down Normally..GoodBye.");
  /* TODO: Do the actual killing of process with mcall -1 */
  /* Maybe set Kolibri_quit = 1 here */
}