summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorSoeren Sandmann <sandmann@daimi.au.dk>2004-07-09 21:27:09 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2004-07-09 21:27:09 +0000
commit8889f2b45d87303873ef5cb2590c3de8157707af (patch)
tree7b461eefc3f376cce9a5e25f9c729fc9a9368997 /gdk
parent42067dfbab31231df17586421893b7ca19c91efa (diff)
downloadgtk+-8889f2b45d87303873ef5cb2590c3de8157707af.tar.gz
Add an "override_redirect" bit.
Fri Jul 9 23:26:09 2004 Soeren Sandmann <sandmann@daimi.au.dk> * gdk/x11/gdkwindow-x11.h (struct _GdkWindowImplX11): Add an "override_redirect" bit. * gdk/x11/gdkwindow-x11.c (gdk_window_new): Set it here. * gdk/x11/gdkwindow-x11.c (gdk_window_move, gdk_window_resize, gdk_window_move_resize): Update the local size/position cache immediately for override redirect windows. * gdk/x11/gdkwindow-x11.c (show_window_internal): Invalidate newly mapped child and override redirect windows.
Diffstat (limited to 'gdk')
-rw-r--r--gdk/x11/gdkwindow-x11.c78
-rw-r--r--gdk/x11/gdkwindow-x11.h1
2 files changed, 64 insertions, 15 deletions
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 79f5fb52c4..e764de8ff8 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -608,6 +608,8 @@ gdk_window_new (GdkWindow *parent,
else
xattributes.override_redirect = False;
+ impl->override_redirect = xattributes.override_redirect;
+
if (private->parent && private->parent->guffaw_gravity)
{
xattributes.win_gravity = StaticGravity;
@@ -683,6 +685,8 @@ gdk_window_new (GdkWindow *parent,
xattributes.override_redirect = True;
xattributes.cursor = None;
xattributes_mask |= CWSaveUnder | CWOverrideRedirect;
+
+ impl->override_redirect = TRUE;
}
}
else
@@ -1215,7 +1219,17 @@ show_window_internal (GdkWindow *window,
g_assert (GDK_WINDOW_IS_MAPPED (window));
if (impl->position_info.mapped)
- XMapWindow (xdisplay, xwindow);
+ {
+ XMapWindow (xdisplay, xwindow);
+
+ if (!private->input_only &&
+ (private->window_type == GDK_WINDOW_CHILD ||
+ impl->override_redirect) &&
+ gdk_window_is_viewable (window))
+ {
+ gdk_window_invalidate_rect (window, NULL, TRUE);
+ }
+ }
}
}
@@ -1379,17 +1393,25 @@ gdk_window_move (GdkWindow *window,
g_return_if_fail (GDK_IS_WINDOW (window));
impl = GDK_WINDOW_IMPL_X11 (private->impl);
-
+
if (!GDK_WINDOW_DESTROYED (window))
{
if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD)
- _gdk_window_move_resize_child (window, x, y,
- impl->width, impl->height);
+ {
+ _gdk_window_move_resize_child (window, x, y,
+ impl->width, impl->height);
+ }
else
{
XMoveWindow (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
x, y);
+
+ if (impl->override_redirect)
+ {
+ private->x = x;
+ private->y = y;
+ }
}
}
}
@@ -1429,18 +1451,28 @@ gdk_window_resize (GdkWindow *window,
if (!GDK_WINDOW_DESTROYED (window))
{
if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD)
- _gdk_window_move_resize_child (window, private->x, private->y,
- width, height);
+ {
+ _gdk_window_move_resize_child (window, private->x, private->y,
+ width, height);
+ }
else
{
GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (private->impl);
-
- if (width != impl->width || height != impl->height)
- private->resize_count += 1;
XResizeWindow (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
width, height);
+
+ if (impl->override_redirect)
+ {
+ impl->width = width;
+ impl->height = height;
+ }
+ else
+ {
+ if (width != impl->width || height != impl->height)
+ private->resize_count += 1;
+ }
}
}
}
@@ -1480,17 +1512,28 @@ gdk_window_move_resize (GdkWindow *window,
if (!GDK_WINDOW_DESTROYED (window))
{
if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD)
- _gdk_window_move_resize_child (window, x, y, width, height);
+ {
+ _gdk_window_move_resize_child (window, x, y, width, height);
+ }
else
{
GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (private->impl);
-
- if (width != impl->width || height != impl->height)
- private->resize_count += 1;
-
+
XMoveResizeWindow (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
x, y, width, height);
+ if (impl->override_redirect)
+ {
+ private->x = x;
+ private->y = y;
+ impl->width = width;
+ impl->height = height;
+ }
+ else
+ {
+ if (width != impl->width || height != impl->height)
+ private->resize_count += 1;
+ }
}
}
}
@@ -3286,11 +3329,16 @@ gdk_window_set_override_redirect (GdkWindow *window,
if (!GDK_WINDOW_DESTROYED (window))
{
- attr.override_redirect = (override_redirect == FALSE)?False:True;
+ GdkWindowObject *private = (GdkWindowObject *)window;
+ GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (private->impl);
+
+ attr.override_redirect = (override_redirect? True : False);
XChangeWindowAttributes (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
CWOverrideRedirect,
&attr);
+
+ impl->override_redirect = attr.override_redirect;
}
}
diff --git a/gdk/x11/gdkwindow-x11.h b/gdk/x11/gdkwindow-x11.h
index f76e061d4c..4e726f4b80 100644
--- a/gdk/x11/gdkwindow-x11.h
+++ b/gdk/x11/gdkwindow-x11.h
@@ -72,6 +72,7 @@ struct _GdkWindowImplX11
GdkXPositionInfo position_info;
GdkToplevelX11 *toplevel; /* Toplevel-specific information */
gint8 toplevel_window_type;
+ guint override_redirect : 1;
};
struct _GdkWindowImplX11Class