screen-private.h

Go to the documentation of this file.
00001 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
00002 
00012 /* 
00013  * Copyright (C) 2001 Havoc Pennington
00014  * Copyright (C) 2003 Rob Adams
00015  * Copyright (C) 2004-2006 Elijah Newren
00016  * 
00017  * This program is free software; you can redistribute it and/or
00018  * modify it under the terms of the GNU General Public License as
00019  * published by the Free Software Foundation; either version 2 of the
00020  * License, or (at your option) any later version.
00021  *
00022  * This program is distributed in the hope that it will be useful, but
00023  * WITHOUT ANY WARRANTY; without even the implied warranty of
00024  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00025  * General Public License for more details.
00026  * 
00027  * You should have received a copy of the GNU General Public License
00028  * along with this program; if not, write to the Free Software
00029  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00030  * 02111-1307, USA.
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;  /* Size of screen; rect.x & rect.y are always 0 */
00080   MetaUI *ui;
00081   MetaTabPopup *tab_popup;
00082   
00083   MetaWorkspace *active_workspace;
00084 
00085   /* This window holds the focus when we don't want to focus
00086    * any actual clients
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   /* Cache the current Xinerama */
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   /* gc for XOR on root window */
00131   GC root_xor_gc;
00132 
00133   /* Managed by compositor.c */
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 /* Show/hide the desktop (temporarily hide all windows) */
00214 void     meta_screen_show_desktop        (MetaScreen *screen,
00215                                           guint32     timestamp);
00216 void     meta_screen_unshow_desktop      (MetaScreen *screen);
00217 
00218 /* Update whether the destkop is being shown for the current active_workspace */
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

Generated on Sat Aug 23 22:04:17 2008 for metacity by  doxygen 1.5.5