static void gbp_editor_workspace_addin_unload (IdeWorkspaceAddin *addin, IdeWorkspace *workspace) { GbpEditorWorkspaceAddin *self = (GbpEditorWorkspaceAddin *)addin; g_assert (GBP_IS_EDITOR_WORKSPACE_ADDIN (self)); g_assert (IDE_IS_WORKSPACE (workspace)); g_assert (IDE_IS_PRIMARY_WORKSPACE (workspace) || IDE_IS_EDITOR_WORKSPACE (workspace)); dzl_signal_group_set_target (self->buffer_manager_signals, NULL); g_clear_object (&self->buffer_manager_signals); if (self->surface != NULL) gtk_widget_destroy (GTK_WIDGET (self->surface)); if (self->panels_box) gtk_widget_destroy (GTK_WIDGET (self->panels_box)); if (self->new_button) gtk_widget_destroy (GTK_WIDGET (self->new_button)); g_clear_object (&self->tooltip1); g_clear_object (&self->tooltip2); self->workspace = NULL; }
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; }
static void gbp_git_buffer_change_monitor_load (IdeBufferChangeMonitor *monitor, IdeBuffer *buffer) { GbpGitBufferChangeMonitor *self = (GbpGitBufferChangeMonitor *)monitor; g_assert (IDE_IS_MAIN_THREAD ()); g_assert (GBP_IS_GIT_BUFFER_CHANGE_MONITOR (self)); g_assert (IDE_IS_BUFFER (buffer)); dzl_signal_group_set_target (self->buffer_signals, buffer); gbp_git_buffer_change_monitor_queue_update (self, FAST); }
static void ide_source_map__view_notify_buffer (IdeSourceMap *self, GParamSpec *pspec, GtkSourceView *view) { GtkTextBuffer *buffer; g_assert (IDE_IS_SOURCE_MAP (self)); g_assert (GTK_SOURCE_IS_VIEW (view)); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); if (IDE_IS_BUFFER (buffer)) dzl_signal_group_set_target (self->buffer_signals, buffer); }
static void gbp_editor_workspace_addin_load (IdeWorkspaceAddin *addin, IdeWorkspace *workspace) { GbpEditorWorkspaceAddin *self = (GbpEditorWorkspaceAddin *)addin; IdeBufferManager *buffer_manager; IdeHeaderBar *header_bar; IdeContext *context; g_assert (GBP_IS_EDITOR_WORKSPACE_ADDIN (self)); g_assert (IDE_IS_WORKSPACE (workspace)); g_assert (IDE_IS_PRIMARY_WORKSPACE (workspace) || IDE_IS_EDITOR_WORKSPACE (workspace)); self->workspace = workspace; /* Get our buffer manager for future use */ context = ide_widget_get_context (GTK_WIDGET (workspace)); buffer_manager = ide_buffer_manager_from_context (context); /* Monitor buffer manager for new buffers */ self->buffer_manager_signals = dzl_signal_group_new (IDE_TYPE_BUFFER_MANAGER); g_signal_connect_swapped (self->buffer_manager_signals, "bind", G_CALLBACK (bind_buffer_manager), self); dzl_signal_group_connect_swapped (self->buffer_manager_signals, "load-buffer", G_CALLBACK (on_load_buffer), self); dzl_signal_group_set_target (self->buffer_manager_signals, buffer_manager); /* Add buttons to the header bar */ header_bar = ide_workspace_get_header_bar (workspace); add_buttons (self, header_bar); /* Add the editor surface to the workspace */ self->surface = g_object_new (IDE_TYPE_EDITOR_SURFACE, "name", "editor", "restore-panel", IDE_IS_PRIMARY_WORKSPACE (workspace), "visible", TRUE, NULL); g_signal_connect (self->surface, "destroy", G_CALLBACK (gtk_widget_destroyed), &self->surface); ide_workspace_add_surface (IDE_WORKSPACE (workspace), IDE_SURFACE (self->surface)); ide_workspace_set_visible_surface_name (IDE_WORKSPACE (workspace), "editor"); }
static void ide_source_map__view_changed (IdeSourceMap *self, GParamSpec *psepct, gpointer data) { GtkSourceView *view; g_return_if_fail (IDE_IS_SOURCE_MAP (self)); view = gtk_source_map_get_view (GTK_SOURCE_MAP (self)); g_object_bind_property_full (view, "font-desc", self, "font-desc", G_BINDING_SYNC_CREATE, shrink_font, NULL, NULL, NULL); dzl_signal_group_set_target (self->view_signals, view); }
static void gbp_git_buffer_change_monitor_destroy (IdeObject *object) { GbpGitBufferChangeMonitor *self = (GbpGitBufferChangeMonitor *)object; if (self->buffer_signals) { dzl_signal_group_set_target (self->buffer_signals, NULL); g_clear_object (&self->buffer_signals); } if (self->proxy != NULL) { ipc_git_change_monitor_call_close (self->proxy, NULL, NULL, NULL); g_clear_object (&self->proxy); } g_clear_pointer (&self->cache, line_cache_free); g_clear_handle_id (&self->queued_source, g_source_remove); IDE_OBJECT_CLASS (gbp_git_buffer_change_monitor_parent_class)->destroy (object); }
static void debug_manager_notify_debugger (IdeDebuggerEditorAddin *self, GParamSpec *pspec, IdeDebugManager *debug_manager) { IdeDebugger *debugger; IdeWorkspace *workspace; g_assert (IDE_IS_DEBUGGER_EDITOR_ADDIN (self)); g_assert (IDE_IS_DEBUG_MANAGER (debug_manager)); if (!gtk_widget_get_visible (GTK_WIDGET (self->panel))) { GtkWidget *stack = gtk_widget_get_parent (GTK_WIDGET (self->panel)); gtk_widget_show (GTK_WIDGET (self->panel)); if (GTK_IS_STACK (stack)) gtk_stack_set_visible_child (GTK_STACK (stack), GTK_WIDGET (self->panel)); } debugger = ide_debug_manager_get_debugger (debug_manager); if ((workspace = ide_widget_get_workspace (GTK_WIDGET (self->editor)))) gtk_widget_insert_action_group (GTK_WIDGET (workspace), "debugger", G_ACTION_GROUP (debugger)); ide_debugger_breakpoints_view_set_debugger (self->breakpoints_view, debugger); ide_debugger_locals_view_set_debugger (self->locals_view, debugger); ide_debugger_libraries_view_set_debugger (self->libraries_view, debugger); ide_debugger_registers_view_set_debugger (self->registers_view, debugger); ide_debugger_threads_view_set_debugger (self->threads_view, debugger); dzl_signal_group_set_target (self->debugger_signals, debugger); }
static void ide_debugger_editor_addin_load (IdeEditorAddin *addin, IdeEditorSurface *editor) { IdeDebuggerEditorAddin *self = (IdeDebuggerEditorAddin *)addin; IdeContext *context; IdeRunManager *run_manager; IdeDebugManager *debug_manager; IDE_ENTRY; g_assert (IDE_IS_DEBUGGER_EDITOR_ADDIN (self)); g_assert (IDE_IS_EDITOR_SURFACE (editor)); self->editor = editor; self->workbench = ide_widget_get_workbench (GTK_WIDGET (editor)); if (!ide_workbench_has_project (self->workbench)) return; context = ide_widget_get_context (GTK_WIDGET (editor)); run_manager = ide_run_manager_from_context (context); debug_manager = ide_debug_manager_from_context (context); ide_debugger_editor_addin_add_ui (self); ide_run_manager_add_handler (run_manager, "debugger", _("Run with Debugger"), "builder-debugger-symbolic", "F5", debugger_run_handler, g_object_ref (self), g_object_unref); self->debugger_signals = dzl_signal_group_new (IDE_TYPE_DEBUGGER); dzl_signal_group_connect_swapped (self->debugger_signals, "log", G_CALLBACK (debugger_log), self); dzl_signal_group_connect_swapped (self->debugger_signals, "stopped", G_CALLBACK (debugger_stopped), self); self->debug_manager_signals = dzl_signal_group_new (IDE_TYPE_DEBUG_MANAGER); dzl_signal_group_connect_swapped (self->debug_manager_signals, "notify::active", G_CALLBACK (debug_manager_notify_active), self); dzl_signal_group_connect_swapped (self->debug_manager_signals, "notify::debugger", G_CALLBACK (debug_manager_notify_debugger), self); dzl_signal_group_set_target (self->debug_manager_signals, debug_manager); IDE_EXIT; }