diff options
author | Richard Hult <richard@imendio.com> | 2008-03-11 10:14:47 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2008-03-11 10:14:47 +0000 |
commit | 62f084869dd239a469d4b273159657733903de2f (patch) | |
tree | a15a419831e6f62c340126c8a083c5e7b499af49 /gdk/quartz | |
parent | 980fdb08d9ecc4bb620d733674df4b54ed536b37 (diff) | |
download | gtk+-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.c | 49 |
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 |