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

cesspit at users.sourceforge.net cesspit at xxxxx
Sun Aug 28 15:06:24 UTC 2011


Revision: 2180
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2180&view=rev
Author:   cesspit
Date:     2011-08-28 15:06:23 +0000 (Sun, 28 Aug 2011)
Log Message:
-----------
debugger: config auto save, stack tree click on already selected item opens frame location  

Modified Paths:
--------------
    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/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/plugin.c
    trunk/geany-plugins/debugger/src/stree.c
    trunk/geany-plugins/debugger/src/tpage.c
    trunk/geany-plugins/debugger/src/tpage.h
    trunk/geany-plugins/debugger/src/wtree.c
    trunk/geany-plugins/debugger/src/wtree.h

Modified: trunk/geany-plugins/debugger/src/breakpoints.c
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoints.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/breakpoints.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -149,6 +149,8 @@
 		bptree_add_breakpoint(bp);
 		/* add marker */
 		markers_add_breakpoint(bp);
+		/* mark config for saving */
+		dconfig_set_changed();
 	}
 	else
 		dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -171,6 +173,9 @@
 		/* remove from internal storage */
 		GTree *tree = g_hash_table_lookup(files,bp->file);
 		g_tree_remove(tree, GINT_TO_POINTER(bp->line));
+
+		/* mark config for saving */
+		dconfig_set_changed();
 	}
 	else
 		dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -189,6 +194,8 @@
 		bptree_set_hitscount(bp->iter, bp->hitscount);
 		markers_remove_breakpoint(bp);
 		markers_add_breakpoint(bp);
+		/* mark config for saving */
+		dconfig_set_changed();
 	}
 	else
 		dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -208,6 +215,8 @@
 		bptree_set_condition(bp->iter, bp->condition);
 		markers_remove_breakpoint(bp);
 		markers_add_breakpoint(bp);
+		/* mark config for saving */
+		dconfig_set_changed();
 	}
 	else
 	{
@@ -234,6 +243,9 @@
 
 	/* set checkbox in breaks tree */
 	bptree_set_enabled(bp->iter, bp->enabled);
+
+	/* mark config for saving */
+	dconfig_set_changed();
 }
 
 /*
@@ -495,6 +507,9 @@
 			g_tree_steal(tree, GINT_TO_POINTER(line_from));
 			bp->line = line_to;
 			g_tree_insert(tree, GINT_TO_POINTER(line_to), bp);
+
+			/* mark config for saving */
+			dconfig_set_changed();
 		}
 	}
 }
@@ -557,21 +572,3 @@
 {
 	return bptree_get_widget();
 }
-
-/*
- * Read new breakpoints from dconfig
- */
-void breaks_read_config()
-{
-	/* clear all breaks */
-	breaks_remove_all();
-
-	GList *list = dconfig_breaks_get();
-
-	while(list)
-	{
-		breakpoint *bp = (breakpoint*)list->data;
-		breaks_add(bp->file, bp->line, bp->condition, bp->enabled, bp->hitscount);
-		list = list->next;
-	}
-}

Modified: trunk/geany-plugins/debugger/src/breakpoints.h
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoints.h	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/breakpoints.h	2011-08-28 15:06:23 UTC (rev 2180)
@@ -40,5 +40,4 @@
 GtkWidget*	breaks_get_widget();
 GList*			breaks_get_for_document(const char* file);
 GList*			breaks_get_all();
-void			breaks_read_config();
 

Modified: trunk/geany-plugins/debugger/src/btnpanel.c
===================================================================
--- trunk/geany-plugins/debugger/src/btnpanel.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/btnpanel.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -42,9 +42,7 @@
 #define CP_BUTTONS_PAD 5
 #define CONFIG_NAME ".debugger"
 
-static GtkWidget *savebtn = NULL;
 static GtkWidget *loadbtn = NULL;
-static GtkWidget *clearbtn = NULL;
 
 static GtkWidget *runbtn = NULL;
 static GtkWidget *restartbtn = NULL;
@@ -77,38 +75,11 @@
 		{
 			dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Error reading config file"));
 		}
-		else
-		{
-			/* update target page */
-			tpage_read_config();
-			/* breakpoints */
-			breaks_read_config();
-			/* watches */
-			wtree_read_config();
-		}
 		g_free(folder);
 	}
 }
 
 /*
- * save config button handler
- */
-void on_config_save(GtkButton *button, gpointer user_data)
-{
-	GeanyDocument *doc = document_get_current();
-	if (doc && doc->real_path)
-	{
-		/* open config file */
-		gchar *folder = g_path_get_dirname(DOC_FILENAME(doc));
-		if (!dconfig_save(folder))
-		{
-			dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Error saving config file"));
-		}
-		g_free(folder);
-	}
-}
-
-/*
  * clear config values button handler
  */
 void on_config_clear(GtkButton *button, gpointer user_data)
@@ -203,14 +174,6 @@
 	g_signal_connect(G_OBJECT(loadbtn), "clicked", G_CALLBACK (on_config_load), (gpointer)TRUE);
 	gtk_box_pack_start(GTK_BOX(vbutton_box), loadbtn, FALSE, TRUE, 0);
 
-	savebtn = create_stock_button(GTK_STOCK_SAVE, _("Save settings"));
-	g_signal_connect(G_OBJECT(savebtn), "clicked", G_CALLBACK (on_config_save), NULL);
-	gtk_box_pack_start(GTK_BOX(vbutton_box), savebtn, FALSE, TRUE, 0);
-	
-	clearbtn = create_stock_button(GTK_STOCK_CLEAR, _("Clear settings"));
-	g_signal_connect(G_OBJECT(clearbtn), "clicked", G_CALLBACK (on_config_clear), NULL);
-	gtk_box_pack_start(GTK_BOX(vbutton_box), clearbtn, FALSE, FALSE, 0);
-
 	gtk_box_pack_start(GTK_BOX(vbox_panels_buttons), vbutton_box, TRUE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), vbox_panels_buttons, TRUE, FALSE, 0);
 
@@ -233,7 +196,6 @@
 void btnpanel_on_document_close()
 {
 	gtk_widget_set_sensitive(loadbtn, FALSE);
-	gtk_widget_set_sensitive(savebtn, FALSE);
 }
 
 /*
@@ -251,8 +213,6 @@
 		return;
 	}
 
-	gtk_widget_set_sensitive(savebtn, TRUE);
-	
 	gchar *dirname = g_path_get_dirname(DOC_FILENAME(doc));
 	gchar *config = g_build_path(G_DIR_SEPARATOR_S, dirname, CONFIG_NAME, NULL);
 	struct stat st;
@@ -298,5 +258,4 @@
 	gtk_widget_set_sensitive(runcursorbtn, DBS_STOPPED == state);
 
 	gtk_widget_set_sensitive(loadbtn, DBS_IDLE == state);
-	gtk_widget_set_sensitive(clearbtn, DBS_IDLE == state);
 }

Modified: trunk/geany-plugins/debugger/src/dconfig.c
===================================================================
--- trunk/geany-plugins/debugger/src/dconfig.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/dconfig.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -49,13 +49,22 @@
 /* maximus config file line length */
 #define MAXLINE 1000
 
-static gchar	*target = NULL;
-static int		module = -1; 
-static gchar	*args = NULL;
-static GList	*env = NULL;
-static GList	*breaks = NULL;
-static GList	*watches = NULL;
+/* saving interval */
+#define SAVING_INTERVAL 2000000
 
+/* idle callback staff */
+static GMutex *change_config_mutex;
+static GCond *cond;
+static GThread *saving_thread;
+static gboolean config_changed = FALSE;
+static gboolean loading_or_cleaning = FALSE;
+
+/* the folder, config has been loaded from */
+static gchar *current_folder = NULL;
+
+/* forward declaration */
+gboolean	dconfig_save(gchar *folder);
+
 /*
  * reads line from a file
  */
@@ -71,11 +80,79 @@
 	buffer[read] = '\0';
 
 	return read;
-} 
+}
 
 /*
- * checks whether a config fileis founs in the folder
+ * function for a config file background saving if changed 
  */
+gpointer saving_thread_func(gpointer data)
+{
+	GTimeVal interval;
+	GMutex *m = g_mutex_new();
+	do
+	{
+		g_mutex_lock(change_config_mutex);
+		if (config_changed && current_folder)
+		{
+			dconfig_save(current_folder);
+			config_changed = FALSE;
+		}
+		g_mutex_unlock(change_config_mutex);
+
+		g_get_current_time(&interval);
+		g_time_val_add(&interval, SAVING_INTERVAL);
+	}
+	while (!g_cond_timed_wait(cond, m, &interval));
+	g_mutex_free(m);
+	
+	return NULL;
+}
+
+/*
+ * set "changed" flag to save it on "saving_thread" thread
+ */
+void dconfig_set_changed()
+{
+	if (!loading_or_cleaning)
+	{
+		g_mutex_lock(change_config_mutex);
+		config_changed = TRUE;
+		g_mutex_unlock(change_config_mutex);
+	}
+}
+
+/*
+ * init config
+ */
+void dconfig_init()
+{
+	change_config_mutex = g_mutex_new();
+	cond = g_cond_new();
+
+	saving_thread = g_thread_create(saving_thread_func, NULL, TRUE, NULL);
+}
+
+/*
+ * destroys config
+ */
+void dconfig_destroy()
+{
+	g_cond_signal(cond);
+	/* ??? g_thread_join(saving_thread); */	
+	
+	g_mutex_free(change_config_mutex);
+	g_cond_free(cond);
+	
+	if (current_folder)
+	{
+		g_free(current_folder);
+		current_folder = NULL;
+	}
+}
+
+/*
+ * checks whether a config file is founs in the folder
+ */
 gboolean 	dconfig_is_found_at(gchar *folder)
 {
 	gchar *config = g_build_path(G_DIR_SEPARATOR_S, folder, CONFIG_NAME, NULL);
@@ -90,40 +167,50 @@
  */
 gboolean dconfig_load(gchar *folder)
 {
-	dconfig_clear();
+	loading_or_cleaning = TRUE;
+	g_mutex_lock(change_config_mutex);
+
+	tpage_clear();
+	wtree_remove_all();
+	breaks_remove_all();
 	
+	if (current_folder)
+	{
+		g_free(current_folder);
+	}
+	current_folder = g_strdup(folder);
+	
 	gchar *path = g_build_path(G_DIR_SEPARATOR_S, folder, CONFIG_NAME, NULL);
 	FILE *file = fopen(path, "r");
 	if (!file)
 	{
+		config_changed = FALSE;
+
+		loading_or_cleaning = FALSE;
+		g_mutex_unlock(change_config_mutex);
+
 		return FALSE;
 	}
 
 	/* target */
 	gchar buffer[FILENAME_MAX];
-	if(!readline(file, buffer, FILENAME_MAX - 1))
+	if(readline(file, buffer, FILENAME_MAX - 1))
 	{
-		memset(target, 0, FILENAME_MAX * sizeof(gchar));
+		tpage_set_target(buffer);
 	}
-	target = g_strdup(buffer);
 
 	/* debugger */
 	gchar debugger[FILENAME_MAX];
 	if(readline(file, debugger, FILENAME_MAX - 1))
 	{
-		module = debug_get_module_index(debugger);
-		if (-1 == module)
-		{
-			module = 0;
-		}
+		tpage_set_debugger(debugger);
 	}
 		
 	/* arguments */
-	if(!readline(file, buffer, FILENAME_MAX - 1))
+	if(readline(file, buffer, FILENAME_MAX - 1))
 	{
-		memset(buffer, 0, FILENAME_MAX * sizeof(gchar));
+		tpage_set_commandline(buffer);
 	}
-	args = g_strdup(buffer);
 
 	/* breakpoints and environment variables */
 	gchar line[MAXLINE];
@@ -158,8 +245,7 @@
 			struct stat st;
 			if(!stat(_path, &st))
 			{
-				breakpoint *bp = break_new_full(_path, nline, condition, enabled, hitscount);
-				breaks = g_list_append(breaks, bp);
+				breaks_add(_path, nline, condition, enabled, hitscount);
 			}
 		}
 		else if (!strcmp(line, ENVIRONMENT_MARKER))
@@ -167,8 +253,7 @@
 			gchar name[MAXLINE], value[1000];
 			if(readline(file, name, MAXLINE) && readline(file, value, MAXLINE))
 			{
-				env = g_list_append(env, name);
-				env = g_list_append(env, value);
+				tpage_add_environment(name, value);
 			}
 		}
 		else if (!strcmp(line, WATCH_MARKER))
@@ -176,10 +261,15 @@
 			gchar watch[MAXLINE];
 			if(readline(file, watch, MAXLINE))
 			{
-				watches = g_list_append(watches, g_strdup(watch));
+				wtree_add_watch(watch);
 			}
 		}
 	}
+
+	config_changed = FALSE;
+
+	loading_or_cleaning = FALSE;
+	g_mutex_unlock(change_config_mutex);
 	
 	return TRUE;
 }
@@ -263,127 +353,3 @@
 
 	return (gboolean)config;
 }
-
-/*
- * gets target
- */
-gchar* dconfig_target_get()
-{
-	return target;
-}
-
-/*
- * sets target
- */
-void dconfig_target_set(gchar *newvalue)
-{
-	if (target)
-	{
-		g_free(target);
-	}
-	target = newvalue;
-}
-
-/*
- * gets debugger module index
- */
-int dconfig_module_get()
-{
-	return module;
-}
-
-/*
- * sets debugger module index
- */
-void dconfig_module_set(int newvalue)
-{
-	module = newvalue;
-}
-
-/*
- * gets command line arguments
- */
-gchar* dconfig_args_get()
-{
-	return args;
-}
-
-/*
- * sets command line arguments
- */
-void dconfig_args_set(gchar *newvalue)
-{
-	if (args)
-	{
-		g_free(args);
-	}
-	args = newvalue;
-}
-
-/*
- * gets environment variables
- */
-GList* dconfig_env_get()
-{
-	return env;
-}
-
-/*
- * removes all environment variables
- */
-void dconfig_env_clear()
-{
-	g_list_foreach(env, (GFunc)g_free, NULL);
-	g_list_free(env);
-	env = NULL;
-}
-
-/*
- * gets breakpoints
- */
-GList*	dconfig_breaks_get()
-{
-	return breaks;
-}
-
-/*
- * clears breakpoints
- */
-void dconfig_breaks_clear()
-{
-	g_list_foreach(breaks, (GFunc)g_free, NULL);
-	g_list_free(breaks);
-	breaks = NULL;
-}
-
-/*
- * gets watches
- */
-GList* dconfig_watches_get()
-{
-	return watches;
-}
-
-/*
- * clears watches
- */
-void dconfig_watches_clear()
-{
-	g_list_foreach(watches, (GFunc)g_free, NULL);
-	g_list_free(watches);
-	watches = NULL;
-}
-
-/*
- * clears all config values
- */
-void dconfig_clear()
-{
-	dconfig_target_set(NULL);
-	dconfig_module_set(0);
-	dconfig_args_set(NULL);
-	dconfig_env_clear();
-
-	dconfig_breaks_clear();
-	dconfig_watches_clear();
-}

Modified: trunk/geany-plugins/debugger/src/dconfig.h
===================================================================
--- trunk/geany-plugins/debugger/src/dconfig.h	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/dconfig.h	2011-08-28 15:06:23 UTC (rev 2180)
@@ -18,17 +18,13 @@
  *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  *      MA 02110-1301, USA.
  */
- 
+
+void		dconfig_init();
+void		dconfig_destroy();
+
 gboolean 	dconfig_is_found_at(gchar *folder);
 gboolean 	dconfig_load(gchar *folder);
-gboolean	dconfig_save(gchar *folder);
-void		dconfig_clear();
 
-gchar*	dconfig_target_get();
-int			dconfig_module_get();
-gchar*	dconfig_args_get();
-GList*		dconfig_env_get();
-GList*		dconfig_breaks_get();
-GList*		dconfig_watches_get();
+void		dconfig_set_changed();
 
 

Modified: trunk/geany-plugins/debugger/src/debug.c
===================================================================
--- trunk/geany-plugins/debugger/src/debug.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/debug.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -59,6 +59,7 @@
 #include "calltip.h"
 #include "bptree.h"
 #include "btnpanel.h"
+#include "dconfig.h"
 
 /*
  *  calltip size  
@@ -244,6 +245,8 @@
 		gtk_tree_store_remove(wstore, &iter);
 		if (DBS_STOPPED == debug_state)
 			active_module->remove_watch(internal);
+
+		dconfig_set_changed();
 	}
 	else if (strcmp(oldvalue, striped))
     {
@@ -274,6 +277,8 @@
 			gtk_tree_selection_select_path(selection, _path);
 			gtk_tree_path_free(_path);
 		}
+
+		dconfig_set_changed();
 	}
 	
 	/* free resources */
@@ -339,6 +344,8 @@
 	}
 	else
 		variable_set_name_only(wstore, &newvar, expression);
+
+	dconfig_set_changed();
 }
 
 /* 
@@ -453,6 +460,8 @@
 		/* free references list */
 		g_list_foreach (references, (GFunc)gtk_tree_row_reference_free, NULL);
 		g_list_free (references);
+
+		dconfig_set_changed();
 	}
 
 	/* free rows list */
@@ -499,6 +508,7 @@
 				else
 					variable_set_name_only(wstore, &newvar, expression);
 
+				dconfig_set_changed();
 			}
 
 			g_free(expression);
@@ -1014,7 +1024,7 @@
  * arguments:
  * 		modulename - debug module name
  */
-int debug_get_module_index(gchar *modulename)
+int debug_get_module_index(const gchar *modulename)
 {
 	int _index = 0;
 	while (modules[_index].title)
@@ -1059,7 +1069,7 @@
 	if (DBS_IDLE == debug_state)
 	{
 		/* init selected debugger  module */
-	    if((active_module = modules[tpage_get_module_index()].module)->init(&callbacks))
+	    if((active_module = modules[tpage_get_debug_module_index()].module)->init(&callbacks))
 		{
 			/* gets parameters from the target page */
 			gchar *target = g_strstrip(tpage_get_target());

Modified: trunk/geany-plugins/debugger/src/debug.h
===================================================================
--- trunk/geany-plugins/debugger/src/debug.h	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/debug.h	2011-08-28 15:06:23 UTC (rev 2180)
@@ -47,7 +47,7 @@
 void			debug_request_interrupt(bs_callback cb, breakpoint* bp, break_set_activity flags);
 gchar*		debug_error_message();
 GList*			debug_get_modules();
-int				debug_get_module_index(gchar *modulename);
+int				debug_get_module_index(const gchar *modulename);
 gboolean		debug_supports_async_breaks();
 void			debug_destroy();
 gchar*		debug_evaluate_expression(gchar *expression);

Modified: trunk/geany-plugins/debugger/src/plugin.c
===================================================================
--- trunk/geany-plugins/debugger/src/plugin.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/plugin.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -40,7 +40,7 @@
 
 /* These items are set by Geany before plugin_init() is called. */
 GeanyPlugin		*geany_plugin;
-GeanyData			*geany_data;
+GeanyData		*geany_data;
 GeanyFunctions	*geany_functions;
 
 
@@ -121,10 +121,12 @@
 		GTK_NOTEBOOK(geany->main_widgets->message_window_notebook),
 		hbox,
 		gtk_label_new(_("Debug")));
+
+	/* init config */
+	dconfig_init();
 }
 
 
-
 /* Called by Geany to show the plugin's configure dialog. This function is always called after
  * plugin_init() was called.
  * You can omit this function if the plugin doesn't need to be configured.
@@ -160,7 +162,7 @@
 	breaks_destroy();
 
 	/* clears config */
-	dconfig_clear();
+	dconfig_destroy();
 
 	/* release other allocated strings and objects */
 	gtk_widget_destroy(hbox);

Modified: trunk/geany-plugins/debugger/src/stree.c
===================================================================
--- trunk/geany-plugins/debugger/src/stree.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/stree.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -69,6 +69,54 @@
 static gboolean handle_selection = TRUE;
 
 /*
+ *  Handles same tree row click to open frame position
+ */
+static gboolean on_msgwin_button_press(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
+{
+	if (event->type == GDK_BUTTON_PRESS)
+	{
+		GtkTreePath *pressed_path = NULL;
+		if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree), (int)event->x, (int)event->y, &pressed_path, NULL, NULL, NULL))
+		{
+			GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
+			GList *rows = gtk_tree_selection_get_selected_rows(selection, &model);
+			GtkTreePath *selected_path = (GtkTreePath*)rows->data;
+
+			if (!gtk_tree_path_compare(pressed_path, selected_path))
+			{
+				GtkTreeIter iter;
+				gtk_tree_model_get_iter (
+					 model,
+					 &iter,
+					 pressed_path);
+
+				gchar *file;
+				int line;
+				gtk_tree_model_get (
+					model,
+					&iter,
+					S_FILEPATH, &file,
+					S_LINE, &line,
+					-1);
+				
+				/* check if file name is not empty and we have source files for the frame */
+				if (strlen(file) && GPOINTER_TO_INT(g_hash_table_lookup(frames, (gpointer)file)))
+					callback(file, line);
+				
+				g_free(file);
+			}
+
+			g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
+			g_list_free (rows);
+
+			gtk_tree_path_free(pressed_path);
+		}
+	}
+
+	return FALSE;
+}
+
+/*
  *  Tree view selection changed callback
  */
 void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_data)
@@ -131,6 +179,10 @@
 	g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree))), "changed",
 	                 G_CALLBACK (on_selection_changed), NULL);
 
+	/* for clicking on already selected frame */
+	g_signal_connect(tree, "button-press-event",
+					G_CALLBACK(on_msgwin_button_press), NULL);
+
 	/* creating columns */
 	GtkCellRenderer		*renderer;
 	GtkTreeViewColumn	*column;

Modified: trunk/geany-plugins/debugger/src/tpage.c
===================================================================
--- trunk/geany-plugins/debugger/src/tpage.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/tpage.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -97,6 +97,22 @@
 GtkCellRenderer *renderer_value = NULL;
 
 /*
+ * tells config to update when target arguments change 
+ */
+void on_arguments_changed(GtkTextBuffer *textbuffer, gpointer user_data)
+{
+	dconfig_set_changed();
+}
+
+/*
+ * tells config to update when target changes 
+ */
+void on_target_changed (GtkEditable *editable, gpointer user_data)
+{
+	dconfig_set_changed();
+}
+
+/*
  * delete selected rows from env variables page 
  */
 void delete_selected_rows()
@@ -193,7 +209,10 @@
 	guint keyval = ((GdkEventKey*)event)->keyval;
 	
 	if (GDK_Delete == keyval)
+	{
 		delete_selected_rows();
+		dconfig_set_changed();
+	}
 
 	return GDK_Tab == keyval;
 }
@@ -247,7 +266,7 @@
 static void on_value_changed(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data)
 {
 	GtkTreeIter  iter;
-    GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
+	GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
     
 	gboolean empty = !gtk_tree_path_compare(tree_path, gtk_tree_row_reference_get_path(empty_row));
 
@@ -269,6 +288,8 @@
 			if (dialogs_show_question(_("Delete variable?")))
 			{
 				delete_selected_rows();
+				dconfig_set_changed();
+
 				gtk_widget_grab_focus(envtree);
 			}
 		}
@@ -290,6 +311,7 @@
 				add_empty_row();
 			
 			g_object_set (renderer_value, "editable", FALSE, NULL);
+			dconfig_set_changed();
 		}
 		
 		g_free(oldvalue);
@@ -345,7 +367,7 @@
 static void on_name_changed(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data)
 {
 	GtkTreeIter  iter;
-    GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
+	GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
     
 	gboolean empty = !gtk_tree_path_compare(tree_path, gtk_tree_row_reference_get_path(empty_row));
 
@@ -369,6 +391,8 @@
 		if (!empty && dialogs_show_question(_("Delete variable?")))
 		{
 			delete_selected_rows();
+			dconfig_set_changed();
+
 			gtk_widget_grab_focus(envtree);
 		}
 	}
@@ -381,6 +405,10 @@
 			entering_new_var = TRUE;
 			gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(envtree), tree_path, column_value, renderer_value, TRUE);
 		}
+		if (!empty)
+		{
+			dconfig_set_changed();
+		}
 	}
 	
 	gtk_tree_path_free(tree_path);
@@ -388,37 +416,49 @@
 	g_free(striped);
 }
 
-void tpage_read_config()
+/*
+ * set target 
+ */
+void tpage_set_target(const gchar *newvalue)
 {
-	/* remove old values */
-	tpage_clear();
+	gtk_entry_set_text(GTK_ENTRY(targetname), newvalue);
+}
 
-	/* target */
-	gtk_entry_set_text(GTK_ENTRY(targetname), dconfig_target_get());
+/*
+ * set debugger 
+ */
+void tpage_set_debugger(const gchar *newvalue)
+{
+	int module = debug_get_module_index(newvalue);
+	if (-1 == module)
+	{
+		module = 0;
+	}
+	gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_debugger), module);
+}
 
-	/* debugger */
-	gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_debugger), dconfig_module_get());
-
-	/* arguments */
+/*
+ * set command line 
+ */
+void tpage_set_commandline(const gchar *newvalue)
+{
 	GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
-	gtk_text_buffer_set_text(buffer, dconfig_args_get(), -1);
+	gtk_text_buffer_set_text(buffer, newvalue, -1);
+}
 
-	/* environment */
-	GList *env = dconfig_env_get();
-	while (env)
-	{
-		gchar *name = (gchar*)env->data;
-		env = env->next;
-		gchar *value = (gchar*)env->data;
-
-		GtkTreeIter iter;
-		gtk_list_store_append(store, &iter);
-		gtk_list_store_set(store, &iter, NAME, name, VALUE, value, -1);
-
-		env = env->next;
-	}
+/*
+ * add environment variable
+ */
+void tpage_add_environment(const gchar *name, const gchar *value)
+{
+	GtkTreeIter iter;
+	gtk_list_store_prepend(store, &iter);
+	gtk_list_store_set(store, &iter, NAME, name, VALUE, value, -1);
 }
 
+/*
+ * removes all data (clears widgets)
+ */
 void tpage_clear()
 {
 	/* target */
@@ -482,7 +522,7 @@
 /*
  * get selected debugger module index
  */
-int tpage_get_module_index()
+int tpage_get_debug_module_index()
 {
 	return gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_debugger));
 }
@@ -570,6 +610,8 @@
 	gtk_container_set_border_width(GTK_CONTAINER(hbox), SPACING);
 
 	targetname = gtk_entry_new ();
+	g_signal_connect(G_OBJECT(targetname), "changed", G_CALLBACK (on_target_changed), NULL);
+	
 	button_browse = gtk_button_new_with_label(_("Browse"));
 	g_signal_connect(G_OBJECT(button_browse), "clicked", G_CALLBACK (on_target_browse_clicked), NULL);
 	
@@ -611,6 +653,9 @@
 	
 	textview = gtk_text_view_new ();
 	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_CHAR);
+
+	GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
+	g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK (on_arguments_changed), NULL);
 	
 	gtk_box_pack_start(GTK_BOX(hbox), textview, TRUE, TRUE, 0);
 	gtk_container_add(GTK_CONTAINER(_frame), hbox);

Modified: trunk/geany-plugins/debugger/src/tpage.h
===================================================================
--- trunk/geany-plugins/debugger/src/tpage.h	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/tpage.h	2011-08-28 15:06:23 UTC (rev 2180)
@@ -21,11 +21,21 @@
 
 void			tpage_init();
 GtkWidget*	tpage_get_widget();
+
 gchar*		tpage_get_target();
+void			tpage_set_target(const gchar *newvalue);
+
 gchar*		tpage_get_debugger();
-int				tpage_get_module_index();
+void			tpage_set_debugger(const gchar *newvalue);
+
+int				tpage_get_debug_module_index();
+
 gchar*		tpage_get_commandline();
+void			tpage_set_commandline(const gchar *newvalue);
+
 GList*			tpage_get_environment();
+void			tpage_add_environment(const gchar *name, const gchar *value);
+
 void			tpage_set_readonly(gboolean readonly);
-void			tpage_read_config();
 void			tpage_clear();
+

Modified: trunk/geany-plugins/debugger/src/wtree.c
===================================================================
--- trunk/geany-plugins/debugger/src/wtree.c	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/wtree.c	2011-08-28 15:06:23 UTC (rev 2180)
@@ -199,18 +199,3 @@
 
 	variable_set_name_only(store, &newvar, watch);
 }
-
-/*
- * reads watches from config
- */
-void wtree_read_config()
-{
-	wtree_remove_all();
-	GList *list = dconfig_watches_get();
-	while(list)
-	{
-		gchar *expression = (gchar*)list->data;
-		wtree_add_watch(expression);
-		list = list->next;
-	}
-}

Modified: trunk/geany-plugins/debugger/src/wtree.h
===================================================================
--- trunk/geany-plugins/debugger/src/wtree.h	2011-08-27 21:52:56 UTC (rev 2179)
+++ trunk/geany-plugins/debugger/src/wtree.h	2011-08-28 15:06:23 UTC (rev 2180)
@@ -29,6 +29,5 @@
 GList*			wtree_get_watches();
 void			wtree_remove_all();
 void			wtree_add_watch(gchar *watch);
-void			wtree_read_config();
 
 

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