Revision: 2199 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2199&view=re... Author: cesspit Date: 2011-09-16 13:47:03 +0000 (Fri, 16 Sep 2011) Log Message: ----------- debugger: preventing multiple config saving operations when performing enabling/disabling/removing several breaks from breakpoints panel, refactoring
Modified Paths: -------------- trunk/geany-plugins/debugger/src/bptree.c trunk/geany-plugins/debugger/src/breakpoints.c trunk/geany-plugins/debugger/src/breakpoints.h trunk/geany-plugins/debugger/src/btnpanel.c trunk/geany-plugins/debugger/src/callbacks.c trunk/geany-plugins/debugger/src/dconfig.c trunk/geany-plugins/debugger/src/dconfig.h trunk/geany-plugins/debugger/src/debug.c trunk/geany-plugins/debugger/src/debug.h trunk/geany-plugins/debugger/src/dpaned.c trunk/geany-plugins/debugger/src/markers.c trunk/geany-plugins/debugger/src/plugin.c trunk/geany-plugins/debugger/src/stree.c trunk/geany-plugins/debugger/src/tpage.c
Modified: trunk/geany-plugins/debugger/src/bptree.c =================================================================== --- trunk/geany-plugins/debugger/src/bptree.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/bptree.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -35,7 +35,6 @@
#include "geanyplugin.h"
-#include "breakpoint.h" #include "breakpoints.h" #include "bptree.h" #include "utils.h" @@ -85,21 +84,6 @@ move_to_line_cb on_break_clicked = NULL;
/* - * traversed comparing functions - */ -static gboolean compare_path_references(gpointer key, gpointer value, gpointer user_data) -{ - GtkTreeRowReference *being_clicked = (GtkTreeRowReference*)user_data; - GtkTreeRowReference *compared = (GtkTreeRowReference*)value; - - return !gtk_tree_path_compare ( - gtk_tree_row_reference_get_path(being_clicked), - gtk_tree_row_reference_get_path(compared) - ); - -} - -/* * gets tree row reference for an unsected row at the same depth */ GtkTreeRowReference* get_unselected_sibling(GtkTreePath *path) @@ -350,48 +334,18 @@ gboolean current_state = gtk_cell_renderer_toggle_get_active(cell_renderer);
/* check if this is a file row */ - GtkTreeRowReference *path_reference = gtk_tree_row_reference_new(model, tree_path); - if(g_hash_table_find(files, compare_path_references, (gpointer)path_reference)) + if(1 == gtk_tree_path_get_depth(tree_path)) { - GtkTreeIter child; - gtk_tree_model_iter_children(model, &child, &iter); - gchar *file; gtk_tree_model_get ( model, &iter, FILEPATH, &file, -1); - - dconfig_set_modifyable(FALSE); - do - { - gboolean enabled; - gtk_tree_model_get ( - model, - &child, - ENABLED, &enabled, - -1); - - if (!current_state ^ enabled) - { - int line; - gtk_tree_model_get ( - model, - &child, - LINE, &line, - -1); - breaks_switch(file, line); - } - } - while(gtk_tree_model_iter_next(model, &child));
- gtk_tree_store_set(store, &iter, ENABLED, !current_state, -1); + breaks_set_enabled_for_file(file, !current_state);
g_free(file); - - dconfig_set_modifyable(TRUE); - dconfig_set_changed(); } else { @@ -400,15 +354,12 @@
gchar *file; int line; - gboolean parent_enabed;
gtk_tree_model_get ( model, &parent_iter, FILEPATH, &file, - ENABLED, &parent_enabed, -1); - gtk_tree_model_get ( model, &iter, @@ -417,15 +368,6 @@ breaks_switch(file, line); - if (current_state && parent_enabed) - { - gtk_tree_store_set(store, &parent_iter, ENABLED, FALSE, -1); - } - else if (!current_state && !parent_enabed) - { - update_file_node(&parent_iter); - } - g_free(file); }
@@ -437,6 +379,10 @@ */ static gboolean on_key_pressed(GtkWidget *widget, GdkEvent *event, gpointer user_data) { + /* do not process event is page is readonly (debug is running) */ + if (readonly) + return FALSE; + guint keyval = ((GdkEventKey*)event)->keyval;
/* get selected rows */ @@ -448,9 +394,6 @@ { /* "delete selected rows" */
- /* get references to rows to keep references actual when altering model */ - GList *references = NULL; - /* get new selection */ GtkTreeRowReference *new_selection = NULL; GtkTreePath *first_path = (GtkTreePath*)rows->data; @@ -469,107 +412,72 @@ gtk_tree_path_free(file_path); } + /* collect GList of breakpoints to remove + if file row is met - add all unselected breaks to the list as well */ GList *iter = rows; + GList *breaks = NULL; while (iter) { GtkTreePath *path = (GtkTreePath*)iter->data; - references = g_list_append(references, gtk_tree_row_reference_new(model, path)); - iter = iter->next; - } - - /* remove break rows leaving file rows for the next step */ - dconfig_set_modifyable(FALSE); - iter = references; - while (iter) - { - GtkTreeRowReference *reference = (GtkTreeRowReference*)iter->data; - if (gtk_tree_row_reference_valid(reference)) - { - GtkTreePath *path = gtk_tree_row_reference_get_path(reference); - if (gtk_tree_path_get_depth(path) > 1) - { - GtkTreeIter titer, piter; - gtk_tree_model_get_iter(model, &titer, path); - gtk_tree_model_iter_parent(model, &piter, &titer); - - gchar *filename = NULL; - gtk_tree_model_get(model, &piter, FILEPATH, &filename, -1); - - gint line; - gtk_tree_model_get(model, &titer, LINE, &line, -1); - - breaks_remove(filename, line); - - g_free(filename); - } - } - iter = iter->next; - } - - /* remove file rows and children if exist */ - iter = references; - while (iter) - { - GtkTreeRowReference *reference = (GtkTreeRowReference*)iter->data; - if (gtk_tree_row_reference_valid(reference)) + GtkTreeIter titer; + gtk_tree_model_get_iter(model, &titer, path); + + if (1 == gtk_tree_path_get_depth(path)) { - GtkTreePath *path = gtk_tree_row_reference_get_path(reference); - if (1 == gtk_tree_path_get_depth(path)) + GtkTreeIter citer; + gtk_tree_model_iter_children(model, &citer, &titer); + + do { - GtkTreeIter child, parent; - gtk_tree_model_get_iter(model, &parent, path); - - gchar *filename = NULL; - gtk_tree_model_get(model, &parent, FILEPATH, &filename, -1); - - GList *child_references = NULL; - if(gtk_tree_model_iter_children(model, &child, &parent)) + if (!gtk_tree_selection_iter_is_selected(selection, &citer)) { - /* collect all child nodes references */ - do - { - GtkTreePath *child_path = gtk_tree_model_get_path(model, &child); - child_references = g_list_append(child_references, gtk_tree_row_reference_new(model, child_path)); - gtk_tree_path_free(child_path); - } - while(gtk_tree_model_iter_next(model, &child)); - } - - /* traverse through refernces, removing breakpoints */ - GList *citer = child_references; - while(citer) - { - GtkTreePath *child_path = gtk_tree_row_reference_get_path((GtkTreeRowReference*)citer->data); - GtkTreeIter child_iter; - gtk_tree_model_get_iter(model, &child_iter, child_path); - + gchar *file = NULL; gint line; - gtk_tree_model_get(model, &child_iter, LINE, &line, -1);
- breaks_remove(filename, line); + gtk_tree_model_get(model, &titer, FILEPATH, &file, -1); + gtk_tree_model_get(model, &citer, LINE, &line, -1);
- citer = citer->next; + breakpoint *bp = breaks_lookup_breakpoint(file, line); + + breaks = g_list_append(breaks, bp); + + g_free(file); } - - /* free children references list */ - g_list_foreach (child_references, (GFunc)gtk_tree_row_reference_free, NULL); - g_list_free (child_references); - - g_free(filename); } + while(gtk_tree_model_iter_next(model, &citer)); } - + else + { + GtkTreeIter piter; + gtk_tree_model_iter_parent(model, &piter, &titer); + + gchar *file = NULL; + gtk_tree_model_get(model, &piter, FILEPATH, &file, -1); + + gint line; + gtk_tree_model_get(model, &titer, LINE, &line, -1); + + breakpoint *bp = breaks_lookup_breakpoint(file, line); + + breaks = g_list_append(breaks, bp); + + g_free(file); + } iter = iter->next; } + + if (1 == g_list_length(breaks)) + { + breakpoint *bp = (breakpoint*)breaks->data; + g_list_free(breaks); + breaks_remove(bp->file, bp->line); + } + else + { + breaks_remove_list(breaks); + }
- /* free rows list */ - g_list_foreach (references, (GFunc)gtk_tree_row_reference_free, NULL); - g_list_free (references); - - dconfig_set_modifyable(TRUE); - dconfig_set_changed(TRUE); - if (new_selection) { /* get path to select */
Modified: trunk/geany-plugins/debugger/src/breakpoints.c =================================================================== --- trunk/geany-plugins/debugger/src/breakpoints.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/breakpoints.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -30,7 +30,6 @@ #include "geanyplugin.h" extern GeanyFunctions *geany_functions;
-#include "breakpoint.h" #include "breakpoints.h" #include "utils.h" #include "markers.h" @@ -85,36 +84,82 @@ }
/* - * Helper functions + * functions to perform markers and tree vew operation when breakpoint + * is finally updated/added/removed */ - -/* - * Remove breakpoint while iterating through GTree. - * arguments: - * bp - breakpoint - */ -void handle_break_remove(breakpoint* bp, gboolean success); -void breaks_remove_internal(breakpoint *bp) +static void on_add(breakpoint *bp) { - handle_break_remove(bp, TRUE); + /* add to breakpoints tab */ + bptree_add_breakpoint(bp); + /* add marker */ + markers_add_breakpoint(bp); } +static void on_remove(breakpoint *bp) +{ + /* remove marker */ + markers_remove_breakpoint(bp); + /* remove from breakpoints tab */ + bptree_remove_breakpoint(bp); + /* remove from internal storage */ + GTree *tree = g_hash_table_lookup(files, bp->file); + g_tree_remove(tree, GINT_TO_POINTER(bp->line)); +} +static void on_set_hits_count(breakpoint *bp) +{ + bptree_set_hitscount(bp); + markers_remove_breakpoint(bp); + markers_add_breakpoint(bp); +} +static void on_set_condition(breakpoint* bp) +{ + /* set condition in breaks tree */ + bptree_set_condition(bp); + markers_remove_breakpoint(bp); + markers_add_breakpoint(bp); +} +static void on_switch(breakpoint *bp) +{ + /* remove old and set new marker */ + markers_remove_breakpoint(bp); + markers_add_breakpoint(bp); + + /* set checkbox in breaks tree */ + bptree_set_enabled(bp); +} +static void on_set_enabled_list(GList *breaks, gboolean enabled) +{ + GList *iter = breaks; + while (iter) + { + breakpoint *bp = (breakpoint*)iter->data; + + if (bp->enabled ^ enabled) + { + bp->enabled = enabled; + + /* remove old and set new marker */ + markers_remove_breakpoint(bp); + markers_add_breakpoint(bp); + + /* set checkbox in breaks tree */ + bptree_set_enabled(bp); + } + iter = iter->next; + } +} +static void on_remove_list(GList *list) +{ + GList *iter; + for (iter = list; iter; iter = iter->next) + { + on_remove((breakpoint*)iter->data); + } +}
/* - * lookup for breakpoint - * arguments: - * file - breakpoints filename - * line - breakpoints line + * Helper functions */ -breakpoint* lookup_breakpoint(const gchar* file, int line) -{ - breakpoint* bp = NULL; - GTree* tree = NULL; - if ( (tree = (GTree*)g_hash_table_lookup(files, file)) ) - bp = g_tree_lookup(tree, GINT_TO_POINTER(line));
- return bp; -} - /* * compare pointers as integers * return value similar to strcmp @@ -129,92 +174,50 @@ }
/* - * Handlers for breakpoints activities. - * Are called directly from breaks_set_... functions - * or from async_callback if break was set asyncronously. - * + * functions that are called when a breakpoint is altered while debuginng session is active. + * Therefore, these functions try to alter break in debug session first and if successful - + * do what on_... do or simply call on_... function directly */ - -/* - * handles new break creation - * arguments: - * bp - breakpoint to handle - * success - success of operation - */ -void handle_break_new(breakpoint* bp, gboolean success) +static void breaks_add_debug(breakpoint* bp) { - if (success) + if (debug_set_break(bp, BSA_NEW_BREAK)) { - /* add to breakpoints tab */ - bptree_add_breakpoint(bp); - /* add marker */ - markers_add_breakpoint(bp); + /* add markers, update treeview */ + on_add(bp); /* mark config for saving */ dconfig_set_changed(); } else dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message()); } - -/* - * handles break removing - * arguments: - * bp - breakpoint to handle - * success - success of operation - */ -void handle_break_remove(breakpoint* bp, gboolean success) +static void breaks_remove_debug(breakpoint* bp) { - if (success) + if (debug_remove_break(bp)) { - /* remove marker */ - markers_remove_breakpoint(bp); - /* remove from breakpoints tab */ - bptree_remove_breakpoint(bp); - /* remove from internal storage */ - GTree *tree = g_hash_table_lookup(files,bp->file); - g_tree_remove(tree, GINT_TO_POINTER(bp->line)); - + /* remove markers, update treeview */ + on_remove(bp); /* mark config for saving */ dconfig_set_changed(); } else dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message()); } - -/* - * handles breakpoints hits count set - * arguments: - * bp - breakpoint to handle - * success - success of operation - */ -void handle_hitscount_set(breakpoint* bp, gboolean success) +static void breaks_set_hits_count_debug(breakpoint* bp) { - if (success) + if (debug_set_break(bp, BSA_UPDATE_HITS_COUNT)) { - bptree_set_hitscount(bp); - markers_remove_breakpoint(bp); - markers_add_breakpoint(bp); + on_set_hits_count(bp); /* mark config for saving */ dconfig_set_changed(); } else dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message()); } - -/* - * handles breakpoints condition set - * arguments: - * bp - breakpoint to handle - * success - success of operation - */ -void handle_condition_set(breakpoint* bp, gboolean success) +static void breaks_set_condition_debug(breakpoint* bp) { - if (success) + if (debug_set_break(bp, BSA_UPDATE_CONDITION)) { - /* set condition in breaks tree */ - bptree_set_condition(bp); - markers_remove_breakpoint(bp); - markers_add_breakpoint(bp); + on_set_condition(bp); /* mark config for saving */ dconfig_set_changed(); } @@ -228,55 +231,80 @@ dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message()); } } +static void breaks_switch_debug(breakpoint* bp) +{ + if (debug_set_break(bp, BSA_UPDATE_ENABLE)) + { + on_switch(bp); + /* mark config for saving */ + dconfig_set_changed(); + } + else + { + bp->enabled = !bp->enabled; + dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message()); + } +} +static void breaks_set_disabled_list_debug(GList *list) +{ + GList *iter; + for (iter = list; iter; iter = iter->next) + { + breakpoint *bp = (breakpoint*)iter->data; + if (bp->enabled) + { + bp->enabled = FALSE; + if (debug_set_break(bp, BSA_UPDATE_ENABLE)) + { + on_switch(bp); + } + else + { + bp->enabled = TRUE; + } + } + } + g_list_free(list);
-/* - * handles breakpoints enabled/disabled switch - * arguments: - * bp - breakpoint to handle - * success - success of operation - */ -void handle_switch(breakpoint* bp, gboolean success) + dconfig_set_changed(TRUE); +} +static void breaks_set_enabled_list_debug(GList *list) { - /* remove old and set new marker */ - markers_remove_breakpoint(bp); - markers_add_breakpoint(bp); + GList *iter; + for (iter = list; iter; iter = iter->next) + { + breakpoint *bp = (breakpoint*)iter->data; + if (!bp->enabled) + { + bp->enabled = TRUE; + if (debug_set_break(bp, BSA_UPDATE_ENABLE)) + { + on_switch(bp); + } + else + { + bp->enabled = FALSE; + } + } + } + g_list_free(list);
- /* set checkbox in breaks tree */ - bptree_set_enabled(bp); - - /* mark config for saving */ - dconfig_set_changed(); + dconfig_set_changed(TRUE); } +static void breaks_remove_list_debug(GList *list) +{ + GList *iter; + for (iter = list; iter; iter = iter->next) + { + breakpoint *bp = (breakpoint*)iter->data; + if (debug_remove_break(bp)) + { + on_remove((breakpoint*)iter->data); + } + } + g_list_free(list);
-/* - * Async action callback. - * Called from debug module, when debugging session is interrupted - * and ready to perform action specified by "bsa" with "bp" breakpoint - * (activity type is passed to debug module when calling its "request_interrupt" function - * and then is passed to "async_callback") - * arguments: - * bp - breakpoint to handle - * bsa - type of activity (remove/add/change property) - */ -void async_callback(breakpoint* bp, break_set_activity bsa) -{ - /* perform requested operation */ - gboolean success = BSA_REMOVE == bsa ? debug_remove_break(bp) : debug_set_break(bp, bsa); - - /* handle relevant case */ - if (BSA_REMOVE == bsa) - handle_break_remove(bp, success); - else if (BSA_NEW_BREAK == bsa) - handle_break_new(bp, success); - else if (BSA_UPDATE_ENABLE == bsa) - handle_switch(bp, success); - else if (BSA_UPDATE_HITS_COUNT == bsa) - handle_hitscount_set(bp, success); - else if (BSA_UPDATE_CONDITION == bsa) - handle_condition_set(bp, success); - - /* resume debug session */ - debug_run(); + dconfig_set_changed(TRUE); }
/* @@ -341,7 +369,7 @@ /* allocate memory */ breakpoint* bp = break_new_full(file, line, condition, enabled, hitscount); - /* check whether GTree for this file exists and create if not*/ + /* check whether GTree for this file exists and create if doesn't */ GTree *tree; if (!(tree = g_hash_table_lookup(files, bp->file))) { @@ -355,10 +383,15 @@
/* handle creation instantly if debugger is idle or stopped and request debug module interruption overwise */ - if (DBS_IDLE == state || DBS_STOPPED == state) - handle_break_new(bp, DBS_IDLE == state || debug_set_break(bp, BSA_NEW_BREAK)); + if (DBS_IDLE == state) + { + on_add(bp); + dconfig_set_changed(TRUE); + } + else if (DBS_STOPPED == state) + breaks_add_debug(bp); else if (DBS_STOP_REQUESTED != state) - debug_request_interrupt(async_callback, bp, BSA_NEW_BREAK); + debug_request_interrupt((bs_callback)breaks_add_debug, (gpointer)bp); }
/* @@ -377,28 +410,91 @@
/* lookup for breakpoint */ breakpoint* bp = NULL; - if (!(bp = lookup_breakpoint(file, line))) + if (!(bp = breaks_lookup_breakpoint(file, line))) return;
/* handle removing instantly if debugger is idle or stopped and request debug module interruption overwise */ - if (DBS_IDLE == state || DBS_STOPPED == state) - handle_break_remove(bp, DBS_IDLE == state || debug_remove_break(bp)); + if (DBS_IDLE == state) + { + on_remove(bp); + dconfig_set_changed(TRUE); + } + else if (DBS_STOPPED == state) + breaks_remove_debug(bp); else if (DBS_STOP_REQUESTED != state) - debug_request_interrupt(async_callback, bp, BSA_REMOVE); + debug_request_interrupt((bs_callback)breaks_remove_debug, (gpointer)bp); }
/* + * Remove all breakpoints in the list. + * arguments: + * list - list f breakpoints + */ +void breaks_remove_list(GList *list) +{ + /* do not process async break manipulation on modules + that do not support async interuppt */ + enum dbs state = debug_get_state(); + if (DBS_RUNNING == state && !debug_supports_async_breaks()) + return; + + /* handle removing instantly if debugger is idle or stopped + and request debug module interruption overwise */ + if (DBS_IDLE == state) + { + on_remove_list(list); + g_list_free(list); + + dconfig_set_changed(TRUE); + } + else if (DBS_STOPPED == state) + breaks_remove_list_debug(list); + else if (DBS_STOP_REQUESTED != state) + debug_request_interrupt((bs_callback)breaks_remove_list_debug, (gpointer)list); +} + +/* * Removes all breakpoints. * arguments: */ void breaks_remove_all() { - g_hash_table_foreach(files, hash_table_foreach_call_function, (gpointer)breaks_remove_internal); + g_hash_table_foreach(files, hash_table_foreach_call_function, (gpointer)on_remove); g_hash_table_remove_all(files); }
/* + * sets all breakpoints fo the file enabled or disabled. + * arguments: + * file - list of breakpoints + * enabled - anble or disable breakpoints + */ +void breaks_set_enabled_for_file(const const char *file, gboolean enabled) +{ + /* do not process async break manipulation on modules + that do not support async interuppt */ + enum dbs state = debug_get_state(); + if (DBS_RUNNING == state && !debug_supports_async_breaks()) + return; + + GList *breaks = breaks_get_for_document(file); + + /* handle switching instantly if debugger is idle or stopped + and request debug module interruption overwise */ + if (DBS_IDLE == state) + { + on_set_enabled_list(breaks, enabled); + g_list_free(breaks); + dconfig_set_changed(TRUE); + } + else if (DBS_STOPPED == state) + enabled ? breaks_set_enabled_list_debug(breaks) : breaks_set_disabled_list_debug(breaks); + else if (DBS_STOP_REQUESTED != state) + debug_request_interrupt((bs_callback)(enabled ? breaks_set_enabled_list_debug : breaks_set_disabled_list_debug), (gpointer)breaks); +} + +/* * Switch breakpoints state. * arguments: * file - breakpoints filename @@ -414,7 +510,7 @@
/* lookup for breakpoint */ breakpoint* bp = NULL; - if (!(bp = lookup_breakpoint(file, line))) + if (!(bp = breaks_lookup_breakpoint(file, line))) return; /* change activeness */ @@ -422,10 +518,15 @@ /* handle switching instantly if debugger is idle or stopped and request debug module interruption overwise */ - if (DBS_IDLE == state || DBS_STOPPED == state) - handle_switch(bp, state == DBS_IDLE || debug_set_break(bp, BSA_UPDATE_ENABLE)); + if (DBS_IDLE == state) + { + on_switch(bp); + dconfig_set_changed(TRUE); + } + else if (DBS_STOPPED == state) + breaks_switch_debug(bp); else if (DBS_STOP_REQUESTED != state) - debug_request_interrupt(async_callback, bp, BSA_UPDATE_ENABLE); + debug_request_interrupt((bs_callback)breaks_switch_debug, (gpointer)bp); }
/* @@ -435,7 +536,7 @@ * line - breakpoints line * count - breakpoints hitscount */ -void breaks_set_hits_count(char* file, int line, int count) +void breaks_set_hits_count(const char* file, int line, int count) { /* do not process async break manipulation on modules that do not support async interuppt */ @@ -445,7 +546,7 @@
/* lookup for breakpoint */ breakpoint* bp = NULL; - if (!(bp = lookup_breakpoint(file, line))) + if (!(bp = breaks_lookup_breakpoint(file, line))) return; /* change hits count */ @@ -453,10 +554,15 @@ /* handle setting hits count instantly if debugger is idle or stopped and request debug module interruption overwise */ - if (state == DBS_IDLE || state == DBS_STOPPED) - handle_hitscount_set(bp, state == DBS_IDLE || debug_set_break(bp, BSA_UPDATE_HITS_COUNT)); + if (state == DBS_IDLE) + { + on_set_hits_count(bp); + dconfig_set_changed(TRUE); + } + else if(state == DBS_STOPPED) + breaks_set_hits_count_debug(bp); else if (state != DBS_STOP_REQUESTED) - debug_request_interrupt(async_callback, bp, BSA_UPDATE_HITS_COUNT); + debug_request_interrupt((bs_callback)breaks_set_hits_count_debug, (gpointer)bp); }
/* @@ -466,7 +572,7 @@ * line - breakpoints line * condition - breakpoints line */ -void breaks_set_condition(char* file, int line, char* condition) +void breaks_set_condition(const char* file, int line, const char* condition) { /* do not process async break manipulation on modules that do not support async interuppt */ @@ -476,7 +582,7 @@
/* lookup for breakpoint */ breakpoint* bp = NULL; - if (!(bp = lookup_breakpoint(file, line))) + if (!(bp = breaks_lookup_breakpoint(file, line))) return; /* change condition */ @@ -484,10 +590,15 @@ /* handle setting condition instantly if debugger is idle or stopped and request debug module interruption overwise */ - if (state == DBS_IDLE || state == DBS_STOPPED) - handle_condition_set(bp, DBS_IDLE == state || debug_set_break(bp, BSA_UPDATE_CONDITION)); + if (state == DBS_IDLE) + { + on_set_condition(bp); + dconfig_set_changed(TRUE); + } + else if (state == DBS_STOPPED) + breaks_set_condition_debug(bp); else if (state != DBS_STOP_REQUESTED) - debug_request_interrupt(async_callback, bp, BSA_UPDATE_CONDITION); + debug_request_interrupt((bs_callback)breaks_set_condition_debug, (gpointer)bp); }
/* @@ -497,7 +608,7 @@ * line_from - old line number * line_to - new line number */ -void breaks_move_to_line(char* file, int line_from, int line_to) +void breaks_move_to_line(const char* file, int line_from, int line_to) { /* first look for the tree for the given file */ GTree *tree = NULL; @@ -546,7 +657,7 @@ * arguments: * file - file name to get breaks for */ -GList *breaks_get_for_document(const char* file) +GList* breaks_get_for_document(const char* file) { GList *breaks = NULL; GTree *tree = g_hash_table_lookup(files, file); @@ -558,6 +669,22 @@ }
/* + * lookup for breakpoint + * arguments: + * file - breakpoints filename + * line - breakpoints line + */ +breakpoint* breaks_lookup_breakpoint(const gchar* file, int line) +{ + breakpoint* bp = NULL; + GTree* tree = NULL; + if ( (tree = (GTree*)g_hash_table_lookup(files, file)) ) + bp = g_tree_lookup(tree, GINT_TO_POINTER(line)); + + return bp; +} + +/* * Gets all breakpoints * arguments: */
Modified: trunk/geany-plugins/debugger/src/breakpoints.h =================================================================== --- trunk/geany-plugins/debugger/src/breakpoints.h 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/breakpoints.h 2011-09-16 13:47:03 UTC (rev 2199) @@ -19,6 +19,8 @@ * MA 02110-1301, USA. */
+#include "breakpoint.h" + typedef enum _break_state { BS_NOT_SET, BS_ENABLED, @@ -31,12 +33,14 @@ void breaks_destroy(); void breaks_add(const char* file, int line, char* condition, int enable, int hitscount); void breaks_remove(const char* file, int line); +void breaks_remove_list(GList *list); void breaks_remove_all(); -void breaks_switch(const char* file, int line); -void breaks_set_hits_count(char* file, int line, int count); -void breaks_set_condition(char* file, int line, char* condition); -void breaks_move_to_line(char* file, int line_from, int line_to); -break_state breaks_get_state(const char* file, int line); +void breaks_switch(const char *file, int line); +void breaks_set_hits_count(const char *file, int line, int count); +void breaks_set_condition(const char *file, int line, const char* condition); +void breaks_set_enabled_for_file(const const char *file, gboolean enabled); +void breaks_move_to_line(const char* file, int line_from, int line_to); +break_state breaks_get_state(const char* file, int line); GList* breaks_get_for_document(const char* file); GList* breaks_get_all(); - +breakpoint* breaks_lookup_breakpoint(const gchar* file, int line);
Modified: trunk/geany-plugins/debugger/src/btnpanel.c =================================================================== --- trunk/geany-plugins/debugger/src/btnpanel.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/btnpanel.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -30,11 +30,10 @@ extern GeanyPlugin *geany_plugin;
#include "gui.h" -#include "breakpoint.h" +#include "breakpoints.h" #include "debug.h" #include "dconfig.h" #include "tpage.h" -#include "breakpoints.h" #include "watch_model.h" #include "wtree.h" #include "dpaned.h"
Modified: trunk/geany-plugins/debugger/src/callbacks.c =================================================================== --- trunk/geany-plugins/debugger/src/callbacks.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/callbacks.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -27,7 +27,6 @@ #include <string.h>
#include "geanyplugin.h" -#include "breakpoint.h" #include "breakpoints.h" #include "debug.h" #include "keys.h" @@ -289,6 +288,8 @@ } iter = iter->next; } + + dconfig_set_changed();
g_list_free(breaks); }
Modified: trunk/geany-plugins/debugger/src/dconfig.c =================================================================== --- trunk/geany-plugins/debugger/src/dconfig.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/dconfig.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -32,11 +32,10 @@ extern GeanyPlugin *geany_plugin;
#include "dconfig.h" -#include "breakpoint.h" +#include "breakpoints.h" #include "debug.h" #include "watch_model.h" #include "wtree.h" -#include "breakpoints.h" #include "tpage.h" #include "bptree.h"
@@ -110,14 +109,6 @@ }
/* - * set "modifyable" flag that shows that a background thread have to save config - */ -void dconfig_set_modifyable(gboolean newstate) -{ - modifyable = newstate; -} - -/* * set "changed" flag to save it on "saving_thread" thread */ void dconfig_set_changed()
Modified: trunk/geany-plugins/debugger/src/dconfig.h =================================================================== --- trunk/geany-plugins/debugger/src/dconfig.h 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/dconfig.h 2011-09-16 13:47:03 UTC (rev 2199) @@ -26,6 +26,5 @@ gboolean dconfig_load(gchar *folder);
void dconfig_set_changed(); -void dconfig_set_modifyable(gboolean newstate);
Modified: trunk/geany-plugins/debugger/src/debug.c =================================================================== --- trunk/geany-plugins/debugger/src/debug.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/debug.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -47,10 +47,9 @@ extern GeanyData *geany_data;
#include "tpage.h" -#include "breakpoint.h" +#include "breakpoints.h" #include "debug.h" #include "utils.h" -#include "breakpoints.h" #include "stree.h" #include "watch_model.h" #include "wtree.h" @@ -92,8 +91,7 @@ * after interruption */ bs_callback interrupt_cb = NULL; -breakpoint* interrupt_data = NULL; -break_set_activity interrupt_flags; +gpointer interrupt_data = NULL;
/* flag to set when debug stop is requested while debugger is running. * Then this flag is set to TRUE, and debug_request_interrupt function is called @@ -645,7 +643,7 @@ /* check for async activities pending */ if (interrupt_data) { - interrupt_cb(interrupt_data, interrupt_flags); + interrupt_cb(interrupt_data); interrupt_data = NULL; return; } @@ -1240,11 +1238,10 @@ * bp - breakpoint to deal with * flags - whar to do with breakpoint */ -void debug_request_interrupt(bs_callback cb, breakpoint* bp, break_set_activity flags) +void debug_request_interrupt(bs_callback cb, gpointer data) { interrupt_cb = cb; - interrupt_flags = flags; - interrupt_data = bp; + interrupt_data = data;
active_module->request_interrupt(); }
Modified: trunk/geany-plugins/debugger/src/debug.h =================================================================== --- trunk/geany-plugins/debugger/src/debug.h 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/debug.h 2011-09-16 13:47:03 UTC (rev 2199) @@ -32,7 +32,7 @@ };
/* function type to execute on interrupt */ -typedef void (*bs_callback)(breakpoint*, break_set_activity); +typedef void (*bs_callback)(gpointer);
void debug_init(); enum dbs debug_get_state(); @@ -44,8 +44,8 @@ void debug_execute_until(const gchar *file, int line); gboolean debug_set_break(breakpoint* bp, break_set_activity bsa); gboolean debug_remove_break(breakpoint* bp); -void debug_request_interrupt(bs_callback cb, breakpoint* bp, break_set_activity flags); -gchar* debug_error_message(); +void debug_request_interrupt(bs_callback cb, gpointer data); +gchar* debug_error_message(); GList* debug_get_modules(); int debug_get_module_index(const gchar *modulename); gboolean debug_supports_async_breaks();
Modified: trunk/geany-plugins/debugger/src/dpaned.c =================================================================== --- trunk/geany-plugins/debugger/src/dpaned.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/dpaned.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -34,7 +34,6 @@ extern GeanyData *geany_data;
#include "tabs.h" -#include "breakpoint.h" #include "breakpoints.h" #include "debug.h" #include "btnpanel.h" @@ -115,7 +114,7 @@ /* * first allocation handler to properly set paned position */ -void on_size_allocate(GtkWidget *widget,GdkRectangle *allocation, gpointer user_data) +static void on_size_allocate(GtkWidget *widget,GdkRectangle *allocation, gpointer user_data) { DISCONNECT_ALLOCATED_PAGE_SIGNALS();
Modified: trunk/geany-plugins/debugger/src/markers.c =================================================================== --- trunk/geany-plugins/debugger/src/markers.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/markers.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -29,7 +29,6 @@ extern GeanyFunctions *geany_functions; extern GeanyData *geany_data;
-#include "breakpoint.h" #include "breakpoints.h"
#include "xpm/breakpoint.xpm"
Modified: trunk/geany-plugins/debugger/src/plugin.c =================================================================== --- trunk/geany-plugins/debugger/src/plugin.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/plugin.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -28,7 +28,6 @@ #endif
#include "geanyplugin.h" -#include "breakpoint.h" #include "breakpoints.h" #include "callbacks.h" #include "debug.h"
Modified: trunk/geany-plugins/debugger/src/stree.c =================================================================== --- trunk/geany-plugins/debugger/src/stree.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/stree.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -31,7 +31,6 @@
#include "breakpoints.h" #include "utils.h" -#include "breakpoint.h" #include "debug_module.h"
#include "xpm/frame_current.xpm"
Modified: trunk/geany-plugins/debugger/src/tpage.c =================================================================== --- trunk/geany-plugins/debugger/src/tpage.c 2011-09-15 15:23:09 UTC (rev 2198) +++ trunk/geany-plugins/debugger/src/tpage.c 2011-09-16 13:47:03 UTC (rev 2199) @@ -33,7 +33,6 @@ extern GeanyFunctions *geany_functions; extern GeanyData *geany_data;
-#include "breakpoint.h" #include "breakpoints.h" #include "utils.h" #include "watch_model.h"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.