]> git.decadent.org.uk Git - ion3.git/blob - ioncore/frame.h
Merge commit '20070203' into HEAD
[ion3.git] / ioncore / frame.h
1 /*
2  * ion/ioncore/frame.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_FRAME_H
13 #define ION_IONCORE_FRAME_H
14
15 #include <libtu/stringstore.h>
16 #include <libtu/setparam.h>
17 #include <libextl/extl.h>
18
19 #include "common.h"
20 #include "window.h"
21 #include "attach.h"
22 #include "mplex.h"
23 #include "gr.h"
24 #include "rectangle.h"
25 #include "sizehint.h"
26
27 #define FRAME_SAVED_VERT  0x0008
28 #define FRAME_SAVED_HORIZ 0x0010
29 #define FRAME_SHADED      0x0020
30 #define FRAME_SHADED_TOGGLE 0x0040
31 /*#define FRAME_DEST_EMPTY  0x0100*/
32 #define FRAME_MAXED_VERT  0x0200
33 #define FRAME_MAXED_HORIZ 0x0400
34 #define FRAME_MIN_HORIZ   0x0800
35
36 /*#define FRAME_SZH_USEMINMAX 0x1000 */
37 /*#define FRAME_FWD_CWIN_RQGEOM 0x2000 */
38
39 #define FRAME_SHOW_NUMBERS 0x4000
40
41 typedef enum{
42     FRAME_MODE_UNKNOWN,
43     FRAME_MODE_TILED,
44     FRAME_MODE_TILED_ALT,
45     FRAME_MODE_FLOATING,
46     FRAME_MODE_TRANSIENT
47 } WFrameMode;
48
49 typedef enum{
50     FRAME_BAR_INSIDE,
51     FRAME_BAR_OUTSIDE,
52     FRAME_BAR_SHAPED,
53     FRAME_BAR_NONE
54 } WFrameBarMode;
55         
56
57
58 DECLCLASS(WFrame){
59     WMPlex mplex;
60     
61     int flags;
62     WFrameMode mode;
63     int saved_w, saved_h;
64     int saved_x, saved_y;
65     
66     int tab_dragged_idx;
67     uint quasiactive_count;
68     
69     GrBrush *brush;
70     GrBrush *bar_brush;
71     GrTransparency tr_mode;
72     GrTextElem *titles;
73     int titles_n;
74     
75     /* Bar stuff */
76     WFrameBarMode barmode;
77     int bar_w, bar_h;
78     double bar_max_width_q;
79     int tab_min_w;
80 };
81
82
83 /* Create/destroy */
84 extern WFrame *create_frame(WWindow *parent, const WFitParams *fp,
85                             WFrameMode mode);
86 extern bool frame_init(WFrame *frame, WWindow *parent, const WFitParams *fp,
87                        WFrameMode mode);
88 extern void frame_deinit(WFrame *frame);
89 extern bool frame_rqclose(WFrame *frame);
90
91 /* Mode */
92
93 extern void frame_set_mode(WFrame *frame, WFrameMode mode);
94 extern WFrameMode frame_mode(WFrame *frame);
95
96 /* Resize and reparent */
97 extern bool frame_fitrep(WFrame *frame, WWindow *par, const WFitParams *fp);
98 extern void frame_size_hints(WFrame *frame, WSizeHints *hints_ret);
99
100 /* Focus */
101 extern void frame_activated(WFrame *frame);
102 extern void frame_inactivated(WFrame *frame);
103
104 /* Tabs */
105 extern int frame_nth_tab_w(WFrame *frame, int n);
106 extern int frame_nth_tab_iw(WFrame *frame, int n);
107 extern int frame_nth_tab_x(WFrame *frame, int n);
108 extern int frame_tab_at_x(WFrame *frame, int x);
109 extern void frame_update_attr_nth(WFrame *frame, int i);
110
111 extern bool frame_set_shaded(WFrame *frame, int sp);
112 extern bool frame_is_shaded(WFrame *frame);
113 extern bool frame_set_numbers(WFrame *frame, int sp);
114 extern bool frame_is_numbers(WFrame *frame);
115
116 extern int frame_default_index(WFrame *frame);
117
118 /* Misc */
119 extern void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how);
120 extern void frame_managed_remove(WFrame *frame, WRegion *reg);
121
122 extern void ioncore_frame_quasiactivation_notify(WRegion *reg, WRegionNotify how);
123
124 /* Save/load */
125 extern ExtlTab frame_get_configuration(WFrame *frame);
126 extern WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab);
127 extern void frame_do_load(WFrame *frame, ExtlTab tab);
128
129 extern WHook *frame_managed_changed_hook;
130
131 #endif /* ION_IONCORE_FRAME_H */