Fix position of hidden panel, placed at screen edge with upper coordinate (usually...
[window-docker.git] / panel.h
blob8c339bc19038853992ac4fda6f5d4659e551ddc9
1 #ifndef __PANEL_H__
2 #define __PANEL_H__
4 #include <gtk/gtk.h>
6 /* Types */
8 typedef
9 struct { int h, w; } scr_t;
11 typedef
12 enum {
13 SIDE_NONE,
15 SIDE_TOP,
16 SIDE_RIGHT,
17 SIDE_BOTTOM,
18 SIDE_LEFT,
20 /* TODO:
21 * Non-standard orientation - tilted sides (e.g. in frames with non-square geometry) */
22 SIDE_OTHER
23 } side_t;
25 typedef
26 struct {
27 scr_t scr;
29 GtkWidget * win;
30 GtkWidget * container;
32 struct {
33 GdkWindow * parent;
34 gint x, y;
35 } orig;
37 struct {
38 guint w, h;
39 gboolean request;
40 } size;
42 struct {
43 int x, y;
44 struct {
45 int x, y;
46 } hidden;
47 } pos;
49 struct {
50 side_t side;
51 double pos;
52 int border;
53 gboolean autohiding;
54 struct {
55 int show, hide;
56 guint id;
57 } timeout;
58 gboolean visible;
59 } docking;
61 guint enter_cb_id, leave_cb_id;
62 } PanelWindow;
64 #define PANEL_WINDOW( w ) ((PanelWindow *) w)
66 /**
67 * PanelWindowRequest - request form for panel initialization.
70 /* Init staff */
71 extern PanelWindow * panelWindow_Alloc (void);
72 extern void panelWindow_Init (PanelWindow * panel);
74 /* Features */
75 extern void panelWindow_AH_Toggle (PanelWindow * panel, gboolean autohide);
76 static inline gboolean panelWindow_AH_Used (PanelWindow * panel) { return panel->docking.autohiding; }
78 /* Parameters */
79 extern void panelWindow_Side_Set (PanelWindow * panel, side_t side);
80 extern void panelWindow_Pos_Set (PanelWindow * panel, double pos);
81 extern void panelWindow_AH_ShowDuration_Set (PanelWindow * panel, double sec);
82 extern void panelWindow_AH_HideDuration_Set (PanelWindow * panel, double sec);
83 extern void panelWindow_AH_Border_Set (PanelWindow * panel, guint thickness);
85 static inline side_t panelWindow_Side (PanelWindow * panel) { return panel->docking.side; }
86 static inline double panelWindow_Pos (PanelWindow * panel) { return panel->docking.pos; }
87 static inline double panelWindow_AH_ShowDuration (PanelWindow * panel) { return panel->docking.timeout.show; }
88 static inline double panelWindow_AH_HideDuration (PanelWindow * panel) { return panel->docking.timeout.hide; }
89 static inline guint panelWindow_AH_Border (PanelWindow * panel) { return panel->docking.border; }
91 /* Get internal objects */
92 static inline GtkWidget * panelWindow_Container (PanelWindow * panel) { return panel->win; }
94 #endif /*__PANEL_H__ */