ROOT  6.05/03
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
gdkwindow.c
Go to the documentation of this file.
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 Library 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  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library 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-1999. 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 #include "gdkwindow.h"
28 #include "gdkprivate.h"
29 
31 {
33  GdkWindow *window = (GdkWindow *) private;
34 
35  window->user_data = NULL;
36 
37  private->drawable.ref_count = 1;
38  private->drawable.destroyed = FALSE;
39  private->drawable.klass = NULL;
40  private->drawable.klass_data = NULL;
41  private->drawable.window_type = GDK_WINDOW_CHILD;
42 
43  private->drawable.width = 1;
44  private->drawable.height = 1;
45 
46  private->drawable.colormap = NULL;
47 
48  private->parent = NULL;
49  private->x = 0;
50  private->y = 0;
51  private->resize_count = 0;
52 
53  private->mapped = FALSE;
54  private->guffaw_gravity = FALSE;
55  private->extension_events = FALSE;
56 
57  private->filters = NULL;
58  private->children = NULL;
59 
60  return window;
61 }
62 
63 void gdk_window_set_user_data(GdkWindow * window, gpointer user_data)
64 {
65  g_return_if_fail(window != NULL);
66 
67  window->user_data = user_data;
68 }
69 
71 {
72  g_return_if_fail(window != NULL);
73 
74  *data = window->user_data;
75 }
76 
78 {
79  GdkWindowPrivate *window_private;
80 
81  g_return_if_fail(window != NULL);
83 
84  window_private = (GdkWindowPrivate *) window;
85 
86  if (x)
87  *x = window_private->x;
88  if (y)
89  *y = window_private->y;
90 }
91 
93 {
94  g_return_val_if_fail(window != NULL, NULL);
96 
97  return ((GdkWindowPrivate *) window)->parent;
98 }
99 
101 {
102  GdkWindowPrivate *private;
103 
104  g_return_val_if_fail(window != NULL, NULL);
106 
107  private = (GdkWindowPrivate *) window;
108  while (GDK_DRAWABLE_TYPE(private) == GDK_WINDOW_CHILD)
109  private = (GdkWindowPrivate *) private->parent;
110 
111  return (GdkWindow *) window;
112 }
113 
114 void
116  GdkFilterFunc function, gpointer data)
117 {
118  GdkWindowPrivate *private;
119  GList *tmp_list;
120  GdkEventFilter *filter;
121 
122  g_return_if_fail(window != NULL);
124 
125  private = (GdkWindowPrivate *) window;
126  if (private && GDK_DRAWABLE_DESTROYED(window))
127  return;
128 
129  if (private)
130  tmp_list = private->filters;
131  else
132  tmp_list = gdk_default_filters;
133 
134  while (tmp_list) {
135  filter = (GdkEventFilter *) tmp_list->data;
136  if ((filter->function == function) && (filter->data == data))
137  return;
138  tmp_list = tmp_list->next;
139  }
140 
141  filter = g_new(GdkEventFilter, 1);
142  filter->function = function;
143  filter->data = data;
144 
145  if (private)
146  private->filters = g_list_append(private->filters, filter);
147  else
149 }
150 
151 void
153  GdkFilterFunc function, gpointer data)
154 {
155  GdkWindowPrivate *private;
156  GList *tmp_list, *node;
157  GdkEventFilter *filter;
158 
159  g_return_if_fail(window != NULL);
161 
162  private = (GdkWindowPrivate *) window;
163 
164  if (private)
165  tmp_list = private->filters;
166  else
167  tmp_list = gdk_default_filters;
168 
169  while (tmp_list) {
170  filter = (GdkEventFilter *) tmp_list->data;
171  node = tmp_list;
172  tmp_list = tmp_list->next;
173 
174  if ((filter->function == function) && (filter->data == data)) {
175  if (private)
176  private->filters = g_list_remove_link(private->filters, node);
177  else
180  g_list_free_1(node);
181  g_free(filter);
182 
183  return;
184  }
185  }
186 }
187 
189 {
190  GList *new_list = NULL;
191  GList *tmp_list;
192 
193  tmp_list = ((GdkWindowPrivate *) gdk_parent_root)->children;
194  while (tmp_list) {
195  new_list = g_list_prepend(new_list, tmp_list->data);
196  tmp_list = tmp_list->next;
197  }
198 
199  return new_list;
200 }
201 
202 /*************************************************************
203  * gdk_window_is_visible:
204  * Check if the given window is mapped.
205  * arguments:
206  * window:
207  * results:
208  * is the window mapped
209  *************************************************************/
210 
212 {
213  GdkWindowPrivate *private = (GdkWindowPrivate *) window;
214 
215  g_return_val_if_fail(window != NULL, FALSE);
217 
218  return private->mapped;
219 }
220 
221 /*************************************************************
222  * gdk_window_is_viewable:
223  * Check if the window and all ancestors of the window
224  * are mapped. (This is not necessarily "viewable" in
225  * the X sense, since we only check as far as we have
226  * GDK window parents, not to the root window)
227  * arguments:
228  * window:
229  * results:
230  * is the window viewable
231  *************************************************************/
232 
234 {
235  GdkWindowPrivate *private = (GdkWindowPrivate *) window;
236 
237  g_return_val_if_fail(window != NULL, FALSE);
239 
240  while (private &&
241  (private != (GdkWindowPrivate *) gdk_parent_root) &&
242  (private->drawable.window_type != GDK_WINDOW_FOREIGN)) {
243  if (!private->mapped)
244  return FALSE;
245 
246  private = (GdkWindowPrivate *) private->parent;
247  }
248 
249  return TRUE;
250 }
GList * gdk_default_filters
Definition: gdkglobals.c:36
GList * gdk_window_get_toplevels(void)
Definition: gdkwindow.c:188
#define GDK_DRAWABLE_DESTROYED(d)
Definition: gdkprivate.h:48
GdkWindow * gdk_parent_root
Definition: gdkglobals.c:33
#define g_return_val_if_fail(expr, val)
Definition: gmessages.h:300
GdkWindow * gdk_window_get_toplevel(GdkWindow *window)
Definition: gdkwindow.c:100
GdkWindow * gdk_window_get_parent(GdkWindow *window)
Definition: gdkwindow.c:92
GList * g_list_prepend(GList *list, gpointer data)
Definition: glist.c:264
GList * g_list_remove_link(GList *list, GList *link)
Definition: glist.c:467
Double_t x[n]
Definition: legend1.C:17
gint gboolean
Definition: g_types.h:45
GdkFilterFunc function
Definition: gdkprivate.h:143
if(pyself &&pyself!=Py_None)
GList * g_list_append(GList *list, gpointer data)
Definition: glist.c:241
void gdk_window_add_filter(GdkWindow *window, GdkFilterFunc function, gpointer data)
Definition: gdkwindow.c:115
gpointer data
Definition: gdkprivate.h:144
GdkWindow * _gdk_window_alloc(void)
Definition: gdkwindow.c:30
void gdk_window_set_user_data(GdkWindow *window, gpointer user_data)
Definition: gdkwindow.c:63
#define g_return_if_fail(expr)
Definition: gmessages.h:288
gboolean gdk_window_is_viewable(GdkWindow *window)
Definition: gdkwindow.c:233
#define g_new(struct_type, n_structs)
Definition: gmem.h:60
int gint
Definition: g_types.h:44
void gdk_window_get_user_data(GdkWindow *window, gpointer *data)
Definition: gdkwindow.c:70
void gdk_window_remove_filter(GdkWindow *window, GdkFilterFunc function, gpointer data)
Definition: gdkwindow.c:152
#define FALSE
Definition: gmacros.h:126
void g_list_free_1(GList *list)
Definition: glist.c:200
void * gpointer
Definition: g_types.h:67
void gdk_window_get_position(GdkWindow *window, gint *x, gint *y)
Definition: gdkwindow.c:77
gpointer user_data
Definition: gdkdrawable.h:44
gboolean gdk_window_is_visible(GdkWindow *window)
Definition: gdkwindow.c:211
#define GDK_IS_WINDOW(d)
Definition: gdkprivate.h:45
gchar data[7]
void g_free(gpointer mem)
Definition: gmem.c:183
Double_t y[n]
Definition: legend1.C:17
typedefG_BEGIN_DECLS struct _GList GList
Definition: glist.h:34
#define GDK_DRAWABLE_TYPE(d)
Definition: gdkprivate.h:44
#define TRUE
Definition: gmacros.h:130
#define NULL
Definition: Rtypes.h:82
GdkFilterReturn(* GdkFilterFunc)(GdkXEvent *xevent, GdkEvent *event, gpointer data)
Definition: gdkevents.h:46