static void gdl_dock_object_update_parent_visibility (GdlDockObject *object) { GdlDockObject *parent; g_return_if_fail (object != NULL); parent = gdl_dock_object_get_parent_object (object); if (parent && gdl_dock_object_is_automatic (parent)) { gboolean visible = FALSE; gtk_container_foreach (GTK_CONTAINER (parent), (GtkCallback) gdl_dock_object_foreach_is_visible, &visible); parent->priv->attached = visible; #ifndef GDL_DISABLE_DEPRECATED if (visible) parent->deprecated_flags |= GDL_DOCK_ATTACHED; else parent->deprecated_flags &= ~GDL_DOCK_ATTACHED; #endif gtk_widget_set_visible (GTK_WIDGET (parent), visible); } gdl_dock_object_layout_changed_notify (object); }
static void gdl_dock_object_foreach_automatic (GdlDockObject *object, gpointer user_data) { void (* function) (GtkWidget *) = user_data; if (gdl_dock_object_is_automatic (object)) (* function) (GTK_WIDGET (object)); }
static void gdl_dock_reduce (GdlDockObject *object) { GdlDock *dock = GDL_DOCK (object); GtkWidget *parent; if (dock->priv->root) return; if (gdl_dock_object_is_automatic (GDL_DOCK_OBJECT (dock))) { gtk_widget_destroy (GTK_WIDGET (dock)); } else if (gdl_dock_object_is_closed (GDL_DOCK_OBJECT (dock))) { /* if the user explicitly detached the object */ if (dock->priv->floating) gtk_widget_hide (GTK_WIDGET (dock)); else { GtkWidget *widget = GTK_WIDGET (object); parent = gtk_widget_get_parent (widget); if (parent) gtk_container_remove (GTK_CONTAINER (parent), widget); } } }