static void debugger_run_handler (IdeRunManager *run_manager, IdeRunner *runner, gpointer user_data) { IdeDebuggerEditorAddin *self = user_data; IdeDebugManager *debug_manager; IdeContext *context; g_autoptr(GError) error = NULL; IDE_ENTRY; g_assert (IDE_IS_RUN_MANAGER (run_manager)); g_assert (IDE_IS_RUNNER (runner)); g_assert (IDE_IS_DEBUGGER_EDITOR_ADDIN (self)); /* * Get the currently configured debugger and attach it to our runner. * It might need to prepend arguments like `gdb', `pdb', `mdb', etc. */ context = ide_object_get_context (IDE_OBJECT (run_manager)); debug_manager = ide_debug_manager_from_context (context); if (!ide_debug_manager_start (debug_manager, runner, &error)) send_notification (self, _("Failed to start the debugger"), error->message, "computer-fail-symbolic", TRUE); IDE_EXIT; }
static void ide_run_manager_run_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeRunner *runner = (IdeRunner *)object; g_autoptr(GTask) task = user_data; IdeRunManager *self; GError *error = NULL; IDE_ENTRY; g_assert (IDE_IS_RUNNER (runner)); g_assert (G_IS_TASK (task)); self = g_task_get_source_object (task); if (!ide_runner_run_finish (runner, result, &error)) { g_task_return_error (task, error); IDE_GOTO (failure); } g_task_return_boolean (task, TRUE); failure: g_signal_emit (self, signals [STOPPED], 0); IDE_EXIT; }
void ide_runner_addin_unload (IdeRunnerAddin *self, IdeRunner *runner) { g_assert (IDE_IS_RUNNER_ADDIN (self)); g_assert (IDE_IS_RUNNER (runner)); IDE_RUNNER_ADDIN_GET_IFACE (self)->unload (self, runner); }
static void do_run_async (IdeRunManager *self, GTask *task) { IdeBuildTarget *build_target; IdeContext *context; IdeConfigurationManager *config_manager; IdeConfiguration *config; IdeRuntime *runtime; g_autoptr(IdeRunner) runner = NULL; GCancellable *cancellable; g_assert (IDE_IS_RUN_MANAGER (self)); g_assert (G_IS_TASK (task)); build_target = g_task_get_task_data (task); context = ide_object_get_context (IDE_OBJECT (self)); g_assert (IDE_IS_BUILD_TARGET (build_target)); g_assert (IDE_IS_CONTEXT (context)); config_manager = ide_context_get_configuration_manager (context); config = ide_configuration_manager_get_current (config_manager); runtime = ide_configuration_get_runtime (config); if (runtime == NULL) { g_task_return_new_error (task, IDE_RUNTIME_ERROR, IDE_RUNTIME_ERROR_NO_SUCH_RUNTIME, "%s ā%sā", _("Failed to locate runtime"), ide_configuration_get_runtime_id (config)); IDE_EXIT; } runner = ide_runtime_create_runner (runtime, build_target); cancellable = g_task_get_cancellable (task); g_assert (IDE_IS_RUNNER (runner)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); /* * If the current handler has a callback specified (our default "run" handler * does not), then we need to allow that handler to prepare the runner. */ if (self->handler != NULL && self->handler->handler != NULL) self->handler->handler (self, runner, self->handler->handler_data); g_signal_emit (self, signals [RUN], 0, runner); ide_runner_run_async (runner, cancellable, ide_run_manager_run_cb, g_object_ref (task)); }