static void gdl_dock_object_destroy (GtkObject *gtk_object) { GdlDockObject *object; g_return_if_fail (GDL_IS_DOCK_OBJECT (gtk_object)); object = GDL_DOCK_OBJECT (gtk_object); if (gdl_dock_object_is_compound (object)) { /* detach our dock object children if we have some, and even if we are not attached, so they can get notification */ gdl_dock_object_freeze (object); gtk_container_foreach (GTK_CONTAINER (object), (GtkCallback) gdl_dock_object_foreach_detach, NULL); object->reduce_pending = FALSE; gdl_dock_object_thaw (object); } if (GDL_DOCK_OBJECT_ATTACHED (object)) { /* detach ourselves */ gdl_dock_object_detach (object, FALSE); } /* finally unbind us */ if (object->master) gdl_dock_object_unbind (object); GDL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (gtk_object)); }
static void gdl_dock_destroy (GtkObject *object) { GdlDock *dock = GDL_DOCK (object); if (dock->_priv) { GdlDockPrivate *priv = dock->_priv; dock->_priv = NULL; if (priv->window) { gtk_widget_destroy (priv->window); priv->floating = FALSE; priv->window = NULL; } /* destroy the xor gc */ if (priv->xor_gc) { g_object_unref (priv->xor_gc); priv->xor_gc = NULL; } g_free (priv); } GDL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object)); }
static void gdl_dock_master_dispose (GObject *g_object) { GdlDockMaster *master; g_return_if_fail (GDL_IS_DOCK_MASTER (g_object)); master = GDL_DOCK_MASTER (g_object); if (master->toplevel_docks) { g_list_foreach (master->toplevel_docks, (GFunc) gdl_dock_object_unbind, NULL); g_list_free (master->toplevel_docks); master->toplevel_docks = NULL; } if (master->dock_objects) { GSList *alive_docks = NULL; g_hash_table_foreach (master->dock_objects, (GHFunc) ht_foreach_build_slist, &alive_docks); while (alive_docks) { gdl_dock_object_unbind (GDL_DOCK_OBJECT (alive_docks->data)); alive_docks = g_slist_delete_link (alive_docks, alive_docks); } g_hash_table_destroy (master->dock_objects); master->dock_objects = NULL; } if (master->_priv) { if (master->_priv->idle_layout_changed_id) g_source_remove (master->_priv->idle_layout_changed_id); if (master->_priv->root_xor_gc) { g_object_unref (master->_priv->root_xor_gc); master->_priv->root_xor_gc = NULL; } if (master->_priv->drag_request) { if (G_IS_VALUE (&master->_priv->drag_request->extra)) g_value_unset (&master->_priv->drag_request->extra); g_free (master->_priv->drag_request); master->_priv->drag_request = NULL; } g_free (master->_priv->default_title); master->_priv->default_title = NULL; g_hash_table_destroy (master->_priv->locked_items); master->_priv->locked_items = NULL; g_hash_table_destroy (master->_priv->unlocked_items); master->_priv->unlocked_items = NULL; g_free (master->_priv); master->_priv = NULL; } GDL_CALL_PARENT (G_OBJECT_CLASS, dispose, (g_object)); }
static void gdl_dock_tablabel_unmap (GtkWidget *widget) { GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); gdk_window_hide (tablabel->event_window); GDL_CALL_PARENT (GTK_WIDGET_CLASS, unmap, (widget)); }
static void gdl_dock_object_hide (GtkWidget *widget) { if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (widget))) { gtk_container_foreach (GTK_CONTAINER (widget), (GtkCallback) gdl_dock_object_foreach_automatic, gtk_widget_hide); } GDL_CALL_PARENT (GTK_WIDGET_CLASS, hide, (widget)); }
static void gdl_dock_tablabel_unrealize (GtkWidget *widget) { GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); if (tablabel->event_window) { gdk_window_set_user_data (tablabel->event_window, NULL); gdk_window_destroy (tablabel->event_window); tablabel->event_window = NULL; } GDL_CALL_PARENT (GTK_WIDGET_CLASS, unrealize, (widget)); }
static void gdl_dock_object_finalize (GObject *g_object) { GdlDockObject *object; g_return_if_fail (g_object != NULL && GDL_IS_DOCK_OBJECT (g_object)); object = GDL_DOCK_OBJECT (g_object); g_free (object->name); object->name = NULL; g_free (object->long_name); object->long_name = NULL; g_free (object->stock_id); object->stock_id = NULL; GDL_CALL_PARENT (G_OBJECT_CLASS, finalize, (g_object)); }
static void gdl_dock_map (GtkWidget *widget) { GtkWidget *child; GdlDock *dock; g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK (widget)); dock = GDL_DOCK (widget); GDL_CALL_PARENT (GTK_WIDGET_CLASS, map, (widget)); if (dock->root) { child = GTK_WIDGET (dock->root); if (GTK_WIDGET_VISIBLE (child) && !GTK_WIDGET_MAPPED (child)) gtk_widget_map (child); } }
static void gdl_dock_hide (GtkWidget *widget) { GdlDock *dock; g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK (widget)); GDL_CALL_PARENT (GTK_WIDGET_CLASS, hide, (widget)); dock = GDL_DOCK (widget); if (dock->_priv->floating && dock->_priv->window) gtk_widget_hide (dock->_priv->window); if (GDL_DOCK_IS_CONTROLLER (dock)) { gdl_dock_master_foreach_toplevel (GDL_DOCK_OBJECT_GET_MASTER (dock), FALSE, (GFunc) gdl_dock_foreach_automatic, gtk_widget_hide); } }
static void gdl_dock_item_grip_destroy (GtkObject *object) { GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (object); if (grip->_priv) { GdlDockItemGripPrivate *priv = grip->_priv; if (priv->title_layout) { g_object_unref (priv->title_layout); priv->title_layout = NULL; } g_free (priv->title); priv->title = NULL; if (priv->icon_pixbuf) { g_object_unref (priv->icon_pixbuf); priv->icon_pixbuf = NULL; } if (priv->tooltips) { g_object_unref (priv->tooltips); priv->tooltips = NULL; } if (grip->item) g_signal_handlers_disconnect_by_func (grip->item, gdl_dock_item_grip_item_notify, grip); grip->item = NULL; grip->_priv = NULL; g_free (priv); } GDL_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object)); }