1 #ifndef __GDK_WINDOW_H__
2 #define __GDK_WINDOW_H__
4 #include <gdk/gdkdrawable.h>
5 #include <gdk/gdktypes.h>
6 #include <gdk/gdkwindow.h>
7 #include <gdk/gdkevents.h>
11 #endif /* __cplusplus */
13 typedef struct _GdkGeometry GdkGeometry;
14 typedef struct _GdkWindowAttr GdkWindowAttr;
15 typedef struct _GdkPointerHooks GdkPointerHooks;
17 /* Classes of windows.
18 * InputOutput: Almost every window should be of this type. Such windows
19 * receive events and are also displayed on screen.
20 * InputOnly: Used only in special circumstances when events need to be
21 * stolen from another window or windows. Input only windows
22 * have no visible output, so they are handy for placing over
23 * top of a group of windows in order to grab the events (or
24 * filter the events) from those windows.
33 * Root: There is only 1 root window and it is initialized
34 * at startup. Creating a window of type GDK_WINDOW_ROOT
36 * Toplevel: Windows which interact with the window manager.
37 * Child: Windows which are children of some other type of window.
38 * (Any other type of window). Most windows are child windows.
39 * Dialog: A special kind of toplevel window which interacts with
40 * the window manager slightly differently than a regular
41 * toplevel window. Dialog windows should be used for any
43 * Foreign: A window that actually belongs to another application
55 /* Window attribute mask values.
56 * GDK_WA_TITLE: The "title" field is valid.
57 * GDK_WA_X: The "x" field is valid.
58 * GDK_WA_Y: The "y" field is valid.
59 * GDK_WA_CURSOR: The "cursor" field is valid.
60 * GDK_WA_COLORMAP: The "colormap" field is valid.
61 * GDK_WA_VISUAL: The "visual" field is valid.
65 GDK_WA_TITLE = 1 << 1,
68 GDK_WA_CURSOR = 1 << 4,
69 GDK_WA_COLORMAP = 1 << 5,
70 GDK_WA_VISUAL = 1 << 6,
71 GDK_WA_WMCLASS = 1 << 7,
72 GDK_WA_NOREDIR = 1 << 8
73 } GdkWindowAttributesType;
75 /* Size restriction enumeration.
79 GDK_HINT_POS = 1 << 0,
80 GDK_HINT_MIN_SIZE = 1 << 1,
81 GDK_HINT_MAX_SIZE = 1 << 2,
82 GDK_HINT_BASE_SIZE = 1 << 3,
83 GDK_HINT_ASPECT = 1 << 4,
84 GDK_HINT_RESIZE_INC = 1 << 5,
85 GDK_HINT_WIN_GRAVITY = 1 << 6,
86 GDK_HINT_USER_POS = 1 << 7,
87 GDK_HINT_USER_SIZE = 1 << 8
92 * These are hints for the window manager that indicate
93 * what type of function the window has. The window manager
94 * can use this when determining decoration and behaviour
95 * of the window. The hint must be set before mapping the
98 * Normal: Normal toplevel window
99 * Dialog: Dialog window
100 * Menu: Window used to implement a menu.
101 * Toolbar: Window used to implement toolbars.
105 GDK_WINDOW_TYPE_HINT_NORMAL,
106 GDK_WINDOW_TYPE_HINT_DIALOG,
107 GDK_WINDOW_TYPE_HINT_MENU,
108 GDK_WINDOW_TYPE_HINT_TOOLBAR
112 /* The next two enumeration values current match the
113 * Motif constants. If this is changed, the implementation
114 * of gdk_window_set_decorations/gdk_window_set_functions
115 * will need to change as well.
119 GDK_DECOR_ALL = 1 << 0,
120 GDK_DECOR_BORDER = 1 << 1,
121 GDK_DECOR_RESIZEH = 1 << 2,
122 GDK_DECOR_TITLE = 1 << 3,
123 GDK_DECOR_MENU = 1 << 4,
124 GDK_DECOR_MINIMIZE = 1 << 5,
125 GDK_DECOR_MAXIMIZE = 1 << 6
130 GDK_FUNC_ALL = 1 << 0,
131 GDK_FUNC_RESIZE = 1 << 1,
132 GDK_FUNC_MOVE = 1 << 2,
133 GDK_FUNC_MINIMIZE = 1 << 3,
134 GDK_FUNC_MAXIMIZE = 1 << 4,
135 GDK_FUNC_CLOSE = 1 << 5
138 /* Currently, these are the same values numerically as in the
139 * X protocol. If you change that, gdkwindow-x11.c/gdk_window_set_geometry_hints()
144 GDK_GRAVITY_NORTH_WEST = 1,
146 GDK_GRAVITY_NORTH_EAST,
150 GDK_GRAVITY_SOUTH_WEST,
152 GDK_GRAVITY_SOUTH_EAST,
159 GDK_WINDOW_EDGE_NORTH_WEST,
160 GDK_WINDOW_EDGE_NORTH,
161 GDK_WINDOW_EDGE_NORTH_EAST,
162 GDK_WINDOW_EDGE_WEST,
163 GDK_WINDOW_EDGE_EAST,
164 GDK_WINDOW_EDGE_SOUTH_WEST,
165 GDK_WINDOW_EDGE_SOUTH,
166 GDK_WINDOW_EDGE_SOUTH_EAST
169 struct _GdkWindowAttr
176 GdkWindowClass wclass;
178 GdkColormap *colormap;
179 GdkWindowType window_type;
182 gchar *wmclass_class;
183 gboolean override_redirect;
198 GdkGravity win_gravity;
201 struct _GdkPointerHooks
203 GdkWindow* (*get_pointer) (GdkWindow *window,
206 GdkModifierType *mask);
207 GdkWindow* (*window_at_pointer) (gint *win_x,
211 typedef struct _GdkWindowObject GdkWindowObject;
212 typedef struct _GdkWindowObjectClass GdkWindowObjectClass;
214 #define GDK_TYPE_WINDOW (gdk_window_object_get_type ())
215 #define GDK_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW, GdkWindow))
216 #define GDK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW, GdkWindowObjectClass))
217 #define GDK_IS_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW))
218 #define GDK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW))
219 #define GDK_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW, GdkWindowObjectClass))
220 #define GDK_WINDOW_OBJECT(object) ((GdkWindowObject *) GDK_WINDOW (object))
222 struct _GdkWindowObject
224 GdkDrawable parent_instance;
226 GdkDrawable *impl; /* window-system-specific delegate object */
228 GdkWindowObject *parent;
235 gint extension_events;
241 GdkPixmap *bg_pixmap;
245 GdkRegion *update_area;
246 guint update_freeze_count;
252 GdkWindowState state;
254 guint guffaw_gravity : 1;
255 guint input_only : 1;
256 guint modal_hint : 1;
261 struct _GdkWindowObjectClass
263 GdkDrawableClass parent_class;
268 GType gdk_window_object_get_type (void) G_GNUC_CONST;
269 GdkWindow* gdk_window_new (GdkWindow *parent,
270 GdkWindowAttr *attributes,
271 gint attributes_mask);
272 void gdk_window_destroy (GdkWindow *window);
273 GdkWindowType gdk_window_get_window_type (GdkWindow *window);
274 GdkWindow* gdk_window_at_pointer (gint *win_x,
276 void gdk_window_show (GdkWindow *window);
277 void gdk_window_hide (GdkWindow *window);
278 void gdk_window_withdraw (GdkWindow *window);
279 void gdk_window_show_unraised (GdkWindow *window);
280 void gdk_window_move (GdkWindow *window,
283 void gdk_window_resize (GdkWindow *window,
286 void gdk_window_move_resize (GdkWindow *window,
291 void gdk_window_reparent (GdkWindow *window,
292 GdkWindow *new_parent,
295 void gdk_window_clear (GdkWindow *window);
296 void gdk_window_clear_area (GdkWindow *window,
301 void gdk_window_clear_area_e (GdkWindow *window,
306 void gdk_window_raise (GdkWindow *window);
307 void gdk_window_lower (GdkWindow *window);
308 void gdk_window_focus (GdkWindow *window,
310 void gdk_window_set_user_data (GdkWindow *window,
312 void gdk_window_set_override_redirect (GdkWindow *window,
313 gboolean override_redirect);
314 void gdk_window_add_filter (GdkWindow *window,
315 GdkFilterFunc function,
317 void gdk_window_remove_filter (GdkWindow *window,
318 GdkFilterFunc function,
320 void gdk_window_scroll (GdkWindow *window,
325 * This allows for making shaped (partially transparent) windows
326 * - cool feature, needed for Drag and Drag for example.
327 * The shape_mask can be the mask
328 * from gdk_pixmap_create_from_xpm. Stefan Wille
330 void gdk_window_shape_combine_mask (GdkWindow *window,
331 GdkBitmap *shape_mask,
334 void gdk_window_shape_combine_region (GdkWindow *window,
335 GdkRegion *shape_region,
340 * This routine allows you to quickly take the shapes of all the child windows
341 * of a window and use their shapes as the shape mask for this window - useful
342 * for container windows that dont want to look like a big box
346 void gdk_window_set_child_shapes (GdkWindow *window);
349 * This routine allows you to merge (ie ADD) child shapes to your
350 * own window's shape keeping its current shape and ADDING the child
355 void gdk_window_merge_child_shapes (GdkWindow *window);
358 * Check if a window has been shown, and whether all its
359 * parents up to a toplevel have been shown, respectively.
360 * Note that a window that is_viewable below is not necessarily
361 * viewable in the X sense.
363 gboolean gdk_window_is_visible (GdkWindow *window);
364 gboolean gdk_window_is_viewable (GdkWindow *window);
366 GdkWindowState gdk_window_get_state (GdkWindow *window);
368 /* Set static bit gravity on the parent, and static
369 * window gravity on all children.
371 gboolean gdk_window_set_static_gravities (GdkWindow *window,
372 gboolean use_static);
376 void gdk_window_set_hints (GdkWindow *window,
384 void gdk_window_set_type_hint (GdkWindow *window,
385 GdkWindowTypeHint hint);
386 void gdk_window_set_modal_hint (GdkWindow *window,
388 void gdk_window_set_geometry_hints (GdkWindow *window,
389 GdkGeometry *geometry,
390 GdkWindowHints flags);
391 void gdk_set_sm_client_id (const gchar *sm_client_id);
393 void gdk_window_begin_paint_rect (GdkWindow *window,
394 GdkRectangle *rectangle);
395 void gdk_window_begin_paint_region (GdkWindow *window,
397 void gdk_window_end_paint (GdkWindow *window);
399 void gdk_window_set_title (GdkWindow *window,
401 void gdk_window_set_role (GdkWindow *window,
403 void gdk_window_set_transient_for (GdkWindow *window,
405 void gdk_window_set_background (GdkWindow *window,
407 void gdk_window_set_back_pixmap (GdkWindow *window,
409 gboolean parent_relative);
410 void gdk_window_set_cursor (GdkWindow *window,
412 void gdk_window_get_user_data (GdkWindow *window,
414 void gdk_window_get_geometry (GdkWindow *window,
420 void gdk_window_get_position (GdkWindow *window,
423 gint gdk_window_get_origin (GdkWindow *window,
426 gboolean gdk_window_get_deskrelative_origin (GdkWindow *window,
429 void gdk_window_get_root_origin (GdkWindow *window,
432 void gdk_window_get_frame_extents (GdkWindow *window,
434 GdkWindow* gdk_window_get_pointer (GdkWindow *window,
437 GdkModifierType *mask);
438 GdkWindow * gdk_window_get_parent (GdkWindow *window);
439 GdkWindow * gdk_window_get_toplevel (GdkWindow *window);
441 GList * gdk_window_get_children (GdkWindow *window);
442 GList * gdk_window_peek_children (GdkWindow *window);
443 GdkEventMask gdk_window_get_events (GdkWindow *window);
444 void gdk_window_set_events (GdkWindow *window,
445 GdkEventMask event_mask);
447 gboolean gdk_window_set_icon_list (GdkWindow *window,
449 void gdk_window_set_icon (GdkWindow *window,
450 GdkWindow *icon_window,
453 void gdk_window_set_icon_name (GdkWindow *window,
455 void gdk_window_set_group (GdkWindow *window,
457 void gdk_window_set_decorations (GdkWindow *window,
458 GdkWMDecoration decorations);
459 gboolean gdk_window_get_decorations (GdkWindow *window,
460 GdkWMDecoration *decorations);
461 void gdk_window_set_functions (GdkWindow *window,
462 GdkWMFunction functions);
463 GList * gdk_window_get_toplevels (void);
465 void gdk_window_iconify (GdkWindow *window);
466 void gdk_window_deiconify (GdkWindow *window);
467 void gdk_window_stick (GdkWindow *window);
468 void gdk_window_unstick (GdkWindow *window);
469 void gdk_window_maximize (GdkWindow *window);
470 void gdk_window_unmaximize (GdkWindow *window);
472 void gdk_window_register_dnd (GdkWindow *window);
474 void gdk_window_begin_resize_drag (GdkWindow *window,
480 void gdk_window_begin_move_drag (GdkWindow *window,
486 /* Interface for dirty-region queueing */
487 void gdk_window_invalidate_rect (GdkWindow *window,
489 gboolean invalidate_children);
490 void gdk_window_invalidate_region (GdkWindow *window,
492 gboolean invalidate_children);
493 GdkRegion *gdk_window_get_update_area (GdkWindow *window);
495 void gdk_window_freeze_updates (GdkWindow *window);
496 void gdk_window_thaw_updates (GdkWindow *window);
498 void gdk_window_process_all_updates (void);
499 void gdk_window_process_updates (GdkWindow *window,
500 gboolean update_children);
502 /* Enable/disable flicker, so you can tell if your code is inefficient. */
503 void gdk_window_set_debug_updates (gboolean setting);
505 void gdk_window_constrain_size (GdkGeometry *geometry,
512 void gdk_window_get_internal_paint_info (GdkWindow *window,
513 GdkDrawable **real_drawable,
517 GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);
520 #ifndef GDK_DISABLE_DEPRECATED
521 #define gdk_window_get_size gdk_drawable_get_size
522 #define gdk_window_get_type gdk_window_get_window_type
523 #define gdk_window_get_colormap gdk_drawable_get_colormap
524 #define gdk_window_set_colormap gdk_drawable_set_colormap
525 #define gdk_window_get_visual gdk_drawable_get_visual
526 #define gdk_window_ref gdk_drawable_ref
527 #define gdk_window_unref gdk_drawable_unref
529 #define gdk_window_copy_area(drawable,gc,x,y,source_drawable,source_x,source_y,width,height) \
530 gdk_draw_pixmap(drawable,gc,source_drawable,source_x,source_y,x,y,width,height)
531 #endif /* GDK_DISABLE_DEPRECATED */
535 #endif /* __cplusplus */
537 #endif /* __GDK_WINDOW_H__ */