src/libide/tree/ide-tree.c (597) static void ide_tree_init (IdeTree *self) {.} src/libide/tree/ide-tree-model.c (663) static void tree_model_iface_init (GtkTreeModelIface *iface) {.} src/libide/tree/ide-tree-node.c (31) Since: 3.32 * The #IdeTreeNode class is used to represent an item that should be displayed in the tree of the Ide application. * The #IdeTreeAddin plugins create and maintain these nodes during the lifetime of the program. * Plugins that want to add items to the tree should implement the #IdeTreeAddin interface and register it during plugin initialization. src/libide/tree/ide-tree-node.c (127) enum { PROP_0, PROP_CHILDREN_POSSIBLE, PROP_DESTROY_ITEM, PROP_DISPLAY_NAME, PROP_EXPANDED_ICON, PROP_EXPANDED_ICON_NAME, PROP_HAS_ERROR, PROP_ICON, PROP_ICON_NAME, PROP_IS_HEADER, PROP_ITEM, PROP_RESET_ON_COLLAPSE, PROP_TAG, PROP_USE_MARKUP, N_PROPS }; src/libide/tree/ide-tree-node.c (48) struct _IdeTreeNode { GObject parent_instance; /* A pointer to the model, which is only set on the root node. */ IdeTreeModel *model; /* The following are fields containing the values for various properties on the tree node. * Usually, icon, display_name, and item will be set on all nodes. */ GIcon *icon; GIcon *expanded_icon; gchar *display_name; GObject *item; gchar *tag; GList *emblems; /* The following items are used to maintain a tree structure of nodes for which we can use O(1) operations. * The link is inserted into the parents children queue. The parent pointer is unowned, and set by the parent (cleared upon removal). * This also allows maintaining the tree structure with zero additional allocations beyond the nodes themselves. */ IdeTreeNode *parent; GQueue children; GList link; /* Foreground and Background colors */ GdkRGBA background; GdkRGBA foreground; /* Flags for state cell renderer */ IdeTreeNodeFlags flags; /* When did we start loading? This is used to avoid drawing "Loading..." when the tree loads really quickly. Otherwise, we risk looking janky when the loads are quite fast. */ gint64 started_loading_at; /* If we're currently loading */ guint is_loading : 1; /* If the node is a header (bold, etc) */ guint is_header : 1; /* If this is a synthesized empty node */ guint is_empty : 1; /* If there are errors associated with the node's item */ guint has_error : 1; /* If the node maybe has children */ guint children_possible : 1; /* If this node needs to have the children built */ guint needs_build_children : 1; /* If true, we remove all children on collapse */ guint reset_on_collapse : 1; /* If pango markup should be used */ guint use_markup : 1; /* If true, we use ide_clear_and_destroy_object() */ guint destroy_item : 1; /* If colors are set */ guint background_set : 1; guint foreground_set : 1; }; src/libide/tree/ide-tree-node.c (1763) /* If the node is not on screen, we need to animate until we get there. */ src/libide/tree/ide-tree-node.c (1776) /* FIXME: Time period comes from gtk animation duration. Not curently available in pubic API. * We need to be greater than the max timeout it could take to move, since we must have it on screen by then. * One alternative might be to check the result and if we are still not on screen, then just pin it to a row-height from the top or bottom. /----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/ src/libide/tree/ide-tree-addin.c (108) /* ide_tree_addin_build_children_async() Since: 3.32 * This function is called when building the children of a node. * This happens when expanding an node that might have children, or building the root node. * You may want to use ide_tree_node_holds() to determine if the node contains an item that you are interested in. * This function will call the synchronous form of IdeTreeAddin.build_children() if no asynchronous form is available. src/libide/tree/ide-tree-addin.c (143) /* ide_tree_addin_build_children_finish() Since: 3.32 * Completes an asynchronous request to ide_tree_addin_build_children_async(). * Returns: %TRUE if successful; otherwise %FALSE and @error is set. src/libide/tree/ide-tree-addin.c (167) /* ide_tree_addin_build_node() Since: 3.32 * This function is called when preparing a node for display in the tree. * Addins should adjust any state on the node that makes sense based on the addin. * You may want to use ide_tree_node_holds() to determine if the node contains an item that you are interested in. src/libide/tree/ide-tree-addin.c (194) /* ide_tree_addin_activated() Since: 3.32 * This function is called when a node has been activated in the tree and allows for the addin to perform any necessary operations in response to that. * If the addin performs an action based on the activation request, then it should return %TRUE from this function so that no further addins may respond to the action. * Returns: %TRUE if the activation was handled, otherwise %FALSE /----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/ src/libide/tree/ide-cell-renderer-status (29) #define CELL_HEIGHT 16, CELL_WIDTH 16, RPAD 8, LPAD 3 /----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/ src/libide/gui/ide-cell-renderer-fancy.c (166) HACK: @width is the min_width returned in our get_preferred_width() function. That results in pretty bad values here, so we will do this by assuming we are the only widget in the tree view. * This makes this cell very much not usable for generic situations, but it does make it so we can do text wrapping without resorting to GtkListBox *for our exact usecase only*. * The problem here is that we require the widget to already be realized and allocated and that we are the only renderer within the only column (and also, in a treeview) without exotic styling. * If we get something absurdly small (like 50) that is because we are hitting our minimum size of (xpad * 2). * So this works around the issue and tries to get something reasonable with wrapping at the 200px mark (our ~default width for panels). * Furthermore, we need to queue a resize when the column size changes (as it will from resizing the widget). So the tree view must also call gtk_tree_view_column_queue_resize().