4a37bf6a77b08c5ca1d0b2abd3aff1785fe306f9
[dana/openbox.git] / openbox / screen.h
1 /* -*- indent-tabs-mode: t; tab-width: 4; c-basic-offset: 4; -*-
2
3    screen.h for the Openbox window manager
4    Copyright (c) 2003        Ben Jansens
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    See the COPYING file for a copy of the GNU General Public License.
17 */
18
19 #ifndef __screen_h
20 #define __screen_h
21
22 #include "misc.h"
23 #include "geom.h"
24
25 struct _ObClient;
26
27 #define DESKTOP_ALL (0xffffffff)
28
29 /*! The number of available desktops */
30 extern guint screen_num_desktops;
31 /*! The number of virtual "xinerama" screens/heads */
32 extern guint screen_num_monitors;
33 /*! The current desktop */
34 extern guint screen_desktop;
35 /*! The desktop which was last visible */
36 extern guint screen_last_desktop;
37 /*! Are we in showing-desktop mode? */
38 extern gboolean screen_showing_desktop;
39 /*! The support window also used for focus and stacking */
40 extern Window screen_support_win;
41
42 typedef struct DesktopLayout {
43     ObOrientation orientation;
44     ObCorner start_corner;
45     guint rows;
46     guint columns;
47 } DesktopLayout;
48 extern DesktopLayout screen_desktop_layout;
49
50 /*! An array of gchar*'s which are desktop names in UTF-8 format */
51 extern char **screen_desktop_names;
52
53 /*! Take over the screen, set the basic hints on it claming it as ours */
54 gboolean screen_annex();
55
56 /*! Once the screen is ours, set up its initial state */
57 void screen_startup(gboolean reconfig);
58 /*! Free resources */
59 void screen_shutdown(gboolean reconfig);
60
61 /*! Figure out the new size of the screen and adjust stuff for it */
62 void screen_resize();
63
64 /*! Change the number of available desktops */
65 void screen_set_num_desktops(guint num);
66 /*! Change the current desktop */
67 void screen_set_desktop(guint num);
68 /*! Interactively change desktops */
69 guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear,
70                            gboolean dialog, gboolean done, gboolean cancel);
71
72 /*! Shows and focuses the desktop and hides all the client windows, or
73   returns to the normal state, showing client windows. */
74 void screen_show_desktop(gboolean show);
75
76 /*! Updates the desktop layout from the root property if available */
77 void screen_update_layout();
78
79 /*! Get desktop names from the root window property */
80 void screen_update_desktop_names();
81
82 /*! Installs or uninstalls a colormap for a client. If client is NULL, then
83   it handles the root colormap. */
84 void screen_install_colormap(struct _ObClient *client, gboolean install);
85
86 void screen_update_areas();
87
88 Rect *screen_physical_area();
89
90 Rect *screen_physical_area_monitor(guint head);
91
92 Rect *screen_area(guint desktop);
93
94 Rect *screen_area_monitor(guint desktop, guint head);
95
96 /*! Sets the root cursor. This function decides which cursor to use, but you
97   gotta call it to let it know it should change. */
98 void screen_set_root_cursor();
99
100 gboolean screen_pointer_pos(int *x, int *y);
101
102 #endif