static void ide_frame_destroy (GtkWidget *widget) { IdeFrame *self = (IdeFrame *)widget; IdeFramePrivate *priv = ide_frame_get_instance_private (self); g_assert (IDE_IS_FRAME (self)); g_clear_object (&priv->addins); g_clear_pointer (&priv->in_transition, g_ptr_array_unref); if (priv->pages != NULL) { g_list_model_items_changed (G_LIST_MODEL (self), 0, priv->pages->len, 0); g_clear_pointer (&priv->pages, g_ptr_array_unref); } if (priv->bindings != NULL) { dzl_binding_group_set_source (priv->bindings, NULL); g_clear_object (&priv->bindings); } if (priv->signals != NULL) { dzl_signal_group_set_target (priv->signals, NULL); g_clear_object (&priv->signals); } g_clear_object (&priv->pan); GTK_WIDGET_CLASS (ide_frame_parent_class)->destroy (widget); }
static void ide_frame_notify_visible_child (IdeFrame *self, GParamSpec *pspec, GtkStack *stack) { IdeFramePrivate *priv = ide_frame_get_instance_private (self); GtkWidget *visible_child; g_assert (IDE_IS_FRAME (self)); g_assert (GTK_IS_STACK (stack)); if (gtk_widget_in_destruction (GTK_WIDGET (self))) return; if ((visible_child = gtk_stack_get_visible_child (priv->stack))) { if (gtk_widget_in_destruction (visible_child)) visible_child = NULL; } /* * Mux/Proxy actions to our level so that they also be activated * from the header bar without any weirdness by the View. */ dzl_gtk_widget_mux_action_groups (GTK_WIDGET (self), visible_child, "IDE_FRAME_MUXED_ACTION"); /* Update our bindings targets */ dzl_binding_group_set_source (priv->bindings, visible_child); dzl_signal_group_set_target (priv->signals, visible_child); /* Show either the empty state, failed state, or actual page */ if (visible_child != NULL && ide_page_get_failed (IDE_PAGE (visible_child))) gtk_stack_set_visible_child (priv->top_stack, GTK_WIDGET (priv->failed_state)); else if (visible_child != NULL) gtk_stack_set_visible_child (priv->top_stack, GTK_WIDGET (priv->stack)); else gtk_stack_set_visible_child (priv->top_stack, GTK_WIDGET (priv->empty_placeholder)); /* Allow the header to update settings */ _ide_frame_header_update (priv->header, IDE_PAGE (visible_child)); /* Ensure action state is up to date */ _ide_frame_update_actions (self); if (priv->addins != NULL) peas_extension_set_foreach (priv->addins, ide_frame_notify_addin_of_page, visible_child); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_VISIBLE_CHILD]); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_HAS_VIEW]); }
static void ide_omni_bar_context_set (GtkWidget *widget, IdeContext *context) { IdeOmniBar *self = (IdeOmniBar *)widget; IdeConfigurationManager *config_manager = NULL; IdeBuildManager *build_manager = NULL; GListModel *pausables = NULL; IdeProject *project = NULL; IdeVcs *vcs = NULL; IDE_ENTRY; g_assert (IDE_IS_OMNI_BAR (self)); g_assert (!context || IDE_IS_CONTEXT (context)); ide_omni_bar_update (self); if (context != NULL) { vcs = ide_context_get_vcs (context); build_manager = ide_context_get_build_manager (context); config_manager = ide_context_get_configuration_manager (context); project = ide_context_get_project (context); pausables = _ide_context_get_pausables (context); } dzl_binding_group_set_source (self->build_manager_bindings, build_manager); dzl_signal_group_set_target (self->build_manager_signals, build_manager); dzl_binding_group_set_source (self->config_manager_bindings, config_manager); dzl_signal_group_set_target (self->config_manager_signals, config_manager); dzl_binding_group_set_source (self->project_bindings, project); dzl_binding_group_set_source (self->vcs_bindings, vcs); dzl_list_box_set_model (self->pausables, pausables); if (config_manager != NULL) ide_omni_bar__config_manager__notify_current (self, NULL, config_manager); IDE_EXIT; }