2 * ion/ioncore/stacking.h
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_STACKING_H
13 #define ION_IONCORE_STACKING_H
17 #include "sizepolicy.h"
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
26 #define STACKING_IS_HIDDEN(ST) ((ST)->hidden)
29 DECLSTRUCT(WStacking){
31 WStacking *next, *prev;
35 WStacking *mgr_next, *mgr_prev;
46 typedef bool WStackingFilter(WStacking *st, void *data);
47 typedef WStacking *WStackingIterator(void *data);
50 DECLSTRUCT(WStackingIterTmp){
52 WStackingFilter *filt;
57 WStacking **window_get_stackingp(WWindow *wwin);
58 WStacking *window_get_stacking(WWindow *wwin);
61 WStacking *create_stacking();
63 void stacking_free(WStacking *st);
65 /* Returns the topmost node with 'above' pointing to st. */
66 WStacking *stacking_unstack(WWindow *par, WStacking *st);
68 void stacking_iter_init(WStackingIterTmp *tmp,
70 WStackingFilter *filt,
72 WRegion *stacking_iter(WStackingIterTmp *tmp);
73 WStacking *stacking_iter_nodes(WStackingIterTmp *tmp);
75 void stacking_iter_mgr_init(WStackingIterTmp *tmp,
77 WStackingFilter *filt,
79 WRegion *stacking_iter_mgr(WStackingIterTmp *tmp);
80 WStacking *stacking_iter_mgr_nodes(WStackingIterTmp *tmp);
82 void stacking_weave(WStacking **stacking, WStacking **np, bool below);
83 WStacking *stacking_unweave(WStacking **stacking,
84 WStackingFilter *filt, void *filt_data);
86 void stacking_restack(WStacking **stacking, WStacking *st, Window fb_win,
87 WStackingFilter *filt, void *filt_data, bool lower);
89 WStacking *stacking_find_to_focus(WStacking *stacking, WStacking *to_try,
90 WStackingFilter *include_filt,
91 WStackingFilter *approve_filt,
93 WStacking *stacking_find_to_focus_mapped(WStacking *stacking,
97 uint stacking_min_level(WStacking *stacking,
98 WStackingFilter *include_filt,
101 uint stacking_min_level_mapped(WStacking *stacking);
104 WStacking *ioncore_find_stacking(WRegion *reg);
105 void stacking_unassoc(WStacking *stacking);
106 bool stacking_assoc(WStacking *stacking, WRegion *reg);
108 #endif /* ION_IONCORE_STACKING_H */