window.h 23.1 KB
Newer Older
1
2
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */

rhp's avatar
...  
rhp committed
3
4
5
6
/* Metacity X managed windows */

/* 
 * Copyright (C) 2001 Havoc Pennington
7
 * Copyright (C) 2002 Red Hat, Inc.
8
 * Copyright (C) 2003, 2004 Rob Adams
9
 * Copyright (C) 2004-2006 Elijah Newren
rhp's avatar
...  
rhp committed
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */

#ifndef META_WINDOW_H
#define META_WINDOW_H

30
#include <config.h>
rhp's avatar
...  
rhp committed
31
#include "screen.h"
rhp's avatar
...    
rhp committed
32
#include "util.h"
rhp's avatar
...    
rhp committed
33
#include "stack.h"
Havoc Pennington's avatar
Havoc Pennington committed
34
#include "iconcache.h"
rhp's avatar
...    
rhp committed
35
#include <X11/Xutil.h>
rhp's avatar
...    
rhp committed
36
#include <gdk-pixbuf/gdk-pixbuf.h>
rhp's avatar
...  
rhp committed
37

38
typedef struct _MetaGroup MetaGroup;
39
typedef struct _MetaWindowQueue MetaWindowQueue;
40

41
42
typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
                                           void       *data);
43
44
45
46
47
48
49
50
51

typedef enum
{
  META_WINDOW_NORMAL,
  META_WINDOW_DESKTOP,
  META_WINDOW_DOCK,
  META_WINDOW_DIALOG,
  META_WINDOW_MODAL_DIALOG,
  META_WINDOW_TOOLBAR,
52
53
54
  META_WINDOW_MENU,
  META_WINDOW_UTILITY,
  META_WINDOW_SPLASHSCREEN
55
56
} MetaWindowType;

57
58
59
60
61
62
typedef enum
{
  META_MAXIMIZE_HORIZONTAL = 1 << 0,
  META_MAXIMIZE_VERTICAL   = 1 << 1
} MetaMaximizeFlags;

63
64
65
66
67
68
69
typedef enum {
  META_CLIENT_TYPE_UNKNOWN = 0,
  META_CLIENT_TYPE_APPLICATION = 1,
  META_CLIENT_TYPE_PAGER = 2,
  META_CLIENT_TYPE_MAX_RECOGNIZED = 2
} MetaClientType;

70
71
72
73
74
75
76
77
typedef enum {
  META_QUEUE_CALC_SHOWING = 1 << 0,
  META_QUEUE_MOVE_RESIZE  = 1 << 1,
  META_QUEUE_UPDATE_ICON  = 1 << 2,
} MetaQueueType;

#define NUMBER_OF_QUEUES 3

rhp's avatar
...  
rhp committed
78
79
struct _MetaWindow
{
rhp's avatar
...    
rhp committed
80
  MetaDisplay *display;
rhp's avatar
...  
rhp committed
81
  MetaScreen *screen;
82
  MetaWorkspace *workspace;
rhp's avatar
...  
rhp committed
83
  Window xwindow;
rhp's avatar
...    
rhp committed
84
85
86
87
  /* may be NULL! not all windows get decorated */
  MetaFrame *frame;
  int depth;
  Visual *xvisual;
88
  Colormap colormap;
rhp's avatar
...    
rhp committed
89
  char *desc; /* used in debug spew */
rhp's avatar
...    
rhp committed
90
  char *title;
rhp's avatar
...    
rhp committed
91

rhp's avatar
...    
rhp committed
92
93
  char *icon_name;
  GdkPixbuf *icon;
94
  GdkPixbuf *mini_icon;
Havoc Pennington's avatar
Havoc Pennington committed
95
96
97
  MetaIconCache icon_cache;
  Pixmap wm_hints_pixmap;
  Pixmap wm_hints_mask;
rhp's avatar
...    
rhp committed
98
  
rhp's avatar
...    
rhp committed
99
100
101
  MetaWindowType type;
  Atom type_atom;
  
102
  /* NOTE these five are not in UTF-8, we just treat them as random
rhp's avatar
...    
rhp committed
103
104
105
106
107
108
   * binary data
   */
  char *res_class;
  char *res_name;
  char *role;
  char *sm_client_id;
109
  char *wm_client_machine;
Havoc Pennington's avatar
Havoc Pennington committed
110
  char *startup_id;
111
112

  int net_wm_pid;
rhp's avatar
...    
rhp committed
113
  
rhp's avatar
...    
rhp committed
114
115
116
  Window xtransient_for;
  Window xgroup_leader;
  Window xclient_leader;
rhp's avatar
...    
rhp committed
117
118

  /* Initial workspace property */
Havoc Pennington's avatar
Havoc Pennington committed
119
120
  int initial_workspace;  
  
121
  /* Initial timestamp property */
122
  guint32 initial_timestamp;  
123
  
rhp's avatar
...    
rhp committed
124
  /* Whether we're maximized */
125
126
  guint maximized_horizontally : 1;
  guint maximized_vertically : 1;
127
128

  /* Whether we have to maximize/minimize after placement */
129
130
  guint maximize_horizontally_after_placement : 1;
  guint maximize_vertically_after_placement : 1;
131
  guint minimize_after_placement : 1;
rhp's avatar
...    
rhp committed
132
133
134

  /* Whether we're shaded */
  guint shaded : 1;
rhp's avatar
...    
rhp committed
135

136
137
138
  /* Whether we're fullscreen */
  guint fullscreen : 1;
  
139
140
141
142
143
144
  /* Whether we're trying to constrain the window to be fully onscreen */
  guint require_fully_onscreen : 1;

  /* Whether we're trying to constrain the window to be on a single xinerama */
  guint require_on_single_xinerama : 1;

145
146
147
  /* Whether we're trying to constrain the window's titlebar to be onscreen */
  guint require_titlebar_visible : 1;

rhp's avatar
...    
rhp committed
148
149
150
151
152
  /* Whether we're sticky in the multi-workspace sense
   * (vs. the not-scroll-with-viewport sense, we don't
   * have no stupid viewports)
   */
  guint on_all_workspaces : 1;
rhp's avatar
...    
rhp committed
153

rhp's avatar
...    
rhp committed
154
155
  /* Minimize is the state controlled by the minimize button */
  guint minimized : 1;
Søren Sandmann's avatar
Søren Sandmann committed
156
  guint was_minimized : 1;
157
  guint tab_unminimized : 1;
rhp's avatar
...    
rhp committed
158

rhp's avatar
...    
rhp committed
159
160
161
162
163
  /* Whether the window is mapped; actual server-side state
   * see also unmaps_pending
   */
  guint mapped : 1;
  
rhp's avatar
...    
rhp committed
164
165
166
  /* Iconic is the state in WM_STATE; happens for workspaces/shading
   * in addition to minimize
   */
rhp's avatar
...    
rhp committed
167
  guint iconic : 1;
rhp's avatar
...    
rhp committed
168
  /* initially_iconic is the WM_HINTS setting when we first manage
rhp's avatar
...    
rhp committed
169
   * the window. It's taken to mean initially minimized.
rhp's avatar
...    
rhp committed
170
171
   */
  guint initially_iconic : 1;
rhp's avatar
...    
rhp committed
172
173
174

  /* whether an initial workspace was explicitly set */
  guint initial_workspace_set : 1;
rhp's avatar
...    
rhp committed
175
  
176
177
178
179
180
181
  /* whether an initial timestamp was explicitly set */
  guint initial_timestamp_set : 1;
  
  /* whether net_wm_user_time has been set yet */
  guint net_wm_user_time_set : 1;
  
182
  /* These are the flags from WM_PROTOCOLS */
rhp's avatar
...    
rhp committed
183
184
  guint take_focus : 1;
  guint delete_window : 1;
185
  guint net_wm_ping : 1;
rhp's avatar
...    
rhp committed
186
187
  /* Globally active / No input */
  guint input : 1;
188
  
rhp's avatar
...    
rhp committed
189
190
  /* MWM hints about features of window */
  guint mwm_decorated : 1;
191
  guint mwm_border_only : 1;
rhp's avatar
...    
rhp committed
192
193
194
195
196
197
198
  guint mwm_has_close_func : 1;
  guint mwm_has_minimize_func : 1;
  guint mwm_has_maximize_func : 1;
  guint mwm_has_move_func : 1;
  guint mwm_has_resize_func : 1;
  
  /* Computed features of window */
rhp's avatar
...    
rhp committed
199
  guint decorated : 1;
200
  guint border_only : 1;
201
  guint always_sticky : 1;
rhp's avatar
...    
rhp committed
202
203
204
  guint has_close_func : 1;
  guint has_minimize_func : 1;
  guint has_maximize_func : 1;
rhp's avatar
...    
rhp committed
205
  guint has_shade_func : 1;
rhp's avatar
...    
rhp committed
206
207
  guint has_move_func : 1;
  guint has_resize_func : 1;
208
  guint has_fullscreen_func : 1;
rhp's avatar
...    
rhp committed
209
  
rhp's avatar
...    
rhp committed
210
211
  /* Weird "_NET_WM_STATE_MODAL" flag */
  guint wm_state_modal : 1;
212
213

  /* TRUE if the client forced these on */
rhp's avatar
...    
rhp committed
214
215
  guint wm_state_skip_taskbar : 1;
  guint wm_state_skip_pager : 1;
216
217
218
219

  /* Computed whether to skip taskbar or not */
  guint skip_taskbar : 1;
  guint skip_pager : 1;
Havoc Pennington's avatar
Havoc Pennington committed
220
221
222
223

  /* TRUE if client set these */
  guint wm_state_above : 1;
  guint wm_state_below : 1;
224
225
226

  /* EWHH demands attention flag */
  guint wm_state_demands_attention : 1;
rhp's avatar
...    
rhp committed
227
  
rhp's avatar
...    
rhp committed
228
229
230
231
  /* this flag tracks receipt of focus_in focus_out and
   * determines whether we draw the focus
   */
  guint has_focus : 1;
rhp's avatar
...    
rhp committed
232
  
rhp's avatar
...    
rhp committed
233
234
235
  /* Have we placed this window? */
  guint placed : 1;

236
237
238
  /* Is this not a transient of the focus window which is being denied focus? */
  guint denied_focus_and_not_transient : 1;

239
240
241
  /* Has this window not ever been shown yet? */
  guint showing_for_first_time : 1;

rhp's avatar
...    
rhp committed
242
243
244
  /* Are we in meta_window_free()? */
  guint unmanaging : 1;

245
246
247
  /* Are we in meta_window_new()? */
  guint constructing : 1;
  
248
249
250
  /* Are we in the various queues? (Bitfield: see META_WINDOW_IS_IN_QUEUE) */
  guint is_in_queues : NUMBER_OF_QUEUES;
 
rhp's avatar
...    
rhp committed
251
  /* Used by keybindings.c */
rhp's avatar
...    
rhp committed
252
253
254
255
  guint keys_grabbed : 1;     /* normal keybindings grabbed */
  guint grab_on_frame : 1;    /* grabs are on the frame */
  guint all_keys_grabbed : 1; /* AnyKey grabbed */
  
rhp's avatar
...    
rhp committed
256
257
258
259
  /* Set if the reason for unmanaging the window is that
   * it was withdrawn
   */
  guint withdrawn : 1;
rhp's avatar
...    
rhp committed
260
261
262
263
264

  /* TRUE if constrain_position should calc placement.
   * only relevant if !window->placed
   */
  guint calc_placement : 1;
265

266
267
  /* Transient parent is a root window */
  guint transient_parent_is_root_window : 1;
268
269

  /* Info on which props we got our attributes from */
270
271
272
273
  guint using_net_wm_name              : 1; /* vs. plain wm_name */
  guint using_net_wm_visible_name      : 1; /* tracked so we can clear it */
  guint using_net_wm_icon_name         : 1; /* vs. plain wm_icon_name */
  guint using_net_wm_visible_icon_name : 1; /* tracked so we can clear it */
274

275
276
  /* has a shape mask */
  guint has_shape : 1;
277
278
279

  /* icon props have changed */
  guint need_reread_icon : 1;
280
  
281
282
283
  /* if TRUE, window was maximized at start of current grab op */
  guint shaken_loose : 1;

284
285
  /* if TRUE we have a grab on the focus click buttons */
  guint have_focus_click_grab : 1;
286
287
288
289

  /* if TRUE, application is buggy and SYNC resizing is turned off */
  guint disable_sync : 1;

290
291
292
  /* Note: can be NULL */
  GSList *struts;

293
294
#ifdef HAVE_XSYNC
  /* XSync update counter */
295
296
297
  XSyncCounter sync_request_counter;
  guint sync_request_serial;
  GTimeVal sync_request_time;
298
#endif
rhp's avatar
...    
rhp committed
299
  
rhp's avatar
...    
rhp committed
300
301
302
303
304
  /* Number of UnmapNotify that are caused by us, if
   * we get UnmapNotify with none pending then the client
   * is withdrawing the window.
   */
  int unmaps_pending;
305
306
307

  /* set to the most recent user-interaction event timestamp that we
     know about for this window */
308
  guint32 net_wm_user_time;
309
310
311

  /* window that gets updated net_wm_user_time values */
  Window user_time_window;
Havoc Pennington's avatar
Havoc Pennington committed
312
  
rhp's avatar
...    
rhp committed
313
314
315
  /* The size we set the window to last (i.e. what we believe
   * to be its actual size on the server). The x, y are
   * the actual server-side x,y so are relative to the frame
316
317
318
   * (meaning that they just hold the frame width and height) 
   * or the root window (meaning they specify the location
   * of the top left of the inner window) as appropriate.
rhp's avatar
...    
rhp committed
319
   */
rhp's avatar
...    
rhp committed
320
  MetaRectangle rect;
rhp's avatar
...    
rhp committed
321

322
323
324
325
  /* The geometry to restore when we unmaximize.  The position is in
   * root window coords, even if there's a frame, which contrasts with
   * window->rect above.  Note that this gives the position and size
   * of the client window (i.e. ignoring the frame).
rhp's avatar
...    
rhp committed
326
327
   */
  MetaRectangle saved_rect;
Havoc Pennington's avatar
Havoc Pennington committed
328
329
330

  /* This is the geometry the window had after the last user-initiated
   * move/resize operations. We use this whenever we are moving the
331
332
333
334
   * implicitly (for example, if we move to avoid a panel, we can snap
   * back to this position if the panel moves again).  Note that this
   * gives the position and size of the client window (i.e. ignoring
   * the frame).
Havoc Pennington's avatar
Havoc Pennington committed
335
336
337
   *
   * Position valid if user_has_moved, size valid if user_has_resized
   *
338
   * Position always in root coords, unlike window->rect.
Havoc Pennington's avatar
Havoc Pennington committed
339
340
   */
  MetaRectangle user_rect;
rhp's avatar
...    
rhp committed
341
342
343
344
345
  
  /* Requested geometry */
  int border_width;
  /* x/y/w/h here get filled with ConfigureRequest values */
  XSizeHints size_hints;
rhp's avatar
...    
rhp committed
346
347
348

  /* Managed by stack.c */
  MetaStackLayer layer;
349
350
  int stack_position; /* see comment in stack.h */
  
351
352
353
  /* Current dialog open for this window */
  int dialog_pid;
  int dialog_pipe;
354
355

  /* maintained by group.c */
356
  MetaGroup *group;
rhp's avatar
...  
rhp committed
357
358
};

359
360
361
362
/* These differ from window->has_foo_func in that they consider
 * the dynamic window state such as "maximized", not just the
 * window's type
 */
363
364
#define META_WINDOW_MAXIMIZED(w)       ((w)->maximized_horizontally && \
                                        (w)->maximized_vertically)
365
#define META_WINDOW_ALLOWS_MOVE(w)     ((w)->has_move_func && !(w)->fullscreen)
366
#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w)   ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !(w)->fullscreen && !(w)->shaded)
367
368
369
370
371
372
#define META_WINDOW_ALLOWS_RESIZE(w)   (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) &&                \
                                        (((w)->size_hints.min_width < (w)->size_hints.max_width) ||  \
                                         ((w)->size_hints.min_height < (w)->size_hints.max_height)))
#define META_WINDOW_ALLOWS_HORIZONTAL_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && (w)->size_hints.min_width < (w)->size_hints.max_width)
#define META_WINDOW_ALLOWS_VERTICAL_RESIZE(w)   (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && (w)->size_hints.min_height < (w)->size_hints.max_height)

rhp's avatar
...    
rhp committed
373
MetaWindow* meta_window_new                (MetaDisplay *display,
rhp's avatar
...    
rhp committed
374
375
                                            Window       xwindow,
                                            gboolean     must_be_viewable);
Havoc Pennington's avatar
Havoc Pennington committed
376
377
378
379
MetaWindow* meta_window_new_with_attrs     (MetaDisplay *display,
                                            Window       xwindow,
                                            gboolean     must_be_viewable,
                                            XWindowAttributes *attrs);
380
381
void        meta_window_free               (MetaWindow  *window,
                                            guint32      timestamp);
rhp's avatar
...    
rhp committed
382
void        meta_window_calc_showing       (MetaWindow  *window);
383
384
void        meta_window_queue              (MetaWindow  *window,
                                            guint queuebits);
rhp's avatar
...    
rhp committed
385
386
void        meta_window_minimize           (MetaWindow  *window);
void        meta_window_unminimize         (MetaWindow  *window);
387
388
389
390
391
392
393
void        meta_window_maximize           (MetaWindow        *window,
                                            MetaMaximizeFlags  directions);
void        meta_window_maximize_internal  (MetaWindow        *window,
                                            MetaMaximizeFlags  directions,
                                            MetaRectangle     *saved_rect);
void        meta_window_unmaximize         (MetaWindow        *window,
                                            MetaMaximizeFlags  directions);
394
395
void        meta_window_make_above         (MetaWindow  *window);
void        meta_window_unmake_above       (MetaWindow  *window);
396
397
398
399
void        meta_window_shade              (MetaWindow  *window,
                                            guint32      timestamp);
void        meta_window_unshade            (MetaWindow  *window,
                                            guint32      timestamp);
rhp's avatar
rhp committed
400
401
void        meta_window_change_workspace   (MetaWindow  *window,
                                            MetaWorkspace *workspace);
rhp's avatar
...    
rhp committed
402
403
void        meta_window_stick              (MetaWindow  *window);
void        meta_window_unstick            (MetaWindow  *window);
rhp's avatar
...    
rhp committed
404

405
406
void        meta_window_activate           (MetaWindow  *window,
                                            guint32      current_time);
407
408
409
410
void        meta_window_activate_with_workspace  (MetaWindow    *window,
                                                  guint32        current_time,
                                                  MetaWorkspace *workspace);   
void        meta_window_make_fullscreen_internal (MetaWindow    *window);
411
412
void        meta_window_make_fullscreen    (MetaWindow  *window);
void        meta_window_unmake_fullscreen  (MetaWindow  *window);
413

rhp's avatar
...    
rhp committed
414
415
/* args to move are window pos, not frame pos */
void        meta_window_move               (MetaWindow  *window,
Havoc Pennington's avatar
Havoc Pennington committed
416
                                            gboolean     user_op,
rhp's avatar
...    
rhp committed
417
418
                                            int          root_x_nw,
                                            int          root_y_nw);
rhp's avatar
...    
rhp committed
419
void        meta_window_resize             (MetaWindow  *window,
Havoc Pennington's avatar
Havoc Pennington committed
420
                                            gboolean     user_op,
rhp's avatar
...    
rhp committed
421
422
423
                                            int          w,
                                            int          h);
void        meta_window_move_resize        (MetaWindow  *window,
Havoc Pennington's avatar
Havoc Pennington committed
424
                                            gboolean     user_op,
rhp's avatar
...    
rhp committed
425
426
427
428
                                            int          root_x_nw,
                                            int          root_y_nw,
                                            int          w,
                                            int          h);
Havoc Pennington's avatar
Havoc Pennington committed
429
430
void        meta_window_resize_with_gravity (MetaWindow  *window,
                                             gboolean     user_op,
rhp's avatar
...    
rhp committed
431
432
433
434
                                             int          w,
                                             int          h,
                                             int          gravity);

435

436
437
438
/* Return whether the window would be showing if we were on its workspace */
gboolean    meta_window_showing_on_its_workspace (MetaWindow *window);

439
440
/* Return whether the window should be currently mapped */
gboolean    meta_window_should_be_showing   (MetaWindow  *window);
441
442
443

/* See warning in window.c about this function */
gboolean    __window_is_terminal (MetaWindow *window);
444

445
446
void        meta_window_update_struts      (MetaWindow  *window);

rhp's avatar
...    
rhp committed
447
448
449
450
/* this gets root coords */
void        meta_window_get_position       (MetaWindow  *window,
                                            int         *x,
                                            int         *y);
451
452
453
454
455
456
457

/* Gets root coords for x, y, width & height of client window; uses
 * meta_window_get_position for x & y.
 */
void        meta_window_get_client_root_coords (MetaWindow    *window,
                                                MetaRectangle *rect);

rhp's avatar
...    
rhp committed
458
459
460
461
462
463
/* gets position we need to set to stay in current position,
 * assuming position will be gravity-compensated. i.e.
 * this is the position a client would send in a configure
 * request.
 */
void        meta_window_get_gravity_position (MetaWindow  *window,
464
                                              int          gravity,
rhp's avatar
...    
rhp committed
465
466
                                              int         *x,
                                              int         *y);
rhp's avatar
...    
rhp committed
467
468
469
470
471
472
473
474
/* Get geometry for saving in the session; x/y are gravity
 * position, and w/h are in resize inc above the base size.
 */
void        meta_window_get_geometry         (MetaWindow  *window,
                                              int         *x,
                                              int         *y,
                                              int         *width,
                                              int         *height);
475
476
void        meta_window_get_outer_rect       (const MetaWindow *window,
                                              MetaRectangle    *rect);
477
478
479
void        meta_window_get_xor_rect         (MetaWindow          *window,
                                              const MetaRectangle *grab_wireframe_rect,
                                              MetaRectangle       *xor_rect);
480
481
482
483
484
485
486
487
void        meta_window_begin_wireframe (MetaWindow *window);
void        meta_window_update_wireframe (MetaWindow *window,
                                          int         x,
                                          int         y,
                                          int         width,
                                          int         height);
void        meta_window_end_wireframe (MetaWindow *window);

rhp's avatar
...    
rhp committed
488
void        meta_window_delete             (MetaWindow  *window,
489
                                            guint32      timestamp);
490
void        meta_window_kill               (MetaWindow  *window);
rhp's avatar
...    
rhp committed
491
void        meta_window_focus              (MetaWindow  *window,
492
                                            guint32      timestamp);
rhp's avatar
...    
rhp committed
493
void        meta_window_raise              (MetaWindow  *window);
Havoc Pennington's avatar
Havoc Pennington committed
494
void        meta_window_lower              (MetaWindow  *window);
rhp's avatar
...    
rhp committed
495

496
void        meta_window_update_unfocused_button_grabs (MetaWindow *window);
rhp's avatar
...    
rhp committed
497
498
499
500

/* Sends a client message */
void meta_window_send_icccm_message (MetaWindow *window,
                                     Atom        atom,
501
                                     guint32     timestamp);
rhp's avatar
...    
rhp committed
502

rhp's avatar
...    
rhp committed
503

504
505
506
507
508
509
510
void     meta_window_move_resize_request(MetaWindow *window,
                                         guint       value_mask,
                                         int         gravity,
                                         int         x,
                                         int         y,
                                         int         width,
                                         int         height);
rhp's avatar
...    
rhp committed
511
512
513
514
gboolean meta_window_configure_request (MetaWindow *window,
                                        XEvent     *event);
gboolean meta_window_property_notify   (MetaWindow *window,
                                        XEvent     *event);
rhp's avatar
...    
rhp committed
515
516
gboolean meta_window_client_message    (MetaWindow *window,
                                        XEvent     *event);
rhp's avatar
...    
rhp committed
517
518
gboolean meta_window_notify_focus      (MetaWindow *window,
                                        XEvent     *event);
rhp's avatar
...    
rhp committed
519

520
void     meta_window_set_current_workspace_hint (MetaWindow *window);
rhp's avatar
...    
rhp committed
521
522

unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);
rhp's avatar
...    
rhp committed
523
524
525
526
527

void meta_window_show_menu (MetaWindow *window,
                            int         root_x,
                            int         root_y,
                            int         button,
528
                            guint32     timestamp);
rhp's avatar
...    
rhp committed
529

530
531
532
gboolean meta_window_titlebar_is_onscreen    (MetaWindow *window);
void     meta_window_shove_titlebar_onscreen (MetaWindow *window);

rhp's avatar
...    
rhp committed
533
534
535
void meta_window_set_gravity (MetaWindow *window,
                              int         gravity);

rhp's avatar
...    
rhp committed
536
537
538
void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
                                             XEvent     *event);

539
540
GList* meta_window_get_workspaces (MetaWindow *window);

541
gboolean meta_window_located_on_workspace (MetaWindow    *window,
542
543
                                           MetaWorkspace *workspace);

544
545
546
547
548
void meta_window_get_work_area_current_xinerama (MetaWindow    *window,
                                                 MetaRectangle *area);
void meta_window_get_work_area_for_xinerama     (MetaWindow    *window,
                                                 int            which_xinerama,
                                                 MetaRectangle *area);
549
550
void meta_window_get_work_area_all_xineramas    (MetaWindow    *window,
                                                 MetaRectangle *area);
551

552

553
554
555
gboolean meta_window_same_application (MetaWindow *window,
                                       MetaWindow *other_window);

556
#define META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE(w) \
Havoc Pennington's avatar
Havoc Pennington committed
557
  ((w)->type != META_WINDOW_DOCK && (w)->type != META_WINDOW_DESKTOP)
558
#define META_WINDOW_IN_NORMAL_TAB_CHAIN(w) \
559
  (((w)->input || (w)->take_focus ) && META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE (w) && (!(w)->skip_taskbar))
Havoc Pennington's avatar
Havoc Pennington committed
560
#define META_WINDOW_IN_DOCK_TAB_CHAIN(w) \
561
  (((w)->input || (w)->take_focus) && (! META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE (w) || (w)->skip_taskbar))
562
563
#define META_WINDOW_IN_GROUP_TAB_CHAIN(w, g) \
  (((w)->input || (w)->take_focus) && (!g || meta_window_get_group(w)==g))
Havoc Pennington's avatar
Havoc Pennington committed
564

565
566
void meta_window_refresh_resize_popup (MetaWindow *window);

567
568
void meta_window_free_delete_dialog (MetaWindow *window);

569
570
571
572
573
574
575
576
void     meta_window_foreach_transient        (MetaWindow            *window,
                                               MetaWindowForeachFunc  func,
                                               void                  *data);
gboolean meta_window_is_ancestor_of_transient (MetaWindow            *window,
                                               MetaWindow            *transient);
void     meta_window_foreach_ancestor         (MetaWindow            *window,
                                               MetaWindowForeachFunc  func,
                                               void                  *data);
577
578
MetaWindow* meta_window_find_root_ancestor    (MetaWindow *window);

579

580
581
void meta_window_begin_grab_op (MetaWindow *window,
                                MetaGrabOp  op,
582
                                gboolean    frame_action,
583
                                guint32     timestamp);
584

585
586
587
void meta_window_update_keyboard_resize (MetaWindow *window,
                                         gboolean    update_cursor);
void meta_window_update_keyboard_move   (MetaWindow *window);
588

Havoc Pennington's avatar
Havoc Pennington committed
589
590
void meta_window_update_layer (MetaWindow *window);

Havoc Pennington's avatar
Havoc Pennington committed
591
592
593
gboolean meta_window_get_icon_geometry (MetaWindow    *window,
                                        MetaRectangle *rect);

Havoc Pennington's avatar
Havoc Pennington committed
594
595
const char* meta_window_get_startup_id (MetaWindow *window);

596
597
void meta_window_recalc_features    (MetaWindow *window);
void meta_window_recalc_window_type (MetaWindow *window);
598

599
600
void meta_window_stack_just_below (MetaWindow *window,
                                   MetaWindow *below_this_one);
601

602
void meta_window_set_user_time (MetaWindow *window,
603
                                guint32     timestamp);
604

605
606
607
void meta_window_set_demands_attention (MetaWindow *window);

void meta_window_unset_demands_attention (MetaWindow *window);
608
609
610

void meta_window_update_icon_now (MetaWindow *window);

611
#endif