]> Pileus Git - ~andy/gtk/blob - gdk/gdkwindow.h
Move documentation to inline comments: GdkWindow
[~andy/gtk] / gdk / gdkwindow.h
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GTK+ Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
25  */
26
27 #if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
28 #error "Only <gdk/gdk.h> can be included directly."
29 #endif
30
31 #ifndef __GDK_WINDOW_H__
32 #define __GDK_WINDOW_H__
33
34 #include <gdk/gdkdrawable.h>
35 #include <gdk/gdktypes.h>
36 #include <gdk/gdkevents.h>
37
38 G_BEGIN_DECLS
39
40 typedef struct _GdkGeometry          GdkGeometry;
41 typedef struct _GdkWindowAttr        GdkWindowAttr;
42 typedef struct _GdkPointerHooks      GdkPointerHooks;
43 typedef struct _GdkWindowRedirect    GdkWindowRedirect;
44
45 /**
46  * GdkWindowClass:
47  * @GDK_INPUT_OUTPUT: window for graphics and events
48  * @GDK_INPUT_ONLY: window for events only
49  *
50  * @GDK_INPUT_OUTPUT windows are the standard kind of window you might expect.
51  * Such windows receive events and are also displayed on screen.
52  * @GDK_INPUT_ONLY windows are invisible; they are usually placed above other
53  * windows in order to trap or filter the events. You can't draw on
54  * @GDK_INPUT_ONLY windows.
55  */
56 typedef enum
57 {
58   GDK_INPUT_OUTPUT,
59   GDK_INPUT_ONLY
60 } GdkWindowClass;
61
62 /**
63  * GdkWindowType:
64  * @GDK_WINDOW_ROOT: root window; this window has no parent, covers the entire
65  *  screen, and is created by the window system
66  * @GDK_WINDOW_TOPLEVEL: toplevel window (used to implement #GtkWindow)
67  * @GDK_WINDOW_CHILD: child window (used to implement e.g. #GtkEntry)
68  * @GDK_WINDOW_DIALOG: useless/deprecated compatibility type
69  * @GDK_WINDOW_TEMP: override redirect temporary window (used to implement
70  *  #GtkMenu)
71  * @GDK_WINDOW_FOREIGN: foreign window (see gdk_window_foreign_new())
72  * @GDK_WINDOW_OFFSCREEN: offscreen window (see
73  *  <xref linkend="OFFSCREEN-WINDOWS"/>). Since 2.18
74  *
75  * Describes the kind of window.
76  */
77 typedef enum
78 {
79   GDK_WINDOW_ROOT,
80   GDK_WINDOW_TOPLEVEL,
81   GDK_WINDOW_CHILD,
82   GDK_WINDOW_DIALOG,
83   GDK_WINDOW_TEMP,
84   GDK_WINDOW_FOREIGN,
85   GDK_WINDOW_OFFSCREEN
86 } GdkWindowType;
87
88 /**
89  * GdkWindowAttributesType:
90  * @GDK_WA_TITLE: Honor the title field
91  * @GDK_WA_X: Honor the X coordinate field
92  * @GDK_WA_Y: Honor the Y coordinate field
93  * @GDK_WA_CURSOR: Honor the cursor field
94  * @GDK_WA_COLORMAP: Honor the colormap field
95  * @GDK_WA_VISUAL: Honor the visual field
96  * @GDK_WA_WMCLASS: Honor the wmclass_class and wmclass_name fields
97  * @GDK_WA_NOREDIR: Honor the override_redirect field
98  * @GDK_WA_TYPE_HINT: Honor the type_hint field
99  *
100  * Used to indicate which fields in the #GdkWindowAttr struct should be honored.
101  * For example, if you filled in the "cursor" and "x" fields of #GdkWindowAttr,
102  * pass "@GDK_WA_X | @GDK_WA_CURSOR" to gdk_window_new(). Fields in
103  * #GdkWindowAttr not covered by a bit in this enum are required; for example,
104  * the @width/@height, @wclass, and @window_type fields are required, they have
105  * no corresponding flag in #GdkWindowAttributesType.
106  */
107 typedef enum
108 {
109   GDK_WA_TITLE     = 1 << 1,
110   GDK_WA_X         = 1 << 2,
111   GDK_WA_Y         = 1 << 3,
112   GDK_WA_CURSOR    = 1 << 4,
113   GDK_WA_COLORMAP  = 1 << 5,
114   GDK_WA_VISUAL    = 1 << 6,
115   GDK_WA_WMCLASS   = 1 << 7,
116   GDK_WA_NOREDIR   = 1 << 8,
117   GDK_WA_TYPE_HINT = 1 << 9
118 } GdkWindowAttributesType;
119
120 /* Size restriction enumeration.
121  */
122 /**
123  * GdkWindowHints:
124  * @GDK_HINT_POS: indicates that the program has positioned the window
125  * @GDK_HINT_MIN_SIZE: min size fields are set
126  * @GDK_HINT_MAX_SIZE: max size fields are set
127  * @GDK_HINT_BASE_SIZE: base size fields are set
128  * @GDK_HINT_ASPECT: aspect ratio fields are set
129  * @GDK_HINT_RESIZE_INC: resize increment fields are set
130  * @GDK_HINT_WIN_GRAVITY: window gravity field is set
131  * @GDK_HINT_USER_POS: indicates that the window's position was explicitly set
132  *  by the user
133  * @GDK_HINT_USER_SIZE: indicates that the window's size was explicitly set by
134  *  the user
135  *
136  * Used to indicate which fields of a #GdkGeometry struct should be paid
137  * attention to. Also, the presence/absence of @GDK_HINT_POS,
138  * @GDK_HINT_USER_POS, and @GDK_HINT_USER_SIZE is significant, though they don't
139  * directly refer to #GdkGeometry fields. @GDK_HINT_USER_POS will be set
140  * automatically by #GtkWindow if you call gtk_window_move().
141  * @GDK_HINT_USER_POS and @GDK_HINT_USER_SIZE should be set if the user
142  * specified a size/position using a --geometry command-line argument;
143  * gtk_window_parse_geometry() automatically sets these flags.
144  */
145 typedef enum
146 {
147   GDK_HINT_POS         = 1 << 0,
148   GDK_HINT_MIN_SIZE    = 1 << 1,
149   GDK_HINT_MAX_SIZE    = 1 << 2,
150   GDK_HINT_BASE_SIZE   = 1 << 3,
151   GDK_HINT_ASPECT      = 1 << 4,
152   GDK_HINT_RESIZE_INC  = 1 << 5,
153   GDK_HINT_WIN_GRAVITY = 1 << 6,
154   GDK_HINT_USER_POS    = 1 << 7,
155   GDK_HINT_USER_SIZE   = 1 << 8
156 } GdkWindowHints;
157
158
159 /**
160  * GdkWindowTypeHint:
161  * @GDK_WINDOW_TYPE_HINT_NORMAL: Normal toplevel window.
162  * @GDK_WINDOW_TYPE_HINT_DIALOG: Dialog window.
163  * @GDK_WINDOW_TYPE_HINT_MENU: Window used to implement a menu; GTK+ uses
164  *  this hint only for torn-off menus, see #GtkTearoffMenuItem.
165  * @GDK_WINDOW_TYPE_HINT_TOOLBAR: Window used to implement toolbars.
166  * @GDK_WINDOW_TYPE_HINT_SPLASHSCREEN: Window used to display a splash
167  *  screen during application startup.
168  * @GDK_WINDOW_TYPE_HINT_UTILITY: Utility windows which are not detached
169  *  toolbars or dialogs.
170  * @GDK_WINDOW_TYPE_HINT_DOCK: Used for creating dock or panel windows.
171  * @GDK_WINDOW_TYPE_HINT_DESKTOP: Used for creating the desktop background
172  *  window.
173  * @GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU: A menu that belongs to a menubar.
174  * @GDK_WINDOW_TYPE_HINT_POPUP_MENU: A menu that does not belong to a menubar,
175  *  e.g. a context menu.
176  * @GDK_WINDOW_TYPE_HINT_TOOLTIP: A tooltip.
177  * @GDK_WINDOW_TYPE_HINT_NOTIFICATION: A notification - typically a "bubble"
178  *  that belongs to a status icon.
179  * @GDK_WINDOW_TYPE_HINT_COMBO: A popup from a combo box.
180  * @GDK_WINDOW_TYPE_HINT_DND: A window that is used to implement a DND cursor.
181  *
182  * These are hints for the window manager that indicate what type of function
183  * the window has. The window manager can use this when determining decoration
184  * and behaviour of the window. The hint must be set before mapping the window.
185  *
186  * See the
187  * <ulink url="http://www.freedesktop.org/Standards/wm-spec">Extended
188  * Window Manager Hints</ulink> specification for more details about
189  * window types.
190  */
191 typedef enum
192 {
193   GDK_WINDOW_TYPE_HINT_NORMAL,
194   GDK_WINDOW_TYPE_HINT_DIALOG,
195   GDK_WINDOW_TYPE_HINT_MENU,            /* Torn off menu */
196   GDK_WINDOW_TYPE_HINT_TOOLBAR,
197   GDK_WINDOW_TYPE_HINT_SPLASHSCREEN,
198   GDK_WINDOW_TYPE_HINT_UTILITY,
199   GDK_WINDOW_TYPE_HINT_DOCK,
200   GDK_WINDOW_TYPE_HINT_DESKTOP,
201   GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU,   /* A drop down menu (from a menubar) */
202   GDK_WINDOW_TYPE_HINT_POPUP_MENU,      /* A popup menu (from right-click) */
203   GDK_WINDOW_TYPE_HINT_TOOLTIP,
204   GDK_WINDOW_TYPE_HINT_NOTIFICATION,
205   GDK_WINDOW_TYPE_HINT_COMBO,
206   GDK_WINDOW_TYPE_HINT_DND
207 } GdkWindowTypeHint;
208
209 /* The next two enumeration values current match the
210  * Motif constants. If this is changed, the implementation
211  * of gdk_window_set_decorations/gdk_window_set_functions
212  * will need to change as well.
213  */
214 /**
215  * GdkWMDecoration:
216  * @GDK_DECOR_ALL: all decorations should be applied.
217  * @GDK_DECOR_BORDER: a frame should be drawn around the window.
218  * @GDK_DECOR_RESIZEH: the frame should have resize handles.
219  * @GDK_DECOR_TITLE: a titlebar should be placed above the window.
220  * @GDK_DECOR_MENU: a button for opening a menu should be included.
221  * @GDK_DECOR_MINIMIZE: a minimize button should be included.
222  * @GDK_DECOR_MAXIMIZE: a maximize button should be included.
223  *
224  * These are hints originally defined by the Motif toolkit.
225  * The window manager can use them when determining how to decorate
226  * the window. The hint must be set before mapping the window.
227  */
228 typedef enum
229 {
230   GDK_DECOR_ALL         = 1 << 0,
231   GDK_DECOR_BORDER      = 1 << 1,
232   GDK_DECOR_RESIZEH     = 1 << 2,
233   GDK_DECOR_TITLE       = 1 << 3,
234   GDK_DECOR_MENU        = 1 << 4,
235   GDK_DECOR_MINIMIZE    = 1 << 5,
236   GDK_DECOR_MAXIMIZE    = 1 << 6
237 } GdkWMDecoration;
238
239 /**
240  * GdkWMFunction:
241  * @GDK_FUNC_ALL: all functions should be offered.
242  * @GDK_FUNC_RESIZE: the window should be resizable.
243  * @GDK_FUNC_MOVE: the window should be movable.
244  * @GDK_FUNC_MINIMIZE: the window should be minimizable.
245  * @GDK_FUNC_MAXIMIZE: the window should be maximizable.
246  * @GDK_FUNC_CLOSE: the window should be closable.
247  *
248  * These are hints originally defined by the Motif toolkit. The window manager
249  * can use them when determining the functions to offer for the window. The
250  * hint must be set before mapping the window.
251  */
252 typedef enum
253 {
254   GDK_FUNC_ALL          = 1 << 0,
255   GDK_FUNC_RESIZE       = 1 << 1,
256   GDK_FUNC_MOVE         = 1 << 2,
257   GDK_FUNC_MINIMIZE     = 1 << 3,
258   GDK_FUNC_MAXIMIZE     = 1 << 4,
259   GDK_FUNC_CLOSE        = 1 << 5
260 } GdkWMFunction;
261
262 /* Currently, these are the same values numerically as in the
263  * X protocol. If you change that, gdkwindow-x11.c/gdk_window_set_geometry_hints()
264  * will need fixing.
265  */
266 /**
267  * GdkGravity:
268  * @GDK_GRAVITY_NORTH_WEST: the reference point is at the top left corner.
269  * @GDK_GRAVITY_NORTH: the reference point is in the middle of the top edge.
270  * @GDK_GRAVITY_NORTH_EAST: the reference point is at the top right corner.
271  * @GDK_GRAVITY_WEST: the reference point is at the middle of the left edge.
272  * @GDK_GRAVITY_CENTER: the reference point is at the center of the window.
273  * @GDK_GRAVITY_EAST: the reference point is at the middle of the right edge.
274  * @GDK_GRAVITY_SOUTH_WEST: the reference point is at the lower left corner.
275  * @GDK_GRAVITY_SOUTH: the reference point is at the middle of the lower edge.
276  * @GDK_GRAVITY_SOUTH_EAST: the reference point is at the lower right corner.
277  * @GDK_GRAVITY_STATIC: the reference point is at the top left corner of the
278  *  window itself, ignoring window manager decorations.
279  *
280  * Defines the reference point of a window and the meaning of coordinates
281  * passed to gtk_window_move(). See gtk_window_move() and the "implementation
282  * notes" section of the
283  * <ulink url="http://www.freedesktop.org/Standards/wm-spec">Extended
284  * Window Manager Hints</ulink> specification for more details.
285  */
286 typedef enum
287 {
288   GDK_GRAVITY_NORTH_WEST = 1,
289   GDK_GRAVITY_NORTH,
290   GDK_GRAVITY_NORTH_EAST,
291   GDK_GRAVITY_WEST,
292   GDK_GRAVITY_CENTER,
293   GDK_GRAVITY_EAST,
294   GDK_GRAVITY_SOUTH_WEST,
295   GDK_GRAVITY_SOUTH,
296   GDK_GRAVITY_SOUTH_EAST,
297   GDK_GRAVITY_STATIC
298 } GdkGravity;
299
300
301 /**
302  * GdkWindowEdge:
303  * @GDK_WINDOW_EDGE_NORTH_WEST: the top left corner.
304  * @GDK_WINDOW_EDGE_NORTH: the top edge.
305  * @GDK_WINDOW_EDGE_NORTH_EAST: the top right corner.
306  * @GDK_WINDOW_EDGE_WEST: the left edge.
307  * @GDK_WINDOW_EDGE_EAST: the right edge.
308  * @GDK_WINDOW_EDGE_SOUTH_WEST: the lower left corner.
309  * @GDK_WINDOW_EDGE_SOUTH: the lower edge.
310  * @GDK_WINDOW_EDGE_SOUTH_EAST: the lower right corner.
311  *
312  * Determines a window edge or corner.
313  */
314 typedef enum
315 {
316   GDK_WINDOW_EDGE_NORTH_WEST,
317   GDK_WINDOW_EDGE_NORTH,
318   GDK_WINDOW_EDGE_NORTH_EAST,
319   GDK_WINDOW_EDGE_WEST,
320   GDK_WINDOW_EDGE_EAST,
321   GDK_WINDOW_EDGE_SOUTH_WEST,
322   GDK_WINDOW_EDGE_SOUTH,
323   GDK_WINDOW_EDGE_SOUTH_EAST  
324 } GdkWindowEdge;
325
326 /**
327  * GdkWindowAttr:
328  * @title: title of the window (for toplevel windows)
329  * @event_mask: event mask (see gdk_window_set_events())
330  * @x: X coordinate relative to parent window (see gdk_window_move())
331  * @y: Y coordinate relative to parent window (see gdk_window_move())
332  * @width: width of window
333  * @height: height of window
334  * @wclass: #GDK_INPUT_OUTPUT (normal window) or #GDK_INPUT_ONLY (invisible
335  *  window that receives events)
336  * @visual: #GdkVisual for window
337  * @colormap: #GdkColormap for window
338  * @window_type: type of window
339  * @cursor: cursor for the window (see gdk_window_set_cursor())
340  * @wmclass_name: don't use (see gtk_window_set_wmclass())
341  * @wmclass_class: don't use (see gtk_window_set_wmclass())
342  * @override_redirect: %TRUE to bypass the window manager
343  * @type_hint: a hint of the function of the window
344  *
345  * Attributes to use for a newly-created window.
346  */
347 struct _GdkWindowAttr
348 {
349   gchar *title;
350   gint event_mask;
351   gint x, y;
352   gint width;
353   gint height;
354   GdkWindowClass wclass;
355   GdkVisual *visual;
356   GdkColormap *colormap;
357   GdkWindowType window_type;
358   GdkCursor *cursor;
359   gchar *wmclass_name;
360   gchar *wmclass_class;
361   gboolean override_redirect;
362   GdkWindowTypeHint type_hint;
363 };
364
365 /**
366  * GdkGeometry:
367  * @min_width: minimum width of window (or -1 to use requisition, with
368  *  #GtkWindow only)
369  * @min_height: minimum height of window (or -1 to use requisition, with
370  *  #GtkWindow only)
371  * @max_width: maximum width of window (or -1 to use requisition, with
372  *  #GtkWindow only)
373  * @max_height: maximum height of window (or -1 to use requisition, with
374  *  #GtkWindow only)
375  * @base_width: allowed window widths are @base_width + @width_inc * N where N
376  *  is any integer (-1 allowed with #GtkWindow)
377  * @base_height: allowed window widths are @base_height + @height_inc * N where
378  *  N is any integer (-1 allowed with #GtkWindow)
379  * @width_inc: width resize increment
380  * @height_inc: height resize increment
381  * @min_aspect: minimum width/height ratio
382  * @max_aspect: maximum width/height ratio
383  * @win_gravity: window gravity, see gtk_window_set_gravity()
384  *
385  * The #GdkGeometry struct gives the window manager information about
386  * a window's geometry constraints. Normally you would set these on
387  * the GTK+ level using gtk_window_set_geometry_hints(). #GtkWindow
388  * then sets the hints on the #GdkWindow it creates.
389  *
390  * gdk_window_set_geometry_hints() expects the hints to be fully valid already
391  * and simply passes them to the window manager; in contrast,
392  * gtk_window_set_geometry_hints() performs some interpretation. For example,
393  * #GtkWindow will apply the hints to the geometry widget instead of the
394  * toplevel window, if you set a geometry widget. Also, the
395  * @min_width/@min_height/@max_width/@max_height fields may be set to -1, and
396  * #GtkWindow will substitute the size request of the window or geometry widget.
397  * If the minimum size hint is not provided, #GtkWindow will use its requisition
398  * as the minimum size. If the minimum size is provided and a geometry widget is
399  * set, #GtkWindow will take the minimum size as the minimum size of the
400  * geometry widget rather than the entire window. The base size is treated
401  * similarly.
402  *
403  * The canonical use-case for gtk_window_set_geometry_hints() is to get a
404  * terminal widget to resize properly. Here, the terminal text area should be
405  * the geometry widget; #GtkWindow will then automatically set the base size to
406  * the size of other widgets in the terminal window, such as the menubar and
407  * scrollbar. Then, the @width_inc and @height_inc fields should be set to the
408  * size of one character in the terminal. Finally, the base size should be set
409  * to the size of one character. The net effect is that the minimum size of the
410  * terminal will have a 1x1 character terminal area, and only terminal sizes on
411  * the "character grid" will be allowed.
412  *
413  * Here's an example of how the terminal example would be implemented, assuming
414  * a terminal area widget called "terminal" and a toplevel window "toplevel":
415  *
416  * <informalexample><programlisting><![CDATA[
417  *      GdkGeometry hints;
418  *
419  *      hints.base_width = terminal->char_width;
420  *         hints.base_height = terminal->char_height;
421  *         hints.min_width = terminal->char_width;
422  *         hints.min_height = terminal->char_height;
423  *         hints.width_inc = terminal->char_width;
424  *         hints.height_inc = terminal->char_height;
425  *
426  *  gtk_window_set_geometry_hints (GTK_WINDOW (toplevel),
427  *                                 GTK_WIDGET (terminal),
428  *                                 &hints,
429  *                                 GDK_HINT_RESIZE_INC |
430  *                                 GDK_HINT_MIN_SIZE |
431  *                                 GDK_HINT_BASE_SIZE);
432  * ]]></programlisting></informalexample>
433  *
434  * The other useful fields are the @min_aspect and @max_aspect fields; these
435  * contain a width/height ratio as a floating point number. If a geometry widget
436  * is set, the aspect applies to the geometry widget rather than the entire
437  * window. The most common use of these hints is probably to set @min_aspect and
438  * @max_aspect to the same value, thus forcing the window to keep a constant
439  * aspect ratio.
440  */
441 struct _GdkGeometry
442 {
443   gint min_width;
444   gint min_height;
445   gint max_width;
446   gint max_height;
447   gint base_width;
448   gint base_height;
449   gint width_inc;
450   gint height_inc;
451   gdouble min_aspect;
452   gdouble max_aspect;
453   GdkGravity win_gravity;
454 };
455
456 /**
457  * GdkPointerHooks:
458  * @get_pointer: Obtains the current pointer position and modifier state.
459  *  The position is given in coordinates relative to the window containing
460  *  the pointer, which is returned in @window.
461  * @window_at_pointer: Obtains the window underneath the mouse pointer,
462  *  returning the location of that window in @win_x, @win_y. Returns %NULL
463  *  if the window under the mouse pointer is not known to GDK (for example,
464  *  belongs to another application).
465  *
466  * A table of pointers to functions for getting quantities related to
467  * the current pointer position. GDK has one global table of this type,
468  * which can be set using gdk_set_pointer_hooks().
469  *
470  * This is only useful for such low-level tools as an event recorder.
471  * Applications should never have any reason to use this facility
472  */
473 struct _GdkPointerHooks 
474 {
475   GdkWindow* (*get_pointer)       (GdkWindow       *window,
476                                    gint            *x,
477                                    gint            *y,
478                                    GdkModifierType *mask);
479   GdkWindow* (*window_at_pointer) (GdkScreen       *screen, /* unused */
480                                    gint            *win_x,
481                                    gint            *win_y);
482 };
483
484 typedef struct _GdkWindowObject GdkWindowObject;
485 typedef struct _GdkWindowObjectClass GdkWindowObjectClass;
486
487 #define GDK_TYPE_WINDOW              (gdk_window_object_get_type ())
488 #define GDK_WINDOW(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW, GdkWindow))
489 #define GDK_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW, GdkWindowObjectClass))
490 #define GDK_IS_WINDOW(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW))
491 #define GDK_IS_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW))
492 #define GDK_WINDOW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW, GdkWindowObjectClass))
493
494 #ifndef GDK_DISABLE_DEPRECATED
495 #define GDK_WINDOW_OBJECT(object)    ((GdkWindowObject *) GDK_WINDOW (object))
496
497 #ifndef GDK_COMPILATION
498
499 /* We used to export all of GdkWindowObject, but we don't want to keep doing so.
500    However, there are various parts of it accessed by macros and other code,
501    so we keep the old exported version public, but in reality it is larger. */
502
503 /**** DON'T CHANGE THIS STRUCT, the real version is in gdkinternals.h ****/
504 struct _GdkWindowObject
505 {
506   GdkDrawable parent_instance;
507
508   GdkDrawable *impl; /* window-system-specific delegate object */  
509   
510   GdkWindowObject *parent;
511
512   gpointer user_data;
513
514   gint x;
515   gint y;
516   
517   gint extension_events;
518
519   GList *filters;
520   GList *children;
521
522   GdkColor bg_color;
523   GdkPixmap *bg_pixmap;
524   
525   GSList *paint_stack;
526   
527   GdkRegion *update_area;
528   guint update_freeze_count;
529   
530   guint8 window_type;
531   guint8 depth;
532   guint8 resize_count;
533
534   GdkWindowState state;
535   
536   guint guffaw_gravity : 1;
537   guint input_only : 1;
538   guint modal_hint : 1;
539   guint composited : 1;
540   
541   guint destroyed : 2;
542
543   guint accept_focus : 1;
544   guint focus_on_map : 1;
545   guint shaped : 1;
546   
547   GdkEventMask event_mask;
548
549   guint update_and_descendants_freeze_count;
550
551   GdkWindowRedirect *redirect;
552 };
553 #endif
554 #endif
555
556 struct _GdkWindowObjectClass
557 {
558   GdkDrawableClass parent_class;
559 };
560
561 /* Windows
562  */
563 GType         gdk_window_object_get_type       (void) G_GNUC_CONST;
564 GdkWindow*    gdk_window_new                   (GdkWindow     *parent,
565                                                 GdkWindowAttr *attributes,
566                                                 gint           attributes_mask);
567 void          gdk_window_destroy               (GdkWindow     *window);
568 GdkWindowType gdk_window_get_window_type       (GdkWindow     *window);
569 gboolean      gdk_window_is_destroyed          (GdkWindow     *window);
570 GdkWindow*    gdk_window_at_pointer            (gint          *win_x,
571                                                 gint          *win_y);
572 void          gdk_window_show                  (GdkWindow     *window);
573 void          gdk_window_hide                  (GdkWindow     *window);
574 void          gdk_window_withdraw              (GdkWindow     *window);
575 void          gdk_window_show_unraised         (GdkWindow     *window);
576 void          gdk_window_move                  (GdkWindow     *window,
577                                                 gint           x,
578                                                 gint           y);
579 void          gdk_window_resize                (GdkWindow     *window,
580                                                 gint           width,
581                                                 gint           height);
582 void          gdk_window_move_resize           (GdkWindow     *window,
583                                                 gint           x,
584                                                 gint           y,
585                                                 gint           width,
586                                                 gint           height);
587 void          gdk_window_reparent              (GdkWindow     *window,
588                                                 GdkWindow     *new_parent,
589                                                 gint           x,
590                                                 gint           y);
591 void          gdk_window_clear                 (GdkWindow     *window);
592 void          gdk_window_clear_area            (GdkWindow     *window,
593                                                 gint           x,
594                                                 gint           y,
595                                                 gint           width,
596                                                 gint           height);
597 void          gdk_window_clear_area_e          (GdkWindow     *window,
598                                                 gint           x,
599                                                 gint           y,
600                                                 gint           width,
601                                                 gint           height);
602 void          gdk_window_raise                 (GdkWindow     *window);
603 void          gdk_window_lower                 (GdkWindow     *window);
604 void          gdk_window_restack               (GdkWindow     *window,
605                                                 GdkWindow     *sibling,
606                                                 gboolean       above);
607 void          gdk_window_focus                 (GdkWindow     *window,
608                                                 guint32        timestamp);
609 void          gdk_window_set_user_data         (GdkWindow     *window,
610                                                 gpointer       user_data);
611 void          gdk_window_set_override_redirect (GdkWindow     *window,
612                                                 gboolean       override_redirect);
613 void          gdk_window_set_accept_focus      (GdkWindow     *window,
614                                                 gboolean       accept_focus);
615 void          gdk_window_set_focus_on_map      (GdkWindow     *window,
616                                                 gboolean       focus_on_map);
617 void          gdk_window_add_filter            (GdkWindow     *window,
618                                                 GdkFilterFunc  function,
619                                                 gpointer       data);
620 void          gdk_window_remove_filter         (GdkWindow     *window,
621                                                 GdkFilterFunc  function,
622                                                 gpointer       data);
623 void          gdk_window_scroll                (GdkWindow     *window,
624                                                 gint           dx,
625                                                 gint           dy);
626 void          gdk_window_move_region           (GdkWindow       *window,
627                                                 const GdkRegion *region,
628                                                 gint             dx,
629                                                 gint             dy);
630 gboolean      gdk_window_ensure_native        (GdkWindow       *window);
631
632 /* 
633  * This allows for making shaped (partially transparent) windows
634  * - cool feature, needed for Drag and Drag for example.
635  *  The shape_mask can be the mask
636  *  from gdk_pixmap_create_from_xpm.   Stefan Wille
637  */
638 void gdk_window_shape_combine_mask  (GdkWindow        *window,
639                                      GdkBitmap        *mask,
640                                      gint              x,
641                                      gint              y);
642 void gdk_window_shape_combine_region (GdkWindow       *window,
643                                       const GdkRegion *shape_region,
644                                       gint             offset_x,
645                                       gint             offset_y);
646
647 /*
648  * This routine allows you to quickly take the shapes of all the child windows
649  * of a window and use their shapes as the shape mask for this window - useful
650  * for container windows that dont want to look like a big box
651  * 
652  * - Raster
653  */
654 void gdk_window_set_child_shapes (GdkWindow *window);
655
656 void gdk_window_set_composited   (GdkWindow *window,
657                                   gboolean   composited);
658
659 /*
660  * This routine allows you to merge (ie ADD) child shapes to your
661  * own window's shape keeping its current shape and ADDING the child
662  * shapes to it.
663  * 
664  * - Raster
665  */
666 void gdk_window_merge_child_shapes         (GdkWindow       *window);
667
668 void gdk_window_input_shape_combine_mask   (GdkWindow       *window,
669                                             GdkBitmap       *mask,
670                                             gint             x,
671                                             gint             y);
672 void gdk_window_input_shape_combine_region (GdkWindow       *window,
673                                             const GdkRegion *shape_region,
674                                             gint             offset_x,
675                                             gint             offset_y);
676 void gdk_window_set_child_input_shapes     (GdkWindow       *window);
677 void gdk_window_merge_child_input_shapes   (GdkWindow       *window);
678
679
680 /*
681  * Check if a window has been shown, and whether all its
682  * parents up to a toplevel have been shown, respectively.
683  * Note that a window that is_viewable below is not necessarily
684  * viewable in the X sense.
685  */
686 gboolean gdk_window_is_visible     (GdkWindow *window);
687 gboolean gdk_window_is_viewable    (GdkWindow *window);
688
689 GdkWindowState gdk_window_get_state (GdkWindow *window);
690
691 /* Set static bit gravity on the parent, and static
692  * window gravity on all children.
693  */
694 gboolean gdk_window_set_static_gravities (GdkWindow *window,
695                                           gboolean   use_static);   
696
697 /* Functions to create/lookup windows from their native equivalents */ 
698 #ifndef GDK_MULTIHEAD_SAFE
699 GdkWindow*    gdk_window_foreign_new (GdkNativeWindow anid);
700 GdkWindow*    gdk_window_lookup      (GdkNativeWindow anid);
701 #endif
702 GdkWindow    *gdk_window_foreign_new_for_display (GdkDisplay      *display,
703                                                   GdkNativeWindow  anid);
704 GdkWindow*    gdk_window_lookup_for_display (GdkDisplay      *display,
705                                              GdkNativeWindow  anid);
706
707
708 /* GdkWindow */
709
710 void              gdk_window_set_type_hint (GdkWindow        *window,
711                                             GdkWindowTypeHint hint);
712 GdkWindowTypeHint gdk_window_get_type_hint (GdkWindow        *window);
713
714 void          gdk_window_set_modal_hint   (GdkWindow       *window,
715                                            gboolean         modal);
716
717 void gdk_window_set_skip_taskbar_hint (GdkWindow *window,
718                                        gboolean   skips_taskbar);
719 void gdk_window_set_skip_pager_hint   (GdkWindow *window,
720                                        gboolean   skips_pager);
721 void gdk_window_set_urgency_hint      (GdkWindow *window,
722                                        gboolean   urgent);
723
724 void          gdk_window_set_geometry_hints (GdkWindow          *window,
725                                              const GdkGeometry  *geometry,
726                                              GdkWindowHints      geom_mask);
727 void          gdk_set_sm_client_id          (const gchar        *sm_client_id);
728
729 void          gdk_window_begin_paint_rect   (GdkWindow          *window,
730                                              const GdkRectangle *rectangle);
731 void          gdk_window_begin_paint_region (GdkWindow          *window,
732                                              const GdkRegion    *region);
733 void          gdk_window_end_paint          (GdkWindow          *window);
734 void          gdk_window_flush             (GdkWindow          *window);
735
736 void          gdk_window_set_title         (GdkWindow     *window,
737                                             const gchar   *title);
738 void          gdk_window_set_role          (GdkWindow       *window,
739                                             const gchar     *role);
740 void          gdk_window_set_startup_id    (GdkWindow       *window,
741                                             const gchar     *startup_id);                                         
742 void          gdk_window_set_transient_for (GdkWindow       *window, 
743                                             GdkWindow       *parent);
744 void          gdk_window_set_background  (GdkWindow       *window,
745                                           const GdkColor  *color);
746 void          gdk_window_set_back_pixmap (GdkWindow       *window,
747                                           GdkPixmap       *pixmap,
748                                           gboolean         parent_relative);
749 void          gdk_window_set_cursor      (GdkWindow       *window,
750                                           GdkCursor       *cursor);
751 GdkCursor    *gdk_window_get_cursor      (GdkWindow       *window);
752 void          gdk_window_get_user_data   (GdkWindow       *window,
753                                           gpointer        *data);
754 void          gdk_window_get_geometry    (GdkWindow       *window,
755                                           gint            *x,
756                                           gint            *y,
757                                           gint            *width,
758                                           gint            *height,
759                                           gint            *depth);
760 void          gdk_window_get_position    (GdkWindow       *window,
761                                           gint            *x,
762                                           gint            *y);
763 gint          gdk_window_get_origin      (GdkWindow       *window,
764                                           gint            *x,
765                                           gint            *y);
766 void          gdk_window_get_root_coords (GdkWindow       *window,
767                                           gint             x,
768                                           gint             y,
769                                           gint            *root_x,
770                                           gint            *root_y);
771 void       gdk_window_coords_to_parent   (GdkWindow       *window,
772                                           gdouble          x,
773                                           gdouble          y,
774                                           gdouble         *parent_x,
775                                           gdouble         *parent_y);
776 void       gdk_window_coords_from_parent (GdkWindow       *window,
777                                           gdouble          parent_x,
778                                           gdouble          parent_y,
779                                           gdouble         *x,
780                                           gdouble         *y);
781
782 #if !defined (GDK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION) || defined (GDK_COMPILATION)
783 /* Used by gtk_handle_box_button_changed () */
784 gboolean      gdk_window_get_deskrelative_origin (GdkWindow       *window,
785                                           gint            *x,
786                                           gint            *y);
787 #endif
788
789 void          gdk_window_get_root_origin (GdkWindow       *window,
790                                           gint            *x,
791                                           gint            *y);
792 void          gdk_window_get_frame_extents (GdkWindow     *window,
793                                             GdkRectangle  *rect);
794 GdkWindow*    gdk_window_get_pointer     (GdkWindow       *window,
795                                           gint            *x,
796                                           gint            *y,
797                                           GdkModifierType *mask);
798 GdkWindow *   gdk_window_get_parent      (GdkWindow       *window);
799 GdkWindow *   gdk_window_get_toplevel    (GdkWindow       *window);
800
801 GdkWindow *   gdk_window_get_effective_parent   (GdkWindow *window);
802 GdkWindow *   gdk_window_get_effective_toplevel (GdkWindow *window);
803
804 GList *       gdk_window_get_children    (GdkWindow       *window);
805 GList *       gdk_window_peek_children   (GdkWindow       *window);
806 GdkEventMask  gdk_window_get_events      (GdkWindow       *window);
807 void          gdk_window_set_events      (GdkWindow       *window,
808                                           GdkEventMask     event_mask);
809
810 void          gdk_window_set_icon_list   (GdkWindow       *window,
811                                           GList           *pixbufs);
812 void          gdk_window_set_icon        (GdkWindow       *window, 
813                                           GdkWindow       *icon_window,
814                                           GdkPixmap       *pixmap,
815                                           GdkBitmap       *mask);
816 void          gdk_window_set_icon_name   (GdkWindow       *window, 
817                                           const gchar     *name);
818 void          gdk_window_set_group       (GdkWindow       *window, 
819                                           GdkWindow       *leader);
820 GdkWindow*    gdk_window_get_group       (GdkWindow       *window);
821 void          gdk_window_set_decorations (GdkWindow       *window,
822                                           GdkWMDecoration  decorations);
823 gboolean      gdk_window_get_decorations (GdkWindow       *window,
824                                           GdkWMDecoration *decorations);
825 void          gdk_window_set_functions   (GdkWindow       *window,
826                                           GdkWMFunction    functions);
827 #if !defined(GDK_MULTIHEAD_SAFE) && !defined(GDK_DISABLE_DEPRECATED)
828 GList *       gdk_window_get_toplevels   (void);
829 #endif
830
831 void          gdk_window_beep            (GdkWindow       *window);
832 void          gdk_window_iconify         (GdkWindow       *window);
833 void          gdk_window_deiconify       (GdkWindow       *window);
834 void          gdk_window_stick           (GdkWindow       *window);
835 void          gdk_window_unstick         (GdkWindow       *window);
836 void          gdk_window_maximize        (GdkWindow       *window);
837 void          gdk_window_unmaximize      (GdkWindow       *window);
838 void          gdk_window_fullscreen      (GdkWindow       *window);
839 void          gdk_window_unfullscreen    (GdkWindow       *window);
840 void          gdk_window_set_keep_above  (GdkWindow       *window,
841                                           gboolean         setting);
842 void          gdk_window_set_keep_below  (GdkWindow       *window,
843                                           gboolean         setting);
844 void          gdk_window_set_opacity     (GdkWindow       *window,
845                                           gdouble          opacity);
846 void          gdk_window_register_dnd    (GdkWindow       *window);
847
848 void gdk_window_begin_resize_drag (GdkWindow     *window,
849                                    GdkWindowEdge  edge,
850                                    gint           button,
851                                    gint           root_x,
852                                    gint           root_y,
853                                    guint32        timestamp);
854 void gdk_window_begin_move_drag   (GdkWindow     *window,
855                                    gint           button,
856                                    gint           root_x,
857                                    gint           root_y,
858                                    guint32        timestamp);
859
860 /* Interface for dirty-region queueing */
861 void       gdk_window_invalidate_rect           (GdkWindow          *window,
862                                                  const GdkRectangle *rect,
863                                                  gboolean            invalidate_children);
864 void       gdk_window_invalidate_region         (GdkWindow          *window,
865                                                  const GdkRegion    *region,
866                                                  gboolean            invalidate_children);
867 void       gdk_window_invalidate_maybe_recurse  (GdkWindow          *window,
868                                                  const GdkRegion    *region,
869                                                  gboolean (*child_func) (GdkWindow *, gpointer),
870                                                  gpointer   user_data);
871 GdkRegion *gdk_window_get_update_area     (GdkWindow    *window);
872
873 void       gdk_window_freeze_updates      (GdkWindow    *window);
874 void       gdk_window_thaw_updates        (GdkWindow    *window);
875
876 void       gdk_window_freeze_toplevel_updates_libgtk_only (GdkWindow *window);
877 void       gdk_window_thaw_toplevel_updates_libgtk_only   (GdkWindow *window);
878
879 void       gdk_window_process_all_updates (void);
880 void       gdk_window_process_updates     (GdkWindow    *window,
881                                            gboolean      update_children);
882
883 /* Enable/disable flicker, so you can tell if your code is inefficient. */
884 void       gdk_window_set_debug_updates   (gboolean      setting);
885
886 void       gdk_window_constrain_size      (GdkGeometry  *geometry,
887                                            guint         flags,
888                                            gint          width,
889                                            gint          height,
890                                            gint         *new_width,
891                                            gint         *new_height);
892
893 void gdk_window_get_internal_paint_info (GdkWindow    *window,
894                                          GdkDrawable **real_drawable,
895                                          gint         *x_offset,
896                                          gint         *y_offset);
897
898 void gdk_window_enable_synchronized_configure (GdkWindow *window);
899 void gdk_window_configure_finished            (GdkWindow *window);
900
901 #ifndef GDK_MULTIHEAD_SAFE
902 GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);   
903 #endif /* GDK_MULTIHEAD_SAFE */
904
905 GdkWindow *gdk_get_default_root_window (void);
906
907 /* Offscreen redirection */
908 GdkPixmap *gdk_offscreen_window_get_pixmap     (GdkWindow     *window);
909 void       gdk_offscreen_window_set_embedder   (GdkWindow     *window,
910                                                 GdkWindow     *embedder);
911 GdkWindow *gdk_offscreen_window_get_embedder   (GdkWindow     *window);
912 void       gdk_window_geometry_changed         (GdkWindow     *window);
913
914 void       gdk_window_redirect_to_drawable   (GdkWindow     *window,
915                                               GdkDrawable   *drawable,
916                                               gint           src_x,
917                                               gint           src_y,
918                                               gint           dest_x,
919                                               gint           dest_y,
920                                               gint           width,
921                                               gint           height);
922 void       gdk_window_remove_redirection     (GdkWindow     *window);
923
924
925 G_END_DECLS
926
927 #endif /* __GDK_WINDOW_H__ */