SF.net SVN: geany-plugins:[2172] trunk/geany-plugins/debugger/src

cesspit at users.sourceforge.net cesspit at xxxxx
Sat Aug 27 12:45:36 UTC 2011


Revision: 2172
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2172&view=rev
Author:   cesspit
Date:     2011-08-27 12:45:36 +0000 (Sat, 27 Aug 2011)
Log Message:
-----------
debugger: Correcting markers when "savings as", removing or modifying a file from outside geany. Another portion of compiler casting warning removed.

Modified Paths:
--------------
    trunk/geany-plugins/debugger/src/bptree.c
    trunk/geany-plugins/debugger/src/breakpoint.c
    trunk/geany-plugins/debugger/src/breakpoint.h
    trunk/geany-plugins/debugger/src/breakpoints.c
    trunk/geany-plugins/debugger/src/breakpoints.h
    trunk/geany-plugins/debugger/src/callbacks.c
    trunk/geany-plugins/debugger/src/callbacks.h
    trunk/geany-plugins/debugger/src/dbm_gdb.c
    trunk/geany-plugins/debugger/src/debug.c
    trunk/geany-plugins/debugger/src/debug.h
    trunk/geany-plugins/debugger/src/debug_module.h
    trunk/geany-plugins/debugger/src/markers.c
    trunk/geany-plugins/debugger/src/markers.h
    trunk/geany-plugins/debugger/src/plugin.c
    trunk/geany-plugins/debugger/src/stree.c
    trunk/geany-plugins/debugger/src/tpage.c
    trunk/geany-plugins/debugger/src/utils.c
    trunk/geany-plugins/debugger/src/utils.h
    trunk/geany-plugins/debugger/src/vtree.c

Modified: trunk/geany-plugins/debugger/src/bptree.c
===================================================================
--- trunk/geany-plugins/debugger/src/bptree.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/bptree.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -343,7 +343,7 @@
 
 	/* creating columns */
 	GtkTreeViewColumn	*column;
-	gchar				*header;
+	const gchar			*header;
 	
 	int	char_width = get_char_width(tree);
 

Modified: trunk/geany-plugins/debugger/src/breakpoint.c
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoint.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/breakpoint.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -47,7 +47,7 @@
  * 		enabled - is new breakpoint enabled
  * 		hitscount - breakpoints hitscount
 */
-breakpoint* break_new_full(char* file, int line, char* condition, int enabled, int hitscount)
+breakpoint* break_new_full(const char* file, int line, const char* condition, int enabled, int hitscount)
 {
 	breakpoint* bp = break_new();
 	strcpy(bp->file, file);

Modified: trunk/geany-plugins/debugger/src/breakpoint.h
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoint.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/breakpoint.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -33,4 +33,4 @@
 } breakpoint;
 
 breakpoint*	break_new();
-breakpoint*	break_new_full(char* file, int line, char* condition, int enabled, int hitscount);
+breakpoint*	break_new_full(const char* file, int line, const char* condition, int enabled, int hitscount);

Modified: trunk/geany-plugins/debugger/src/breakpoints.c
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoints.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/breakpoints.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -105,7 +105,7 @@
  * 		file - breakpoints filename
  * 		line - breakpoints line
  */
-breakpoint* lookup_breakpoint(gchar* file, int line)
+breakpoint* lookup_breakpoint(const gchar* file, int line)
 {
 	breakpoint* bp = NULL;
 	GTree* tree = NULL;
@@ -315,7 +315,7 @@
  * 		enabled - is new breakpoint enabled
  * 		hitscount - breakpoints hitscount
  */
-void breaks_add(char* file, int line, char* condition, int enabled, int hitscount)
+void breaks_add(const char* file, int line, char* condition, int enabled, int hitscount)
 {
 	/* do not process async break manipulation on modules
 	that do not support async interuppt */
@@ -352,7 +352,7 @@
  * 		file - breakpoints filename
  * 		line - breakpoints line
  */
-void breaks_remove(char* file, int line)
+void breaks_remove(const char* file, int line)
 {
 	/* do not process async break manipulation on modules
 	that do not support async interuppt */
@@ -389,7 +389,7 @@
  * 		file - breakpoints filename
  * 		line - breakpoints line
  */
-void breaks_switch(char* file, int line)
+void breaks_switch(const char* file, int line)
 {
 	/* do not process async break manipulation on modules
 	that do not support async interuppt */
@@ -505,7 +505,7 @@
  * 		file - breakpoints filename
  * 		line - breakpoints line
  */
-break_state	breaks_get_state(char* file, int line)
+break_state	breaks_get_state(const char* file, int line)
 {
 	break_state bs = BS_NOT_SET;
 	
@@ -528,7 +528,7 @@
  * arguments:
  * 		file - file name to get breaks for 
  */
-GList *breaks_get_for_document(char* file)
+GList *breaks_get_for_document(const char* file)
 {
 	GList *breaks = NULL;
 	GTree *tree = g_hash_table_lookup(files, file);

Modified: trunk/geany-plugins/debugger/src/breakpoints.h
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoints.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/breakpoints.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -29,16 +29,16 @@
 
 gboolean		breaks_init(move_to_line_cb callback);
 void			breaks_destroy();
-void			breaks_add(char* file, int line, char* condition, int enable, int hitscount);
-void			breaks_remove(char* file, int line);
+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_all();
-void			breaks_switch(char* file, int line);
+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(char* file, int line);
+break_state	breaks_get_state(const char* file, int line);
 GtkWidget*	breaks_get_widget();
-GList*			breaks_get_for_document(char* file);
+GList*			breaks_get_for_document(const char* file);
 GList*			breaks_get_all();
 void			breaks_read_config();
 

Modified: trunk/geany-plugins/debugger/src/callbacks.c
===================================================================
--- trunk/geany-plugins/debugger/src/callbacks.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/callbacks.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -42,12 +42,72 @@
 extern GeanyFunctions *geany_functions;
 
 /*
+ * 	Set breakpoint and stack markers for a file
+ */
+void set_markers_for_file(const gchar* file)
+{
+	GList *breaks;
+	if ( (breaks = breaks_get_for_document(file)) )
+	{
+		GList *iter = breaks;
+		while (iter)
+		{
+			breakpoint *bp = (breakpoint*)iter->data;
+			markers_add_breakpoint(bp);
+			
+			iter = iter->next;
+		}
+		g_list_free(breaks);
+	}
+
+	/* set frames markers if exists */
+	if (DBS_STOPPED == debug_get_state())
+	{
+		GList *iter = debug_get_stack();
+		if (iter)
+		{
+			frame *f = (frame*)iter->data;
+			if (f->have_source && !strcmp(f->file, file))
+			{
+				markers_add_current_instruction(f->file, f->line);
+			}
+
+			iter = iter->next;
+			while (iter)
+			{
+				f = (frame*)iter->data;
+				if (f->have_source && !strcmp(f->file, file))
+				{
+					markers_add_frame(f->file, f->line);
+				}
+				iter = iter->next;
+			}
+		}
+	}
+}
+
+/*
  * 	Following group of callbacks are used for
  * 	checking of existance of the config file
  * 	and changing buttons state in the target page
  */
 
 /*
+ * 	Occures before document is going to be saved
+ */
+static gboolean _unexisting_file = FALSE;
+void on_document_before_save(GObject *obj, GeanyDocument *doc, gpointer user_data)
+{
+	if (!doc->real_path)
+	{
+		/* we can fall here if we are saving new document
+		 (that doesn't exists on a filesystem) or if we're "Saving As" */
+
+		_unexisting_file = TRUE;
+	}
+}
+
+/*
  * 	Occures on closing document
  */
 void on_document_close(GObject *obj, GeanyDocument *doc, gpointer user_data)
@@ -60,6 +120,21 @@
  */
 void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_data)
 {
+	if (_unexisting_file)
+	{
+		/* if we are saving as - remove all markers at first */
+		markers_remove_all(doc);
+
+		/* next, lets try to find and insert markers for the file, current document is being saved to*/
+		set_markers_for_file(doc->file_name);
+
+		/* if debug is active - tell the debug module that a file was opened */
+		if (DBS_IDLE != debug_get_state())
+			debug_on_file_open(doc);
+		
+		_unexisting_file = FALSE;
+	}
+
 	btnpanel_on_document_activate(doc);
 }
 
@@ -84,7 +159,7 @@
  */
 void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_data)
 {
-	char* file = DOC_FILENAME(doc);
+	const gchar* file = DOC_FILENAME(doc);
 	/*set markers*/
 	markers_set_for_document(doc->editor->sci);
 
@@ -97,50 +172,14 @@
 	/* set caret policy */
 	scintilla_send_message(doc->editor->sci, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_JUMPS | CARET_EVEN , 3);
 	
+	/* set breakpoint and frame markers */
+	set_markers_for_file(file);
+
 	/* check if current path contains config file */
 	gchar *folder = g_path_get_dirname(DOC_FILENAME(doc));
 	btnpanel_set_have_config(dconfig_is_found_at(folder));
 	g_free(folder);
 
-	GList *breaks;
-	if ( (breaks = breaks_get_for_document(file)) )
-	{
-		GList *iter = breaks;
-		while (iter)
-		{
-			breakpoint *bp = (breakpoint*)iter->data;
-			markers_add_breakpoint(bp);
-			
-			iter = iter->next;
-		}
-		g_list_free(breaks);
-	}
-
-	/* set frames markers if exists */
-	if (DBS_STOPPED == debug_get_state())
-	{
-		GList *iter = debug_get_stack();
-		if (iter)
-		{
-			frame *f = (frame*)iter->data;
-			if (f->have_source && !strcmp(f->file, file))
-			{
-				markers_add_current_instruction(f->file, f->line);
-			}
-
-			iter = iter->next;
-			while (iter)
-			{
-				f = (frame*)iter->data;
-				if (f->have_source && !strcmp(f->file, file))
-				{
-					markers_add_frame(f->file, f->line);
-				}
-				iter = iter->next;
-			}
-		}
-	}
-
 	/* if debug is active - tell the debug module that a file was opened */
 	if (DBS_IDLE != debug_get_state())
 		debug_on_file_open(doc);
@@ -154,6 +193,12 @@
 	GObject *object, GeanyEditor *editor,
 	SCNotification *nt, gpointer data)
 {
+	if (!editor->document->real_path)
+	{
+		/* no other way to handle removing a file from outside of geany */
+		markers_remove_all(editor->document);
+	}
+	
 	switch (nt->nmhdr.code)
 	{
 		case SCN_MARGINCLICK:

Modified: trunk/geany-plugins/debugger/src/callbacks.h
===================================================================
--- trunk/geany-plugins/debugger/src/callbacks.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/callbacks.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -23,6 +23,7 @@
 void on_document_activate(GObject *obj, GeanyDocument *doc, gpointer user_data);
 void on_document_close(GObject *obj, GeanyDocument *doc, gpointer user_data);
 void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_data);
+void on_document_before_save(GObject *obj, GeanyDocument *doc, gpointer user_data);
 void on_document_new(GObject *obj, GeanyDocument *doc, gpointer user_data);
 gboolean on_editor_notify(GObject *object, GeanyEditor *editor, SCNotification *nt, gpointer data);
 gboolean keys_callback(guint key_id);

Modified: trunk/geany-plugins/debugger/src/dbm_gdb.c
===================================================================
--- trunk/geany-plugins/debugger/src/dbm_gdb.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/dbm_gdb.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -717,7 +717,7 @@
 /*
  * execute until
  */
-void execute_until(gchar *file, int line)
+void execute_until(const gchar *file, int line)
 {
 	gchar command[1000];
 	sprintf(command, "-exec-until %s:%i", file, line);

Modified: trunk/geany-plugins/debugger/src/debug.c
===================================================================
--- trunk/geany-plugins/debugger/src/debug.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/debug.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -837,7 +837,7 @@
 /* 
  * called from debugger module to show an error message box 
  */
-static void on_debugger_error (gchar* message)
+static void on_debugger_error (const gchar* message)
 {
 	dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", message);
 }
@@ -1209,7 +1209,7 @@
 /*
  * step to position
  */
-void debug_execute_until(gchar *file, int line)
+void debug_execute_until(const gchar *file, int line)
 {
 	if (DBS_STOPPED == debug_state)
 		active_module->execute_until(file, line);
@@ -1355,7 +1355,7 @@
  */
 void debug_on_file_open(GeanyDocument *doc)
 {
-	gchar *file = DOC_FILENAME(doc);
+	const gchar *file = DOC_FILENAME(doc);
 	if (g_list_find_custom(read_only_pages, (gpointer)file, (GCompareFunc)g_strcmp0))
 		scintilla_send_message(doc->editor->sci, SCI_SETREADONLY, 1, 0);
 }

Modified: trunk/geany-plugins/debugger/src/debug.h
===================================================================
--- trunk/geany-plugins/debugger/src/debug.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/debug.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -41,7 +41,7 @@
 void			debug_step_over();
 void			debug_step_into();
 void			debug_step_out();
-void			debug_execute_until(gchar *file, int line);
+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);

Modified: trunk/geany-plugins/debugger/src/debug_module.h
===================================================================
--- trunk/geany-plugins/debugger/src/debug_module.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/debug_module.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -26,7 +26,7 @@
 	void (*set_exited) (int code);
 	void (*send_message) (const gchar* message, const gchar *color);
 	void (*clear_messages) ();
-	void (*report_error) (gchar* message);
+	void (*report_error) (const gchar* message);
 } dbg_callbacks;
 
 /* type to hold information about a variable */
@@ -84,7 +84,7 @@
 	void (*step_over) ();
 	void (*step_into) ();
 	void (*step_out) ();
-	void (*execute_until)(gchar *file, int line);
+	void (*execute_until)(const gchar *file, int line);
 
 	gboolean (*set_break) (breakpoint* bp, break_set_activity bsa);
 	gboolean (*remove_break) (breakpoint* bp);

Modified: trunk/geany-plugins/debugger/src/markers.c
===================================================================
--- trunk/geany-plugins/debugger/src/markers.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/markers.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -208,3 +208,16 @@
 		scintilla_send_message(doc->editor->sci, SCI_SETFOCUS, TRUE, 0);
 	}
 }
+
+/*
+ * removes all markers from GeanyDocument
+ */
+void markers_remove_all(GeanyDocument *doc)
+{
+	static int markers[] = { M_BP_ENABLED, M_BP_DISABLED, M_BP_CONDITIONAL, M_CI_BACKGROUND, M_CI_ARROW, M_FRAME };
+	int i = 0, size = sizeof(markers) / sizeof(int);
+	for (; i < size; i++)
+	{
+		scintilla_send_message(doc->editor->sci, SCI_MARKERDELETEALL, markers[i], 0);
+	}
+}

Modified: trunk/geany-plugins/debugger/src/markers.h
===================================================================
--- trunk/geany-plugins/debugger/src/markers.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/markers.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -27,5 +27,6 @@
 void markers_remove_current_instruction(char* file, int line);
 void markers_add_frame(char* file, int line);
 void markers_remove_frame(char* file, int line);
+void markers_remove_all(GeanyDocument *doc);
 
 

Modified: trunk/geany-plugins/debugger/src/plugin.c
===================================================================
--- trunk/geany-plugins/debugger/src/plugin.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/plugin.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -68,6 +68,7 @@
 	{ "document_activate", (GCallback) &on_document_activate, FALSE, NULL },
 	{ "document_close", (GCallback) &on_document_close, FALSE, NULL },
 	{ "document_save", (GCallback) &on_document_save, FALSE, NULL },
+	{ "document_before_save", (GCallback) &on_document_before_save, FALSE, NULL },
 	{ "document_new", (GCallback) &on_document_new, FALSE, NULL },
 	
 	{ NULL, NULL, FALSE, NULL }

Modified: trunk/geany-plugins/debugger/src/stree.c
===================================================================
--- trunk/geany-plugins/debugger/src/stree.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/stree.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -134,7 +134,7 @@
 	/* creating columns */
 	GtkCellRenderer		*renderer;
 	GtkTreeViewColumn	*column;
-	gchar				*header;
+	const gchar			*header;
 	
 	int	char_width = get_char_width(tree);
 

Modified: trunk/geany-plugins/debugger/src/tpage.c
===================================================================
--- trunk/geany-plugins/debugger/src/tpage.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/tpage.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -635,7 +635,7 @@
 	g_object_set(envtree, "rules-hint", TRUE, NULL);
 	g_signal_connect(G_OBJECT(envtree), "key-press-event", G_CALLBACK (on_envtree_keypressed), NULL);
 
-	gchar *header;
+	const gchar *header;
 	int	char_width = get_char_width(envtree);
 
 	header = _("Name");

Modified: trunk/geany-plugins/debugger/src/utils.c
===================================================================
--- trunk/geany-plugins/debugger/src/utils.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/utils.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -62,7 +62,7 @@
 /*
  * get string width if string length is bigger than minwidth or minwidth * char_width 
  */
-int get_header_string_width(gchar *header, int minchars, int char_width)
+int get_header_string_width(const gchar *header, int minchars, int char_width)
 {
 	return strlen(header) > minchars ? strlen(header) : minchars * char_width;
 }
@@ -70,7 +70,7 @@
 /*
  * create tree view column 
  */
-GtkTreeViewColumn *create_column(gchar *name, GtkCellRenderer *renderer, gboolean expandable, gint minwidth, const char *arg, int value)
+GtkTreeViewColumn *create_column(const gchar *name, GtkCellRenderer *renderer, gboolean expandable, gint minwidth, const char *arg, int value)
 {
 	gtk_cell_renderer_set_padding(renderer, RENDERER_X_PADDING, RENDERER_Y_PADDING);
 	
@@ -101,6 +101,10 @@
 		sci_goto_line(doc->editor->sci, line - 1, TRUE);
 		scintilla_send_message(doc->editor->sci, SCI_SETFOCUS, TRUE, 0);
 	}
+	else
+	{
+		dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Can't find a source file \"%s\""), file);
+	}
 }
 
 /*

Modified: trunk/geany-plugins/debugger/src/utils.h
===================================================================
--- trunk/geany-plugins/debugger/src/utils.h	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/utils.h	2011-08-27 12:45:36 UTC (rev 2172)
@@ -21,6 +21,6 @@
  
 void					editor_open_position(char* file, int line);
 int						get_char_width(GtkWidget *widget);
-int						get_header_string_width(gchar *header, int minchars, int char_width);
-GtkTreeViewColumn*		create_column(gchar *name, GtkCellRenderer *renderer, gboolean expandable, gint minwidth, const char *arg, int value);
+int						get_header_string_width(const gchar *header, int minchars, int char_width);
+GtkTreeViewColumn*		create_column(const gchar *name, GtkCellRenderer *renderer, gboolean expandable, gint minwidth, const char *arg, int value);
 GString*				get_word_at_position(ScintillaObject *sci, int position);

Modified: trunk/geany-plugins/debugger/src/vtree.c
===================================================================
--- trunk/geany-plugins/debugger/src/vtree.c	2011-08-25 19:34:37 UTC (rev 2171)
+++ trunk/geany-plugins/debugger/src/vtree.c	2011-08-27 12:45:36 UTC (rev 2172)
@@ -128,7 +128,7 @@
 	/* create columns */
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
-	gchar				*header;
+	const gchar			*header;
 	
 	int	char_width = get_char_width(tree);
 

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Plugins-Commits mailing list