4 * Copyright (c) Tuomo Valkonen 1999-2007.
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.
12 #ifndef ION_IONCORE_GROUP_H
13 #define ION_IONCORE_GROUP_H
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>
26 INTRSTRUCT(WGroupAttachParams);
28 typedef WRegionSimpleCreateFn WGroupMkFrameFn;
31 DECLSTRUCT(WGroupAttachParams){
49 #define GROUPATTACHPARAMS_INIT \
50 {0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0, 0, NULL}
55 WStacking *managed_list;
56 WStacking *managed_stdisp;
57 WStacking *current_managed;
60 uint bottom_last_close:1;
64 extern bool group_init(WGroup *grp, WWindow *parent, const WFitParams *fp);
65 extern WGroup *create_group(WWindow *parent, const WFitParams *fp);
66 extern void group_deinit(WGroup *grp);
68 extern WRegion *group_load(WWindow *par, const WFitParams *fp,
70 extern void group_do_load(WGroup *ws, ExtlTab tab);
72 extern WRegion* group_current(WGroup *group);
74 DYNFUN WStacking *group_do_add_managed(WGroup *ws, WRegion *reg,
75 int level, WSizePolicy szplcy);
76 extern WStacking *group_do_add_managed_default(WGroup *ws, WRegion *reg,
77 int level, WSizePolicy szplcy);
79 extern WRegion *group_do_attach(WGroup *ws,
80 WGroupAttachParams *param,
81 WRegionAttachData *data);
82 extern bool group_do_attach_final(WGroup *ws,
84 const WGroupAttachParams *param);
86 extern WRegion *group_attach(WGroup *ws, WRegion *reg, ExtlTab param);
87 extern WRegion *group_attach_new(WGroup *ws, ExtlTab param);
89 extern void group_manage_stdisp(WGroup *ws, WRegion *stdisp,
90 const WMPlexSTDispInfo *di);
92 extern void group_managed_remove(WGroup *ws, WRegion *reg);
94 extern WRegion *group_bottom(WGroup *ws);
96 extern bool group_rescue_clientwins(WGroup *ws, WPHolder *ph);
98 extern bool group_rqclose(WGroup *ws);
99 extern bool group_rqclose_relocate(WGroup *ws);
101 extern bool group_managed_rqorder(WGroup *grp, WRegion *sub,
104 extern WStacking *group_find_stacking(WGroup *ws, WRegion *r);
105 extern WStacking *group_find_to_focus(WGroup *ws, WStacking *to_try);
107 extern WRegion *region_group_if_bottom(WRegion *reg);
109 typedef WStackingFilter WGroupIterFilter;
110 typedef WStackingIterTmp WGroupIterTmp;
112 extern void group_iter_init(WGroupIterTmp *tmp, WGroup *ws);
113 extern WRegion *group_iter(WGroupIterTmp *tmp);
114 extern WStacking *group_iter_nodes(WGroupIterTmp *tmp);
116 extern WStacking *group_get_stacking(WGroup *ws);
117 extern WStacking **group_get_stackingp(WGroup *ws);
119 #define FOR_ALL_MANAGED_BY_GROUP(WS, VAR, TMP) \
120 for(group_iter_init(&(TMP), WS), \
121 VAR=group_iter(&(TMP)); \
123 VAR=group_iter(&(TMP)))
125 #define FOR_ALL_NODES_IN_GROUP(WS, VAR, TMP) \
126 for(group_iter_init(&(TMP), WS), \
127 VAR=group_iter_nodes(&(TMP)); \
129 VAR=group_iter_nodes(&(TMP)))
131 extern WGroupIterTmp group_iter_default_tmp;
134 #endif /* ION_IONCORE_GROUP_H */