]> git.decadent.org.uk Git - ion3.git/blob - ioncore/group.h
[svn-inject] Installing original source of ion3
[ion3.git] / ioncore / group.h
1 /*
2  * ion/ioncore/group.h
3  *
4  * Copyright (c) Tuomo Valkonen 1999-2006. 
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_GROUP_H
13 #define ION_IONCORE_GROUP_H
14
15 #include <libextl/extl.h>
16 #include <ioncore/common.h>
17 #include <ioncore/region.h>
18 #include <ioncore/screen.h>
19 #include <ioncore/manage.h>
20 #include <ioncore/rectangle.h>
21 #include <ioncore/pholder.h>
22 #include <ioncore/stacking.h>
23 #include <ioncore/framedpholder.h>
24
25
26 INTRSTRUCT(WGroupAttachParams);
27
28 typedef WRegionSimpleCreateFn WGroupMkFrameFn;
29
30
31 DECLSTRUCT(WGroupAttachParams){
32     uint level_set:1;
33     uint szplcy_set:1;
34     uint geom_set:1;
35     uint geom_weak_set:1;
36     uint switchto_set:1;
37     
38     uint switchto:1;
39     uint modal:1;
40     uint bottom:1;
41     
42     int geom_weak;
43     WRectangle geom;
44     
45     uint level;
46     WSizePolicy szplcy;
47     WRegion *stack_above;
48 };
49
50 #define GROUPATTACHPARAMS_INIT \
51     {0, 0, 0, 0, 0,  0, 0, 0,  0, {0, 0, 0, 0},  0, 0, NULL}
52
53
54 DECLCLASS(WGroup){
55     WRegion reg;
56     WStacking *managed_list;
57     WStacking *managed_stdisp;
58     WStacking *current_managed;
59     WStacking *bottom;
60     Window dummywin;
61     uint bottom_last_close:1;
62 };
63
64
65 extern bool group_init(WGroup *grp, WWindow *parent, const WFitParams *fp);
66 extern WGroup *create_group(WWindow *parent, const WFitParams *fp);
67 extern void group_deinit(WGroup *grp);
68
69 extern WRegion *group_load(WWindow *par, const WFitParams *fp, 
70                            ExtlTab tab);
71 extern void group_do_load(WGroup *ws, ExtlTab tab);
72
73 extern WRegion* group_current(WGroup *group);
74
75 DYNFUN WStacking *group_do_add_managed(WGroup *ws, WRegion *reg, 
76                                        int level, WSizePolicy szplcy);
77 extern WStacking *group_do_add_managed_default(WGroup *ws, WRegion *reg, 
78                                                int level, WSizePolicy szplcy);
79
80 extern WRegion *group_do_attach(WGroup *ws, 
81                                 WGroupAttachParams *param,
82                                 WRegionAttachData *data);
83 extern bool group_do_attach_final(WGroup *ws, 
84                                   WRegion *reg,
85                                   const WGroupAttachParams *param);
86
87 extern WRegion *group_attach(WGroup *ws, WRegion *reg, ExtlTab param);
88 extern WRegion *group_attach_new(WGroup *ws, ExtlTab param);
89
90 extern void group_manage_stdisp(WGroup *ws, WRegion *stdisp, 
91                                 const WMPlexSTDispInfo *di);
92
93 extern void group_managed_remove(WGroup *ws, WRegion *reg);
94
95 extern WRegion *group_bottom(WGroup *ws);
96
97 extern bool group_rescue_clientwins(WGroup *ws, WPHolder *ph);
98
99 extern bool group_rqclose(WGroup *ws);
100 extern bool group_rqclose_relocate(WGroup *ws);
101
102 extern bool group_managed_rqorder(WGroup *grp, WRegion *sub, 
103                                   WRegionOrder order);
104
105 extern WStacking *group_find_stacking(WGroup *ws, WRegion *r);
106 extern WStacking *group_find_to_focus(WGroup *ws, WStacking *to_try);
107
108 typedef WStackingFilter WGroupIterFilter;
109 typedef WStackingIterTmp WGroupIterTmp;
110
111 extern void group_iter_init(WGroupIterTmp *tmp, WGroup *ws);
112 extern WRegion *group_iter(WGroupIterTmp *tmp);
113 extern WStacking *group_iter_nodes(WGroupIterTmp *tmp);
114
115 extern WStacking *group_get_stacking(WGroup *ws);
116 extern WStacking **group_get_stackingp(WGroup *ws);
117
118 #define FOR_ALL_MANAGED_BY_GROUP(WS, VAR, TMP) \
119     for(group_iter_init(&(TMP), WS),           \
120          VAR=group_iter(&(TMP));               \
121         VAR!=NULL;                             \
122         VAR=group_iter(&(TMP)))
123
124 #define FOR_ALL_NODES_IN_GROUP(WS, VAR, TMP) \
125     for(group_iter_init(&(TMP), WS),         \
126          VAR=group_iter_nodes(&(TMP));       \
127         VAR!=NULL;                           \
128         VAR=group_iter_nodes(&(TMP)))
129
130 extern WGroupIterTmp group_iter_default_tmp;
131
132
133 #endif /* ION_IONCORE_GROUP_H */