widget: Remove gtk_widget_reparent

This commit is contained in:
Timm Bäder 2016-10-12 19:46:23 +02:00 committed by Benjamin Otte
parent 296db5ab52
commit a4368a73a5
5 changed files with 25 additions and 146 deletions

View File

@ -5050,7 +5050,6 @@ gtk_widget_list_accel_closures
gtk_widget_can_activate_accel
gtk_widget_event
gtk_widget_activate
gtk_widget_reparent
gtk_widget_intersect
gtk_widget_is_focus
gtk_widget_grab_focus

View File

@ -7184,132 +7184,6 @@ gtk_widget_activate (GtkWidget *widget)
return FALSE;
}
static void
gtk_widget_reparent_subwindows (GtkWidget *widget,
GdkWindow *new_window)
{
GtkWidgetPrivate *priv = widget->priv;
if (!_gtk_widget_get_has_window (widget))
{
GList *children = gdk_window_get_children (priv->window);
GList *tmp_list;
for (tmp_list = children; tmp_list; tmp_list = tmp_list->next)
{
GdkWindow *window = tmp_list->data;
gpointer child;
gdk_window_get_user_data (window, &child);
while (child && child != widget)
child = ((GtkWidget*) child)->priv->parent;
if (child)
gdk_window_reparent (window, new_window, 0, 0);
}
g_list_free (children);
}
else
{
GdkWindow *parent;
GList *tmp_list, *children;
parent = gdk_window_get_parent (priv->window);
if (parent == NULL)
gdk_window_reparent (priv->window, new_window, 0, 0);
else
{
children = gdk_window_get_children (parent);
for (tmp_list = children; tmp_list; tmp_list = tmp_list->next)
{
GdkWindow *window = tmp_list->data;
gpointer child;
gdk_window_get_user_data (window, &child);
if (child == widget)
gdk_window_reparent (window, new_window, 0, 0);
}
g_list_free (children);
}
}
}
static void
gtk_widget_reparent_fixup_child (GtkWidget *widget,
gpointer client_data)
{
GtkWidgetPrivate *priv = widget->priv;
g_assert (client_data != NULL);
if (!_gtk_widget_get_has_window (widget))
{
if (priv->window)
g_object_unref (priv->window);
priv->window = (GdkWindow*) client_data;
if (priv->window)
g_object_ref (priv->window);
if (GTK_IS_CONTAINER (widget))
gtk_container_forall (GTK_CONTAINER (widget),
gtk_widget_reparent_fixup_child,
client_data);
}
}
/**
* gtk_widget_reparent:
* @widget: a #GtkWidget
* @new_parent: a #GtkContainer to move the widget into
*
* Moves a widget from one #GtkContainer to another, handling reference
* count issues to avoid destroying the widget.
*
* Deprecated: 3.14: Use gtk_container_remove() and gtk_container_add().
**/
void
gtk_widget_reparent (GtkWidget *widget,
GtkWidget *new_parent)
{
GtkWidgetPrivate *priv;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (GTK_IS_CONTAINER (new_parent));
priv = widget->priv;
g_return_if_fail (priv->parent != NULL);
if (priv->parent != new_parent)
{
/* First try to see if we can get away without unrealizing
* the widget as we reparent it. if so we set a flag so
* that gtk_widget_unparent doesn't unrealize widget
*/
if (_gtk_widget_get_realized (widget) && _gtk_widget_get_realized (new_parent))
priv->in_reparent = TRUE;
g_object_ref (widget);
gtk_container_remove (GTK_CONTAINER (priv->parent), widget);
gtk_container_add (GTK_CONTAINER (new_parent), widget);
g_object_unref (widget);
if (priv->in_reparent)
{
priv->in_reparent = FALSE;
gtk_widget_reparent_subwindows (widget, gtk_widget_get_parent_window (widget));
gtk_widget_reparent_fixup_child (widget,
gtk_widget_get_parent_window (widget));
}
g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_PARENT]);
}
}
/**
* gtk_widget_intersect:
* @widget: a #GtkWidget

View File

@ -738,9 +738,6 @@ gboolean gtk_widget_send_focus_change (GtkWidget *widget,
GDK_AVAILABLE_IN_ALL
gboolean gtk_widget_activate (GtkWidget *widget);
GDK_DEPRECATED_IN_3_14
void gtk_widget_reparent (GtkWidget *widget,
GtkWidget *new_parent);
GDK_AVAILABLE_IN_ALL
gboolean gtk_widget_intersect (GtkWidget *widget,
const GdkRectangle *area,

View File

@ -1739,9 +1739,10 @@ reparent_label (GtkWidget *widget,
label = g_object_get_data (G_OBJECT (widget), "user_data");
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_widget_reparent (label, new_parent);
G_GNUC_END_IGNORE_DEPRECATIONS
g_object_ref (label);
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (widget)), label);
gtk_container_add (GTK_CONTAINER (new_parent), label);
g_object_unref (label);
}
static void
@ -3271,10 +3272,11 @@ static gulong sw_destroyed_handler = 0;
static gboolean
scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_widget_reparent (scrollwin, sw_parent);
G_GNUC_END_IGNORE_DEPRECATIONS
g_object_ref (scrollwin);
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (scrollwin)), scrollwin);
gtk_container_add (GTK_CONTAINER (sw_parent), scrollwin);
g_object_unref (scrollwin);
g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
sw_float_parent = NULL;
sw_parent = NULL;
@ -3304,9 +3306,12 @@ scrolled_windows_remove (GtkWidget *dialog, gint response, GtkWidget *scrollwin)
if (sw_parent)
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_widget_reparent (scrollwin, sw_parent);
G_GNUC_END_IGNORE_DEPRECATIONS
g_object_ref (scrollwin);
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (scrollwin)), scrollwin);
gtk_container_add (GTK_CONTAINER (sw_parent), scrollwin);
g_object_unref (scrollwin);
gtk_widget_destroy (sw_float_parent);
g_signal_handler_disconnect (sw_parent, sw_destroyed_handler);
@ -3323,9 +3328,12 @@ G_GNUC_END_IGNORE_DEPRECATIONS
gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_widget_reparent (scrollwin, sw_float_parent);
G_GNUC_END_IGNORE_DEPRECATIONS
g_object_ref (scrollwin);
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (scrollwin)), scrollwin);
gtk_container_add (GTK_CONTAINER (sw_float_parent), scrollwin);
g_object_unref (scrollwin);
gtk_widget_show (sw_float_parent);
sw_destroyed_handler =

View File

@ -20,9 +20,10 @@ remove_this_row (GtkButton *button, GtkWidget *child)
revealer = gtk_revealer_new ();
gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), TRUE);
gtk_widget_show (revealer);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_widget_reparent (child, revealer);
G_GNUC_END_IGNORE_DEPRECATIONS
g_object_ref (child);
gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (child)), child);
gtk_container_add (GTK_CONTAINER (revealer), child);
g_object_unref (child);
gtk_container_add (GTK_CONTAINER (row), revealer);
g_signal_connect (revealer, "notify::child-revealed",
G_CALLBACK (row_unrevealed), NULL);