00001
00002
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef META_SCREEN_PRIVATE_H
00034 #define META_SCREEN_PRIVATE_H
00035
00036 #include "display-private.h"
00037 #include "screen.h"
00038 #include <X11/Xutil.h>
00039 #include "ui.h"
00040
00041 typedef struct _MetaXineramaScreenInfo MetaXineramaScreenInfo;
00042
00043 struct _MetaXineramaScreenInfo
00044 {
00045 int number;
00046 MetaRectangle rect;
00047 };
00048
00049 typedef void (* MetaScreenWindowFunc) (MetaScreen *screen, MetaWindow *window,
00050 gpointer user_data);
00051
00052 typedef enum
00053 {
00054 META_SCREEN_TOPLEFT,
00055 META_SCREEN_TOPRIGHT,
00056 META_SCREEN_BOTTOMLEFT,
00057 META_SCREEN_BOTTOMRIGHT
00058 } MetaScreenCorner;
00059
00060 typedef enum
00061 {
00062 META_SCREEN_UP,
00063 META_SCREEN_DOWN,
00064 META_SCREEN_LEFT,
00065 META_SCREEN_RIGHT
00066 } MetaScreenDirection;
00067
00068 #define META_WIREFRAME_XOR_LINE_WIDTH 2
00069
00070 struct _MetaScreen
00071 {
00072 MetaDisplay *display;
00073 int number;
00074 char *screen_name;
00075 Screen *xscreen;
00076 Window xroot;
00077 int default_depth;
00078 Visual *default_xvisual;
00079 MetaRectangle rect;
00080 MetaUI *ui;
00081 MetaTabPopup *tab_popup;
00082
00083 MetaWorkspace *active_workspace;
00084
00085
00086
00087
00088 Window no_focus_window;
00089
00090 GList *workspaces;
00091
00092 MetaStack *stack;
00093
00094 MetaCursor current_cursor;
00095
00096 Window flash_window;
00097
00098 Window wm_sn_selection_window;
00099 Atom wm_sn_atom;
00100 guint32 wm_sn_timestamp;
00101
00102 MetaXineramaScreenInfo *xinerama_infos;
00103 int n_xinerama_infos;
00104
00105
00106 int last_xinerama_index;
00107
00108 #ifdef HAVE_STARTUP_NOTIFICATION
00109 SnMonitorContext *sn_context;
00110 GSList *startup_sequences;
00111 guint startup_sequence_timeout;
00112 #endif
00113
00114 #ifdef HAVE_COMPOSITE_EXTENSIONS
00115 Window wm_cm_selection_window;
00116 #endif
00117
00118 guint work_area_idle;
00119
00120 int rows_of_workspaces;
00121 int columns_of_workspaces;
00122 MetaScreenCorner starting_corner;
00123 guint vertical_workspaces : 1;
00124
00125 guint keys_grabbed : 1;
00126 guint all_keys_grabbed : 1;
00127
00128 int closing;
00129
00130
00131 GC root_xor_gc;
00132
00133
00134 gpointer compositor_data;
00135 };
00136
00137 MetaScreen* meta_screen_new (MetaDisplay *display,
00138 int number,
00139 guint32 timestamp);
00140 void meta_screen_free (MetaScreen *screen,
00141 guint32 timestamp);
00142 void meta_screen_manage_all_windows (MetaScreen *screen);
00143 void meta_screen_foreach_window (MetaScreen *screen,
00144 MetaScreenWindowFunc func,
00145 gpointer data);
00146 void meta_screen_queue_frame_redraws (MetaScreen *screen);
00147 void meta_screen_queue_window_resizes (MetaScreen *screen);
00148
00149 int meta_screen_get_n_workspaces (MetaScreen *screen);
00150
00151 MetaWorkspace* meta_screen_get_workspace_by_index (MetaScreen *screen,
00152 int index);
00153
00154 void meta_screen_set_cursor (MetaScreen *screen,
00155 MetaCursor cursor);
00156 void meta_screen_update_cursor (MetaScreen *screen);
00157
00158 void meta_screen_ensure_tab_popup (MetaScreen *screen,
00159 MetaTabList list_type,
00160 MetaTabShowType show_type);
00161 void meta_screen_ensure_workspace_popup (MetaScreen *screen);
00162
00163 MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
00164 MetaWindow *not_this_one);
00165
00166 const MetaXineramaScreenInfo* meta_screen_get_current_xinerama (MetaScreen *screen);
00167 const MetaXineramaScreenInfo* meta_screen_get_xinerama_for_rect (MetaScreen *screen,
00168 MetaRectangle *rect);
00169 const MetaXineramaScreenInfo* meta_screen_get_xinerama_for_window (MetaScreen *screen,
00170 MetaWindow *window);
00171
00172
00173 const MetaXineramaScreenInfo* meta_screen_get_xinerama_neighbor (MetaScreen *screen,
00174 int which_xinerama,
00175 MetaScreenDirection dir);
00176 void meta_screen_get_natural_xinerama_list (MetaScreen *screen,
00177 int** xineramas_list,
00178 int* n_xineramas);
00179
00180 void meta_screen_update_workspace_layout (MetaScreen *screen);
00181 void meta_screen_update_workspace_names (MetaScreen *screen);
00182 void meta_screen_queue_workarea_recalc (MetaScreen *screen);
00183
00184 Window meta_create_offscreen_window (Display *xdisplay,
00185 Window parent,
00186 long valuemask);
00187
00188 typedef struct MetaWorkspaceLayout MetaWorkspaceLayout;
00189
00190 struct MetaWorkspaceLayout
00191 {
00192 int rows;
00193 int cols;
00194 int *grid;
00195 int grid_area;
00196 int current_row;
00197 int current_col;
00198 };
00199
00200 void meta_screen_calc_workspace_layout (MetaScreen *screen,
00201 int num_workspaces,
00202 int current_space,
00203 MetaWorkspaceLayout *layout);
00204 void meta_screen_free_workspace_layout (MetaWorkspaceLayout *layout);
00205
00206 void meta_screen_resize (MetaScreen *screen,
00207 int width,
00208 int height);
00209
00210 void meta_screen_minimize_all_on_active_workspace_except (MetaScreen *screen,
00211 MetaWindow *keep);
00212
00213
00214 void meta_screen_show_desktop (MetaScreen *screen,
00215 guint32 timestamp);
00216 void meta_screen_unshow_desktop (MetaScreen *screen);
00217
00218
00219 void meta_screen_update_showing_desktop_hint (MetaScreen *screen);
00220
00221 gboolean meta_screen_apply_startup_properties (MetaScreen *screen,
00222 MetaWindow *window);
00223 void meta_screen_composite_all_windows (MetaScreen *screen);
00224
00225 #endif