SF.net SVN: geany-plugins:[2217] trunk/geany-plugins/debugger/src
cesspit at users.sourceforge.net
cesspit at xxxxx
Thu Sep 29 11:05:33 UTC 2011
Revision: 2217
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2217&view=rev
Author: cesspit
Date: 2011-09-29 11:05:32 +0000 (Thu, 29 Sep 2011)
Log Message:
-----------
debugger: debug session is stored in a debugger config, added option to store debug session in a project file
Modified Paths:
--------------
trunk/geany-plugins/debugger/src/Makefile.am
trunk/geany-plugins/debugger/src/breakpoints.c
trunk/geany-plugins/debugger/src/btnpanel.c
trunk/geany-plugins/debugger/src/btnpanel.h
trunk/geany-plugins/debugger/src/callbacks.c
trunk/geany-plugins/debugger/src/callbacks.h
trunk/geany-plugins/debugger/src/dconfig.c
trunk/geany-plugins/debugger/src/dconfig.h
trunk/geany-plugins/debugger/src/debug.c
trunk/geany-plugins/debugger/src/debug.h
trunk/geany-plugins/debugger/src/dpaned.c
trunk/geany-plugins/debugger/src/dpaned.h
trunk/geany-plugins/debugger/src/envtree.c
trunk/geany-plugins/debugger/src/plugin.c
trunk/geany-plugins/debugger/src/tpage.c
Removed Paths:
-------------
trunk/geany-plugins/debugger/src/pconfig.c
trunk/geany-plugins/debugger/src/pconfig.h
Modified: trunk/geany-plugins/debugger/src/Makefile.am
===================================================================
--- trunk/geany-plugins/debugger/src/Makefile.am 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/Makefile.am 2011-09-29 11:05:32 UTC (rev 2217)
@@ -25,8 +25,8 @@
calltip.c \
calltip.h \
dbm_gdb.c \
- dconfig.h \
dconfig.c \
+ dconfig.h \
debug.c \
debug.h \
debug_module.c \
@@ -45,8 +45,6 @@
markers.h \
pixbuf.c \
pixbuf.h \
- pconfig.c \
- pconfig.h \
plugin.c \
stree.c \
stree.h \
Modified: trunk/geany-plugins/debugger/src/breakpoints.c
===================================================================
--- trunk/geany-plugins/debugger/src/breakpoints.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/breakpoints.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -185,7 +185,7 @@
/* add markers, update treeview */
on_add(bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
else
dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -197,7 +197,7 @@
/* remove markers, update treeview */
on_remove(bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
else
dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -208,7 +208,7 @@
{
on_set_hits_count(bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
else
dialogs_show_msgbox(GTK_MESSAGE_ERROR, "%s", debug_error_message());
@@ -219,7 +219,7 @@
{
on_set_condition(bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
else
{
@@ -237,7 +237,7 @@
{
on_switch(bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
else
{
@@ -266,7 +266,7 @@
}
g_list_free(list);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
static void breaks_set_enabled_list_debug(GList *list)
{
@@ -289,7 +289,7 @@
}
g_list_free(list);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
static void breaks_remove_list_debug(GList *list)
{
@@ -304,7 +304,7 @@
}
g_list_free(list);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
/*
@@ -386,7 +386,7 @@
if (DBS_IDLE == state)
{
on_add(bp);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (DBS_STOPPED == state)
breaks_add_debug(bp);
@@ -418,7 +418,7 @@
if (DBS_IDLE == state)
{
on_remove(bp);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (DBS_STOPPED == state)
breaks_remove_debug(bp);
@@ -446,7 +446,7 @@
on_remove_list(list);
g_list_free(list);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (DBS_STOPPED == state)
breaks_remove_list_debug(list);
@@ -486,7 +486,7 @@
{
on_set_enabled_list(breaks, enabled);
g_list_free(breaks);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (DBS_STOPPED == state)
enabled ? breaks_set_enabled_list_debug(breaks) : breaks_set_disabled_list_debug(breaks);
@@ -521,7 +521,7 @@
if (DBS_IDLE == state)
{
on_switch(bp);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (DBS_STOPPED == state)
breaks_switch_debug(bp);
@@ -557,7 +557,7 @@
if (state == DBS_IDLE)
{
on_set_hits_count(bp);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if(state == DBS_STOPPED)
breaks_set_hits_count_debug(bp);
@@ -593,7 +593,7 @@
if (state == DBS_IDLE)
{
on_set_condition(bp);
- dconfig_set_changed(TRUE);
+ config_set_debug_changed();
}
else if (state == DBS_STOPPED)
breaks_set_condition_debug(bp);
@@ -623,7 +623,7 @@
g_tree_insert(tree, GINT_TO_POINTER(line_to), bp);
/* mark config for saving */
- dconfig_set_changed();
+ config_set_debug_changed();
}
}
}
Modified: trunk/geany-plugins/debugger/src/btnpanel.c
===================================================================
--- trunk/geany-plugins/debugger/src/btnpanel.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/btnpanel.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -40,10 +40,7 @@
#include "btnpanel.h"
#define CP_BUTTONS_PAD 5
-#define CONFIG_NAME ".debugger"
-static GtkWidget *loadbtn = NULL;
-
static GtkWidget *runbtn = NULL;
static GtkWidget *restartbtn = NULL;
static GtkWidget *stopbtn = NULL;
@@ -56,45 +53,7 @@
static GtkWidget *tabbtn = NULL;
static GtkWidget *optbtn = NULL;
-static gboolean debugging = FALSE;
-
/*
- * load config button handler
- */
-void on_config_load(GtkButton *button, gpointer user_data)
-{
- GeanyDocument *doc = document_get_current();
- if (!doc && !doc->real_path)
- {
- dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Error reading config file"));
- }
- else
- {
- gchar *folder = g_path_get_dirname(DOC_FILENAME(doc));
- if (!dconfig_load(folder))
- {
- dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Error reading config file"));
- }
- g_free(folder);
- }
-}
-
-/*
- * clear config values button handler
- */
-void on_config_clear(GtkButton *button, gpointer user_data)
-{
- /* target page */
- tpage_clear();
-
- /* breakpoints */
- breaks_remove_all();
-
- /* watches */
- wtree_remove_all();
-}
-
-/*
* calls settings dialog
*/
void on_settings(GtkButton *button, gpointer user_data)
@@ -121,7 +80,6 @@
GtkWidget* btnpanel_create(on_toggle cb)
{
GtkWidget *vbox = gtk_vbox_new(FALSE, CP_BUTTONS_PAD);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 7);
GtkWidget *hbutton_box = gtk_hbox_new(FALSE, CP_BUTTONS_PAD);
@@ -167,78 +125,25 @@
gtk_box_pack_start(GTK_BOX(hbutton_box), runcursorbtn, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbutton_box, FALSE, TRUE, 0);
- GtkWidget *vbox_panels_buttons = gtk_vbox_new(FALSE, 0);
- GtkWidget *vbutton_box = gtk_vbox_new(TRUE, CP_BUTTONS_PAD);
+ optbtn = create_stock_button(GTK_STOCK_PREFERENCES, _("Settings"));
+ g_signal_connect(G_OBJECT(optbtn), "clicked", G_CALLBACK (on_settings), NULL);
+ gtk_box_pack_end(GTK_BOX(vbox), optbtn, FALSE, FALSE, 0);
- loadbtn = create_stock_button(GTK_STOCK_OPEN, _("Load settings"));
- 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);
-
- 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);
-
- vbutton_box = gtk_vbox_new(TRUE, CP_BUTTONS_PAD);
- tabbtn = create_toggle_button("tabs.gif", _("Tabs"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tabbtn), dpaned_get_tabbed());
+ tabbtn = create_toggle_button("tabs.gif", _("Two panel mode"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tabbtn), config_get_tabbed());
g_signal_connect(G_OBJECT(tabbtn), "toggled", G_CALLBACK(cb), NULL);
- gtk_box_pack_start(GTK_BOX(vbox), tabbtn, FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(vbox), tabbtn, FALSE, FALSE, 0);
- optbtn = create_stock_button(GTK_STOCK_PREFERENCES, "Настройки");
- g_signal_connect(G_OBJECT(optbtn), "clicked", G_CALLBACK (on_settings), NULL);
- gtk_box_pack_start(GTK_BOX(vbox), optbtn, FALSE, FALSE, 0);
-
btnpanel_set_debug_state(DBS_IDLE);
return vbox;
}
/*
- * disable load/save config buttons on document close
- */
-void btnpanel_on_document_close()
-{
- gtk_widget_set_sensitive(loadbtn, FALSE);
-}
-
-/*
- * enable load/save config buttons on document activate
- * if page is not readonly and have config
- */
-void btnpanel_on_document_activate(GeanyDocument *doc)
-{
- if (debugging)
- return;
-
- if (!doc || !doc->real_path)
- {
- btnpanel_on_document_close();
- return;
- }
-
- 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;
- gtk_widget_set_sensitive(loadbtn, !stat(config, &st));
-
- g_free(config);
-}
-
-/*
- * set buttons sensitive based on whether it is a config file
- * in the current folder
- */
-void btnpanel_set_have_config(gboolean haveconfig)
-{
- gtk_widget_set_sensitive(loadbtn, haveconfig);
-}
-
-/*
* set buttons sensitive based on debugger state
*/
void btnpanel_set_debug_state(enum dbs state)
{
- debugging = (DBS_IDLE != state);
-
if (DBS_STOPPED == state)
{
set_button_image(runbtn, "continue.png");
@@ -258,13 +163,4 @@
gtk_widget_set_sensitive(stepinbtn, DBS_STOPPED == state);
gtk_widget_set_sensitive(stepoutbtn, DBS_STOPPED == state);
gtk_widget_set_sensitive(runcursorbtn, DBS_STOPPED == state);
-
- if (DBS_IDLE == state)
- {
- btnpanel_on_document_activate(document_get_current());
- }
- else
- {
- gtk_widget_set_sensitive(loadbtn, FALSE);
- }
}
Modified: trunk/geany-plugins/debugger/src/btnpanel.h
===================================================================
--- trunk/geany-plugins/debugger/src/btnpanel.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/btnpanel.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -22,8 +22,4 @@
typedef void (*on_toggle)(GtkToggleButton *button, gpointer user_data);
GtkWidget* btnpanel_create(on_toggle cb);
-void btnpanel_on_document_close();
-void btnpanel_on_document_activate(GeanyDocument *doc);
-
-void btnpanel_set_have_config(gboolean haveconfig);
void btnpanel_set_debug_state(enum dbs state);
Modified: trunk/geany-plugins/debugger/src/callbacks.c
===================================================================
--- trunk/geany-plugins/debugger/src/callbacks.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/callbacks.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -108,14 +108,6 @@
}
/*
- * Occures on closing document
- */
-void on_document_close(GObject *obj, GeanyDocument *doc, gpointer user_data)
-{
- btnpanel_on_document_close();
-}
-
-/*
* Occures on saving document
*/
void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_data)
@@ -134,8 +126,6 @@
_unexisting_file = FALSE;
}
-
- btnpanel_on_document_activate(doc);
}
/*
@@ -146,14 +136,6 @@
}
/*
- * Occures on document activating
- */
-void on_document_activate(GObject *obj, GeanyDocument *doc, gpointer user_data)
-{
- btnpanel_on_document_activate(doc);
-}
-
-/*
* Occures on document opening.
* Used to set breaks markers
*/
@@ -172,11 +154,6 @@
/* 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);
-
/* if debug is active - tell the debug module that a file was opened */
if (DBS_IDLE != debug_get_state())
debug_on_file_open(doc);
@@ -286,7 +263,7 @@
iter = iter->next;
}
- dconfig_set_changed();
+ config_set_debug_changed();
g_list_free(breaks);
}
Modified: trunk/geany-plugins/debugger/src/callbacks.h
===================================================================
--- trunk/geany-plugins/debugger/src/callbacks.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/callbacks.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -20,8 +20,6 @@
*/
void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_data);
-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);
Modified: trunk/geany-plugins/debugger/src/dconfig.c
===================================================================
--- trunk/geany-plugins/debugger/src/dconfig.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/dconfig.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -2,7 +2,7 @@
*
* dconfig.c
*
- * Copyright 2010 Alexander Petukhov <devel(at)apetukhov.ru>
+ * Copyright 2011 Alexander Petukhov <devel(at)apetukhov.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,18 +20,20 @@
* MA 02110-1301, USA.
*/
- /*
- * Working with debugger configs.
+/*
+ * Plugin panel and debug session configs
*/
-
+
+#include <unistd.h>
#include <sys/stat.h>
-#include <memory.h>
+#include <glib/gstdio.h>
+
#include "geanyplugin.h"
-extern GeanyFunctions *geany_functions;
-extern GeanyPlugin *geany_plugin;
+extern GeanyData *geany_data;
#include "dconfig.h"
+#include "tabs.h"
#include "breakpoints.h"
#include "debug.h"
#include "watch_model.h"
@@ -39,52 +41,233 @@
#include "tpage.h"
#include "bptree.h"
-#define CONFIG_NAME ".debugger"
+/* keyfile debug group name */
+#define DEBUGGER_GROUP "debugger"
+/* saving interval */
+#define SAVING_INTERVAL 2000000
-/* config file markers */
-#define ENVIRONMENT_MARKER "[ENV]"
-#define BREAKPOINTS_MARKER "[BREAK]"
-#define WATCH_MARKER "[WATCH]"
+/* check button for a configure dialog */
+static GtkWidget *save_to_project_btn = NULL;
-/* maximus config file line length */
-#define MAXLINE 1000
+/* plugin config file path */
+static gchar *plugin_config_path = NULL;
-/* saving interval */
-#define SAVING_INTERVAL 2000000
+/* current debug session store */
+static debug_store dstore = DEBUG_STORE_PLUGIN;
+/* GKeyFile's for a project and plugin config */
+static GKeyFile *keyfile_plugin = NULL;
+static GKeyFile *keyfile_project = NULL;
+
+/* flag that indicates that debug session is being loaded to controls
+ * to prevent change state to modified from GUI callbacks */
+static gboolean debug_config_loading = FALSE;
+
/* saving thread staff */
static GMutex *change_config_mutex;
static GCond *cond;
static GThread *saving_thread;
-static gboolean config_changed = FALSE;
-static gboolean modifyable = FALSE;
-/* the folder, config has been loaded from */
-static gchar *current_folder = NULL;
+/* flags that indicate that part of a config has been changed and
+ * is going to be saved on the savng thread */
+static gboolean debug_config_changed = FALSE;
+static gboolean panel_config_changed = FALSE;
-/* forward declaration */
-gboolean dconfig_save(gchar *folder);
+/*
+ * creates a copy of a specified keyfile
+ */
+GKeyFile *create_copy_keyfile(GKeyFile *keyfile)
+{
+ gchar *path;
+ close(g_file_open_tmp(NULL, &path, NULL));
+
+ gchar *config_data = g_key_file_to_data(keyfile, NULL, NULL);
+ g_file_set_contents(path, config_data, -1, NULL);
+ g_free(config_data);
+
+ GKeyFile *copy = g_key_file_new();
+ g_key_file_load_from_file(copy, path, G_KEY_FILE_NONE, NULL);
+ g_remove(path);
+ g_free(path);
+
+ return copy;
+}
+
/*
- * reads line from a file
+ * loads debug session from a keyfile and updates GUI
*/
-int readline(FILE *file, gchar *buffer, int buffersize)
+void debug_load_from_keyfile(GKeyFile *keyfile)
{
- gchar c;
- int read_count = 0;
- while (buffersize && fread(&c, 1, 1, file) && '\n' != c)
+ debug_config_loading = TRUE;
+
+ gchar *value;
+ /* target */
+ tpage_set_target(value = g_key_file_get_string(keyfile, DEBUGGER_GROUP, "target", NULL));
+ g_free(value);
+ /* debugger */
+ tpage_set_debugger(value = g_key_file_get_string(keyfile, DEBUGGER_GROUP, "debugger", NULL));
+ g_free(value);
+ /* arguments */
+ tpage_set_commandline(value = g_key_file_get_string(keyfile, DEBUGGER_GROUP, "arguments", NULL));
+ g_free(value);
+
+ int i;
+
+ /* environment */
+ int envcount = g_key_file_get_integer(keyfile, DEBUGGER_GROUP, "envvar_count", NULL);
+ for (i = 0; i < envcount; i++)
{
- buffer[read_count++] = c;
- buffersize--;
+ gchar *env_name_id = g_strdup_printf("envvar_%i_name", i);
+ gchar *env_value_id = g_strdup_printf("envvar_%i_value", i);
+
+ gchar *name = g_key_file_get_string(keyfile, DEBUGGER_GROUP, env_name_id, NULL);
+ value = g_key_file_get_string(keyfile, DEBUGGER_GROUP, env_value_id, NULL);
+
+ tpage_add_environment(name, value);
+
+ g_free(name);
+ g_free(value);
+
+ g_free(env_name_id);
+ g_free(env_value_id);
}
- buffer[read_count] = '\0';
- return read_count;
+ /* watches */
+ int wcount = g_key_file_get_integer(keyfile, DEBUGGER_GROUP, "watches_count", NULL);
+ for (i = 0; i < wcount; i++)
+ {
+ gchar *watch_id = g_strdup_printf("watch_%i", i);
+ wtree_add_watch(value = g_key_file_get_string(keyfile, DEBUGGER_GROUP, watch_id, NULL));
+ g_free(value);
+ g_free(watch_id);
+ }
+
+ /* breakpoints */
+ int bcount = g_key_file_get_integer(keyfile, DEBUGGER_GROUP, "breaks_count", NULL);
+ for (i = 0; i < bcount; i++)
+ {
+ gchar *break_file_id = g_strdup_printf("break_%i_file", i);
+ gchar *break_line_id = g_strdup_printf("break_%i_line", i);
+ gchar *break_condition_id = g_strdup_printf("break_%i_condition", i);
+ gchar *break_hits_id = g_strdup_printf("break_%i_hits_count", i);
+ gchar *break_enabled_id = g_strdup_printf("break_%i_enabled", i);
+
+ gchar *file = g_key_file_get_string(keyfile, DEBUGGER_GROUP, break_file_id, NULL);
+ int line = g_key_file_get_integer(keyfile, DEBUGGER_GROUP, break_line_id, NULL);
+ gchar *condition = g_key_file_get_string(keyfile, DEBUGGER_GROUP, break_condition_id, NULL);
+ int hits_count = g_key_file_get_integer(keyfile, DEBUGGER_GROUP, break_hits_id, NULL);
+ gboolean enabled = g_key_file_get_boolean(keyfile, DEBUGGER_GROUP, break_enabled_id, NULL);
+
+ breaks_add(file, line, condition, enabled, hits_count);
+
+ g_free(break_file_id);
+ g_free(break_line_id);
+ g_free(break_condition_id);
+ g_free(break_hits_id);
+ g_free(break_enabled_id);
+
+ g_free(file);
+ g_free(condition);
+ }
+ bptree_update_file_nodes();
+
+ debug_config_loading = FALSE;
}
/*
- * function for a config file background saving if changed
+ * saves debug session to a keyfile using values from GUI
*/
+void save_to_keyfile(GKeyFile *keyfile)
+{
+ g_key_file_remove_group(keyfile, DEBUGGER_GROUP, NULL);
+
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "target", tpage_get_target());
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "debugger", tpage_get_debugger());
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "arguments", tpage_get_commandline());
+
+ /* environment */
+ GList *_env = tpage_get_environment();
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "envvar_count", g_list_length(_env) / 2);
+ GList *iter = _env;
+ int env_index = 0;
+ while(iter)
+ {
+ gchar *name = (gchar*)iter->data;
+ iter = iter->next;
+ gchar *value = (gchar*)iter->data;
+
+ gchar *env_name_id = g_strdup_printf("envvar_%i_name", env_index);
+ gchar *env_value_id = g_strdup_printf("envvar_%i_value", env_index);
+
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, env_name_id, name);
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, env_value_id, value);
+
+ g_free(env_name_id);
+ g_free(env_value_id);
+
+ env_index++;
+ iter = iter->next;
+ }
+ g_list_foreach(_env, (GFunc)g_free, NULL);
+ g_list_free(_env);
+
+ /* watches */
+ GList *watches = wtree_get_watches();
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "watches_count", g_list_length(watches));
+ int watch_index = 0;
+ GList *biter = watches;
+ while (biter)
+ {
+ gchar *watch = (gchar*)biter->data;
+ gchar *watch_id = g_strdup_printf("watch_%i", watch_index);
+
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, watch_id, watch);
+
+ g_free(watch_id);
+
+ watch_index++;
+ biter = biter->next;
+ }
+ g_list_foreach(watches, (GFunc)g_free, NULL);
+ g_list_free(watches);
+
+ /* breakpoints */
+ GList *_breaks = breaks_get_all();
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "breaks_count", g_list_length(_breaks));
+ int bp_index = 0;
+ biter = _breaks;
+ while (biter)
+ {
+ breakpoint *bp = (breakpoint*)biter->data;
+
+ gchar *break_file_id = g_strdup_printf("break_%i_file", bp_index);
+ gchar *break_line_id = g_strdup_printf("break_%i_line", bp_index);
+ gchar *break_condition_id = g_strdup_printf("break_%i_condition", bp_index);
+ gchar *break_hits_id = g_strdup_printf("break_%i_hits_count", bp_index);
+ gchar *break_enabled_id = g_strdup_printf("break_%i_enabled", bp_index);
+
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, break_file_id, bp->file);
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, break_line_id, bp->line);
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, break_condition_id, bp->condition);
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, break_hits_id, bp->hitscount);
+ g_key_file_set_boolean(keyfile, DEBUGGER_GROUP, break_enabled_id, bp->enabled);
+
+ g_free(break_file_id);
+ g_free(break_line_id);
+ g_free(break_condition_id);
+ g_free(break_hits_id);
+ g_free(break_enabled_id);
+
+ bp_index++;
+ biter = biter->next;
+ }
+ g_list_free(_breaks);
+}
+
+/*
+ * function for config files background saving
+ */
static gpointer saving_thread_func(gpointer data)
{
GTimeVal interval;
@@ -92,11 +275,38 @@
do
{
g_mutex_lock(change_config_mutex);
- if (config_changed && current_folder)
+
+ if (
+ panel_config_changed ||
+ (debug_config_changed && DEBUG_STORE_PLUGIN == dstore)
+ )
{
- dconfig_save(current_folder);
- config_changed = FALSE;
+ /* if all saving is going to be done to a plugin keyfile */
+ if (debug_config_changed)
+ {
+ save_to_keyfile(keyfile_plugin);
+ debug_config_changed = FALSE;
+ }
+
+ gchar *config_data = g_key_file_to_data(keyfile_plugin, NULL, NULL);
+ g_file_set_contents(plugin_config_path, config_data, -1, NULL);
+ g_free(config_data);
+
+ panel_config_changed = FALSE;
}
+
+ if (debug_config_changed && DEBUG_STORE_PROJECT == dstore)
+ {
+ /* if debug is saved into a project and has been changed */
+ save_to_keyfile(keyfile_project);
+
+ gchar *config_data = g_key_file_to_data(keyfile_project, NULL, NULL);
+ g_file_set_contents(geany_data->app->project->file_name, config_data, -1, NULL);
+ g_free(config_data);
+
+ debug_config_changed = FALSE;
+ }
+
g_mutex_unlock(change_config_mutex);
g_get_current_time(&interval);
@@ -109,249 +319,357 @@
}
/*
- * set "changed" flag to save it on "saving_thread" thread
+ * set "debug changed" flag to save it on "saving_thread" thread
*/
-void dconfig_set_changed()
+void config_set_debug_changed()
{
- if (!modifyable)
+ if (!debug_config_loading)
{
g_mutex_lock(change_config_mutex);
- config_changed = TRUE;
+ debug_config_changed = TRUE;
g_mutex_unlock(change_config_mutex);
}
}
/*
- * init config
+ * set one or several panel config values
*/
-void dconfig_init()
+void config_set_panel(int config_part, gpointer config_value, ...)
{
+ g_mutex_lock(change_config_mutex);
+
+ va_list ap;
+ va_start(ap, config_value);
+
+ while(config_part)
+ {
+ switch (config_part)
+ {
+ case CP_TABBED_MODE:
+ {
+ g_key_file_set_boolean(keyfile_plugin, "tabbed_mode", "enabled", (gboolean)config_value);
+ break;
+ }
+ case CP_OT_TABS:
+ {
+ int *array = (int*)config_value;
+ g_key_file_set_integer_list(keyfile_plugin, "one_panel_mode", "tabs", array + 1, array[0]);
+ break;
+ }
+ case CP_OT_SELECTED:
+ {
+ g_key_file_set_integer(keyfile_plugin, "one_panel_mode", "selected_tab_index", (int)config_value);
+ break;
+ }
+ case CP_TT_LTABS:
+ {
+ int *array = (int*)config_value;
+ g_key_file_set_integer_list(keyfile_plugin, "two_panels_mode", "left_tabs", array + 1, array[0]);
+ break;
+ }
+ case CP_TT_LSELECTED:
+ {
+ g_key_file_set_integer(keyfile_plugin, "two_panels_mode", "left_selected_tab_index", (int)config_value);
+ break;
+ }
+ case CP_TT_RTABS:
+ {
+ int *array = (int*)config_value;
+ g_key_file_set_integer_list(keyfile_plugin, "two_panels_mode", "right_tabs", array + 1, array[0]);
+ break;
+ }
+ case CP_TT_RSELECTED:
+ {
+ g_key_file_set_integer(keyfile_plugin, "two_panels_mode", "right_selected_tab_index", (int)config_value);
+ break;
+ }
+ }
+
+ config_part = va_arg(ap, int);
+ if (config_part)
+ {
+ config_value = va_arg(ap, gpointer);
+ }
+ }
+
+ panel_config_changed = TRUE;
+ g_mutex_unlock(change_config_mutex);
+}
+
+/*
+ * set default debug session values to a keyfile
+ */
+void config_set_debug_defaults(GKeyFile *keyfile)
+{
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "target", "");
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "debugger", "");
+ g_key_file_set_string(keyfile, DEBUGGER_GROUP, "arguments", "");
+
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "envvar_count", 0);
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "watches_count", 0);
+ g_key_file_set_integer(keyfile, DEBUGGER_GROUP, "breaks_count", 0);
+}
+
+/*
+ * set default panel config values in a GKeyFile
+ */
+void config_set_panel_defaults(GKeyFile *keyfile)
+{
+ g_key_file_set_boolean(keyfile_plugin, "tabbed_mode", "enabled", FALSE);
+
+ int all_tabs[] = { TID_TARGET, TID_BREAKS, TID_AUTOS, TID_WATCH, TID_STACK, TID_TERMINAL, TID_MESSAGES };
+ g_key_file_set_integer_list(keyfile, "one_panel_mode", "tabs", all_tabs, sizeof(all_tabs) / sizeof(int));
+ g_key_file_set_integer(keyfile, "one_panel_mode", "selected_tab_index", 0);
+
+ int left_tabs[] = { TID_TARGET, TID_BREAKS, TID_AUTOS, TID_WATCH };
+ g_key_file_set_integer_list(keyfile, "two_panels_mode", "left_tabs", left_tabs, sizeof(left_tabs) / sizeof(int));
+ g_key_file_set_integer(keyfile, "two_panels_mode", "left_selected_tab_index", 0);
+ int right_tabs[] = { TID_STACK, TID_TERMINAL, TID_MESSAGES };
+ g_key_file_set_integer_list(keyfile, "two_panels_mode", "right_tabs", right_tabs, sizeof(right_tabs) / sizeof(int));
+ g_key_file_set_integer(keyfile, "two_panels_mode", "right_selected_tab_index", 0);
+
+ g_key_file_set_boolean(keyfile, "saving_settings", "save_to_project", FALSE);
+}
+
+/*
+ * initialize
+ */
+void config_init()
+{
+ /* read config */
+ gchar *config_dir = g_build_path(G_DIR_SEPARATOR_S, geany_data->app->configdir, "plugins", "debugger", NULL);
+ plugin_config_path = g_build_path(G_DIR_SEPARATOR_S, config_dir, "debugger.conf", NULL);
+
+ g_mkdir_with_parents(config_dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ g_free(config_dir);
+
+ keyfile_plugin = g_key_file_new();
+ if (!g_key_file_load_from_file(keyfile_plugin, plugin_config_path, G_KEY_FILE_NONE, NULL))
+ {
+ config_set_panel_defaults(keyfile_plugin);
+ gchar *data = g_key_file_to_data(keyfile_plugin, NULL, NULL);
+ g_file_set_contents(plugin_config_path, data, -1, NULL);
+ g_free(data);
+ }
+
change_config_mutex = g_mutex_new();
cond = g_cond_new();
-
saving_thread = g_thread_create(saving_thread_func, NULL, TRUE, NULL);
-}
+}
/*
- * destroys config
+ * destroy
*/
-void dconfig_destroy()
+void config_destroy()
{
g_cond_signal(cond);
/* ??? g_thread_join(saving_thread); */
g_mutex_free(change_config_mutex);
g_cond_free(cond);
+
+ g_free(plugin_config_path);
- if (current_folder)
+ g_key_file_free(keyfile_plugin);
+ if(keyfile_project)
{
- g_free(current_folder);
- current_folder = NULL;
+ g_key_file_free(keyfile_project);
}
}
/*
- * checks whether a config file is founs in the folder
+ * config parts getters
*/
-gboolean dconfig_is_found_at(gchar *folder)
+/* saving option */
+gboolean config_get_save_to_project()
{
- gchar *config = g_build_path(G_DIR_SEPARATOR_S, folder, CONFIG_NAME, NULL);
- gboolean res = g_file_test(config, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR);
- g_free(config);
-
- return res;
+ return g_key_file_get_boolean(keyfile_plugin, "saving_settings", "save_to_project", NULL);
}
+/* panel config */
+gboolean config_get_tabbed()
+{
+ return g_key_file_get_boolean(keyfile_plugin, "tabbed_mode", "enabled", NULL);
+}
+int* config_get_tabs(gsize *length)
+{
+ return g_key_file_get_integer_list(keyfile_plugin, "one_panel_mode", "tabs", length, NULL);
+}
+int config_get_selected_tab_index()
+{
+ return g_key_file_get_integer(keyfile_plugin, "one_panel_mode", "selected_tab_index", NULL);
+}
+int* config_get_left_tabs(gsize *length)
+{
+ return g_key_file_get_integer_list(keyfile_plugin, "two_panels_mode", "left_tabs", length, NULL);
+}
+int config_get_left_selected_tab_index()
+{
+ return g_key_file_get_integer(keyfile_plugin, "two_panels_mode", "left_selected_tab_index", NULL);
+}
+int* config_get_right_tabs(gsize *length)
+{
+ return g_key_file_get_integer_list(keyfile_plugin, "two_panels_mode", "right_tabs", length, NULL);
+}
+int config_get_right_selected_tab_index()
+{
+ return g_key_file_get_integer(keyfile_plugin, "two_panels_mode", "right_selected_tab_index", NULL);
+}
/*
- * loads config from a folder
+ * update GUI fron the store specified
+ * also handles default values insertion in a keyfile if debug section doesn't exist
*/
-gboolean dconfig_load(gchar *folder)
+void config_set_debug_store(debug_store store)
{
- modifyable = TRUE;
- g_mutex_lock(change_config_mutex);
+ dstore = store;
tpage_clear();
wtree_remove_all();
breaks_remove_all();
+
+ GKeyFile *keyfile = DEBUG_STORE_PROJECT == dstore ? keyfile_project : keyfile_plugin;
- if (current_folder)
+ if (!g_key_file_has_group(keyfile, DEBUGGER_GROUP))
{
- 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;
+ config_set_debug_defaults(keyfile);
+ gchar *data = g_key_file_to_data(keyfile, NULL, NULL);
- modifyable = FALSE;
- g_mutex_unlock(change_config_mutex);
+ gchar *file = DEBUG_STORE_PROJECT == dstore ? geany_data->app->project->file_name : plugin_config_path;
+ g_file_set_contents(file, data, -1, NULL);
- return FALSE;
+ g_free(data);
}
+
+ debug_load_from_keyfile(keyfile);
+}
- /* target */
- gchar buffer[FILENAME_MAX];
- if(readline(file, buffer, FILENAME_MAX - 1))
+/*
+ * updates keyfile_project from a current geany project path
+ */
+void config_update_project_keyfile()
+{
+ if (keyfile_project)
{
- tpage_set_target(buffer);
+ g_key_file_free(keyfile_project);
}
+ keyfile_project = g_key_file_new();
+ g_key_file_load_from_file(keyfile_project, geany_data->app->project->file_name, G_KEY_FILE_NONE, NULL);
+}
- /* debugger */
- gchar debugger[FILENAME_MAX];
- if(readline(file, debugger, FILENAME_MAX - 1))
+/*
+ * project open handler
+ */
+void config_on_project_open(GObject *obj, GKeyFile *config, gpointer user_data)
+{
+ config_update_project_keyfile();
+
+ if (config_get_save_to_project())
{
- tpage_set_debugger(debugger);
+ config_set_debug_store(DEBUG_STORE_PROJECT);
}
-
- /* arguments */
- if(readline(file, buffer, FILENAME_MAX - 1))
- {
- tpage_set_commandline(buffer);
- }
+}
- /* breakpoints and environment variables */
- gchar line[MAXLINE];
- while (readline(file, line, MAXLINE))
+/*
+ * project close handler
+ */
+void config_on_project_close(GObject *obj, gpointer user_data)
+{
+ if (config_get_save_to_project())
{
- if (!strcmp(line, BREAKPOINTS_MARKER))
+ if (DBS_IDLE != debug_get_state())
{
- /* file */
- gchar _path[FILENAME_MAX];
- readline(file, _path, MAXLINE);
+ /* stop a debugger and ait for it to be stopped */
+ debug_stop();
- /* line */
- int nline;
- readline(file, line, MAXLINE);
- sscanf(line, "%i", &nline);
-
- /* hitscount */
- int hitscount;
- readline(file, line, MAXLINE);
- sscanf(line, "%d", &hitscount);
-
- /* condition */
- gchar condition[MAXLINE];
- readline(file, condition, MAXLINE);
-
- /* enabled */
- gboolean enabled;
- readline(file, line, MAXLINE);
- sscanf(line, "%d", &enabled);
-
- /* check whether file is available */
- struct stat st;
- if(!stat(_path, &st))
+ while (DBS_IDLE != debug_get_state())
{
- breaks_add(_path, nline, condition, enabled, hitscount);
+ g_main_context_iteration(NULL, FALSE);
}
}
- else if (!strcmp(line, ENVIRONMENT_MARKER))
+
+ config_set_debug_store(DEBUG_STORE_PLUGIN);
+ }
+}
+
+/*
+ * project save handler
+ * handles ne project creation and updatng a project using project properties dialog
+ */
+void config_on_project_save(GObject *obj, GKeyFile *config, gpointer user_data)
+{
+ if (config_get_save_to_project())
+ {
+ if (!g_key_file_has_group(config, DEBUGGER_GROUP))
{
- gchar name[MAXLINE], value[1000];
- if(readline(file, name, MAXLINE) && readline(file, value, MAXLINE))
- {
- tpage_add_environment(name, value);
- }
+ /* no debug group, creating a new project */
+ dstore = DEBUG_STORE_PROJECT;
+
+ /* clear values taken from a plugin */
+ tpage_clear();
+ wtree_remove_all();
+ breaks_remove_all();
+
+ /* set default debug values */
+ config_set_debug_defaults(config);
}
- else if (!strcmp(line, WATCH_MARKER))
+
+ /* update local keyfile */
+ if (keyfile_project)
{
- gchar watch[MAXLINE];
- if(readline(file, watch, MAXLINE))
- {
- wtree_add_watch(watch);
- }
+ g_key_file_free(keyfile_project);
}
+ keyfile_project = create_copy_keyfile(config);
}
-
- bptree_update_file_nodes();
-
- config_changed = FALSE;
-
- modifyable = FALSE;
- g_mutex_unlock(change_config_mutex);
-
- return TRUE;
}
/*
- * saves config to a folder
+ * a configure dialog has been closed
*/
-gboolean dconfig_save(gchar *folder)
+static void on_configure_response(GtkDialog* dialog, gint response, gpointer user_data)
{
- /* open config file */
- gchar *config_file = g_build_path(G_DIR_SEPARATOR_S, folder, CONFIG_NAME, NULL);
-
- FILE *config = fopen(config_file, "w");
- if (config)
+ gboolean newvalue = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(save_to_project_btn));
+ if (newvalue ^ config_get_save_to_project())
{
- /* get target */
- const gchar *_target = tpage_get_target();
- fprintf(config, "%s\n", _target);
-
- /* debugger type */
- gchar *debugger = tpage_get_debugger();
- fprintf(config, "%s\n", debugger);
-
- /* get command line arguments */
- gchar *_args = tpage_get_commandline();
- fprintf(config, "%s\n", _args);
- g_free(_args);
+ g_key_file_set_boolean(keyfile_plugin, "saving_settings", "save_to_project", newvalue);
- /* environment */
- GList *_env = tpage_get_environment();
- GList *iter = _env;
-
- while(iter)
+ g_mutex_lock(change_config_mutex);
+ panel_config_changed = TRUE;
+ g_mutex_unlock(change_config_mutex);
+
+ if (geany_data->app->project)
{
- gchar *name = (gchar*)iter->data;
- iter = iter->next;
- gchar *value = (gchar*)iter->data;
+ if (DBS_IDLE != debug_get_state())
+ {
+ debug_stop();
+
+ while (DBS_IDLE != debug_get_state())
+ {
+ g_main_context_iteration(NULL, FALSE);
+ }
+ }
- fprintf(config, "%s\n", ENVIRONMENT_MARKER);
- fprintf(config, "%s\n%s\n", name, value);
-
- iter = iter->next;
+ config_set_debug_store(newvalue ? DEBUG_STORE_PROJECT : DEBUG_STORE_PLUGIN);
}
-
- /* breakpoints */
- GList *_breaks = breaks_get_all();
- GList *biter = _breaks;
- while (biter)
- {
- breakpoint *bp = (breakpoint*)biter->data;
-
- fprintf(config, "%s\n", BREAKPOINTS_MARKER);
- fprintf(config, "%s\n%i\n%i\n%s\n%i\n",
- bp->file, bp->line, bp->hitscount, bp->condition, bp->enabled);
-
- biter = biter->next;
- }
- g_list_free(_breaks);
- _breaks = NULL;
-
- /* watches */
- GList *cur_watches = wtree_get_watches();
- biter = cur_watches;
- while (biter)
- {
- gchar *watch = (gchar*)biter->data;
-
- fprintf(config, "%s\n", WATCH_MARKER);
- fprintf(config, "%s\n", watch);
-
- biter = biter->next;
- }
- g_list_foreach(cur_watches, (GFunc)g_free, NULL);
- g_list_free(cur_watches);
- cur_watches = NULL;
-
- fclose(config);
}
+}
- g_free(config_file);
+/*
+ * "plugin_configure" signal handler
+ */
+GtkWidget *config_plugin_configure(GtkDialog *dialog)
+{
+ GtkWidget *vbox = gtk_vbox_new(FALSE, 6);
+ GtkWidget *_hbox = gtk_hbox_new(FALSE, 6);
+
+ save_to_project_btn = gtk_check_button_new_with_label(_("Save debug session data to a project"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_to_project_btn), config_get_save_to_project());
- return config ? TRUE : FALSE;
+ gtk_box_pack_start(GTK_BOX(_hbox), save_to_project_btn, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), _hbox, FALSE, FALSE, 0);
+
+ gtk_widget_show_all(vbox);
+
+ g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response), NULL);
+
+ return vbox;
}
Modified: trunk/geany-plugins/debugger/src/dconfig.h
===================================================================
--- trunk/geany-plugins/debugger/src/dconfig.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/dconfig.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -1,7 +1,7 @@
/*
* dconfig.h
*
- * Copyright 2010 Alexander Petukhov <devel(at)apetukhov.ru>
+ * Copyright 2011 Alexander Petukhov <devel(at)apetukhov.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,12 +19,49 @@
* MA 02110-1301, USA.
*/
-void dconfig_init();
-void dconfig_destroy();
+#include <stdarg.h>
-gboolean dconfig_is_found_at(gchar *folder);
-gboolean dconfig_load(gchar *folder);
+/* panel config parts */
+#define CP_TABBED_MODE 1
+#define CP_OT_TABS 2
+#define CP_OT_SELECTED 3
+#define CP_TT_LTABS 4
+#define CP_TT_LSELECTED 5
+#define CP_TT_RTABS 6
+#define CP_TT_RSELECTED 7
-void dconfig_set_changed();
+typedef enum _debug_store {
+ DEBUG_STORE_PLUGIN,
+ DEBUG_STORE_PROJECT
+} debug_store;
+
+void config_init();
+void config_destroy();
+
+void config_set_panel(int config_part, gpointer config_value, ...);
+
+gboolean config_get_save_to_project();
+
+gboolean config_get_tabbed();
+
+int* config_get_tabs(gsize *length);
+int config_get_selected_tab_index();
+
+int* config_get_left_tabs(gsize *length);
+int config_get_left_selected_tab_index();
+
+int* config_get_right_tabs(gsize *length);
+int config_get_right_selected_tab_index();
+
+void config_set_debug_changed();
+void config_set_debug_store(debug_store store);
+
+void config_on_project_open(GObject *obj, GKeyFile *config, gpointer user_data);
+void config_on_project_close(GObject *obj, gpointer user_data);
+void config_on_project_save(GObject *obj, GKeyFile *config, gpointer user_data);
+
+void config_update_project_keyfile();
+
+GtkWidget *config_plugin_configure(GtkDialog *dialog);
Modified: trunk/geany-plugins/debugger/src/debug.c
===================================================================
--- trunk/geany-plugins/debugger/src/debug.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/debug.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -242,7 +242,7 @@
if (DBS_STOPPED == debug_state)
active_module->remove_watch(internal);
- dconfig_set_changed();
+ config_set_debug_changed();
}
else if (strcmp(oldvalue, striped))
{
@@ -274,7 +274,7 @@
gtk_tree_path_free(_path);
}
- dconfig_set_changed();
+ config_set_debug_changed();
}
/* free resources */
@@ -341,7 +341,7 @@
else
variable_set_name_only(wstore, &newvar, expression);
- dconfig_set_changed();
+ config_set_debug_changed();
}
/*
@@ -457,7 +457,7 @@
g_list_foreach (references, (GFunc)gtk_tree_row_reference_free, NULL);
g_list_free (references);
- dconfig_set_changed();
+ config_set_debug_changed();
}
/* free rows list */
@@ -504,7 +504,7 @@
else
variable_set_name_only(wstore, &newvar, expression);
- dconfig_set_changed();
+ config_set_debug_changed();
}
g_free(expression);
@@ -804,11 +804,11 @@
/* enable widgets */
enable_sensitive_widgets(TRUE);
+ /* update buttons panel state */
+ btnpanel_set_debug_state(DBS_IDLE);
+
/* update debug state */
debug_state = DBS_IDLE;
-
- /* update buttons panel state */
- btnpanel_set_debug_state(debug_state);
}
/*
Modified: trunk/geany-plugins/debugger/src/debug.h
===================================================================
--- trunk/geany-plugins/debugger/src/debug.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/debug.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -50,11 +50,11 @@
int debug_get_module_index(const gchar *modulename);
gboolean debug_supports_async_breaks();
void debug_destroy();
-gchar* debug_evaluate_expression(gchar *expression);
+gchar* debug_evaluate_expression(gchar *expression);
gboolean debug_current_instruction_have_sources();
void debug_jump_to_current_instruction();
void debug_on_file_open(GeanyDocument *doc);
-gchar* debug_get_calltip_for_expression(gchar* expression);
+gchar* debug_get_calltip_for_expression(gchar* expression);
GList* debug_get_stack();
void debug_restart();
Modified: trunk/geany-plugins/debugger/src/dpaned.c
===================================================================
--- trunk/geany-plugins/debugger/src/dpaned.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/dpaned.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -38,7 +38,7 @@
#include "debug.h"
#include "btnpanel.h"
#include "stree.h"
-#include "pconfig.h"
+#include "dconfig.h"
#define NOTEBOOK_GROUP 438948394
#define HPANED_BORDER_WIDTH 4
@@ -104,17 +104,17 @@
static void on_page_added(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data)
{
gboolean is_left = (GTK_NOTEBOOK(debug_notebook_left) == notebook);
- gboolean is_tabbed = pconfig_get_tabbed();
+ gboolean is_tabbed = config_get_tabbed();
int *tabs = NULL;
gsize length;
if (!is_tabbed)
- tabs = pconfig_get_tabs(&length);
+ tabs = config_get_tabs(&length);
else if (is_left)
- tabs = pconfig_get_left_tabs(&length);
+ tabs = config_get_left_tabs(&length);
else
- tabs = pconfig_get_right_tabs(&length);
+ tabs = config_get_right_tabs(&length);
int *array = g_malloc((length + 2) * sizeof(int));
int *new_tabs = array + 1;
@@ -135,7 +135,7 @@
array[0] = length + 1;
memcpy(array + 1, new_tabs, length + 1);
- pconfig_set(config_part, array, 0);
+ config_set_panel(config_part, array, 0);
g_free(tabs);
g_free(array);
@@ -147,17 +147,17 @@
static void on_page_reordered(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data)
{
gboolean is_left = (GTK_NOTEBOOK(debug_notebook_left) == notebook);
- gboolean is_tabbed = pconfig_get_tabbed();
+ gboolean is_tabbed = config_get_tabbed();
int *tabs = NULL;
gsize length;
if (!is_tabbed)
- tabs = pconfig_get_tabs(&length);
+ tabs = config_get_tabs(&length);
else if (is_left)
- tabs = pconfig_get_left_tabs(&length);
+ tabs = config_get_left_tabs(&length);
else
- tabs = pconfig_get_right_tabs(&length);
+ tabs = config_get_right_tabs(&length);
int prev_index;
GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(is_left ? debug_notebook_left : debug_notebook_right), page_num);
@@ -200,7 +200,7 @@
array[0] = length;
memcpy(array + 1, tabs, length * sizeof(int));
- pconfig_set(
+ config_set_panel(
config_part_tabs, array,
config_part_selected_index, page_num,
0
@@ -216,17 +216,17 @@
static void on_page_removed(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data)
{
gboolean is_left = (GTK_NOTEBOOK(debug_notebook_left) == notebook);
- gboolean is_tabbed = pconfig_get_tabbed();
+ gboolean is_tabbed = config_get_tabbed();
int *tabs = NULL;
gsize length;
if (!is_tabbed)
- tabs = pconfig_get_tabs(&length);
+ tabs = config_get_tabs(&length);
else if (is_left)
- tabs = pconfig_get_left_tabs(&length);
+ tabs = config_get_left_tabs(&length);
else
- tabs = pconfig_get_right_tabs(&length);
+ tabs = config_get_right_tabs(&length);
memmove(tabs + page_num, tabs + page_num + 1, (length - page_num - 1) * sizeof(int));
memmove(tabs + 1, tabs, (length - 1) * sizeof(int));
@@ -240,7 +240,7 @@
else
config_part = CP_TT_RTABS;
- pconfig_set(config_part, tabs, 0);
+ config_set_panel(config_part, tabs, 0);
g_free(tabs);
}
@@ -251,7 +251,7 @@
static gboolean on_change_current_page(GtkNotebook *notebook, gpointer arg1, guint arg2, gpointer user_data)
{
gboolean is_left = (GTK_NOTEBOOK(debug_notebook_left) == notebook);
- gboolean is_tabbed = pconfig_get_tabbed();
+ gboolean is_tabbed = config_get_tabbed();
int config_part;
if (!is_tabbed)
@@ -261,7 +261,7 @@
else
config_part = CP_TT_RSELECTED;
- pconfig_set(config_part, (gpointer)arg2, 0);
+ config_set_panel(config_part, (gpointer)arg2, 0);
return TRUE;
}
@@ -273,7 +273,6 @@
{
/* create paned */
hpaned = gtk_hpaned_new();
- gtk_container_set_border_width(GTK_CONTAINER(hpaned), HPANED_BORDER_WIDTH);
/* create notebooks */
debug_notebook_left = gtk_notebook_new();
@@ -291,17 +290,14 @@
gtk_paned_add1(GTK_PANED(hpaned), debug_notebook_left);
gtk_paned_add2(GTK_PANED(hpaned), debug_notebook_right);
- /* load config */
- pconfig_init();
-
- gboolean is_tabbed = pconfig_get_tabbed();
+ gboolean is_tabbed = config_get_tabbed();
if (is_tabbed)
{
gsize length;
int *tab_ids, i;
/* left */
- tab_ids = pconfig_get_left_tabs(&length);
+ tab_ids = config_get_left_tabs(&length);
for (i = 0; i < length; i++)
{
GtkWidget *tab = tabs_get_tab((tab_id)tab_ids[i]);
@@ -314,7 +310,7 @@
g_free(tab_ids);
/* right */
- tab_ids = pconfig_get_right_tabs(&length);
+ tab_ids = config_get_right_tabs(&length);
for (i = 0; i < length; i++)
{
GtkWidget *tab = tabs_get_tab((tab_id)tab_ids[i]);
@@ -328,8 +324,8 @@
gtk_widget_show_all(hpaned);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), pconfig_get_left_selected_tab_index());
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_right),pconfig_get_right_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), config_get_left_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_right),config_get_right_selected_tab_index());
}
else
{
@@ -337,7 +333,7 @@
gtk_container_remove(GTK_CONTAINER(hpaned), debug_notebook_right);
gsize length;
- int *tab_ids = pconfig_get_tabs(&length);
+ int *tab_ids = config_get_tabs(&length);
int i;
for (i = 0; i < length; i++)
{
@@ -350,7 +346,7 @@
}
gtk_widget_show_all(hpaned);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), pconfig_get_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), config_get_selected_tab_index());
}
CONNECT_PAGE_SIGNALS();
@@ -363,8 +359,6 @@
void dpaned_destroy()
{
DISCONNECT_PAGE_SIGNALS();
-
- pconfig_destroy();
}
/*
@@ -388,7 +382,7 @@
gtk_container_remove(GTK_CONTAINER(hpaned), debug_notebook_right);
gsize length;
- int *tab_ids = pconfig_get_tabs(&length);
+ int *tab_ids = config_get_tabs(&length);
int i;
for (i = 0; i < length; i++)
{
@@ -404,7 +398,7 @@
}
}
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), pconfig_get_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), config_get_selected_tab_index());
gtk_widget_show_all(hpaned);
}
@@ -414,7 +408,7 @@
g_object_unref(debug_notebook_right);
gsize length;
- int *tab_ids = pconfig_get_right_tabs(&length);
+ int *tab_ids = config_get_right_tabs(&length);
int i;
for (i = 0; i < length; i++)
{
@@ -427,21 +421,13 @@
gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(debug_notebook_right), tab, TRUE);
}
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), pconfig_get_left_selected_tab_index());
- gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_right), pconfig_get_right_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_left), config_get_left_selected_tab_index());
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(debug_notebook_right), config_get_right_selected_tab_index());
gtk_widget_show_all(hpaned);
}
CONNECT_PAGE_SIGNALS();
- pconfig_set(CP_TABBED_MODE, (gpointer)tabbed, 0);
+ config_set_panel(CP_TABBED_MODE, (gpointer)tabbed, 0);
}
-
-/*
- * gets tabbed mode state
- */
-gboolean dpaned_get_tabbed()
-{
- return pconfig_get_tabbed();
-}
Modified: trunk/geany-plugins/debugger/src/dpaned.h
===================================================================
--- trunk/geany-plugins/debugger/src/dpaned.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/dpaned.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -24,4 +24,3 @@
void dpaned_destroy();
GtkWidget* dpaned_get_paned();
void dpaned_set_tabbed(gboolean paned);
-gboolean dpaned_get_tabbed();
Modified: trunk/geany-plugins/debugger/src/envtree.c
===================================================================
--- trunk/geany-plugins/debugger/src/envtree.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/envtree.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -185,7 +185,7 @@
if (GDK_Delete == keyval)
{
delete_selected_rows();
- dconfig_set_changed();
+ config_set_debug_changed();
}
return GDK_Tab == keyval;
@@ -243,7 +243,7 @@
if (dialogs_show_question(_("Delete variable?")))
{
delete_selected_rows();
- dconfig_set_changed();
+ config_set_debug_changed();
gtk_widget_grab_focus(tree);
}
@@ -266,7 +266,7 @@
add_empty_row();
g_object_set (renderer_value, "editable", FALSE, NULL);
- dconfig_set_changed();
+ config_set_debug_changed();
}
g_free(oldvalue);
@@ -346,7 +346,7 @@
if (!empty && dialogs_show_question(_("Delete variable?")))
{
delete_selected_rows();
- dconfig_set_changed();
+ config_set_debug_changed();
gtk_widget_grab_focus(tree);
}
@@ -362,7 +362,7 @@
}
if (!empty)
{
- dconfig_set_changed();
+ config_set_debug_changed();
}
}
Deleted: trunk/geany-plugins/debugger/src/pconfig.c
===================================================================
--- trunk/geany-plugins/debugger/src/pconfig.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/pconfig.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -1,235 +0,0 @@
-/*
- *
- * pconfig.c
- *
- * Copyright 2011 Alexander Petukhov <devel(at)apetukhov.ru>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-/*
- * Debug paned config.
- */
-
-#include <sys/stat.h>
-
-#include "geanyplugin.h"
-extern GeanyFunctions *geany_functions;
-extern GeanyData *geany_data;
-
-#include "pconfig.h"
-#include "tabs.h"
-
-/* config file path */
-static gchar *config_path = NULL;
-
-/* config GKeyFile */
-static GKeyFile *key_file = NULL;
-
-/* saving interval */
-#define SAVING_INTERVAL 2000000
-
-/* saving thread staff */
-static GMutex *change_config_mutex;
-static GCond *cond;
-static GThread *saving_thread;
-static gboolean config_changed = FALSE;
-
-/*
- * function for a config file background saving if changed
- */
-static gpointer saving_thread_func(gpointer data)
-{
- GTimeVal interval;
- GMutex *m = g_mutex_new();
- do
- {
- g_mutex_lock(change_config_mutex);
- if (config_changed)
- {
- gchar *config_data = g_key_file_to_data(key_file, NULL, NULL);
- g_file_set_contents(config_path, config_data, -1, NULL);
- g_free(config_data);
-
- 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 default values in the GKeyFile
- */
-void pconfig_set_defaults(GKeyFile *kf)
-{
- g_key_file_set_boolean(key_file, "tabbed_mode", "enabled", FALSE);
-
- int all_tabs[] = { TID_TARGET, TID_BREAKS, TID_AUTOS, TID_WATCH, TID_STACK, TID_TERMINAL, TID_MESSAGES };
- g_key_file_set_integer_list(key_file, "one_panel_mode", "tabs", all_tabs, sizeof(all_tabs) / sizeof(int));
- g_key_file_set_integer(key_file, "one_panel_mode", "selected_tab_index", 0);
-
- int left_tabs[] = { TID_TARGET, TID_BREAKS, TID_AUTOS, TID_WATCH };
- g_key_file_set_integer_list(key_file, "two_panels_mode", "left_tabs", left_tabs, sizeof(left_tabs) / sizeof(int));
- g_key_file_set_integer(key_file, "two_panels_mode", "left_selected_tab_index", 0);
- int right_tabs[] = { TID_STACK, TID_TERMINAL, TID_MESSAGES };
- g_key_file_set_integer_list(key_file, "two_panels_mode", "right_tabs", right_tabs, sizeof(right_tabs) / sizeof(int));
- g_key_file_set_integer(key_file, "two_panels_mode", "right_selected_tab_index", 0);
-}
-
-/*
- * initialize
- */
-void pconfig_init()
-{
- /* read config */
- gchar *config_dir = g_build_path(G_DIR_SEPARATOR_S, geany_data->app->configdir, "plugins", "debugger", NULL);
- config_path = g_build_path(G_DIR_SEPARATOR_S, config_dir, "debugger.conf", NULL);
-
- g_mkdir_with_parents(config_dir, S_IRUSR | S_IWUSR | S_IXUSR);
- g_free(config_dir);
-
- key_file = g_key_file_new();
- if (!g_key_file_load_from_file(key_file, config_path, G_KEY_FILE_NONE, NULL))
- {
- pconfig_set_defaults(key_file);
- gchar *data = g_key_file_to_data(key_file, NULL, NULL);
- g_file_set_contents(config_path, data, -1, NULL);
- g_free(data);
- }
-
- change_config_mutex = g_mutex_new();
- cond = g_cond_new();
- saving_thread = g_thread_create(saving_thread_func, NULL, TRUE, NULL);
-}
-
-/*
- * destroy
- */
-void pconfig_destroy()
-{
- g_cond_signal(cond);
- /* ??? g_thread_join(saving_thread); */
-
- g_mutex_free(change_config_mutex);
- g_cond_free(cond);
-
- g_free(config_path);
-}
-
-/*
- * set one or several config values
- */
-void pconfig_set(int config_part, gpointer config_value, ...)
-{
- g_mutex_lock(change_config_mutex);
-
- va_list ap;
- va_start(ap, config_value);
-
- while(config_part)
- {
- switch (config_part)
- {
- case CP_TABBED_MODE:
- {
- g_key_file_set_boolean(key_file, "tabbed_mode", "enabled", (gboolean)config_value);
- break;
- }
- case CP_OT_TABS:
- {
- int *array = (int*)config_value;
- g_key_file_set_integer_list(key_file, "one_panel_mode", "tabs", array + 1, array[0]);
- break;
- }
- case CP_OT_SELECTED:
- {
- g_key_file_set_integer(key_file, "one_panel_mode", "selected_tab_index", (int)config_value);
- break;
- }
- case CP_TT_LTABS:
- {
- int *array = (int*)config_value;
- g_key_file_set_integer_list(key_file, "two_panels_mode", "left_tabs", array + 1, array[0]);
- break;
- }
- case CP_TT_LSELECTED:
- {
- g_key_file_set_integer(key_file, "two_panels_mode", "left_selected_tab_index", (int)config_value);
- break;
- }
- case CP_TT_RTABS:
- {
- int *array = (int*)config_value;
- g_key_file_set_integer_list(key_file, "two_panels_mode", "right_tabs", array + 1, array[0]);
- break;
- }
- case CP_TT_RSELECTED:
- {
- g_key_file_set_integer(key_file, "two_panels_mode", "right_selected_tab_index", (int)config_value);
- break;
- }
- }
-
- config_part = va_arg(ap, int);
- if (config_part)
- {
- config_value = va_arg(ap, gpointer);
- }
- }
-
- config_changed = TRUE;
- g_mutex_unlock(change_config_mutex);
-}
-
-/*
- * config parts getters
- */
-
-gboolean pconfig_get_tabbed()
-{
- return g_key_file_get_boolean(key_file, "tabbed_mode", "enabled", NULL);
-}
-int* pconfig_get_tabs(gsize *length)
-{
- return g_key_file_get_integer_list(key_file, "one_panel_mode", "tabs", length, NULL);
-}
-int pconfig_get_selected_tab_index()
-{
- return g_key_file_get_integer(key_file, "one_panel_mode", "selected_tab_index", NULL);
-}
-int* pconfig_get_left_tabs(gsize *length)
-{
- return g_key_file_get_integer_list(key_file, "two_panels_mode", "left_tabs", length, NULL);
-}
-int pconfig_get_left_selected_tab_index()
-{
- return g_key_file_get_integer(key_file, "two_panels_mode", "left_selected_tab_index", NULL);
-}
-int* pconfig_get_right_tabs(gsize *length)
-{
- return g_key_file_get_integer_list(key_file, "two_panels_mode", "right_tabs", length, NULL);
-}
-int pconfig_get_right_selected_tab_index()
-{
- return g_key_file_get_integer(key_file, "two_panels_mode", "right_selected_tab_index", NULL);
-}
Deleted: trunk/geany-plugins/debugger/src/pconfig.h
===================================================================
--- trunk/geany-plugins/debugger/src/pconfig.h 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/pconfig.h 2011-09-29 11:05:32 UTC (rev 2217)
@@ -1,47 +0,0 @@
-/*
- * pconfig.h
- *
- * Copyright 2011 Alexander Petukhov <devel(at)apetukhov.ru>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <stdarg.h>
-
-/* config parts */
-#define CP_TABBED_MODE 1
-#define CP_OT_TABS 2
-#define CP_OT_SELECTED 3
-#define CP_TT_LTABS 4
-#define CP_TT_LSELECTED 5
-#define CP_TT_RTABS 6
-#define CP_TT_RSELECTED 7
-
-void pconfig_init();
-void pconfig_destroy();
-
-void pconfig_set(int config_part, gpointer config_value, ...);
-
-gboolean pconfig_get_tabbed();
-
-int* pconfig_get_tabs(gsize *length);
-int pconfig_get_selected_tab_index();
-
-int* pconfig_get_left_tabs(gsize *length);
-int pconfig_get_left_selected_tab_index();
-
-int* pconfig_get_right_tabs(gsize *length);
-int pconfig_get_right_selected_tab_index();
Modified: trunk/geany-plugins/debugger/src/plugin.c
===================================================================
--- trunk/geany-plugins/debugger/src/plugin.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/plugin.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -68,11 +68,12 @@
* can prevent Geany from processing the notification. Use this with care. */
{ "editor-notify", (GCallback) &on_editor_notify, FALSE, NULL },
{ "document_open", (GCallback) &on_document_open, FALSE, NULL },
- { "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 },
+ { "project_open", (GCallback) &config_on_project_open, FALSE, NULL },
+ { "project_close", (GCallback) &config_on_project_close, FALSE, NULL },
+ { "project_save", (GCallback) &config_on_project_save, FALSE, NULL },
{ NULL, NULL, FALSE, NULL }
};
@@ -84,6 +85,7 @@
tpage_pack_widgets(state);
}
+extern void config_on_project_open(GObject *obj, GKeyFile *config, gpointer user_data);
/* Called by Geany to initialize the plugin.
* Note: data is the same as geany_data. */
void plugin_init(GeanyData *data)
@@ -95,7 +97,8 @@
pixbufs_init();
/* main box */
- hbox = gtk_hbox_new(FALSE, 0);
+ hbox = gtk_hbox_new(FALSE, 7);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
/* add target page */
tpage_init();
@@ -109,9 +112,12 @@
/* init debug */
debug_init();
+ /* load config */
+ config_init();
+
/* init paned */
dpaned_init();
- tpage_pack_widgets(dpaned_get_tabbed());
+ tpage_pack_widgets(config_get_tabbed());
GtkWidget* vbox = btnpanel_create(on_paned_mode_changed);
@@ -125,11 +131,15 @@
hbox,
gtk_label_new(_("Debug")));
- /* init config */
- dconfig_init();
+ if (geany_data->app->project)
+ {
+ config_update_project_keyfile();
+ }
+ config_set_debug_store(
+ config_get_save_to_project() && geany_data->app->project ? DEBUG_STORE_PROJECT : DEBUG_STORE_PLUGIN
+ );
}
-
/* 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.
@@ -137,11 +147,7 @@
* dialog. */
GtkWidget *plugin_configure(GtkDialog *dialog)
{
- /* configuration dialog */
- GtkWidget *vbox = gtk_vbox_new(FALSE, 6);
-
- gtk_widget_show_all(vbox);
- return vbox;
+ return config_plugin_configure(dialog);
}
@@ -158,21 +164,11 @@
g_main_context_iteration(NULL,FALSE);
}
+ config_destroy();
pixbufs_destroy();
-
- /* destroy debug-related stuff */
debug_destroy();
-
- /* destroy breaks */
breaks_destroy();
-
- /* clears config */
- dconfig_destroy();
-
- /* clears debug paned data */
dpaned_destroy();
-
- /* clears anv tree data */
envtree_destroy();
/* release other allocated strings and objects */
Modified: trunk/geany-plugins/debugger/src/tpage.c
===================================================================
--- trunk/geany-plugins/debugger/src/tpage.c 2011-09-25 20:08:05 UTC (rev 2216)
+++ trunk/geany-plugins/debugger/src/tpage.c 2011-09-29 11:05:32 UTC (rev 2217)
@@ -85,7 +85,7 @@
*/
static void on_arguments_changed(GtkTextBuffer *textbuffer, gpointer user_data)
{
- dconfig_set_changed();
+ config_set_debug_changed();
}
/*
@@ -120,7 +120,7 @@
gtk_entry_set_text(GTK_ENTRY(target_name), filename);
g_free (filename);
- dconfig_set_changed();
+ config_set_debug_changed();
}
gtk_widget_destroy (dialog);
}
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