static PyObject* Document_find_by_real_path(PyObject *self, PyObject *args, PyObject *kwargs) { gchar *fn; GeanyDocument *doc; static gchar *kwlist[] = { "real_path", NULL }; if (PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &fn)) { doc = document_find_by_real_path(fn); if (DOC_VALID(doc)) return (PyObject *) Document_create_new_from_geany_document(doc); } Py_RETURN_NONE; }
/* * called when debugger exits */ static void on_debugger_exited (int code) { /* remove marker for current instruction if was set */ if (stack) { remove_stack_markers(); g_list_foreach(stack, (GFunc)frame_free, NULL); g_list_free(stack); stack = NULL; } /* clear watch page */ clear_watch_values(GTK_TREE_VIEW(wtree)); /* clear autos page */ gtk_tree_store_clear(GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(atree)))); /* clear stack trace tree */ stree_clear(); /* clear debug terminal */ vte_terminal_reset(VTE_TERMINAL(terminal), TRUE, TRUE); /* clear debug messages window */ GtkTextIter start, end; GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(debugger_messages_textview)); gtk_text_buffer_get_bounds(buffer, &start, &end); gtk_text_buffer_delete(buffer, &start, &end); /* enable target page */ tpage_set_readonly(FALSE); /* remove breaks readonly if current module doesn't support run-time breaks operation */ if (!(active_module->features & MF_ASYNC_BREAKS)) bptree_set_readonly(FALSE); /* set files that was readonly during debug writable */ GList *iter = read_only_pages; while (iter) { GeanyDocument *doc = document_find_by_real_path((const gchar*)iter->data); if (doc) scintilla_send_message(doc->editor->sci, SCI_SETREADONLY, 0, 0); /* free file name */ g_free(iter->data); iter = iter->next; } g_list_free(read_only_pages); read_only_pages = NULL; /* clear and destroy calltips cache */ g_hash_table_destroy(calltips); calltips = NULL; /* enable widgets */ enable_sensitive_widgets(TRUE); /* update buttons panel state */ btnpanel_set_debug_state(DBS_IDLE); /* update debug state */ debug_state = DBS_IDLE; }
/* * called from debug module when debugger is being stopped */ static void on_debugger_stopped (int thread_id) { /* update debug state */ debug_state = DBS_STOPPED; /* update buttons panel state */ if (!interrupt_data) { btnpanel_set_debug_state(debug_state); } /* clear calltips cache */ g_hash_table_remove_all(calltips); /* if a stop was requested for asyncronous exiting - * stop debug module and exit */ if (exit_pending) { active_module->stop(); exit_pending = FALSE; return; } /* check for async activities pending */ if (interrupt_data) { interrupt_cb(interrupt_data); interrupt_data = NULL; active_module->resume(); return; } /* clear stack tree view */ stree_set_active_thread_id(thread_id); /* get current stack trace and put in the tree view */ stack = active_module->get_stack(); GList *iter = stack; while (iter) { frame *f = (frame*)iter->data; stree_add(f); iter = g_list_next(iter); } stree_select_first_frame(TRUE); /* files */ GList *files = active_module->get_files(); /* remove from list and make writable those files, that are not in the current list */ iter = read_only_pages; while (iter) { if (!g_list_find_custom(files, iter->data, (GCompareFunc)g_strcmp0)) { /* set document writable */ GeanyDocument *doc = document_find_by_real_path((const gchar*)iter->data); if (doc) scintilla_send_message(doc->editor->sci, SCI_SETREADONLY, 0, 0); /* free file name */ g_free(iter->data); /* save next item pointer */ GList *next = iter->next; /* remove current item */ read_only_pages = g_list_delete_link(read_only_pages, iter); /* set next item and continue */ iter = next; continue; } iter = iter->next; } /* add to the list and make readonly those files from the current list that are new */ iter = files; while (iter) { if (!g_list_find_custom(read_only_pages, iter->data, (GCompareFunc)g_strcmp0)) { /* set document readonly */ GeanyDocument *doc = document_find_by_real_path((const gchar*)iter->data); if (doc) scintilla_send_message(doc->editor->sci, SCI_SETREADONLY, 1, 0); /* add new file to the list */ read_only_pages = g_list_append(read_only_pages, g_strdup((gchar*)iter->data)); } iter = iter->next; } g_list_free(files); /* autos */ GList *autos = active_module->get_autos(); update_variables(GTK_TREE_VIEW(atree), NULL, autos); /* watches */ GList *watches = active_module->get_watches(); update_variables(GTK_TREE_VIEW(wtree), NULL, watches); if (stack) { frame *current = (frame*)stack->data; if (current->have_source) { /* open current instruction position */ editor_open_position(current->file, current->line); } /* add current instruction marker */ add_stack_markers(); } /* enable widgets */ enable_sensitive_widgets(TRUE); /* remove breaks readonly if current module doesn't support run-time breaks operation */ if (!(active_module->features & MF_ASYNC_BREAKS)) bptree_set_readonly(FALSE); }