1 #ifndef __GDK_WINDOW_H__
2 #define __GDK_WINDOW_H__
4 #include <gdk/gdkdrawable.h>
5 #include <gdk/gdktypes.h>
6 #include <gdk/gdkevents.h>
10 #endif /* __cplusplus */
12 typedef struct _GdkGeometry GdkGeometry;
13 typedef struct _GdkWindowAttr GdkWindowAttr;
14 typedef struct _GdkPointerHooks GdkPointerHooks;
16 /* Classes of windows.
17 * InputOutput: Almost every window should be of this type. Such windows
18 * receive events and are also displayed on screen.
19 * InputOnly: Used only in special circumstances when events need to be
20 * stolen from another window or windows. Input only windows
21 * have no visible output, so they are handy for placing over
22 * top of a group of windows in order to grab the events (or
23 * filter the events) from those windows.
32 * Root: There is only 1 root window and it is initialized
33 * at startup. Creating a window of type GDK_WINDOW_ROOT
35 * Toplevel: Windows which interact with the window manager.
36 * Child: Windows which are children of some other type of window.
37 * (Any other type of window). Most windows are child windows.
38 * Dialog: A special kind of toplevel window which interacts with
39 * the window manager slightly differently than a regular
40 * toplevel window. Dialog windows should be used for any
42 * Foreign: A window that actually belongs to another application
54 /* Window attribute mask values.
55 * GDK_WA_TITLE: The "title" field is valid.
56 * GDK_WA_X: The "x" field is valid.
57 * GDK_WA_Y: The "y" field is valid.
58 * GDK_WA_CURSOR: The "cursor" field is valid.
59 * GDK_WA_COLORMAP: The "colormap" field is valid.
60 * GDK_WA_VISUAL: The "visual" field is valid.
64 GDK_WA_TITLE = 1 << 1,
67 GDK_WA_CURSOR = 1 << 4,
68 GDK_WA_COLORMAP = 1 << 5,
69 GDK_WA_VISUAL = 1 << 6,
70 GDK_WA_WMCLASS = 1 << 7,
71 GDK_WA_NOREDIR = 1 << 8
72 } GdkWindowAttributesType;
74 /* Size restriction enumeration.
78 GDK_HINT_POS = 1 << 0,
79 GDK_HINT_MIN_SIZE = 1 << 1,
80 GDK_HINT_MAX_SIZE = 1 << 2,
81 GDK_HINT_BASE_SIZE = 1 << 3,
82 GDK_HINT_ASPECT = 1 << 4,
83 GDK_HINT_RESIZE_INC = 1 << 5,
84 GDK_HINT_WIN_GRAVITY = 1 << 6,
85 GDK_HINT_USER_POS = 1 << 7,
86 GDK_HINT_USER_SIZE = 1 << 8
91 * These are hints for the window manager that indicate
92 * what type of function the window has. The window manager
93 * can use this when determining decoration and behaviour
94 * of the window. The hint must be set before mapping the
97 * Normal: Normal toplevel window
98 * Dialog: Dialog window
99 * Menu: Window used to implement a menu.
100 * Toolbar: Window used to implement toolbars.
104 GDK_WINDOW_TYPE_HINT_NORMAL,
105 GDK_WINDOW_TYPE_HINT_DIALOG,
106 GDK_WINDOW_TYPE_HINT_MENU,
107 GDK_WINDOW_TYPE_HINT_TOOLBAR,
108 GDK_WINDOW_TYPE_HINT_SPLASHSCREEN,
109 GDK_WINDOW_TYPE_HINT_UTILITY,
110 GDK_WINDOW_TYPE_HINT_DOCK,
111 GDK_WINDOW_TYPE_HINT_DESKTOP
115 /* The next two enumeration values current match the
116 * Motif constants. If this is changed, the implementation
117 * of gdk_window_set_decorations/gdk_window_set_functions
118 * will need to change as well.
122 GDK_DECOR_ALL = 1 << 0,
123 GDK_DECOR_BORDER = 1 << 1,
124 GDK_DECOR_RESIZEH = 1 << 2,
125 GDK_DECOR_TITLE = 1 << 3,
126 GDK_DECOR_MENU = 1 << 4,
127 GDK_DECOR_MINIMIZE = 1 << 5,
128 GDK_DECOR_MAXIMIZE = 1 << 6
133 GDK_FUNC_ALL = 1 << 0,
134 GDK_FUNC_RESIZE = 1 << 1,
135 GDK_FUNC_MOVE = 1 << 2,
136 GDK_FUNC_MINIMIZE = 1 << 3,
137 GDK_FUNC_MAXIMIZE = 1 << 4,
138 GDK_FUNC_CLOSE = 1 << 5
141 /* Currently, these are the same values numerically as in the
142 * X protocol. If you change that, gdkwindow-x11.c/gdk_window_set_geometry_hints()
147 GDK_GRAVITY_NORTH_WEST = 1,
149 GDK_GRAVITY_NORTH_EAST,
153 GDK_GRAVITY_SOUTH_WEST,
155 GDK_GRAVITY_SOUTH_EAST,
162 GDK_WINDOW_EDGE_NORTH_WEST,
163 GDK_WINDOW_EDGE_NORTH,
164 GDK_WINDOW_EDGE_NORTH_EAST,
165 GDK_WINDOW_EDGE_WEST,
166 GDK_WINDOW_EDGE_EAST,
167 GDK_WINDOW_EDGE_SOUTH_WEST,
168 GDK_WINDOW_EDGE_SOUTH,
169 GDK_WINDOW_EDGE_SOUTH_EAST
172 struct _GdkWindowAttr
179 GdkWindowClass wclass;
181 GdkColormap *colormap;
182 GdkWindowType window_type;
185 gchar *wmclass_class;
186 gboolean override_redirect;
201 GdkGravity win_gravity;
204 struct _GdkPointerHooks
206 GdkWindow* (*get_pointer) (GdkWindow *window,
209 GdkModifierType *mask);
210 GdkWindow* (*window_at_pointer) (GdkScreen *screen, /* unused */
215 typedef struct _GdkWindowObject GdkWindowObject;
216 typedef struct _GdkWindowObjectClass GdkWindowObjectClass;
218 #define GDK_TYPE_WINDOW (gdk_window_object_get_type ())
219 #define GDK_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW, GdkWindow))
220 #define GDK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW, GdkWindowObjectClass))
221 #define GDK_IS_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW))
222 #define GDK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW))
223 #define GDK_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW, GdkWindowObjectClass))
224 #define GDK_WINDOW_OBJECT(object) ((GdkWindowObject *) GDK_WINDOW (object))
226 struct _GdkWindowObject
228 GdkDrawable parent_instance;
230 GdkDrawable *impl; /* window-system-specific delegate object */
232 GdkWindowObject *parent;
239 gint extension_events;
245 GdkPixmap *bg_pixmap;
249 GdkRegion *update_area;
250 guint update_freeze_count;
256 GdkWindowState state;
258 guint guffaw_gravity : 1;
259 guint input_only : 1;
260 guint modal_hint : 1;
264 GdkEventMask event_mask;
267 struct _GdkWindowObjectClass
269 GdkDrawableClass parent_class;
274 GType gdk_window_object_get_type (void) G_GNUC_CONST;
275 GdkWindow* gdk_window_new (GdkWindow *parent,
276 GdkWindowAttr *attributes,
277 gint attributes_mask);
278 void gdk_window_destroy (GdkWindow *window);
279 GdkWindowType gdk_window_get_window_type (GdkWindow *window);
280 GdkWindow* gdk_window_at_pointer (gint *win_x,
282 void gdk_window_show (GdkWindow *window);
283 void gdk_window_hide (GdkWindow *window);
284 void gdk_window_withdraw (GdkWindow *window);
285 void gdk_window_show_unraised (GdkWindow *window);
286 void gdk_window_move (GdkWindow *window,
289 void gdk_window_resize (GdkWindow *window,
292 void gdk_window_move_resize (GdkWindow *window,
297 void gdk_window_reparent (GdkWindow *window,
298 GdkWindow *new_parent,
301 void gdk_window_clear (GdkWindow *window);
302 void gdk_window_clear_area (GdkWindow *window,
307 void gdk_window_clear_area_e (GdkWindow *window,
312 void gdk_window_raise (GdkWindow *window);
313 void gdk_window_lower (GdkWindow *window);
314 void gdk_window_focus (GdkWindow *window,
316 void gdk_window_set_user_data (GdkWindow *window,
318 void gdk_window_set_override_redirect (GdkWindow *window,
319 gboolean override_redirect);
320 void gdk_window_add_filter (GdkWindow *window,
321 GdkFilterFunc function,
323 void gdk_window_remove_filter (GdkWindow *window,
324 GdkFilterFunc function,
326 void gdk_window_scroll (GdkWindow *window,
331 * This allows for making shaped (partially transparent) windows
332 * - cool feature, needed for Drag and Drag for example.
333 * The shape_mask can be the mask
334 * from gdk_pixmap_create_from_xpm. Stefan Wille
336 void gdk_window_shape_combine_mask (GdkWindow *window,
340 void gdk_window_shape_combine_region (GdkWindow *window,
341 GdkRegion *shape_region,
346 * This routine allows you to quickly take the shapes of all the child windows
347 * of a window and use their shapes as the shape mask for this window - useful
348 * for container windows that dont want to look like a big box
352 void gdk_window_set_child_shapes (GdkWindow *window);
355 * This routine allows you to merge (ie ADD) child shapes to your
356 * own window's shape keeping its current shape and ADDING the child
361 void gdk_window_merge_child_shapes (GdkWindow *window);
364 * Check if a window has been shown, and whether all its
365 * parents up to a toplevel have been shown, respectively.
366 * Note that a window that is_viewable below is not necessarily
367 * viewable in the X sense.
369 gboolean gdk_window_is_visible (GdkWindow *window);
370 gboolean gdk_window_is_viewable (GdkWindow *window);
372 GdkWindowState gdk_window_get_state (GdkWindow *window);
374 /* Set static bit gravity on the parent, and static
375 * window gravity on all children.
377 gboolean gdk_window_set_static_gravities (GdkWindow *window,
378 gboolean use_static);
380 /* Functions to create/lookup windows from their native equivalents */
381 #ifndef GDK_MULTIHEAD_SAFE
382 GdkWindow* gdk_window_foreign_new (GdkNativeWindow anid);
383 GdkWindow* gdk_window_lookup (GdkNativeWindow anid);
385 GdkWindow *gdk_window_foreign_new_for_display (GdkDisplay *display,
386 GdkNativeWindow anid);
387 GdkWindow* gdk_window_lookup_for_display (GdkDisplay *display,
388 GdkNativeWindow anid);
393 #ifndef GDK_DISABLE_DEPRECATED
394 void gdk_window_set_hints (GdkWindow *window,
403 void gdk_window_set_type_hint (GdkWindow *window,
404 GdkWindowTypeHint hint);
405 void gdk_window_set_modal_hint (GdkWindow *window,
408 void gdk_window_set_skip_taskbar_hint (GdkWindow *window,
409 gboolean skips_taskbar);
410 void gdk_window_set_skip_pager_hint (GdkWindow *window,
411 gboolean skips_pager);
413 void gdk_window_set_geometry_hints (GdkWindow *window,
414 GdkGeometry *geometry,
415 GdkWindowHints geom_mask);
416 void gdk_set_sm_client_id (const gchar *sm_client_id);
418 void gdk_window_begin_paint_rect (GdkWindow *window,
419 GdkRectangle *rectangle);
420 void gdk_window_begin_paint_region (GdkWindow *window,
422 void gdk_window_end_paint (GdkWindow *window);
424 void gdk_window_set_title (GdkWindow *window,
426 void gdk_window_set_role (GdkWindow *window,
428 void gdk_window_set_transient_for (GdkWindow *window,
430 void gdk_window_set_background (GdkWindow *window,
432 void gdk_window_set_back_pixmap (GdkWindow *window,
434 gboolean parent_relative);
435 void gdk_window_set_cursor (GdkWindow *window,
437 void gdk_window_get_user_data (GdkWindow *window,
439 void gdk_window_get_geometry (GdkWindow *window,
445 void gdk_window_get_position (GdkWindow *window,
448 gint gdk_window_get_origin (GdkWindow *window,
452 #if !defined (GDK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION)
453 /* Used by gtk_handle_box_button_changed () */
454 gboolean gdk_window_get_deskrelative_origin (GdkWindow *window,
459 void gdk_window_get_root_origin (GdkWindow *window,
462 void gdk_window_get_frame_extents (GdkWindow *window,
464 GdkWindow* gdk_window_get_pointer (GdkWindow *window,
467 GdkModifierType *mask);
468 GdkWindow * gdk_window_get_parent (GdkWindow *window);
469 GdkWindow * gdk_window_get_toplevel (GdkWindow *window);
471 GList * gdk_window_get_children (GdkWindow *window);
472 GList * gdk_window_peek_children (GdkWindow *window);
473 GdkEventMask gdk_window_get_events (GdkWindow *window);
474 void gdk_window_set_events (GdkWindow *window,
475 GdkEventMask event_mask);
477 void gdk_window_set_icon_list (GdkWindow *window,
479 void gdk_window_set_icon (GdkWindow *window,
480 GdkWindow *icon_window,
483 void gdk_window_set_icon_name (GdkWindow *window,
485 void gdk_window_set_group (GdkWindow *window,
487 void gdk_window_set_decorations (GdkWindow *window,
488 GdkWMDecoration decorations);
489 gboolean gdk_window_get_decorations (GdkWindow *window,
490 GdkWMDecoration *decorations);
491 void gdk_window_set_functions (GdkWindow *window,
492 GdkWMFunction functions);
493 #ifndef GDK_MULTIHEAD_SAFE
494 GList * gdk_window_get_toplevels (void);
497 void gdk_window_iconify (GdkWindow *window);
498 void gdk_window_deiconify (GdkWindow *window);
499 void gdk_window_stick (GdkWindow *window);
500 void gdk_window_unstick (GdkWindow *window);
501 void gdk_window_maximize (GdkWindow *window);
502 void gdk_window_unmaximize (GdkWindow *window);
503 void gdk_window_fullscreen (GdkWindow *window);
504 void gdk_window_unfullscreen (GdkWindow *window);
506 void gdk_window_register_dnd (GdkWindow *window);
508 void gdk_window_begin_resize_drag (GdkWindow *window,
514 void gdk_window_begin_move_drag (GdkWindow *window,
520 /* Interface for dirty-region queueing */
521 void gdk_window_invalidate_rect (GdkWindow *window,
523 gboolean invalidate_children);
524 void gdk_window_invalidate_region (GdkWindow *window,
526 gboolean invalidate_children);
527 void gdk_window_invalidate_maybe_recurse (GdkWindow *window,
529 gboolean (*child_func) (GdkWindow *, gpointer),
531 GdkRegion *gdk_window_get_update_area (GdkWindow *window);
533 void gdk_window_freeze_updates (GdkWindow *window);
534 void gdk_window_thaw_updates (GdkWindow *window);
536 void gdk_window_process_all_updates (void);
537 void gdk_window_process_updates (GdkWindow *window,
538 gboolean update_children);
540 /* Enable/disable flicker, so you can tell if your code is inefficient. */
541 void gdk_window_set_debug_updates (gboolean setting);
543 void gdk_window_constrain_size (GdkGeometry *geometry,
550 void gdk_window_get_internal_paint_info (GdkWindow *window,
551 GdkDrawable **real_drawable,
555 #ifndef GDK_MULTIHEAD_SAFE
556 GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);
557 #endif /* GDK_MULTIHEAD_SAFE */
559 GdkWindow *gdk_get_default_root_window (void);
561 #ifndef GDK_DISABLE_DEPRECATED
562 #define GDK_ROOT_PARENT() (gdk_get_default_root_window ())
563 #define gdk_window_get_size gdk_drawable_get_size
564 #define gdk_window_get_type gdk_window_get_window_type
565 #define gdk_window_get_colormap gdk_drawable_get_colormap
566 #define gdk_window_set_colormap gdk_drawable_set_colormap
567 #define gdk_window_get_visual gdk_drawable_get_visual
568 #define gdk_window_ref gdk_drawable_ref
569 #define gdk_window_unref gdk_drawable_unref
571 #define gdk_window_copy_area(drawable,gc,x,y,source_drawable,source_x,source_y,width,height) \
572 gdk_draw_pixmap(drawable,gc,source_drawable,source_x,source_y,x,y,width,height)
573 #endif /* GDK_DISABLE_DEPRECATED */
577 #endif /* __cplusplus */
579 #endif /* __GDK_WINDOW_H__ */