File: wlist.c

package info (click to toggle)
xxkb 1.6-4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 188 kB
  • ctags: 148
  • sloc: ansic: 960; makefile: 37
file content (77 lines) | stat: -rw-r--r-- 1,210 bytes parent folder | download | duplicates (3)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <X11/Xlib.h>
#include "wlist.h"

extern Display *dpy;

WInfo* win_find(w)
Window w;
{
  WInfo *pt = winlist;
  while (pt) {
    if (pt->win == w) break;
    pt = pt->next;
  }
  return pt;
}

WInfo* button_find(w)
Window w;
{
  WInfo *pt = winlist;
  while (pt) {
    if (pt->button == w) break;
    pt = pt->next;
  }
  return pt;
}

WInfo* win_add(w, state)
Window w; kbdState* state;
{
   WInfo *pt;
   pt = (WInfo*) malloc(sizeof(WInfo));
   if (pt) {
     pt->win = w;
     pt->button = 0;
     memcpy((void*) &pt->state, (void*) state, sizeof(kbdState));
     pt->next = 0;
     if (last) last->next = pt;
     if (!winlist) winlist = pt;
     last = pt;
   }
   return pt;
}

void   win_free(w)
Window w;
{
  WInfo *pt = winlist, *prev = NULL;

  while (pt) {
    if (pt->win == w) break;
    prev = pt;
    pt = pt->next;
  }
  if (!pt) {printf("not in list!\n"); return;}
  
  if (!prev) winlist = pt->next;
  else prev->next = pt->next;

  if (last == pt) last = prev;

  free((void*) pt);
  return;
}

void   win_free_list()
{
  WInfo *pt = winlist, *tmp;

  while (pt) {
    tmp = pt->next;
    if (pt->button) XDestroyWindow(dpy, pt->button);
    free((void*) pt);
    pt = tmp;  
  }
}