[anjuta] debug-manager: Save breakpoint using relative file paths



commit 25210665741d4e2873b48a84abf69133b70c53a6
Author: SÃbastien Granjoux <seb sfo free fr>
Date:   Mon Feb 6 21:28:50 2012 +0100

    debug-manager: Save breakpoint using relative file paths

 plugins/debug-manager/breakpoints.c |  465 +++++++++++++++++++----------------
 1 files changed, 247 insertions(+), 218 deletions(-)
---
diff --git a/plugins/debug-manager/breakpoints.c b/plugins/debug-manager/breakpoints.c
index de77a50..0caaa83 100644
--- a/plugins/debug-manager/breakpoints.c
+++ b/plugins/debug-manager/breakpoints.c
@@ -33,7 +33,7 @@
  * is filled by the debugger plugin, another part by the debug manager plugin.
  * This object is normally created and destroyed by the debug manager, but
  * the debugger plugin could create one too (but never destroy it).
- * 
+ *
  * The BreakpointItem object includes a AnjutaDebuggerBreakpoint and adds all useful
  * information for the graphical interface (pointer to the editor...)
  *---------------------------------------------------------------------------*/
@@ -76,16 +76,16 @@ struct _BreakpointItem
 {
 	IAnjutaDebuggerBreakpointItem bp;      /* Breakpoint data */
 	guint ref;
-	
+
 	gint handle;              	 /* Handle to mark in editor */
-	IAnjutaEditor *editor; 
+	IAnjutaEditor *editor;
 	gchar* uri;
-	
+
 	gint changed;				/* Bit field tagging change in breakpoint */
 
-	
+
 	GtkTreeIter iter;
-	
+
 	BreakpointsDBase *bd;
 };
 
@@ -95,11 +95,11 @@ struct _BreakpointsDBase
 	DmaDebuggerQueue *debugger;
 
 	GtkListStore *model;
-	
+
 	GtkBuilder *bxml;
 	gchar *cond_history, *loc_history;
 
-	/* Widgets */	
+	/* Widgets */
 	GtkWidget *window;
 	GtkTreeView *treeview;
 	GtkWidget *add_button;
@@ -141,7 +141,7 @@ static void
 breakpoint_item_update_from_debugger (BreakpointItem *bi, const IAnjutaDebuggerBreakpointItem* bp)
 {
 	if (bp == NULL) return;
-	
+
 	bi->bp.id = bp->id;
 	if (bp->type & IANJUTA_DEBUGGER_BREAKPOINT_REMOVED)
 	{
@@ -168,7 +168,7 @@ breakpoint_item_update_from_debugger (BreakpointItem *bi, const IAnjutaDebuggerB
 		bi->bp.function = g_strdup (bp->function);
 	}
 	if (bp->type & IANJUTA_DEBUGGER_BREAKPOINT_ON_ADDRESS)
-	{	
+	{
 		bi->bp.type |= IANJUTA_DEBUGGER_BREAKPOINT_ON_ADDRESS;
 		bi->bp.address = bp->address;
 	}
@@ -224,14 +224,14 @@ breakpoint_item_unref (BreakpointItem *bi)
 		g_object_remove_weak_pointer (G_OBJECT (bi->editor), (gpointer *)(gpointer)&bi->editor);
 		bi->editor = NULL;
 	}
-	
+
 	g_free ((char *)bi->bp.file);
 	bi->bp.file = NULL;
 	g_free ((char *)bi->bp.function);
 	bi->bp.function = NULL;
 	g_free ((char *)bi->bp.condition);
 	bi->bp.condition = NULL;
-	
+
 	return TRUE;
 }
 
@@ -247,12 +247,12 @@ breakpoint_item_new (BreakpointsDBase *bd)
 	bi->bd = bd;
 	bi->editor = NULL;
 	bi->handle = -1;
-	
+
 	bi->bp.type = 0;
 
 	gtk_list_store_append (bd->model, &bi->iter);
 	gtk_list_store_set (bd->model, &bi->iter, DATA_COLUMN, bi, -1);
-	
+
 	return bi;
 }
 
@@ -260,9 +260,9 @@ static BreakpointItem *
 breakpoint_item_new_from_uri (BreakpointsDBase *bd, const gchar* uri, guint line, gboolean enable)
 {
 	BreakpointItem *bi;
-	
+
 	bi = breakpoint_item_new (bd);
-	
+
 	bi->bp.type = IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE | IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
 	if (uri != NULL)
 	{
@@ -271,7 +271,26 @@ breakpoint_item_new_from_uri (BreakpointsDBase *bd, const gchar* uri, guint line
 		bi->bp.line = line;
 	}
 	bi->bp.enable = enable;
-	
+
+	return bi;
+}
+
+static BreakpointItem *
+breakpoint_item_new_from_file (BreakpointsDBase *bd, GFile *file, guint line, gboolean enable)
+{
+	BreakpointItem *bi;
+
+	bi = breakpoint_item_new (bd);
+
+	bi->bp.type = IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE | IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
+	if (file != NULL)
+	{
+		bi->uri = g_file_get_uri (file);
+		bi->bp.file = g_file_get_path (file);
+		bi->bp.line = line;
+	}
+	bi->bp.enable = enable;
+
 	return bi;
 }
 
@@ -279,9 +298,9 @@ static BreakpointItem *
 breakpoint_item_new_from_string (BreakpointsDBase *bd, const gchar* string, const gchar* uri)
 {
 	BreakpointItem *bi;
-	
+
 	bi = breakpoint_item_new (bd);
-	
+
 	if (*string == '*')
 	{
 		/* break at address */
@@ -305,9 +324,9 @@ breakpoint_item_new_from_string (BreakpointsDBase *bd, const gchar* string, cons
 	else
 	{
 		const gchar *ptr;
-		
+
 		ptr = strchr (string, ':');
-		
+
 		if (ptr == NULL)
 		{
 			/* break on function */
@@ -335,10 +354,10 @@ breakpoint_item_new_from_string (BreakpointsDBase *bd, const gchar* string, cons
 			}
 		}
 	}
-	
+
 	bi->bp.enable = TRUE;
 	bi->bp.type |= IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
-	
+
 	return bi;
 }
 
@@ -352,12 +371,12 @@ breakpoints_dbase_set_in_editor (BreakpointsDBase *bd, BreakpointItem *bi)
 	gint line = -1;
 
 	g_return_if_fail (bi != NULL);
-	
+
 	if (bi->editor == NULL)
 	{
 		return;
 	}
-	
+
 	ed = IANJUTA_MARKABLE (bi->editor);
 	if (bi->handle != -1)
 	{
@@ -378,7 +397,7 @@ breakpoints_dbase_set_in_editor (BreakpointsDBase *bd, BreakpointItem *bi)
 	{
 		line = bi->bp.line;
 	}
-	
+
 	/* Add new mark */
 	bi->handle = ianjuta_markable_mark (ed, line, bi->bp.enable ? BREAKPOINT_ENABLED : BREAKPOINT_DISABLED, NULL, NULL);
 }
@@ -390,7 +409,7 @@ breakpoints_dbase_clear_in_editor (BreakpointsDBase *bd, BreakpointItem *bi)
 	gint line = -1;
 
 	g_return_if_fail (bi != NULL);
-	
+
 	if (bi->editor == NULL)
 	{
 		/* No editor, no need to remove marker */
@@ -443,7 +462,7 @@ breakpoints_dbase_update_in_treeview (BreakpointsDBase *bd, BreakpointItem *bi)
 	else
 	{
 		pass = g_strdup_printf ("%d", bi->bp.times);
-	}		
+	}
 	if (bi->bp.id == 0)
 	{
 		format = "pending";
@@ -456,12 +475,12 @@ breakpoints_dbase_update_in_treeview (BreakpointsDBase *bd, BreakpointItem *bi)
 	{
 		format = "pending (%d)";
 	}
-	else 
+	else
 	{
 		format = "permanent (%d)";
 	}
 	state = g_strdup_printf (format, bi->bp.id);
-	
+
 	gtk_list_store_set (bd->model, &bi->iter,
 						ENABLED_COLUMN, bi->bp.enable,
 						LOCATION_COLUMN, location,
@@ -475,18 +494,18 @@ breakpoints_dbase_update_in_treeview (BreakpointsDBase *bd, BreakpointItem *bi)
 	g_free (pass);
 	g_free (location);
 	g_free (adr);
-}	
+}
 
 static void
 breakpoints_dbase_breakpoint_removed (BreakpointsDBase *bd, BreakpointItem *bi)
 {
 	/* Delete maker */
 	breakpoints_dbase_clear_in_editor (bd, bi);
-	
+
 	/* Emit signal */
 	bi->bp.type |= IANJUTA_DEBUGGER_BREAKPOINT_REMOVED;
 	g_signal_emit_by_name (bd->plugin, "breakpoint-changed", &bi->bp);
-	
+
 	breakpoint_item_unref (bi);
 }
 
@@ -502,9 +521,9 @@ breakpoints_dbase_breakpoint_updated (BreakpointsDBase *bd, BreakpointItem *bi)
 	{
 		/* Update treeview and marker */
 		breakpoints_dbase_update_in_treeview (bd, bi);
-	
+
 		breakpoints_dbase_set_in_editor (bd, bi);
-	
+
 		/* Emit signal */
 		g_signal_emit_by_name (bi->bd->plugin, "breakpoint-changed", &bi->bp);
 	}
@@ -516,33 +535,33 @@ on_editor_saved (IAnjutaEditor *editor, GFile* file, BreakpointsDBase *bd)
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
 	gchar* uri;
-	
+
 	g_return_if_fail (model != NULL);
-	
+
 	if (!file)
 		return;
 	uri = g_file_get_uri (file);
-	
+
 	/* Update breakpoint position */
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (GTK_TREE_MODEL (bd->model), &iter, DATA_COLUMN, &bi, -1);
 
 			if ((bi->editor == editor) && (bi->handle != -1))
 			{
 				gint line;
-				
+
 				line = ianjuta_markable_location_from_handle (IANJUTA_MARKABLE (editor), bi->handle, NULL);
 				if (line != bi->bp.line)
 				{
 					bi->bp.line = line;
 					breakpoints_dbase_breakpoint_updated (bd, bi);
 				}
-			}	
+			}
 		} while (gtk_tree_model_iter_next (model, &iter));
 	}
 	g_free (uri);
@@ -563,13 +582,13 @@ breakpoints_dbase_disconnect_from_editors (BreakpointsDBase *bd)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 
 			if (bi->editor != NULL)
@@ -586,30 +605,30 @@ breakpoints_dbase_set_all_in_editor (BreakpointsDBase* bd, IAnjutaEditor* te)
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	GFile* file;
-	
+
 	g_return_if_fail (te != NULL);
 	g_return_if_fail (bd != NULL);
 	g_return_if_fail (bd->treeview != NULL);
-	
+
 	file = ianjuta_file_get_file (IANJUTA_FILE (te), NULL);
 	if (file == NULL)
 		return;
-	
+
 	if (!IANJUTA_IS_MARKABLE (te))
 	{
 		/* Nothing to do, editor does not support mark */
 		return;
 	}
-	
+
 	model = gtk_tree_view_get_model (bd->treeview);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		gchar* uri = g_file_get_uri (file);
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 
 			if ((bi->editor == NULL) && (bi->uri != NULL) && (strcmp (uri, bi->uri) == 0))
@@ -617,7 +636,7 @@ breakpoints_dbase_set_all_in_editor (BreakpointsDBase* bd, IAnjutaEditor* te)
 				bi->editor = te;
 				bi->handle = -1;
 				g_object_add_weak_pointer (G_OBJECT (te), (gpointer)&bi->editor);
-				breakpoints_dbase_connect_to_editor (bd, te);				
+				breakpoints_dbase_connect_to_editor (bd, te);
 			}
 			if (bi->editor == te)
 			{
@@ -635,9 +654,9 @@ on_added_current_editor (AnjutaPlugin *plugin, const char *name,
 {
 	BreakpointsDBase *bd = (BreakpointsDBase *)user_data;
 	GObject *editor;
-		
+
 	editor = g_value_get_object (value);
-	
+
     /* Restore breakpoints */
 	if (IANJUTA_IS_EDITOR (editor))
 		breakpoints_dbase_set_all_in_editor (bd, IANJUTA_EDITOR (editor));
@@ -674,7 +693,7 @@ ianjuta_debugger_breakpoint_is_equal (const IAnjutaDebuggerBreakpointItem *bpa,
 		if (strcmp(bpa->file, bpb->file) != 0) return FALSE;
 	}
 
-	/* Check function name */	
+	/* Check function name */
 	if (bpa->type & bpb->type & IANJUTA_DEBUGGER_BREAKPOINT_ON_FUNCTION)
 	{
 		if (strcmp(bpa->function, bpb->function) != 0) return FALSE;
@@ -695,14 +714,14 @@ ianjuta_debugger_breakpoint_is_equal (const IAnjutaDebuggerBreakpointItem *bpa,
 	return TRUE;
 }
 
-static BreakpointItem* 
+static BreakpointItem*
 breakpoints_dbase_find_breakpoint (BreakpointsDBase *bd, const IAnjutaDebuggerBreakpointItem *bp)
 {
 	GtkTreeModel *model;
 	GtkTreeIter iter;
-	
+
 	g_return_val_if_fail (bd->treeview != NULL, NULL);
-	
+
 	model = gtk_tree_view_get_model (bd->treeview);
 
 	if (gtk_tree_model_get_iter_first (model, &iter))
@@ -710,13 +729,13 @@ breakpoints_dbase_find_breakpoint (BreakpointsDBase *bd, const IAnjutaDebuggerBr
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
-		
-			if (ianjuta_debugger_breakpoint_is_equal (&bi->bp, bp)) return bi;	
+
+			if (ianjuta_debugger_breakpoint_is_equal (&bi->bp, bp)) return bi;
 		} while (gtk_tree_model_iter_next (model, &iter));
 	}
-	
+
 	return NULL;
 }
 
@@ -730,7 +749,7 @@ static gboolean
 breakpoints_dbase_remove_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 {
 	gboolean ok;
-	
+
 	/* Remove breakpoint in debugger */
 	breakpoint_item_ref (bi);
 	ok = dma_queue_remove_breakpoint (
@@ -739,7 +758,7 @@ breakpoints_dbase_remove_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 				on_breakpoint_callback,
 				bi);
 	if (!ok) breakpoint_item_unref (bi);
-	
+
 	return ok;
 }
 
@@ -773,14 +792,14 @@ breakpoints_dbase_add_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 	{
 		bi->changed = IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
 	}
-	
+
 	/* Add breakpoint in debugger */
 	if (bi->bp.type & IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE)
 	{
 		breakpoint_item_ref (bi);
 		ok = dma_queue_add_breakpoint_at_line (
 					bd->debugger,
-					&(bi->bp.id),											   
+					&(bi->bp.id),
 					bi->bp.file,
 					bi->bp.line,
 					on_breakpoint_callback,
@@ -791,7 +810,7 @@ breakpoints_dbase_add_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 		breakpoint_item_ref (bi);
 		ok = dma_queue_add_breakpoint_at_function (
 					bd->debugger,
-					&(bi->bp.id),											   
+					&(bi->bp.id),
 					bi->bp.file == NULL ? "" : bi->bp.file,
 					bi->bp.function,
 					on_breakpoint_callback,
@@ -803,13 +822,13 @@ breakpoints_dbase_add_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 		breakpoint_item_ref (bi);
 		ok = dma_queue_add_breakpoint_at_address (
 					bd->debugger,
-					&(bi->bp.id),											   
+					&(bi->bp.id),
 					bi->bp.address,
 					on_breakpoint_callback,
 					bi);
 	}
 	if (!ok) breakpoint_item_unref (bi);
-	
+
 	return ok;
 }
 
@@ -817,7 +836,7 @@ static void
 breakpoints_dbase_update_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 {
 	gboolean ok;
-	
+
 	if (bi->changed & IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE)
 	{
 		bi->changed &= ~IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
@@ -830,7 +849,7 @@ breakpoints_dbase_update_in_debugger (BreakpointsDBase *bd, BreakpointItem *bi)
 					bi);
 		if (!ok) breakpoint_item_unref (bi);
 	}
-	
+
 	if ((bi->changed & IANJUTA_DEBUGGER_BREAKPOINT_WITH_CONDITION)
 		&& dma_debugger_queue_is_supported(bd->debugger, HAS_CONDITION_BREAKPOINT))
 	{
@@ -865,15 +884,15 @@ on_breakpoint_callback (const gpointer data, gpointer user_data, GError* err)
 	const IAnjutaDebuggerBreakpointItem* bp = (const IAnjutaDebuggerBreakpointItem*)data;
 	BreakpointItem *bi = (BreakpointItem *)user_data;
 	BreakpointsDBase *bd = bi->bd;
-	
+
 	if (breakpoint_item_unref (bi))
 	{
 		/* Breakpoint item has been destroyed */
 		return;
 	}
-	
+
 	if (err == NULL)
-	{	
+	{
 		if ((bp != NULL) && (bp->type & IANJUTA_DEBUGGER_BREAKPOINT_REMOVED))
 		{
 			breakpoints_dbase_breakpoint_removed (bd, bi);
@@ -891,9 +910,9 @@ static
 void on_update_breakpoint_from_debugger (gpointer data, gpointer user_data)
 {
 	IAnjutaDebuggerBreakpointItem *bp = (IAnjutaDebuggerBreakpointItem *)data;
-	BreakpointsDBase *bd = (BreakpointsDBase *)user_data;	
+	BreakpointsDBase *bd = (BreakpointsDBase *)user_data;
 	BreakpointItem *bi;
-	
+
 	bi = breakpoints_dbase_find_breakpoint (bd, bp);
 
 	if (bi == NULL)
@@ -911,10 +930,10 @@ gboolean on_update_breakpoint_in_ui (GtkTreeModel *model, GtkTreePath *path,
 {
 	BreakpointItem *bi;
 	BreakpointsDBase *bd;
-	
+
 	gtk_tree_model_get (model, iter, DATA_COLUMN, &bi, -1);
 	bd = bi->bd;
-								   
+
 	if (bi->changed & IANJUTA_DEBUGGER_BREAKPOINT_UPDATED)
 	{
 		/* Breakpoint is present in debugger */
@@ -926,7 +945,7 @@ gboolean on_update_breakpoint_in_ui (GtkTreeModel *model, GtkTreePath *path,
 		bi->bp.id = 0;
 	}
 	breakpoints_dbase_breakpoint_updated (bd, bi);
-	
+
 	return FALSE;
 }
 
@@ -934,7 +953,7 @@ static void
 on_breakpoint_list_callback (const gpointer data, gpointer user_data, GError* err)
 {
 	GList *list = (GList *)data;
-	BreakpointsDBase *bd = (BreakpointsDBase *)user_data;	
+	BreakpointsDBase *bd = (BreakpointsDBase *)user_data;
 
 	/* Update all breakpoints */
 	g_list_foreach (list, on_update_breakpoint_from_debugger, bd);
@@ -961,15 +980,15 @@ breakpoints_dbase_add_all_in_debugger (BreakpointsDBase *bd)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	g_return_if_fail (bd->treeview != NULL);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 			breakpoints_dbase_add_in_debugger (bd, bi);
 		} while (gtk_tree_model_iter_next (model, &iter));
@@ -983,13 +1002,13 @@ breakpoints_dbase_add_all_pending_in_debugger (BreakpointsDBase *bd)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 
 			if (bi->bp.id == 0)
@@ -1007,18 +1026,18 @@ breakpoints_dbase_remove_all_in_debugger (BreakpointsDBase *bd)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		gboolean next;
-		
+
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 			next = gtk_tree_model_iter_next (model, &iter);
-				
+
 			bi->bp.id = 0;
 			breakpoints_dbase_breakpoint_updated (bd, bi);
 			/* breakpoints_dbase_breakpoint_updated can delete pending breakpoints
@@ -1028,19 +1047,19 @@ breakpoints_dbase_remove_all_in_debugger (BreakpointsDBase *bd)
 }
 
 /* Add breakpoint in tree view, in editor and in debugger */
- 
+
 static void
 breakpoints_dbase_add_breakpoint (BreakpointsDBase *bd,  BreakpointItem *bi)
 {
 	IAnjutaEditor* ed;
-	
+
 	/* Add in current editor if possible */
 	ed = dma_get_current_editor (ANJUTA_PLUGIN(bd->plugin));
 	if ((ed != NULL) && IANJUTA_IS_MARKABLE (ed))
 	{
 		GFile* file;
 		gchar* uri = NULL;
-		
+
 		file = ianjuta_file_get_file (IANJUTA_FILE (ed), NULL);
 		if (file)
 		{
@@ -1052,7 +1071,7 @@ breakpoints_dbase_add_breakpoint (BreakpointsDBase *bd,  BreakpointItem *bi)
 			bi->editor = ed;
 			bi->handle = -1;
 			g_object_add_weak_pointer (G_OBJECT (ed), (gpointer)&bi->editor);
-			breakpoints_dbase_connect_to_editor (bd, ed);			
+			breakpoints_dbase_connect_to_editor (bd, ed);
 		}
 		g_free (uri);
 	}
@@ -1080,13 +1099,13 @@ breakpoints_dbase_remove_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 }
 
 /* Enable or disable breakpoint in tree view, in editor and in debugger */
- 
+
 static void
 breakpoints_dbase_enable_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi, gboolean enable)
 {
 	bi->bp.enable = enable;
 	bi->changed |= IANJUTA_DEBUGGER_BREAKPOINT_WITH_ENABLE;
-	
+
 	if (bd->debugger != NULL)
 	{
 		breakpoints_dbase_update_in_debugger (bd, bi);
@@ -1103,7 +1122,7 @@ static void
 breakpoints_dbase_toggle_enable (BreakpointsDBase *bd, GtkTreeModel *model, GtkTreeIter iter)
 {
 	BreakpointItem *bi;
-	
+
 	gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 
 	breakpoints_dbase_enable_breakpoint (bd, bi, bi->bp.enable ? FALSE : TRUE);
@@ -1132,18 +1151,18 @@ breakpoints_dbase_remove_all (BreakpointsDBase *bd)
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
 
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		gboolean next;
-		
+
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 			next = gtk_tree_model_iter_next (model, &iter);
-				
+
 			breakpoints_dbase_remove_breakpoint (bd, bi);
 			/* Avoid an infinite loop if the breakpoint is not removed due to
 			 * an error */
@@ -1158,13 +1177,13 @@ breakpoints_dbase_enable_all (BreakpointsDBase *bd, gboolean enable)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (GTK_TREE_MODEL (bd->model), &iter, DATA_COLUMN, &bi, -1);
 
 			breakpoints_dbase_enable_breakpoint (bd, bi, enable);
@@ -1172,18 +1191,18 @@ breakpoints_dbase_enable_all (BreakpointsDBase *bd, gboolean enable)
 	}
 }
 
-static BreakpointItem* 
+static BreakpointItem*
 breakpoints_dbase_find_breakpoint_from_mark (BreakpointsDBase *bd, IAnjutaEditor *ed, guint line)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 
 			if ((bi->editor == ed) && (bi->handle != -1)
@@ -1193,28 +1212,28 @@ breakpoints_dbase_find_breakpoint_from_mark (BreakpointsDBase *bd, IAnjutaEditor
 			}
 		} while (gtk_tree_model_iter_next (model, &iter));
 	}
-	
+
 	return NULL;
 }
 
-static BreakpointItem* 
+static BreakpointItem*
 breakpoints_dbase_find_breakpoint_from_line (BreakpointsDBase *bd, const gchar* uri, guint line)
 {
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
-			
+
 			if ((line == bi->bp.line) && (bi->uri != NULL) && (strcmp (uri, bi->uri) == 0)) return bi;
 		} while (gtk_tree_model_iter_next (model, &iter));
 	}
-	
+
 	return NULL;
 }
 
@@ -1224,66 +1243,22 @@ breakpoints_dbase_get_breakpoint_list (BreakpointsDBase *bd)
 	GList* list = NULL;
 	GtkTreeIter iter;
 	GtkTreeModel *model = GTK_TREE_MODEL (bd->model);
-	
+
 	if (gtk_tree_model_get_iter_first (model, &iter))
 	{
 		do
 		{
 			BreakpointItem *bi;
-		
+
 			gtk_tree_model_get (GTK_TREE_MODEL (bd->model), &iter, DATA_COLUMN, &bi, -1);
-			
-			if ((bi->bp.type & (IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE | IANJUTA_DEBUGGER_BREAKPOINT_ON_FUNCTION))
-					&& (bi->bp.temporary == FALSE))
-			{
-				/* Only permanent breakpoint are saved */				
-				list = g_list_prepend (list, g_strdup_printf("%d:%s:%u:%u:%s", bi->bp.enable ? 1 : 0, bi->uri, bi->bp.line, bi->bp.ignore, bi->bp.condition == NULL ? "" : bi->bp.condition));
-			}
+			list = g_list_prepend (list, bi);
+
 		} while (gtk_tree_model_iter_next (model, &iter));
 	}
-	
-	list = g_list_reverse (list);
-	
-	return list;
-}
 
-static void
-on_add_breakpoint_list (gpointer data, gpointer user_data)
-{
-	BreakpointsDBase* bd = (BreakpointsDBase *)user_data;
-	BreakpointItem *bi;
-	gchar *uri = (gchar *)data;
-	gchar *pos;
-	guint line;
-	gchar *cond;
-	guint ignore;
-	gboolean enable;
-
-	pos = strrchr (uri, ':');
-	*pos = '\0';
-	cond = pos + 1;
-	pos = strrchr (uri, ':');
-	*pos = '\0';
-	ignore = strtoul (pos + 1, NULL, 10);
-	pos = strrchr (uri, ':');
-	*pos = '\0';
-	line = strtoul (pos + 1, NULL, 10);
-	enable = uri[0] == '0' ? FALSE : TRUE;
-	bi = breakpoint_item_new_from_uri (bd, uri + 2, line, enable);
-
-	if (*cond != '\0')
-	{
-		bi->bp.condition = g_strdup (cond);
-	}
-	bi->bp.ignore = ignore;
-	
-	breakpoints_dbase_add_breakpoint (bd, bi);
-}
+	list = g_list_reverse (list);
 
-static void
-breakpoints_dbase_add_breakpoint_list (BreakpointsDBase *bd, GList *list)
-{
-	g_list_foreach (list, on_add_breakpoint_list, bd);
+	return list;
 }
 
 /* Debugger Callbacks
@@ -1308,7 +1283,7 @@ on_program_stopped (BreakpointsDBase *bd)
 	g_return_if_fail (bd->debugger != NULL);
 
 	gtk_action_group_set_sensitive (bd->debugger_group, TRUE);
-	
+
 	/* Refresh breakpoint
 	 * Hit count could have changed by example */
 	breakpoints_dbase_list_all_in_debugger (bd);
@@ -1320,13 +1295,13 @@ on_program_exited (BreakpointsDBase *bd)
 	g_return_if_fail (bd->debugger != NULL);
 
 	gtk_action_group_set_sensitive (bd->debugger_group, TRUE);
-}	
+}
 
 static void
 on_program_unloaded (BreakpointsDBase *bd)
 {
 	g_return_if_fail (bd->debugger != NULL);
-	
+
 	breakpoints_dbase_remove_all_in_debugger (bd);
 	bd->debugger = NULL;
 	gtk_action_group_set_sensitive (bd->debugger_group, TRUE);
@@ -1343,17 +1318,17 @@ static void
 on_program_loaded (BreakpointsDBase *bd)
 {
 	DmaDebuggerQueue* debugger;
-	
+
 	DEBUG_PRINT("on program loaded in breakpoints %p bd %p", bd->debugger, bd);
 	/* Debugger shouldn't be connected */
 	g_return_if_fail (bd->debugger == NULL);
-	
+
 	debugger = dma_debug_manager_get_queue (ANJUTA_PLUGIN_DEBUG_MANAGER (bd->plugin));
 	if (!dma_debugger_queue_is_supported (debugger, HAS_BREAKPOINT)) return;
-	
+
 	bd->debugger = debugger;
 	breakpoints_dbase_add_all_in_debugger (bd);
-	
+
 	/* Connect to other debugger signal */
 	g_signal_connect_swapped (bd->plugin, "sharedlib-event", G_CALLBACK (on_breakpoint_sharedlib_event), bd);
 	g_signal_connect_swapped (bd->plugin, "program-unloaded", G_CALLBACK (on_program_unloaded), bd);
@@ -1365,11 +1340,11 @@ on_program_loaded (BreakpointsDBase *bd)
 static void
 on_debugger_started (BreakpointsDBase *bd)
 {
-	GtkTreeViewColumn *column;	
+	GtkTreeViewColumn *column;
 	DmaDebuggerQueue* debugger;
-	
+
 	debugger = dma_debug_manager_get_queue (ANJUTA_PLUGIN_DEBUG_MANAGER (bd->plugin));
-	
+
 	/* Remove breakpoint attributes not supported by current debugger */
 	if (!dma_debugger_queue_is_supported(debugger, HAS_ADDRESS_BREAKPOINT))
 	{
@@ -1378,12 +1353,12 @@ on_debugger_started (BreakpointsDBase *bd)
 	}
 	if (!dma_debugger_queue_is_supported(debugger, HAS_IGNORE_BREAKPOINT))
 	{
-		column = gtk_tree_view_get_column (bd->treeview, PASS_COLUMN);	
+		column = gtk_tree_view_get_column (bd->treeview, PASS_COLUMN);
 		gtk_tree_view_column_set_visible (column, FALSE);
 	}
 	if (!dma_debugger_queue_is_supported(debugger, HAS_CONDITION_BREAKPOINT))
 	{
-		column = gtk_tree_view_get_column (bd->treeview, CONDITION_COLUMN);	
+		column = gtk_tree_view_get_column (bd->treeview, CONDITION_COLUMN);
 		gtk_tree_view_column_set_visible (column, FALSE);
 	}
 }
@@ -1392,13 +1367,13 @@ static void
 on_debugger_stopped (BreakpointsDBase *bd)
 {
 	/* Restore breakpoint attributes not supported by current debugger */
-	GtkTreeViewColumn *column;	
-	
+	GtkTreeViewColumn *column;
+
 	column = gtk_tree_view_get_column (bd->treeview, ADDRESS_COLUMN);
 	gtk_tree_view_column_set_visible (column, TRUE);
-	column = gtk_tree_view_get_column (bd->treeview, PASS_COLUMN);	
+	column = gtk_tree_view_get_column (bd->treeview, PASS_COLUMN);
 	gtk_tree_view_column_set_visible (column, TRUE);
-	column = gtk_tree_view_get_column (bd->treeview, CONDITION_COLUMN);	
+	column = gtk_tree_view_get_column (bd->treeview, CONDITION_COLUMN);
 	gtk_tree_view_column_set_visible (column, TRUE);
 }
 
@@ -1409,14 +1384,36 @@ on_debugger_stopped (BreakpointsDBase *bd)
 static void
 on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase, AnjutaSession *session, BreakpointsDBase *bd)
 {
-	GList *list;
+	GList *bi_list;
+	GList *list = NULL;
 
 	if (phase != ANJUTA_SESSION_PHASE_NORMAL)
 		return;
 
-	list = breakpoints_dbase_get_breakpoint_list (bd);
+	bi_list = breakpoints_dbase_get_breakpoint_list (bd);
+	for (; bi_list != NULL; bi_list = g_list_delete_link (bi_list, bi_list))
+	{
+		BreakpointItem *bi = (BreakpointItem *)bi_list->data;
+
+		if ((bi->bp.type & (IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE | IANJUTA_DEBUGGER_BREAKPOINT_ON_FUNCTION))
+				&& (bi->bp.temporary == FALSE))
+		{
+			/* Only permanent breakpoint are saved */
+			gchar *relative_uri;
+			GFile *file;
+
+			file = g_file_new_for_uri (bi->uri);
+			relative_uri = anjuta_session_get_relative_uri_from_file (session, file, NULL);
+			g_object_unref (file);
+			list = g_list_prepend (list, g_strdup_printf("%d:%s:%u:%u:%s", bi->bp.enable ? 1 : 0, relative_uri, bi->bp.line, bi->bp.ignore, bi->bp.condition == NULL ? "" : bi->bp.condition));
+			g_free (relative_uri);
+		}
+	}
+	list = g_list_reverse (list);
 	if (list != NULL)
 		anjuta_session_set_string_list (session, "Debugger", "Breakpoint", list);
+	g_list_foreach (list, (GFunc)g_free, NULL);
+	g_list_free (list);
 }
 
 static void
@@ -1429,8 +1426,40 @@ on_session_load (AnjutaShell *shell, AnjutaSessionPhase phase, AnjutaSession *se
 
 	breakpoints_dbase_remove_all (bd);
 	list = anjuta_session_get_string_list (session, "Debugger", "Breakpoint");
-	if (list != NULL)
-		breakpoints_dbase_add_breakpoint_list (bd, list);
+	for (; list != NULL; list = g_list_delete_link (list, list))
+	{
+		BreakpointItem *bi;
+		gchar *uri = (gchar *)list->data;
+		gchar *pos;
+		guint line;
+		gchar *cond;
+		guint ignore;
+		gboolean enable;
+		GFile *file;
+
+		pos = strrchr (uri, ':');
+		*pos = '\0';
+		cond = pos + 1;
+		pos = strrchr (uri, ':');
+		*pos = '\0';
+		ignore = strtoul (pos + 1, NULL, 10);
+		pos = strrchr (uri, ':');
+		*pos = '\0';
+		line = strtoul (pos + 1, NULL, 10);
+		enable = uri[0] == '0' ? FALSE : TRUE;
+		file = anjuta_session_get_file_from_relative_uri (session, uri + 2, NULL);
+		bi = breakpoint_item_new_from_file (bd, file, line, enable);
+		g_object_unref (file);
+
+		if (*cond != '\0')
+		{
+			bi->bp.condition = g_strdup (cond);
+		}
+		bi->bp.ignore = ignore;
+
+		breakpoints_dbase_add_breakpoint (bd, bi);
+		g_free (uri);
+	}
 }
 
 /* Breakpoint edit dialog
@@ -1468,7 +1497,7 @@ breakpoints_dbase_edit_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 	if (bd->debugger != NULL)
 	{
 		if (!dma_debugger_queue_is_supported(bd->debugger, HAS_IGNORE_BREAKPOINT))
-		{	
+		{
 			gtk_widget_hide (pass_entry);
 			gtk_widget_hide (pass_label);
 		}
@@ -1478,12 +1507,12 @@ breakpoints_dbase_edit_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 			gtk_widget_hide (condition_label);
 		}
 	}
-	
+
 	if (bi == NULL)
 	{
 		IAnjutaEditor *te;
 		guint line = 0;
-		
+
 		/* New breakpoint */
 		gtk_widget_show (location_entry);
 		gtk_widget_hide (location_label);
@@ -1510,7 +1539,7 @@ breakpoints_dbase_edit_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 		gtk_widget_hide (location_entry);
 		gtk_widget_show (location_label);
 	}
-	
+
 	if (bi->bp.type & IANJUTA_DEBUGGER_BREAKPOINT_ON_LINE)
 	{
 		/* file and line */
@@ -1535,20 +1564,20 @@ breakpoints_dbase_edit_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 	{
 		gtk_label_set_text (GTK_LABEL (location_label), location == NULL ? "" : location);
 	}
-	
+
 	if (bi->bp.condition && strlen (bi->bp.condition) > 0)
 		gtk_entry_set_text (GTK_ENTRY (condition_entry), bi->bp.condition);
-	
+
 	buff = g_strdup_printf ("%d", bi->bp.ignore);
 	gtk_entry_set_text (GTK_ENTRY (pass_entry), buff);
 	g_free (buff);
-	
+
 	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
 	{
 		const gchar *condition;
 		guint ignore;
 		const gchar *new_location;
-		
+
 		ignore = atoi (gtk_entry_get_text (GTK_ENTRY (pass_entry)));
 		condition = gtk_entry_get_text (GTK_ENTRY (condition_entry));
 		while (isspace(*condition)) condition++;
@@ -1558,13 +1587,13 @@ breakpoints_dbase_edit_breakpoint (BreakpointsDBase *bd, BreakpointItem *bi)
 		{
 			new_location = gtk_entry_get_text (GTK_ENTRY (location_entry));
 			while (isspace(*new_location)) new_location++;
-				
+
 			if ((location == NULL) || (strcmp (new_location, location) != 0))
 			{
 				/* location has been changed, create a new breakpoint */
 				breakpoint_item_unref (bi);
 				bi = NULL;
-				
+
 				if (*new_location != '\0')
 				{
 					bi = breakpoint_item_new_from_string (bd, new_location, NULL);
@@ -1670,10 +1699,10 @@ on_toggle_breakpoint_activate (GtkAction * action, BreakpointsDBase *bd)
 	file = ianjuta_file_get_file (IANJUTA_FILE (te), NULL);
 	if (file == NULL) return;     /* File not saved yet, it's not possible to put a breakpoint in it */
 	line = ianjuta_editor_get_lineno (te, NULL);
-	
+
 	uri = g_file_get_uri (file);
 	g_object_unref (file);
-	
+
 	update_breakpoint(bd, te, uri, line);
 
 	g_free (uri);
@@ -1711,7 +1740,7 @@ on_clear_all_breakpoints_activate (GtkAction * action, BreakpointsDBase *bd)
 {
 	GtkWidget *dialog;
 
-	dialog = gtk_message_dialog_new (GTK_WINDOW (ANJUTA_PLUGIN (bd->plugin)->shell), 
+	dialog = gtk_message_dialog_new (GTK_WINDOW (ANJUTA_PLUGIN (bd->plugin)->shell),
 									 GTK_DIALOG_DESTROY_WITH_PARENT,
 									 GTK_MESSAGE_QUESTION,
 									 GTK_BUTTONS_NONE,
@@ -1720,7 +1749,7 @@ on_clear_all_breakpoints_activate (GtkAction * action, BreakpointsDBase *bd)
 							GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
 							GTK_STOCK_DELETE, GTK_RESPONSE_YES,
 							NULL);
-	
+
 	gtk_window_set_transient_for (GTK_WINDOW (dialog),
 			GTK_WINDOW (ANJUTA_PLUGIN (bd->plugin)->shell) );
 
@@ -1750,7 +1779,7 @@ on_remove_breakpoint_activate (GtkAction * action, BreakpointsDBase *bd)
 	if (valid)
 	{
 		BreakpointItem *bi;
-		
+
 		gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 		breakpoints_dbase_remove_breakpoint (bd, bi);
 	}
@@ -1769,7 +1798,7 @@ on_edit_breakpoint_activate (GtkAction * action, BreakpointsDBase *bd)
 	if (valid)
 	{
 		BreakpointItem *bi;
-		
+
 		gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 		breakpoints_dbase_edit_breakpoint (bd, bi);
 	}
@@ -1783,12 +1812,12 @@ on_treeview_enabled_toggled (GtkCellRendererToggle *cell,
 	GtkTreeModel *model;
 	GtkTreeIter iter;
 	GtkTreePath *path;
-	
+
 	path = gtk_tree_path_new_from_string (path_str);
 
 	model = gtk_tree_view_get_model (bd->treeview);
 	gtk_tree_model_get_iter (model, &iter, path);
-	
+
 	breakpoints_dbase_toggle_enable (bd, model, iter);
 }
 
@@ -1873,7 +1902,7 @@ static GtkActionEntry actions_debugger_breakpoints[] = {
 		N_("Remove all breakpoints"),             /* Tooltip */
 		G_CALLBACK (on_clear_all_breakpoints_activate)/* action callback */
 	},
-};		
+};
 
 static GtkActionEntry actions_permanent_breakpoints[] = {
 	{
@@ -1884,7 +1913,7 @@ static GtkActionEntry actions_permanent_breakpoints[] = {
 		N_("Jump to breakpoint location"),        /* Tooltip */
 		G_CALLBACK (on_jump_to_breakpoint_activate)   /* action callback */
 	},
-};		
+};
 
 /* Breakpoint list window
  *---------------------------------------------------------------------------*/
@@ -1912,7 +1941,7 @@ on_breakpoints_button_press (GtkWidget * widget, GdkEventButton * bevent, Breakp
 			GtkAction *action;
 			const gchar* label;
 			const gchar* tooltip;
-	
+
 			gtk_tree_model_get (model, &iter, DATA_COLUMN, &bi, -1);
 			action = gtk_action_group_get_action (bd->debugger_group, "ActionDmaEnableDisableBreakpoint");
 			g_return_val_if_fail (action != NULL, FALSE);
@@ -1926,13 +1955,13 @@ on_breakpoints_button_press (GtkWidget * widget, GdkEventButton * bevent, Breakp
 				label =	N_("Enable Breakpoint");
 				tooltip = N_("Enable a breakpoint");
 			}
-				
+
 			g_object_set (G_OBJECT (action),
-					"label", label, 
-              				"tooltip", tooltip, 
-		              		NULL);				
+					"label", label,
+              				"tooltip", tooltip,
+		              		NULL);
 		}
-		
+
 		gtk_menu_popup (popup, NULL, NULL, NULL, NULL,
 						bevent->button, bevent->time);
 	}
@@ -1941,7 +1970,7 @@ on_breakpoints_button_press (GtkWidget * widget, GdkEventButton * bevent, Breakp
 		/* Double left mouse click */
 		on_jump_to_breakpoint_activate (NULL, bd);
 	}
-	
+
 	return FALSE;
 }
 
@@ -1951,7 +1980,7 @@ create_breakpoint_gui(BreakpointsDBase *bd)
 	/* Translators: Enabled refers to a breakpoint. It is a column name, like
 	 * other words. */
 	static const gchar *column_names[COLUMNS_NB] =	{
-		N_("Enabled"), N_("Location"), N_("Address"), N_("Type"), 
+		N_("Enabled"), N_("Location"), N_("Address"), N_("Type"),
 		N_("Condition"), N_("Pass count"), N_("State")};
 	static GType column_type[COLUMNS_NB] = {
 		G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
@@ -1985,7 +2014,7 @@ create_breakpoint_gui(BreakpointsDBase *bd)
 	gtk_tree_view_append_column (bd->treeview, column);
 	g_signal_connect (renderer, "toggled",
 					  G_CALLBACK (on_treeview_enabled_toggled), bd);
-	
+
 	renderer = gtk_cell_renderer_text_new ();
 	for (i = ENABLED_COLUMN + 1; i < (COLUMNS_NB - 1); i++)
 	{
@@ -2029,7 +2058,7 @@ create_breakpoint_gui(BreakpointsDBase *bd)
 							 NULL);
 
 	/* Add popup menu */
-	g_signal_connect (bd->treeview, "button-press-event", G_CALLBACK (on_breakpoints_button_press), bd);  
+	g_signal_connect (bd->treeview, "button-press-event", G_CALLBACK (on_breakpoints_button_press), bd);
 }
 
 static void
@@ -2067,29 +2096,29 @@ breakpoints_dbase_new (DebugManagerPlugin *plugin)
 	BreakpointsDBase *bd;
 
 	bd = g_new0 (BreakpointsDBase, 1);
-	
+
 	bd->plugin = plugin;
 
 	/* Create graphical user inteface */
 	create_breakpoint_gui (bd);
-	
+
 	/* Connect to Load and Save event */
 	g_signal_connect (ANJUTA_PLUGIN(bd->plugin)->shell, "save-session",
 				  G_CALLBACK (on_session_save), bd);
 	g_signal_connect (ANJUTA_PLUGIN(bd->plugin)->shell, "load-session",
 				  G_CALLBACK (on_session_load), bd);
-		
+
 	/* Connect on load program */
 	g_signal_connect_swapped (bd->plugin, "program-loaded", G_CALLBACK (on_program_loaded), bd);
 	g_signal_connect_swapped (bd->plugin, "debugger-started", G_CALLBACK (on_debugger_started), bd);
 	g_signal_connect_swapped (bd->plugin, "debugger-stopped", G_CALLBACK (on_debugger_stopped), bd);
 
-	bd->editor_watch = 
+	bd->editor_watch =
 		anjuta_plugin_add_watch (ANJUTA_PLUGIN(bd->plugin), IANJUTA_DOCUMENT_MANAGER_CURRENT_DOCUMENT,
 								 on_added_current_editor,
 								 on_removed_current_editor, bd);
-						 
-	
+
+
 	return bd;
 }
 
@@ -2103,16 +2132,16 @@ breakpoints_dbase_destroy (BreakpointsDBase * bd)
 	g_signal_handlers_disconnect_matched (bd->plugin, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, bd);
 	breakpoints_dbase_disconnect_from_editors (bd);
 	anjuta_plugin_remove_watch (ANJUTA_PLUGIN(bd->plugin), bd->editor_watch, FALSE);
-	
+
 	/* This is necessary to clear the editor of breakpoint markers */
 	breakpoints_dbase_remove_all (bd);
-	
+
 	/* Destroy graphical user interface */
 	destroy_breakpoint_gui (bd);
 
 	g_free (bd->cond_history);
 	g_free (bd->loc_history);
-	
+
 	g_free (bd);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]