]> git.decadent.org.uk Git - ion3.git/blob - ioncore/stacking.h
2810bdaa40617ba307091a782e93aa1f3728d5ec
[ion3.git] / ioncore / stacking.h
1 /*
2  * ion/ioncore/stacking.h
3  *
4  * Copyright (c) Tuomo Valkonen 1999-2007.
5  *
6  * Ion is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  */
11
12 #ifndef ION_IONCORE_STACKING_H
13 #define ION_IONCORE_STACKING_H
14
15 #include "common.h"
16 #include "region.h"
17 #include "sizepolicy.h"
18
19
20 #define STACKING_LEVEL_BOTTOM 0
21 #define STACKING_LEVEL_NORMAL 1
22 #define STACKING_LEVEL_ON_TOP 2
23 #define STACKING_LEVEL_MODAL1 1024
24
25
26 #define STACKING_IS_HIDDEN(ST) ((ST)->hidden)
27
28
29 DECLSTRUCT(WStacking){
30     WRegion *reg;
31     WStacking *next, *prev;
32     WStacking *above;
33     uint level;
34     WSizePolicy szplcy;
35     WStacking *mgr_next, *mgr_prev;
36     
37     /* flags */
38     uint to_unweave:2;
39     uint hidden:1;
40     
41     /* WMPlex stuff */
42     WLListNode *lnode;
43 };
44
45
46 typedef bool WStackingFilter(WStacking *st, void *data);
47 typedef WStacking *WStackingIterator(void *data);
48
49
50 DECLSTRUCT(WStackingIterTmp){
51     WStacking *st;
52     WStackingFilter *filt;
53     void *filt_data;
54 };
55
56
57 WStacking **window_get_stackingp(WWindow *wwin);
58 WStacking *window_get_stacking(WWindow *wwin);
59
60
61 WStacking *create_stacking();
62
63 void stacking_free(WStacking *st);
64
65 /* Returns the topmost node with 'above' pointing to st. */
66 WStacking *stacking_unstack(WWindow *par, WStacking *st);
67
68 void stacking_iter_init(WStackingIterTmp *tmp,
69                         WStacking *st,
70                         WStackingFilter *filt,
71                         void *filt_data);
72 WRegion *stacking_iter(WStackingIterTmp *tmp);
73 WStacking *stacking_iter_nodes(WStackingIterTmp *tmp);
74
75 void stacking_iter_mgr_init(WStackingIterTmp *tmp,
76                             WStacking *st,
77                             WStackingFilter *filt,
78                             void *filt_data);
79 WRegion *stacking_iter_mgr(WStackingIterTmp *tmp);
80 WStacking *stacking_iter_mgr_nodes(WStackingIterTmp *tmp);
81
82 void stacking_weave(WStacking **stacking, WStacking **np, bool below);
83 WStacking *stacking_unweave(WStacking **stacking, 
84                             WStackingFilter *filt, void *filt_data);
85
86 void stacking_restack(WStacking **stacking, WStacking *st, Window fb_win,
87                       WStackingFilter *filt, void *filt_data, bool lower);
88
89 WStacking *stacking_find_to_focus(WStacking *stacking, WStacking *to_try,
90                                   WStackingFilter *include_filt, 
91                                   WStackingFilter *approve_filt, 
92                                   void *filt_data);
93 WStacking *stacking_find_to_focus_mapped(WStacking *stacking, 
94                                          WStacking *to_try,
95                                          WRegion *mgr);
96
97 uint stacking_min_level(WStacking *stacking, 
98                         WStackingFilter *include_filt, 
99                         void *filt_data);
100
101 uint stacking_min_level_mapped(WStacking *stacking);
102
103
104 WStacking *ioncore_find_stacking(WRegion *reg);
105 void stacking_unassoc(WStacking *stacking);
106 bool stacking_assoc(WStacking *stacking, WRegion *reg);
107
108 #endif /* ION_IONCORE_STACKING_H */