1 #ifndef PANEL_H
2 #define PANEL_H
3 
4 
5 #include <X11/Xlib.h>
6 #include <gtk/gtk.h>
7 #include <gdk/gdk.h>
8 
9 #include "config.h"
10 
11 #include "bg.h"
12 #include "ev.h"
13 #include "xconf.h"
14 
15 enum { ALLIGN_CENTER, ALLIGN_LEFT, ALLIGN_RIGHT  };
16 enum { EDGE_BOTTOM, EDGE_LEFT, EDGE_RIGHT, EDGE_TOP };
17 enum { WIDTH_PERCENT, WIDTH_REQUEST, WIDTH_PIXEL };
18 enum { HEIGHT_PIXEL, HEIGHT_REQUEST };
19 enum { POS_NONE, POS_START, POS_END };
20 enum { HIDDEN, WAITING, VISIBLE };
21 enum { LAYER_ABOVE, LAYER_BELOW };
22 
23 #define PANEL_HEIGHT_DEFAULT  26
24 #define PANEL_HEIGHT_MAX      200
25 #define PANEL_HEIGHT_MIN      16
26 
27 #define IMGPREFIX  DATADIR "/fbpanel/images"
28 
29 typedef struct _panel
30 {
31     GtkWidget *topgwin;           /* main panel window */
32     Window topxwin;               /* and it X window   */
33     GtkWidget *lbox;              /* primary layout box */
34     GtkWidget *bbox;              /* backgound box for box */
35     GtkWidget *box;               /* box that contains all plugins */
36     GtkRequisition requisition;
37     GtkWidget *(*my_box_new) (gboolean, gint);
38     GtkWidget *(*my_separator_new) ();
39 
40     FbBg *bg;
41     int alpha;
42     guint32 tintcolor;
43     GdkColor gtintcolor;
44     gchar *tintcolor_name;
45 
46     int ax, ay, aw, ah;  /* prefferd allocation of a panel */
47     int cx, cy, cw, ch;  /* current allocation (as reported by configure event) allocation */
48     int allign, edge, margin;
49     GtkOrientation orientation;
50     int widthtype, width;
51     int heighttype, height;
52     int round_corners_radius;
53     int max_elem_height;
54 
55     gint self_destroy;
56     gint setdocktype;
57     gint setstrut;
58     gint round_corners;
59     gint transparent;
60     gint autohide;
61     gint ah_far;
62     gint layer;
63     gint setlayer;
64 
65     int ah_dx, ah_dy; // autohide shift for x and y
66     int height_when_hidden;
67     guint hide_tout;
68 
69     int spacing;
70 
71     guint desknum;
72     guint curdesk;
73     guint32 *workarea;
74 
75     int plug_num;
76     GList *plugins;
77 
78     gboolean (*ah_state)(struct _panel *);
79 
80     xconf *xc;
81 } panel;
82 
83 
84 typedef struct {
85     unsigned int modal : 1;
86     unsigned int sticky : 1;
87     unsigned int maximized_vert : 1;
88     unsigned int maximized_horz : 1;
89     unsigned int shaded : 1;
90     unsigned int skip_taskbar : 1;
91     unsigned int skip_pager : 1;
92     unsigned int hidden : 1;
93     unsigned int fullscreen : 1;
94     unsigned int above : 1;
95     unsigned int below : 1;
96 } net_wm_state;
97 
98 typedef struct {
99     unsigned int desktop : 1;
100     unsigned int dock : 1;
101     unsigned int toolbar : 1;
102     unsigned int menu : 1;
103     unsigned int utility : 1;
104     unsigned int splash : 1;
105     unsigned int dialog : 1;
106     unsigned int normal : 1;
107 } net_wm_window_type;
108 
109 typedef struct {
110     char *name;
111     void (*cmd)(void);
112 } command;
113 
114 extern command commands[];
115 
116 extern gchar *cprofile;
117 
118 extern Atom a_UTF8_STRING;
119 extern Atom a_XROOTPMAP_ID;
120 
121 extern Atom a_WM_STATE;
122 extern Atom a_WM_CLASS;
123 extern Atom a_WM_DELETE_WINDOW;
124 extern Atom a_WM_PROTOCOLS;
125 extern Atom a_NET_WORKAREA;
126 extern Atom a_NET_CLIENT_LIST;
127 extern Atom a_NET_CLIENT_LIST_STACKING;
128 extern Atom a_NET_NUMBER_OF_DESKTOPS;
129 extern Atom a_NET_CURRENT_DESKTOP;
130 extern Atom a_NET_DESKTOP_NAMES;
131 extern Atom a_NET_DESKTOP_GEOMETRY;
132 extern Atom a_NET_ACTIVE_WINDOW;
133 extern Atom a_NET_CLOSE_WINDOW;
134 extern Atom a_NET_SUPPORTED;
135 extern Atom a_NET_WM_STATE;
136 extern Atom a_NET_WM_STATE_SKIP_TASKBAR;
137 extern Atom a_NET_WM_STATE_SKIP_PAGER;
138 extern Atom a_NET_WM_STATE_STICKY;
139 extern Atom a_NET_WM_STATE_HIDDEN;
140 extern Atom a_NET_WM_STATE_SHADED;
141 extern Atom a_NET_WM_STATE_ABOVE;
142 extern Atom a_NET_WM_STATE_BELOW;
143 
144 #define a_NET_WM_STATE_REMOVE        0    /* remove/unset property */
145 #define a_NET_WM_STATE_ADD           1    /* add/set property */
146 #define a_NET_WM_STATE_TOGGLE        2    /* toggle property  */
147 
148 extern Atom a_NET_WM_WINDOW_TYPE;
149 extern Atom a_NET_WM_WINDOW_TYPE_DESKTOP;
150 extern Atom a_NET_WM_WINDOW_TYPE_DOCK;
151 extern Atom a_NET_WM_WINDOW_TYPE_TOOLBAR;
152 extern Atom a_NET_WM_WINDOW_TYPE_MENU;
153 extern Atom a_NET_WM_WINDOW_TYPE_UTILITY;
154 extern Atom a_NET_WM_WINDOW_TYPE_SPLASH;
155 extern Atom a_NET_WM_WINDOW_TYPE_DIALOG;
156 extern Atom a_NET_WM_WINDOW_TYPE_NORMAL;
157 
158 extern Atom a_NET_WM_DESKTOP;
159 extern Atom a_NET_WM_NAME;
160 extern Atom a_NET_WM_VISIBLE_NAME;
161 extern Atom a_NET_WM_STRUT;
162 extern Atom a_NET_WM_STRUT_PARTIAL;
163 extern Atom a_NET_WM_ICON;
164 extern Atom a_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR;
165 
166 
167 extern xconf_enum allign_enum[];
168 extern xconf_enum edge_enum[];
169 extern xconf_enum widthtype_enum[];
170 extern xconf_enum heighttype_enum[];
171 extern xconf_enum bool_enum[];
172 extern xconf_enum pos_enum[];
173 extern xconf_enum layer_enum[];
174 
175 extern int verbose;
176 extern gint force_quit;
177 extern FbEv *fbev;
178 extern GtkIconTheme *icon_theme;
179 #define FBPANEL_WIN(win)  gdk_window_lookup(win)
180 void panel_set_wm_strut(panel *p);
181 
182 gchar *panel_get_profile(void);
183 gchar *panel_get_profile_file(void);
184 
185 void ah_start(panel *p);
186 void ah_stop(panel *p);
187 
188 #endif
189