1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
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.
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.
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.
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/.
27 #ifndef __GDK_WINDOW_H__
28 #define __GDK_WINDOW_H__
30 #include <gdk/gdkdrawable.h>
31 #include <gdk/gdktypes.h>
32 #include <gdk/gdkevents.h>
36 typedef struct _GdkGeometry GdkGeometry;
37 typedef struct _GdkWindowAttr GdkWindowAttr;
38 typedef struct _GdkPointerHooks GdkPointerHooks;
40 /* Classes of windows.
41 * InputOutput: Almost every window should be of this type. Such windows
42 * receive events and are also displayed on screen.
43 * InputOnly: Used only in special circumstances when events need to be
44 * stolen from another window or windows. Input only windows
45 * have no visible output, so they are handy for placing over
46 * top of a group of windows in order to grab the events (or
47 * filter the events) from those windows.
56 * Root: There is only 1 root window and it is initialized
57 * at startup. Creating a window of type GDK_WINDOW_ROOT
59 * Toplevel: Windows which interact with the window manager.
60 * Child: Windows which are children of some other type of window.
61 * (Any other type of window). Most windows are child windows.
62 * Dialog: A special kind of toplevel window which interacts with
63 * the window manager slightly differently than a regular
64 * toplevel window. Dialog windows should be used for any
66 * Foreign: A window that actually belongs to another application
78 /* Window attribute mask values.
79 * GDK_WA_TITLE: The "title" field is valid.
80 * GDK_WA_X: The "x" field is valid.
81 * GDK_WA_Y: The "y" field is valid.
82 * GDK_WA_CURSOR: The "cursor" field is valid.
83 * GDK_WA_COLORMAP: The "colormap" field is valid.
84 * GDK_WA_VISUAL: The "visual" field is valid.
88 GDK_WA_TITLE = 1 << 1,
91 GDK_WA_CURSOR = 1 << 4,
92 GDK_WA_COLORMAP = 1 << 5,
93 GDK_WA_VISUAL = 1 << 6,
94 GDK_WA_WMCLASS = 1 << 7,
95 GDK_WA_NOREDIR = 1 << 8
96 } GdkWindowAttributesType;
98 /* Size restriction enumeration.
102 GDK_HINT_POS = 1 << 0,
103 GDK_HINT_MIN_SIZE = 1 << 1,
104 GDK_HINT_MAX_SIZE = 1 << 2,
105 GDK_HINT_BASE_SIZE = 1 << 3,
106 GDK_HINT_ASPECT = 1 << 4,
107 GDK_HINT_RESIZE_INC = 1 << 5,
108 GDK_HINT_WIN_GRAVITY = 1 << 6,
109 GDK_HINT_USER_POS = 1 << 7,
110 GDK_HINT_USER_SIZE = 1 << 8
114 /* Window type hints.
115 * These are hints for the window manager that indicate
116 * what type of function the window has. The window manager
117 * can use this when determining decoration and behaviour
118 * of the window. The hint must be set before mapping the
121 * Normal: Normal toplevel window
122 * Dialog: Dialog window
123 * Menu: Window used to implement a menu.
124 * Toolbar: Window used to implement toolbars.
128 GDK_WINDOW_TYPE_HINT_NORMAL,
129 GDK_WINDOW_TYPE_HINT_DIALOG,
130 GDK_WINDOW_TYPE_HINT_MENU,
131 GDK_WINDOW_TYPE_HINT_TOOLBAR,
132 GDK_WINDOW_TYPE_HINT_SPLASHSCREEN,
133 GDK_WINDOW_TYPE_HINT_UTILITY,
134 GDK_WINDOW_TYPE_HINT_DOCK,
135 GDK_WINDOW_TYPE_HINT_DESKTOP
139 /* The next two enumeration values current match the
140 * Motif constants. If this is changed, the implementation
141 * of gdk_window_set_decorations/gdk_window_set_functions
142 * will need to change as well.
146 GDK_DECOR_ALL = 1 << 0,
147 GDK_DECOR_BORDER = 1 << 1,
148 GDK_DECOR_RESIZEH = 1 << 2,
149 GDK_DECOR_TITLE = 1 << 3,
150 GDK_DECOR_MENU = 1 << 4,
151 GDK_DECOR_MINIMIZE = 1 << 5,
152 GDK_DECOR_MAXIMIZE = 1 << 6
157 GDK_FUNC_ALL = 1 << 0,
158 GDK_FUNC_RESIZE = 1 << 1,
159 GDK_FUNC_MOVE = 1 << 2,
160 GDK_FUNC_MINIMIZE = 1 << 3,
161 GDK_FUNC_MAXIMIZE = 1 << 4,
162 GDK_FUNC_CLOSE = 1 << 5
165 /* Currently, these are the same values numerically as in the
166 * X protocol. If you change that, gdkwindow-x11.c/gdk_window_set_geometry_hints()
171 GDK_GRAVITY_NORTH_WEST = 1,
173 GDK_GRAVITY_NORTH_EAST,
177 GDK_GRAVITY_SOUTH_WEST,
179 GDK_GRAVITY_SOUTH_EAST,
186 GDK_WINDOW_EDGE_NORTH_WEST,
187 GDK_WINDOW_EDGE_NORTH,
188 GDK_WINDOW_EDGE_NORTH_EAST,
189 GDK_WINDOW_EDGE_WEST,
190 GDK_WINDOW_EDGE_EAST,
191 GDK_WINDOW_EDGE_SOUTH_WEST,
192 GDK_WINDOW_EDGE_SOUTH,
193 GDK_WINDOW_EDGE_SOUTH_EAST
196 struct _GdkWindowAttr
203 GdkWindowClass wclass;
205 GdkColormap *colormap;
206 GdkWindowType window_type;
209 gchar *wmclass_class;
210 gboolean override_redirect;
225 GdkGravity win_gravity;
228 struct _GdkPointerHooks
230 GdkWindow* (*get_pointer) (GdkWindow *window,
233 GdkModifierType *mask);
234 GdkWindow* (*window_at_pointer) (GdkScreen *screen, /* unused */
239 typedef struct _GdkWindowObject GdkWindowObject;
240 typedef struct _GdkWindowObjectClass GdkWindowObjectClass;
242 #define GDK_TYPE_WINDOW (gdk_window_object_get_type ())
243 #define GDK_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW, GdkWindow))
244 #define GDK_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW, GdkWindowObjectClass))
245 #define GDK_IS_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW))
246 #define GDK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW))
247 #define GDK_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW, GdkWindowObjectClass))
248 #define GDK_WINDOW_OBJECT(object) ((GdkWindowObject *) GDK_WINDOW (object))
250 struct _GdkWindowObject
252 GdkDrawable parent_instance;
254 GdkDrawable *impl; /* window-system-specific delegate object */
256 GdkWindowObject *parent;
263 gint extension_events;
269 GdkPixmap *bg_pixmap;
273 GdkRegion *update_area;
274 guint update_freeze_count;
280 GdkWindowState state;
282 guint guffaw_gravity : 1;
283 guint input_only : 1;
284 guint modal_hint : 1;
288 guint accept_focus : 1;
289 guint focus_on_map : 1;
292 GdkEventMask event_mask;
295 struct _GdkWindowObjectClass
297 GdkDrawableClass parent_class;
302 GType gdk_window_object_get_type (void) G_GNUC_CONST;
303 GdkWindow* gdk_window_new (GdkWindow *parent,
304 GdkWindowAttr *attributes,
305 gint attributes_mask);
306 void gdk_window_destroy (GdkWindow *window);
307 GdkWindowType gdk_window_get_window_type (GdkWindow *window);
308 GdkWindow* gdk_window_at_pointer (gint *win_x,
310 void gdk_window_show (GdkWindow *window);
311 void gdk_window_hide (GdkWindow *window);
312 void gdk_window_withdraw (GdkWindow *window);
313 void gdk_window_show_unraised (GdkWindow *window);
314 void gdk_window_move (GdkWindow *window,
317 void gdk_window_resize (GdkWindow *window,
320 void gdk_window_move_resize (GdkWindow *window,
325 void gdk_window_reparent (GdkWindow *window,
326 GdkWindow *new_parent,
329 void gdk_window_clear (GdkWindow *window);
330 void gdk_window_clear_area (GdkWindow *window,
335 void gdk_window_clear_area_e (GdkWindow *window,
340 void gdk_window_raise (GdkWindow *window);
341 void gdk_window_lower (GdkWindow *window);
342 void gdk_window_focus (GdkWindow *window,
344 void gdk_window_set_user_data (GdkWindow *window,
346 void gdk_window_set_override_redirect (GdkWindow *window,
347 gboolean override_redirect);
348 void gdk_window_set_accept_focus (GdkWindow *window,
349 gboolean accept_focus);
350 void gdk_window_set_focus_on_map (GdkWindow *window,
351 gboolean focus_on_map);
352 void gdk_window_add_filter (GdkWindow *window,
353 GdkFilterFunc function,
355 void gdk_window_remove_filter (GdkWindow *window,
356 GdkFilterFunc function,
358 void gdk_window_scroll (GdkWindow *window,
361 void gdk_window_move_region (GdkWindow *window,
367 * This allows for making shaped (partially transparent) windows
368 * - cool feature, needed for Drag and Drag for example.
369 * The shape_mask can be the mask
370 * from gdk_pixmap_create_from_xpm. Stefan Wille
372 void gdk_window_shape_combine_mask (GdkWindow *window,
376 void gdk_window_shape_combine_region (GdkWindow *window,
377 GdkRegion *shape_region,
382 * This routine allows you to quickly take the shapes of all the child windows
383 * of a window and use their shapes as the shape mask for this window - useful
384 * for container windows that dont want to look like a big box
388 void gdk_window_set_child_shapes (GdkWindow *window);
391 * This routine allows you to merge (ie ADD) child shapes to your
392 * own window's shape keeping its current shape and ADDING the child
397 void gdk_window_merge_child_shapes (GdkWindow *window);
400 * Check if a window has been shown, and whether all its
401 * parents up to a toplevel have been shown, respectively.
402 * Note that a window that is_viewable below is not necessarily
403 * viewable in the X sense.
405 gboolean gdk_window_is_visible (GdkWindow *window);
406 gboolean gdk_window_is_viewable (GdkWindow *window);
408 GdkWindowState gdk_window_get_state (GdkWindow *window);
410 /* Set static bit gravity on the parent, and static
411 * window gravity on all children.
413 gboolean gdk_window_set_static_gravities (GdkWindow *window,
414 gboolean use_static);
416 /* Functions to create/lookup windows from their native equivalents */
417 #ifndef GDK_MULTIHEAD_SAFE
418 GdkWindow* gdk_window_foreign_new (GdkNativeWindow anid);
419 GdkWindow* gdk_window_lookup (GdkNativeWindow anid);
421 GdkWindow *gdk_window_foreign_new_for_display (GdkDisplay *display,
422 GdkNativeWindow anid);
423 GdkWindow* gdk_window_lookup_for_display (GdkDisplay *display,
424 GdkNativeWindow anid);
429 #ifndef GDK_DISABLE_DEPRECATED
430 void gdk_window_set_hints (GdkWindow *window,
439 void gdk_window_set_type_hint (GdkWindow *window,
440 GdkWindowTypeHint hint);
441 void gdk_window_set_modal_hint (GdkWindow *window,
444 void gdk_window_set_skip_taskbar_hint (GdkWindow *window,
445 gboolean skips_taskbar);
446 void gdk_window_set_skip_pager_hint (GdkWindow *window,
447 gboolean skips_pager);
448 void gdk_window_set_urgency_hint (GdkWindow *window,
451 void gdk_window_set_geometry_hints (GdkWindow *window,
452 GdkGeometry *geometry,
453 GdkWindowHints geom_mask);
454 void gdk_set_sm_client_id (const gchar *sm_client_id);
456 void gdk_window_begin_paint_rect (GdkWindow *window,
457 GdkRectangle *rectangle);
458 void gdk_window_begin_paint_region (GdkWindow *window,
460 void gdk_window_end_paint (GdkWindow *window);
462 void gdk_window_set_title (GdkWindow *window,
464 void gdk_window_set_role (GdkWindow *window,
466 void gdk_window_set_transient_for (GdkWindow *window,
468 void gdk_window_set_background (GdkWindow *window,
469 const GdkColor *color);
470 void gdk_window_set_back_pixmap (GdkWindow *window,
472 gboolean parent_relative);
473 void gdk_window_set_cursor (GdkWindow *window,
475 void gdk_window_get_user_data (GdkWindow *window,
477 void gdk_window_get_geometry (GdkWindow *window,
483 void gdk_window_get_position (GdkWindow *window,
486 gint gdk_window_get_origin (GdkWindow *window,
490 #if !defined (GDK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION)
491 /* Used by gtk_handle_box_button_changed () */
492 gboolean gdk_window_get_deskrelative_origin (GdkWindow *window,
497 void gdk_window_get_root_origin (GdkWindow *window,
500 void gdk_window_get_frame_extents (GdkWindow *window,
502 GdkWindow* gdk_window_get_pointer (GdkWindow *window,
505 GdkModifierType *mask);
506 GdkWindow * gdk_window_get_parent (GdkWindow *window);
507 GdkWindow * gdk_window_get_toplevel (GdkWindow *window);
509 GList * gdk_window_get_children (GdkWindow *window);
510 GList * gdk_window_peek_children (GdkWindow *window);
511 GdkEventMask gdk_window_get_events (GdkWindow *window);
512 void gdk_window_set_events (GdkWindow *window,
513 GdkEventMask event_mask);
515 void gdk_window_set_icon_list (GdkWindow *window,
517 void gdk_window_set_icon (GdkWindow *window,
518 GdkWindow *icon_window,
521 void gdk_window_set_icon_name (GdkWindow *window,
523 void gdk_window_set_group (GdkWindow *window,
525 GdkWindow* gdk_window_get_group (GdkWindow *window);
526 void gdk_window_set_decorations (GdkWindow *window,
527 GdkWMDecoration decorations);
528 gboolean gdk_window_get_decorations (GdkWindow *window,
529 GdkWMDecoration *decorations);
530 void gdk_window_set_functions (GdkWindow *window,
531 GdkWMFunction functions);
532 #ifndef GDK_MULTIHEAD_SAFE
533 GList * gdk_window_get_toplevels (void);
536 void gdk_window_iconify (GdkWindow *window);
537 void gdk_window_deiconify (GdkWindow *window);
538 void gdk_window_stick (GdkWindow *window);
539 void gdk_window_unstick (GdkWindow *window);
540 void gdk_window_maximize (GdkWindow *window);
541 void gdk_window_unmaximize (GdkWindow *window);
542 void gdk_window_fullscreen (GdkWindow *window);
543 void gdk_window_unfullscreen (GdkWindow *window);
544 void gdk_window_set_keep_above (GdkWindow *window,
546 void gdk_window_set_keep_below (GdkWindow *window,
549 void gdk_window_register_dnd (GdkWindow *window);
551 void gdk_window_begin_resize_drag (GdkWindow *window,
557 void gdk_window_begin_move_drag (GdkWindow *window,
563 /* Interface for dirty-region queueing */
564 void gdk_window_invalidate_rect (GdkWindow *window,
566 gboolean invalidate_children);
567 void gdk_window_invalidate_region (GdkWindow *window,
569 gboolean invalidate_children);
570 void gdk_window_invalidate_maybe_recurse (GdkWindow *window,
572 gboolean (*child_func) (GdkWindow *, gpointer),
574 GdkRegion *gdk_window_get_update_area (GdkWindow *window);
576 void gdk_window_freeze_updates (GdkWindow *window);
577 void gdk_window_thaw_updates (GdkWindow *window);
579 void gdk_window_process_all_updates (void);
580 void gdk_window_process_updates (GdkWindow *window,
581 gboolean update_children);
583 /* Enable/disable flicker, so you can tell if your code is inefficient. */
584 void gdk_window_set_debug_updates (gboolean setting);
586 void gdk_window_constrain_size (GdkGeometry *geometry,
593 void gdk_window_get_internal_paint_info (GdkWindow *window,
594 GdkDrawable **real_drawable,
598 void gdk_window_enable_synchronized_configure (GdkWindow *window);
599 void gdk_window_configure_finished (GdkWindow *window);
601 #ifndef GDK_MULTIHEAD_SAFE
602 GdkPointerHooks *gdk_set_pointer_hooks (const GdkPointerHooks *new_hooks);
603 #endif /* GDK_MULTIHEAD_SAFE */
605 GdkWindow *gdk_get_default_root_window (void);
607 #ifndef GDK_DISABLE_DEPRECATED
608 #define GDK_ROOT_PARENT() (gdk_get_default_root_window ())
609 #define gdk_window_get_size gdk_drawable_get_size
610 #define gdk_window_get_type gdk_window_get_window_type
611 #define gdk_window_get_colormap gdk_drawable_get_colormap
612 #define gdk_window_set_colormap gdk_drawable_set_colormap
613 #define gdk_window_get_visual gdk_drawable_get_visual
614 #define gdk_window_ref gdk_drawable_ref
615 #define gdk_window_unref gdk_drawable_unref
617 #define gdk_window_copy_area(drawable,gc,x,y,source_drawable,source_x,source_y,width,height) \
618 gdk_draw_pixmap(drawable,gc,source_drawable,source_x,source_y,x,y,width,height)
619 #endif /* GDK_DISABLE_DEPRECATED */
623 #endif /* __GDK_WINDOW_H__ */