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