1 module cboxapp;
2 
3 import std.stdio;
4 import deimos.X11.X;
5 import deimos.X11.Xlib;
6 import deimos.X11.keysymdef;
7 import deimos.X11.Xutil;
8 import deimos.X11.Xatom;
9 import window;
10 import types;
11 import theme.layout;
12 import monitor;
13 
14 alias DGC = core.memory.GC;
15 alias XGC = deimos.X11.Xlib.GC;
16 
17 import core.sys.posix.signal;
18 import core.sys.posix.sys.wait;
19 import core.sys.posix.unistd;
20 
21 /**
22 * Singleton to hold our main Display
23 **/
24 class AppDisplay 
25 {   
26 
27   Display *dpy;
28   bool running = true;
29 
30   static AppDisplay instance() 
31   {
32     if (!instantiated_) {
33       synchronized {
34         if (instance_ is null) {
35           instance_ = new AppDisplay;
36           instance_.dpy = XOpenDisplay(null);
37         }
38         instantiated_ = true;
39       }
40     }
41     return instance_;
42   }
43 
44  private:
45   this() {}
46   static bool instantiated_;  // Thread local
47   __gshared AppDisplay instance_;
48 
49  }
50 
51 struct Client 
52 {
53   string name;
54   float mina, maxa;
55   int x, y, w, h;
56   int oldx, oldy, oldw, oldh;
57   int basew, baseh, incw, inch, maxw, maxh, minw, minh;
58   int bw, oldbw;
59   uint tags;
60   bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
61   Client *next;
62   Client *snext;
63   Monitor *mon;
64   Window win;
65 
66     /**
67      * A range to iterate over the client list via 'next' or 'snext',
68      * as specified by the template string.
69      * Example:
70      * ---
71      * auto r = ClientRange!"next"(clientPtr);
72      * auto sr = ClientRange!"snext"(clientPtr);
73      * ---
74      */
75     struct ClientRange(string NextField) 
76     {
77         Client* client;
78         @property bool empty() 
79         {
80           return client is null;
81         }
82 
83         @property auto front() 
84         {
85           return client;
86         }
87 
88         auto popFront() 
89         {
90             mixin(`client = client.`~NextField~`;`);
91         }
92     }
93 }