summaryrefslogtreecommitdiff
path: root/gdk/quartz
diff options
context:
space:
mode:
authorRichard Hult <richard@imendio.com>2008-03-11 10:14:47 +0000
committerRichard Hult <rhult@src.gnome.org>2008-03-11 10:14:47 +0000
commit62f084869dd239a469d4b273159657733903de2f (patch)
treea15a419831e6f62c340126c8a083c5e7b499af49 /gdk/quartz
parent980fdb08d9ecc4bb620d733674df4b54ed536b37 (diff)
downloadgtk+-62f084869dd239a469d4b273159657733903de2f.tar.gz
Implement gdk_window_reparent.
2008-03-11 Richard Hult <richard@imendio.com> * gdk/quartz/gdkwindow-quartz.c: Implement gdk_window_reparent. svn path=/trunk/; revision=19746
Diffstat (limited to 'gdk/quartz')
-rw-r--r--gdk/quartz/gdkwindow-quartz.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index 932e5f568b..ed385aa4bb 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -1437,14 +1437,51 @@ gdk_window_move_resize (GdkWindow *window,
void
gdk_window_reparent (GdkWindow *window,
- GdkWindow *new_parent,
- gint x,
- gint y)
+ GdkWindow *new_parent,
+ gint x,
+ gint y)
{
- g_warning ("gdk_window_reparent: %p %p (%d, %d)",
- window, new_parent, x, y);
+ GdkWindowObject *private, *old_parent_private, *new_parent_private;
+ GdkWindowImplQuartz *impl, *old_parent_impl, *new_parent_impl;
+ NSView *view, *new_parent_view;
- /* FIXME: Implement */
+ if (!new_parent || new_parent == _gdk_root)
+ {
+ /* Could be added, just needs implementing. */
+ g_warning ("Reparenting to root window is not supported yet in the Mac OS X backend");
+ return;
+ }
+
+ private = GDK_WINDOW_OBJECT (window);
+ impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ view = impl->view;
+
+ new_parent_private = GDK_WINDOW_OBJECT (new_parent);
+ new_parent_impl = GDK_WINDOW_IMPL_QUARTZ (new_parent_private->impl);
+ new_parent_view = new_parent_impl->view;
+
+ old_parent_private = GDK_WINDOW_OBJECT (private->parent);
+ old_parent_impl = GDK_WINDOW_IMPL_QUARTZ (old_parent_private->impl);
+
+ [view retain];
+
+ [view removeFromSuperview];
+ [new_parent_view addSubview:view];
+
+ [view release];
+
+ private->x = x;
+ private->y = y;
+ private->parent = (GdkWindowObject *)new_parent;
+
+ if (old_parent_private)
+ {
+ old_parent_private->children = g_list_remove (old_parent_private->children, window);
+ old_parent_impl->sorted_children = g_list_remove (old_parent_impl->sorted_children, window);
+ }
+
+ new_parent_private->children = g_list_prepend (new_parent_private->children, window);
+ new_parent_impl->sorted_children = g_list_prepend (new_parent_impl->sorted_children, window);
}
void