don't fade on startup/shutdown, make fading a bit quicker
[dana/dcompmgr.git] / screen.h
1 #ifndef dc__screen_h
2 #define dc__screen_h
3
4 #include <xcb/xcb.h>
5 #include <glib.h>
6 #include <sys/time.h>
7
8 struct d_window;
9 struct d_display;
10 struct d_list;
11
12 /* inherits from xcb_screen_t */
13 typedef struct d_screen {
14     xcb_screen_t      super;
15     int               ref;
16     struct d_display *dpy;
17     int               num;
18
19     xcb_window_t      selwin;  /* for the selection */
20     xcb_atom_t        selatom; /* ditto.. */
21
22     xcb_window_t      overlay;
23
24     struct timeval    next_repaint;
25     gboolean          need_repaint;
26
27     GHashTable       *winhash;
28     struct d_list    *stacking;
29     struct d_list    *plugin_data;
30
31     /* don't read this directly, use screen_get_root_pixmap() */
32     xcb_pixmap_t              root_pixmap;
33     gboolean                  root_pixmap_waiting;
34     xcb_get_property_cookie_t root_pixmap_ck[3];
35
36     void (*screen_paint)(struct d_screen *sc);
37     void (*window_show)(struct d_window *w);
38     void (*window_hide)(struct d_window *w);
39     void (*window_become_zombie)(struct d_window *w);
40     void (*window_zombie_dead)(struct d_window *w);
41     void (*window_move)(struct d_window *w);
42     void (*window_resize)(struct d_window *w);
43     void (*window_reshape)(struct d_window *w);
44     void (*window_opacity_change)(struct d_window *w);
45     void (*window_damage)(struct d_window *w);
46     void (*window_restack)(struct d_window *w, struct d_window *above);
47     void (*screen_root_pixmap_change)(struct d_screen *sc);
48 } d_screen_t;
49
50 d_screen_t* screen_new(struct d_display *dpy, int num, xcb_screen_t *xcb);
51
52 void screen_ref(d_screen_t *sc);
53 void screen_unref(d_screen_t *sc);
54
55 /*! Tries to register on the screen given by @sc.  If it succeeds, it fills
56     in @sc and returns TRUE, otherwise it returns FALSE.
57 */
58 gboolean screen_register(d_screen_t *sc);
59
60 struct d_window* screen_add_window(d_screen_t *sc, xcb_window_t wid);
61 void screen_remove_window(d_screen_t *sc, struct d_window *w);
62
63 struct d_window* screen_find_window(d_screen_t *sc, xcb_window_t id);
64
65 void screen_stacking_add(d_screen_t *sc, struct d_window *w);
66 void screen_stacking_remove(d_screen_t *sc, struct d_window *w);
67 void screen_stacking_move_above(d_screen_t *sc, struct d_window *w,
68                                 struct d_window *above);
69 void screen_stacking_move_to_top(d_screen_t *sc, struct d_window *w);
70 void screen_stacking_move_to_bottom(d_screen_t *sc, struct d_window *w);
71
72 void screen_setup_default_functions(d_screen_t *sc);
73
74 void  screen_add_plugin_data(d_screen_t *sc, int id, void *data);
75 void* screen_find_plugin_data(d_screen_t *sc, int id);
76 void  screen_remove_plugin_data(d_screen_t *sc, int id);
77
78 void screen_refresh(d_screen_t *sc);
79
80 void screen_update_root_pixmap(d_screen_t *sc);
81 xcb_pixmap_t screen_get_root_pixmap(d_screen_t *sc);
82
83 #endif