[geany/geany-plugins] b80681: Merge branch 'master' of github.com:geany/geany-plugins
Enrico Tröger
git-noreply at xxxxx
Thu Apr 12 20:44:12 UTC 2012
Branch: refs/heads/master
Author: Enrico Tröger <enrico.troeger at uvena.de>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Thu, 12 Apr 2012 20:44:12
Commit: b80681d13e07b28940ac287ba847a9c9c6de62ad
https://github.com/geany/geany-plugins/commit/b80681d13e07b28940ac287ba847a9c9c6de62ad
Log Message:
-----------
Merge branch 'master' of github.com:geany/geany-plugins
Modified Paths:
--------------
build/geanylua.m4
debugger/ChangeLog
debugger/TODO
debugger/src/bptree.c
debugger/src/callbacks.c
debugger/src/cell_renderers/cellrendererbreakicon.c
debugger/src/cell_renderers/cellrendererframeicon.c
debugger/src/cell_renderers/cellrenderertoggle.c
debugger/src/dbm_gdb.c
debugger/src/debug.c
debugger/src/envtree.c
debugger/src/stree.c
debugger/src/stree.h
debugger/src/vtree.c
debugger/src/wtree.c
devhelp/devhelp/Makefile.am
devhelp/src/Makefile.am
geanylua/Makefile.am
geanylua/wscript_build
geanylua/wscript_configure
geanymacro/src/geanymacro.c
geanynumberedbookmarks/src/geanynumberedbookmarks.c
po/POTFILES.in
Modified: build/geanylua.m4
1 files changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -16,6 +16,7 @@ AC_DEFUN([GP_CHECK_GEANYLUA],
LUA_VERSION=5.1
GP_CHECK_PLUGIN_DEPS([GeanyLua], [LUA],
[${LUA_PKG_NAME} >= ${LUA_VERSION}])
+ GP_CHECK_PLUGIN_DEPS([GeanyLua], [GMODULE], [gmodule-2.0])
GP_STATUS_PLUGIN_ADD([GeanyLua], [$enable_geanylua])
AC_CONFIG_FILES([
Modified: debugger/ChangeLog
19 files changed, 19 insertions(+), 0 deletions(-)
===================================================================
@@ -1,3 +1,22 @@
+08-04-2012 Alexander Petukhov <devel at apetukhov.ru>
+
+ * fixed a bug with wrong error message when a breakpoint condition/hitscounr can't be set
+ * fixed a bug when gdb exits without a stop reason
+
+07-04-2012 Alexander Petukhov <devel at apetukhov.ru>
+
+ * fixed a bug with calltips still being shown when a pointer leaves editor window
+
+04-04-2012 Alexander Petukhov <devel at apetukhov.ru>
+
+ * fixing exiting with code case that was unhandled and caused SIGSEGV (gdb)
+ * set current directory to executable's one (gdb)
+ * handling spaces in target and breakpoints filenames (gdb)
+ * fixing memory leaks on gtk_tree_row_reference_get_path and tree/list stores
+ * fixing SIGSEGV when selecting a cell in custom cell renderers using a keyboard
+ * fixing lack of breakpoint/stack frame markers after plugin unload and load
+ * fixing "jump to current instruction" behaviour (does not change an active frame)
+
10-03-2012 Alexander Petukhov <devel at apetukhov.ru>
* switching between frames by clicking a frame arrow in the stack window
Modified: debugger/TODO
39 files changed, 20 insertions(+), 19 deletions(-)
===================================================================
@@ -1,26 +1,27 @@
BUGS:
-- terminal stops to produce any output after some debug seesions
-- tooltip appears even if a pointer in no longer inside editor window
-- check possible memory leaks on a)gtk_tree_row_reference_get_path b)missing unrefs on tree/list stores
-- cell_renderer_toogle SIGSEGV in cell_renderer_toggle_activate when activating a cell using a keyboard (event->button == NULL)
-- debug geany with debugger project. switch frames then step over -> continue instead, then close geany being debugged -> dbm_gdb.c:502 (no step reason, probably the record from the previos step command???)
FEATURES:
-- custom tooltip with sticking facilities
-- don't hide a tooltip until run hasn't happent, move it if document is being scrolled
-- use lexer to lookup for a symbol under cursor when presenting a tooltip
-- geany menu integration
-- toolbar buttons
-- margin context menu
-- step back
-- tree views column width/autowidth
-- attach functionality: dbm_ methods providing target lists, common dialog
-- android support
-- bashdb support
-- windows support
+
+- debug callbacks names (refactoring)
- gdb backend step speed
-- debug callbacks names
+- windows support
+
+- attach functionality: dbm_ methods providing target lists, common dialog
- interrupt thread using stack window
-- custom tooltip on breaks and stack trace windows with code snippet around break or frame
+- step back
+
+- margin context menu
+- editor context menu (add watch, add/remove breakpoint)
+
- font from the geany settings for a message window
+- use left/right keys to collapse/expand in breakpoints tree
+- use lexer to lookup for a symbol under cursor when presenting a tooltip
- a button in the upper right path of a right notebook for a hiding/showing button panel
+- minimum width of the debug panel notebooks
+- tree views column width/autowidth
+- custom tooltip on breaks and stack trace windows with code snippet around break or frame
+- custom tooltip(in an editor in debug mode) with sticking facilities
+- don't hide a tooltip until run hasn't happent, move it if document is being scrolled
+
+- android support
+- bashdb support
Modified: debugger/src/bptree.c
5 files changed, 4 insertions(+), 1 deletions(-)
===================================================================
@@ -616,6 +616,7 @@ gboolean bptree_init(move_to_line_cb cb)
G_TYPE_STRING);
model = GTK_TREE_MODEL(store);
tree = gtk_tree_view_new_with_model (model);
+ g_object_unref(store);
/* set tree view properties */
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), 1);
@@ -802,7 +803,9 @@ void bptree_add_breakpoint(breakpoint* bp)
}
else
{
- gtk_tree_model_get_iter(model, &file_iter, gtk_tree_row_reference_get_path(file_reference));
+ GtkTreePath *path = gtk_tree_row_reference_get_path(file_reference);
+ gtk_tree_model_get_iter(model, &file_iter, path);
+ gtk_tree_path_free(path);
}
/* lookup where to insert new row */
Modified: debugger/src/callbacks.c
26 files changed, 23 insertions(+), 3 deletions(-)
===================================================================
@@ -155,6 +155,21 @@ void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_data)
}
/*
+ * Handles mouse leave event to check if a calltip is still present and hides it if yes
+ */
+static gint leave_signal;
+static gboolean on_mouse_leave(GtkWidget *widget, GdkEvent *event, gpointer user_data)
+{
+ ScintillaObject *so = (ScintillaObject*)widget;
+ if (scintilla_send_message (so, SCI_CALLTIPACTIVE, 0, 0))
+ {
+ g_signal_handler_disconnect(G_OBJECT(widget), leave_signal);
+ scintilla_send_message (so, SCI_CALLTIPCANCEL, 0, 0);
+ }
+ return FALSE;
+}
+
+/*
* Occures on notify from editor.
* Handles margin click to set/remove breakpoint
*/
@@ -194,7 +209,7 @@ gboolean on_editor_notify(
{
if (DBS_STOPPED != debug_get_state ())
break;
-
+
/* get a word under the cursor */
GString *word = get_word_at_position(editor->sci, nt->position);
@@ -203,6 +218,7 @@ gboolean on_editor_notify(
gchar *calltip = debug_get_calltip_for_expression(word->str);
if (calltip)
{
+ leave_signal = g_signal_connect(G_OBJECT(editor->sci), "leave-notify-event", G_CALLBACK(on_mouse_leave), NULL);
scintilla_send_message (editor->sci, SCI_CALLTIPSHOW, nt->position, (long)calltip);
}
}
@@ -216,7 +232,11 @@ gboolean on_editor_notify(
if (DBS_STOPPED != debug_get_state ())
break;
- scintilla_send_message (editor->sci, SCI_CALLTIPCANCEL, 0, 0);
+ if (scintilla_send_message (editor->sci, SCI_CALLTIPACTIVE, 0, 0))
+ {
+ g_signal_handler_disconnect(G_OBJECT(editor->sci), leave_signal);
+ scintilla_send_message (editor->sci, SCI_CALLTIPCANCEL, 0, 0);
+ }
break;
}
case SCN_MODIFYATTEMPTRO:
@@ -330,7 +350,7 @@ gboolean keys_callback(guint key_id)
{
debug_jump_to_current_instruction();
gtk_widget_set_sensitive(tab_call_stack, FALSE);
- stree_select_first_frame();
+ stree_select_first_frame(FALSE);
gtk_widget_set_sensitive(tab_call_stack, TRUE);
}
}
Modified: debugger/src/cell_renderers/cellrendererbreakicon.c
50 files changed, 31 insertions(+), 19 deletions(-)
===================================================================
@@ -261,8 +261,12 @@ static void cell_renderer_break_icon_render(GtkCellRenderer *cell, GdkDrawable *
static gint cell_renderer_break_icon_activate(GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path,
GdkRectangle *background_area, GdkRectangle *cell_area, GtkCellRendererState flags)
{
- if (event->button.x >= cell_area->x &&
- event->button.x < (cell_area->x + cell_area->width))
+ if (!event ||
+ (
+ event->button.x >= cell_area->x &&
+ event->button.x < (cell_area->x + cell_area->width)
+ )
+ )
{
g_signal_emit (cell, clicked_signal, 0, path);
}
@@ -411,24 +415,32 @@ GType cell_renderer_break_icon_get_type(void)
if(0 == cell_break_icon_type)
{
- static const GTypeInfo cell_break_icon_info =
+ if ( (cell_break_icon_type = g_type_from_name("CellRendererBreakIcon")) )
{
- sizeof (CellRendererBreakIconClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) cell_renderer_break_icon_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (CellRendererBreakIcon),
- 0, /* n_preallocs */
- (GInstanceInitFunc) cell_renderer_break_icon_init,
- };
-
- /* Derive from GtkCellRenderer */
- cell_break_icon_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
- "CellRendererBreakIcon",
- &cell_break_icon_info,
- 0);
+ parent_class = g_type_class_peek_static(g_type_parent(cell_break_icon_type));
+ clicked_signal = g_signal_lookup("clicked", cell_break_icon_type);
+ }
+ else
+ {
+ static const GTypeInfo cell_break_icon_info =
+ {
+ sizeof (CellRendererBreakIconClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) cell_renderer_break_icon_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CellRendererBreakIcon),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) cell_renderer_break_icon_init,
+ };
+
+ /* Derive from GtkCellRenderer */
+ cell_break_icon_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
+ "CellRendererBreakIcon",
+ &cell_break_icon_info,
+ 0);
+ }
}
return cell_break_icon_type;
Modified: debugger/src/cell_renderers/cellrendererframeicon.c
50 files changed, 31 insertions(+), 19 deletions(-)
===================================================================
@@ -45,8 +45,12 @@ enum {
static gint cell_renderer_frame_icon_activate(GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path,
GdkRectangle *background_area, GdkRectangle *cell_area, GtkCellRendererState flags)
{
- if (event->button.x >= cell_area->x &&
- event->button.x < (cell_area->x + cell_area->width))
+ if (!event ||
+ (
+ event->button.x >= cell_area->x &&
+ event->button.x < (cell_area->x + cell_area->width)
+ )
+ )
{
g_signal_emit (cell, clicked_signal, 0, path);
}
@@ -311,24 +315,32 @@ GType cell_renderer_frame_icon_get_type(void)
if(0 == cell_frame_icon_type)
{
- static const GTypeInfo cell_frame_icon_info =
+ if ( (cell_frame_icon_type = g_type_from_name("CellRendererFrameIcon")) )
{
- sizeof (CellRendererFrameIconClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) cell_renderer_frame_icon_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (CellRendererFrameIcon),
- 0, /* n_preallocs */
- (GInstanceInitFunc) cell_renderer_frame_icon_init,
- };
-
- /* Derive from GtkCellRenderer */
- cell_frame_icon_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
- "CellRendererFrameIcon",
- &cell_frame_icon_info,
- 0);
+ parent_class = g_type_class_peek_static(g_type_parent(cell_frame_icon_type));
+ clicked_signal = g_signal_lookup("clicked", cell_frame_icon_type);
+ }
+ else
+ {
+ static const GTypeInfo cell_frame_icon_info =
+ {
+ sizeof (CellRendererFrameIconClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) cell_renderer_frame_icon_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CellRendererFrameIcon),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) cell_renderer_frame_icon_init,
+ };
+
+ /* Derive from GtkCellRenderer */
+ cell_frame_icon_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
+ "CellRendererFrameIcon",
+ &cell_frame_icon_info,
+ 0);
+ }
}
return cell_frame_icon_type;
Modified: debugger/src/cell_renderers/cellrenderertoggle.c
16 files changed, 10 insertions(+), 6 deletions(-)
===================================================================
@@ -35,8 +35,12 @@
static gint cell_renderer_toggle_activate(GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path,
GdkRectangle *background_area, GdkRectangle *cell_area, GtkCellRendererState flags)
{
- if (event->button.x >= cell_area->x &&
- event->button.x < (cell_area->x + cell_area->width))
+ if (!event ||
+ (
+ event->button.x >= cell_area->x &&
+ event->button.x < (cell_area->x + cell_area->width)
+ )
+ )
{
g_signal_emit_by_name(cell, "toggled", path);
}
@@ -66,9 +70,9 @@ static void cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
*/
GType cell_renderer_toggle_get_type(void)
{
- static GType cell_brekpoint_type = 0;
+ static GType cell_break_toggle_type = 0;
- if(0 == cell_brekpoint_type)
+ if(0 == cell_break_toggle_type && !(cell_break_toggle_type = g_type_from_name("CellRendererToggle")))
{
static const GTypeInfo cell_file_info =
{
@@ -84,13 +88,13 @@ GType cell_renderer_toggle_get_type(void)
};
/* Derive from GtkToggleCellRenderer */
- cell_brekpoint_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TOGGLE,
+ cell_break_toggle_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TOGGLE,
"CellRendererToggle",
&cell_file_info,
0);
}
- return cell_brekpoint_type;
+ return cell_break_toggle_type;
}
/*
Modified: debugger/src/dbm_gdb.c
44 files changed, 34 insertions(+), 10 deletions(-)
===================================================================
@@ -72,6 +72,7 @@ enum sr {
SR_EXITED_NORMALLY,
SR_SIGNAL_RECIEVED,
SR_EXITED_SIGNALLED,
+ SR_EXITED_WITH_CODE,
} stop_reason;
/* callbacks to use for messaging, error reporting and state change alerting */
@@ -490,11 +491,13 @@ static gboolean on_read_from_gdb(GIOChannel * src, GIOCondition cond, gpointer d
stop_reason = SR_EXITED_NORMALLY;
else if (!strcmp(reason, "exited-signalled"))
stop_reason = SR_EXITED_SIGNALLED;
+ else if (!strcmp(reason, "exited"))
+ stop_reason = SR_EXITED_WITH_CODE;
}
else
{
/* somehow, sometimes there can be no stop reason */
- stop_reason = SR_END_STEPPING_RANGE;
+ stop_reason = SR_EXITED_NORMALLY;
}
if (SR_BREAKPOINT_HIT == stop_reason || SR_END_STEPPING_RANGE == stop_reason || SR_SIGNAL_RECIEVED == stop_reason)
@@ -531,8 +534,18 @@ static gboolean on_read_from_gdb(GIOChannel * src, GIOCondition cond, gpointer d
dbg_cbs->set_stopped(atoi(thread_id));
}
}
- else if (stop_reason == SR_EXITED_NORMALLY || stop_reason == SR_EXITED_SIGNALLED)
+ else if (stop_reason == SR_EXITED_NORMALLY || stop_reason == SR_EXITED_SIGNALLED || stop_reason == SR_EXITED_WITH_CODE)
{
+ if (stop_reason == SR_EXITED_WITH_CODE)
+ {
+ gchar *code = strstr(reason + strlen(reason) + 1,"exit-code=\"") + strlen("exit-code=\"");
+ *(strchr(code, '\"')) = '\0';
+ gchar *message = g_strdup_printf(_("Program exited with code \"%i\""), (int)(char)strtol(code, NULL, 8));
+ dbg_cbs->report_error(message);
+
+ g_free(message);
+ }
+
stop();
}
}
@@ -692,13 +705,17 @@ gboolean run(const gchar* file, const gchar* commandline, GList* env, GList *wit
/* spawn GDB */
const gchar *exclude[] = { "LANG", NULL };
gchar **gdb_env = utils_copy_environment(exclude, "LANG", "C", NULL);
- if (!g_spawn_async_with_pipes(NULL, (gchar**)gdb_args, gdb_env,
+ gchar *working_directory = g_path_get_dirname(file);
+ if (!g_spawn_async_with_pipes(working_directory, (gchar**)gdb_args, gdb_env,
GDB_SPAWN_FLAGS, NULL,
NULL, &gdb_pid, &gdb_in, &gdb_out, NULL, &err))
{
dbg_cbs->report_error(_("Failed to spawn gdb process"));
+ g_free(working_directory);
+ g_strfreev(gdb_env);
return FALSE;
}
+ g_free(working_directory);
g_strfreev(gdb_env);
/* move gdb to it's own process group */
@@ -743,8 +760,8 @@ gboolean run(const gchar* file, const gchar* commandline, GList* env, GList *wit
/* loading file */
GString *command = g_string_new("");
- g_string_printf(command, "-file-exec-and-symbols %s", file);
- commands = add_to_queue(commands, _("~\"Loading target file ...\""), command->str, _("Error loading file"), FALSE);
+ g_string_printf(command, "-file-exec-and-symbols \"%s\"", file);
+ commands = add_to_queue(commands, _("~\"Loading target file.\\n\""), command->str, _("Error loading file"), FALSE);
g_string_free(command, TRUE);
/* setting asyncronous mode */
@@ -792,7 +809,7 @@ gboolean run(const gchar* file, const gchar* commandline, GList* env, GList *wit
{
breakpoint *bp = (breakpoint*)biter->data;
command = g_string_new("");
- g_string_printf(command, "-break-insert -f %s:%i", bp->file, bp->line);
+ g_string_printf(command, "-break-insert -f \"\\\"%s\\\":%i\"", bp->file, bp->line);
GString *error_message = g_string_new("");
g_string_printf(error_message, _("Breakpoint at %s:%i cannot be set\nDebugger message: %s"), bp->file, bp->line, "%s");
@@ -800,7 +817,6 @@ gboolean run(const gchar* file, const gchar* commandline, GList* env, GList *wit
commands = add_to_queue(commands, NULL, command->str, error_message->str, TRUE);
g_string_free(command, TRUE);
- g_string_free(error_message, TRUE);
if (bp->hitscount)
{
@@ -824,6 +840,8 @@ gboolean run(const gchar* file, const gchar* commandline, GList* env, GList *wit
g_string_free(command, TRUE);
}
+ g_string_free(error_message, TRUE);
+
bp_index++;
biter = biter->next;
}
@@ -934,8 +952,14 @@ int get_break_number(char* file, int line)
*strchr(bstart, '\"') = '\0';
int bline = atoi(bstart);
- if (!strcmp(fname, file) && bline == line)
+ gchar *file_quoted = g_strdup_printf("\\\"%s\\\"", file);
+ int break_found = !strcmp(fname, file_quoted) && bline == line;
+ g_free(file_quoted);
+
+ if (break_found)
+ {
return num;
+ }
bstart += strlen(bstart) + 1;
}
@@ -957,11 +981,11 @@ gboolean set_break(breakpoint* bp, break_set_activity bsa)
gchar *record = NULL;
/* 1. insert breakpoint */
- sprintf (command, "-break-insert %s:%i", bp->file, bp->line);
+ sprintf (command, "-break-insert \"\\\"%s\\\":%i\"", bp->file, bp->line);
if (RC_DONE != exec_sync_command(command, TRUE, &record))
{
g_free(record);
- sprintf (command, "-break-insert -f %s:%i", bp->file, bp->line);
+ sprintf (command, "-break-insert -f \"\\\"%s\\\":%i\"", bp->file, bp->line);
if (RC_DONE != exec_sync_command(command, TRUE, &record))
{
g_free(record);
Modified: debugger/src/debug.c
16 files changed, 13 insertions(+), 3 deletions(-)
===================================================================
@@ -240,7 +240,9 @@ static void on_watch_changed(GtkCellRendererText *renderer, gchar *path, gchar *
-1);
/* check if it is empty row */
- gboolean is_empty_row = !gtk_tree_path_compare (tree_path, wtree_empty_path());
+ GtkTreePath *empty_path = wtree_empty_path();
+ gboolean is_empty_row = !gtk_tree_path_compare (tree_path, empty_path);
+ gtk_tree_path_free(empty_path);
gchar *striped = g_strstrip(g_strdup(new_text));
if (!strlen(striped) &&
@@ -447,6 +449,8 @@ static gboolean on_watch_key_pressed_callback(GtkWidget *widget, GdkEvent *even
gtk_tree_store_remove(wstore, &titer);
+
+ gtk_tree_path_free(path);
}
iter = iter->next;
@@ -455,7 +459,11 @@ static gboolean on_watch_key_pressed_callback(GtkWidget *widget, GdkEvent *even
/* if all (with or without empty row) was selected - set empty row
as a path to be selected after deleting */
if (!reference_to_select)
- reference_to_select = gtk_tree_row_reference_new (gtk_tree_view_get_model(GTK_TREE_VIEW(wtree)), wtree_empty_path());
+ {
+ GtkTreePath *path = wtree_empty_path();
+ reference_to_select = gtk_tree_row_reference_new (gtk_tree_view_get_model(GTK_TREE_VIEW(wtree)), path);
+ gtk_tree_path_free(path);
+ }
/* set selection */
gtk_tree_selection_unselect_all(selection);
@@ -471,6 +479,8 @@ static gboolean on_watch_key_pressed_callback(GtkWidget *widget, GdkEvent *even
config_set_debug_changed();
}
+ gtk_tree_path_free(empty_path);
+
/* free rows list */
g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL);
g_list_free (rows);
@@ -669,7 +679,7 @@ static void on_debugger_stopped (int thread_id)
stree_add(f);
iter = g_list_next(iter);
}
- stree_select_first_frame();
+ stree_select_first_frame(TRUE);
/* files */
GList *files = active_module->get_files();
Modified: debugger/src/envtree.c
23 files changed, 18 insertions(+), 5 deletions(-)
===================================================================
@@ -151,6 +151,7 @@ static void delete_selected_rows()
gtk_tree_model_get_iter(model, &titer, path);
gtk_list_store_remove(store, &titer);
+ gtk_tree_path_free(path);
iter = iter->next;
}
@@ -159,6 +160,7 @@ static void delete_selected_rows()
GtkTreePath *path = gtk_tree_row_reference_get_path(reference_to_select);
gtk_tree_selection_select_path(selection, path);
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(tree), path, NULL, TRUE, 0.5, 0.5);
+ gtk_tree_path_free(path);
/* free references list */
g_list_foreach (references, (GFunc)gtk_tree_row_reference_free, NULL);
@@ -168,6 +170,8 @@ static void delete_selected_rows()
/* free selection reference */
gtk_tree_row_reference_free(reference_to_select);
+ gtk_tree_path_free(empty_path);
+
/* free rows list */
g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL);
g_list_free (rows);
@@ -213,9 +217,11 @@ static void on_render_value(GtkTreeViewColumn *tree_column,
{
/* do not allow to edit value for empty row */
GtkTreePath *path = gtk_tree_model_get_path(tree_model, iter);
- gboolean empty = !gtk_tree_path_compare(path, gtk_tree_row_reference_get_path(empty_row));
+ GtkTreePath *empty_path = gtk_tree_row_reference_get_path(empty_row);
+ gboolean empty = !gtk_tree_path_compare(path, empty_path);
g_object_set (cell, "editable", entering_new_var || !empty, NULL);
gtk_tree_path_free(path);
+ gtk_tree_path_free(empty_path);
}
}
@@ -226,8 +232,10 @@ static void on_value_changed(GtkCellRendererText *renderer, gchar *path, gchar *
{
GtkTreeIter iter;
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));
+
+ GtkTreePath *empty_path = gtk_tree_row_reference_get_path(empty_row);
+ gboolean empty = !gtk_tree_path_compare(tree_path, empty_path);
+ gtk_tree_path_free(empty_path);
gtk_tree_model_get_iter (
model,
@@ -300,7 +308,8 @@ static void on_value_editing_cancelled(GtkCellRenderer *renderer, gpointer user_
{
/* check whether escape was pressed when editing
new variable value cell */
- if(!gtk_tree_path_compare(being_edited_value, gtk_tree_row_reference_get_path(empty_row)))
+ GtkTreePath *empty_path = gtk_tree_row_reference_get_path(empty_row);
+ if(!gtk_tree_path_compare(being_edited_value, empty_path))
{
/* if so - clear name sell */
GtkTreeIter iter;
@@ -318,6 +327,7 @@ static void on_value_editing_cancelled(GtkCellRenderer *renderer, gpointer user_
g_object_set (renderer_value, "editable", FALSE, NULL);
gtk_tree_path_free(being_edited_value);
+ gtk_tree_path_free(empty_path);
}
/*
@@ -327,8 +337,9 @@ static void on_name_changed(GtkCellRendererText *renderer, gchar *path, gchar *n
{
GtkTreeIter iter;
GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
+ GtkTreePath *empty_path = gtk_tree_row_reference_get_path(empty_row);
- gboolean empty = !gtk_tree_path_compare(tree_path, gtk_tree_row_reference_get_path(empty_row));
+ gboolean empty = !gtk_tree_path_compare(tree_path, empty_path);
gtk_tree_model_get_iter (
model,
@@ -371,6 +382,7 @@ static void on_name_changed(GtkCellRendererText *renderer, gchar *path, gchar *n
}
gtk_tree_path_free(tree_path);
+ gtk_tree_path_free(empty_path);
g_free(oldvalue);
g_free(striped);
}
@@ -387,6 +399,7 @@ static void on_name_changed(GtkCellRendererText *renderer, gchar *path, gchar *n
G_TYPE_STRING);
model = GTK_TREE_MODEL(store);
tree = gtk_tree_view_new_with_model (model);
+ g_object_unref(store);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), TRUE);
g_signal_connect(G_OBJECT(tree), "key-press-event", G_CALLBACK (on_envtree_keypressed), NULL);
Modified: debugger/src/stree.c
27 files changed, 19 insertions(+), 8 deletions(-)
===================================================================
@@ -136,7 +136,7 @@ static gboolean on_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean key
}
else if (column == gtk_tree_view_get_column(GTK_TREE_VIEW(widget), S_ADRESS && bx >= start_pos && bx < start_pos + width))
{
- gtk_tooltip_set_text(tooltip, gtk_tree_path_get_indices(tpath)[1] == active_frame_index ? _("Active frame") : _("Switch to a frame"));
+ gtk_tooltip_set_text(tooltip, gtk_tree_path_get_indices(tpath)[1] == active_frame_index ? _("Active frame") : _("Click an arrow to switch to a frame"));
gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, tpath);
show = TRUE;
}
@@ -333,6 +333,7 @@ static void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_
model = GTK_TREE_MODEL(store);
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
+ g_object_unref(store);
/* set tree view properties */
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), 1);
@@ -411,7 +412,9 @@ void stree_add(frame *f)
{
GtkTreeRowReference *reference = (GtkTreeRowReference*)g_hash_table_lookup(threads, (gpointer)active_thread_id);
GtkTreeIter thread_iter;
- gtk_tree_model_get_iter(model, &thread_iter, gtk_tree_row_reference_get_path(reference));
+ GtkTreePath *path = gtk_tree_row_reference_get_path(reference);
+ gtk_tree_model_get_iter(model, &thread_iter, path);
+ gtk_tree_path_free(path);
GtkTreeIter frame_iter;
gtk_tree_store_insert_before(store, &frame_iter, &thread_iter, 0);
@@ -437,16 +440,22 @@ void stree_clear()
/*
* select first frame in the stack
*/
-void stree_select_first_frame()
+void stree_select_first_frame(gboolean make_active)
{
gtk_tree_view_expand_all(GTK_TREE_VIEW(tree));
GtkTreeRowReference *reference = (GtkTreeRowReference*)g_hash_table_lookup(threads, (gpointer)active_thread_id);
GtkTreeIter thread_iter, frame_iter;
- gtk_tree_model_get_iter(model, &thread_iter, gtk_tree_row_reference_get_path(reference));
+ GtkTreePath *active_path = gtk_tree_row_reference_get_path(reference);
+ gtk_tree_model_get_iter(model, &thread_iter, active_path);
+ gtk_tree_path_free(active_path);
if(gtk_tree_model_iter_children(model, &frame_iter, &thread_iter))
{
- gtk_tree_store_set (store, &frame_iter, S_ACTIVE, TRUE, -1);
+ if (make_active)
+ {
+ gtk_tree_store_set (store, &frame_iter, S_ACTIVE, TRUE, -1);
+ active_frame_index = 0;
+ }
GtkTreePath* path = gtk_tree_model_get_path(model, &frame_iter);
@@ -455,8 +464,6 @@ void stree_select_first_frame()
path);
gtk_tree_path_free(path);
-
- active_frame_index = 0;
}
}
@@ -534,6 +541,8 @@ void stree_remove_thread(int thread_id)
gtk_tree_store_remove(store, &iter);
g_hash_table_remove(threads, (gpointer)(glong)thread_id);
+
+ gtk_tree_path_free(tpath);
}
/*
@@ -543,7 +552,9 @@ void stree_remove_frames()
{
GtkTreeRowReference *reference = (GtkTreeRowReference*)g_hash_table_lookup(threads, (gpointer)active_thread_id);
GtkTreeIter thread_iter;
- gtk_tree_model_get_iter(model, &thread_iter, gtk_tree_row_reference_get_path(reference));
+ GtkTreePath *tpath = gtk_tree_row_reference_get_path(reference);
+ gtk_tree_model_get_iter(model, &thread_iter, tpath);
+ gtk_tree_path_free(tpath);
GtkTreeIter child;
if (gtk_tree_model_iter_children(model, &child, &thread_iter))
Modified: debugger/src/stree.h
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -28,7 +28,7 @@
void stree_add_thread(int thread_id);
void stree_remove_thread(int thread_id);
-void stree_select_first_frame();
+void stree_select_first_frame(gboolean make_active);
void stree_remove_frames();
void stree_set_active_thread_id(int thread_id);
Modified: debugger/src/vtree.c
1 files changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -148,6 +148,7 @@ void render_value(GtkTreeViewColumn *tree_column,
G_TYPE_INT,
G_TYPE_INT);
GtkWidget* tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
+ g_object_unref(store);
/* set tree view parameters */
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), TRUE);
Modified: debugger/src/wtree.c
6 files changed, 4 insertions(+), 2 deletions(-)
===================================================================
@@ -99,10 +99,12 @@ static void on_render_name(GtkTreeViewColumn *tree_column,
GtkTreeIter wtree_empty_row()
{
GtkTreeIter empty;
-
+
+ GtkTreePath *path = gtk_tree_row_reference_get_path(empty_row);
gtk_tree_model_get_iter(gtk_tree_view_get_model(GTK_TREE_VIEW(tree)),
&empty,
- gtk_tree_row_reference_get_path(empty_row));
+ path);
+ gtk_tree_path_free(path);
return empty;
}
Modified: devhelp/devhelp/Makefile.am
6 files changed, 4 insertions(+), 2 deletions(-)
===================================================================
@@ -1,3 +1,7 @@
+if ENABLE_DEVHELP
+noinst_LTLIBRARIES = libdevhelp-2.la
+endif
+
dh_headers = \
dh-assistant.h \
dh-assistant-view.h \
@@ -28,8 +32,6 @@ EXTRA_DIST = \
dh-enum-types.c.template \
dh-enum-types.h.template
-noinst_LTLIBRARIES = libdevhelp-2.la
-
libdevhelp_2_la_SOURCES = \
dh-assistant.c \
dh-assistant-view.c \
Modified: devhelp/src/Makefile.am
1 files changed, 0 insertions(+), 1 deletions(-)
===================================================================
@@ -1,5 +1,4 @@
include $(top_srcdir)/build/vars.build.mk
-include $(top_srcdir)/build/vars.docs.mk
plugin = devhelp
Modified: geanylua/Makefile.am
2 files changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -38,10 +38,12 @@ libgeanylua_la_SOURCES = \
geanylua_la_CFLAGS = \
$(AM_CFLAGS) \
+ $(GMODULE_CFLAGS) \
$(LUA_CFLAGS)
geanylua_la_LIBADD = \
$(COMMONLIBS) \
+ $(GMODULE_LIBS) \
$(LUA_LIBS)
libgeanylua_la_CFLAGS = $(geanylua_la_CFLAGS)
Modified: geanylua/wscript_build
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -28,7 +28,7 @@ sources = ['geanylua.c']
lua_sources = [ 'glspi_init.c', 'glspi_app.c', 'glspi_dlg.c',
'glspi_doc.c', 'glspi_kfile.c', 'glspi_run.c',
'glspi_sci.c', 'gsdlg_lua.c' ]
-libraries = ['LUA']
+libraries = ['LUA', 'GMODULE']
build_plugin(bld, name, sources=sources, libraries=libraries)
Modified: geanylua/wscript_configure
6 files changed, 6 insertions(+), 0 deletions(-)
===================================================================
@@ -42,3 +42,9 @@ def try_to_find_lua_package():
found_lua_package = try_to_find_lua_package()
if not found_lua_package:
raise ConfigurationError('You need Lua 5.1 for the GeanyLua plugin')
+
+check_cfg_cached(conf,
+ package='gmodule-2.0',
+ mandatory=True,
+ uselib_store='GMODULE',
+ args='--cflags --libs')
Modified: geanymacro/src/geanymacro.c
636 files changed, 504 insertions(+), 132 deletions(-)
===================================================================
@@ -29,10 +29,7 @@
typedef struct
{
gint message;
- /* I'm leaving wparam commented out as this may prove useful if it's used by a Scintilla
- * message that's recorded in a macro that I'm not aware of yet
- */
- /* gulong wparam; */
+ gulong wparam;
glong lparam;
} MacroEvent;
@@ -100,39 +97,39 @@
{SCI_WORDLEFTEND,N_("Move Cursor to end of Word to the Left")},
{SCI_WORDRIGHTEND,N_("Move Cursor to end of Word to the Right")},
-{SCI_LINEDOWNEXTEND,N_("Move Selection down a line")},
-{SCI_LINEUPEXTEND,N_("Move Selection up a line")},
-{SCI_CHARLEFTEXTEND,N_("Move Selection Left a line")},
-{SCI_CHARRIGHTEXTEND,N_("Move Selection Right a line")},
-{SCI_WORDLEFTEXTEND,N_("Move Selection to start of Word to the Left")},
-{SCI_WORDRIGHTEXTEND,N_("Move Selection to start of Word to the Right")},
-{SCI_WORDPARTLEFTEXTEND,N_("Move Selection to start of Part of Word to the Left")},
-{SCI_WORDPARTRIGHTEXTEND,N_("Move Selection to start of Part of Word to the Right")},
-{SCI_HOMEEXTEND,N_("Move Selection to start of line")},
-{SCI_LINEENDEXTEND,N_("Move Selection to end of line")},
-{SCI_DOCUMENTSTARTEXTEND,N_("Move Selection to start of document")},
-{SCI_DOCUMENTENDEXTEND,N_("Move Selection to end of document")},
-{SCI_PAGEUPEXTEND,N_("Move Selection up one Page")},
-{SCI_PAGEDOWNEXTEND,N_("Move Selection down one Page")},
-{SCI_HOMEDISPLAYEXTEND,N_("Move Selection to fist visible character")},
-{SCI_LINEENDDISPLAYEXTEND,N_("Move Selection to last visible character")},
-{SCI_VCHOMEEXTEND,N_("Move Selection to 1st non-whitespace character of line, or 1st character of\
+{SCI_LINEDOWNEXTEND,N_("Extend Selection down a line")},
+{SCI_LINEUPEXTEND,N_("Extend Selection up a line")},
+{SCI_CHARLEFTEXTEND,N_("Extend Selection Left a line")},
+{SCI_CHARRIGHTEXTEND,N_("Extend Selection Right a line")},
+{SCI_WORDLEFTEXTEND,N_("Extend Selection to start of Word to the Left")},
+{SCI_WORDRIGHTEXTEND,N_("Extend Selection to start of Word to the Right")},
+{SCI_WORDPARTLEFTEXTEND,N_("Extend Selection to start of Part of Word to the Left")},
+{SCI_WORDPARTRIGHTEXTEND,N_("Extend Selection to start of Part of Word to the Right")},
+{SCI_HOMEEXTEND,N_("Extend Selection to start of line")},
+{SCI_LINEENDEXTEND,N_("Extend Selection to end of line")},
+{SCI_DOCUMENTSTARTEXTEND,N_("Extend Selection to start of document")},
+{SCI_DOCUMENTENDEXTEND,N_("Extend Selection to end of document")},
+{SCI_PAGEUPEXTEND,N_("Extend Selection up one Page")},
+{SCI_PAGEDOWNEXTEND,N_("Extend Selection down one Page")},
+{SCI_HOMEDISPLAYEXTEND,N_("Extend Selection to fist visible character")},
+{SCI_LINEENDDISPLAYEXTEND,N_("Extend Selection to last visible character")},
+{SCI_VCHOMEEXTEND,N_("Extend Selection to 1st non-whitespace character of line, or 1st character of\
line if already at 1st non-whitespace character")},
-{SCI_PARADOWNEXTEND,N_("Move Selection to begining of next paragraph")},
-{SCI_PARAUPEXTEND,N_("Move Selection up to beginning of current/previous paragraph")},
-{SCI_WORDLEFTENDEXTEND,N_("Move Selection to end of Word to the Left")},
-{SCI_WORDRIGHTENDEXTEND,N_("Move Selection to end of Word to the Right")},
-
-{SCI_LINEDOWNRECTEXTEND,N_("Move Rectangular Selection down a line")},
-{SCI_LINEUPRECTEXTEND,N_("Move Rectangular Selection up a line")},
-{SCI_CHARLEFTRECTEXTEND,N_("Move Rectangular Selection Left a line")},
-{SCI_CHARRIGHTRECTEXTEND,N_("Move Rectangular Selection Right a line")},
-{SCI_HOMERECTEXTEND,N_("Move Rectangular Selection to start of line")},
-{SCI_LINEENDRECTEXTEND,N_("Move Rectangular Selection to end of line")},
-{SCI_PAGEUPRECTEXTEND,N_("Move Rectangular Selection up one Page")},
-{SCI_PAGEDOWNRECTEXTEND,N_("Move Rectangular Selection down one Page")},
-{SCI_VCHOMERECTEXTEND,N_("Move Rectangular Selection to 1st non-whitespace character of line, or 1st\
- character of line if already at 1st non-whitespace character")},
+{SCI_PARADOWNEXTEND,N_("Extend Selection to begining of next paragraph")},
+{SCI_PARAUPEXTEND,N_("Extend Selection up to beginning of current/previous paragraph")},
+{SCI_WORDLEFTENDEXTEND,N_("Extend Selection to end of Word to the Left")},
+{SCI_WORDRIGHTENDEXTEND,N_("Extend Selection to end of Word to the Right")},
+
+{SCI_LINEDOWNRECTEXTEND,N_("Extend Rectangular Selection down a line")},
+{SCI_LINEUPRECTEXTEND,N_("Extend Rectangular Selection up a line")},
+{SCI_CHARLEFTRECTEXTEND,N_("Extend Rectangular Selection Left a line")},
+{SCI_CHARRIGHTRECTEXTEND,N_("Extend Rectangular Selection Right a line")},
+{SCI_HOMERECTEXTEND,N_("Extend Rectangular Selection to start of line")},
+{SCI_LINEENDRECTEXTEND,N_("Extend Rectangular Selection to end of line")},
+{SCI_PAGEUPRECTEXTEND,N_("Extend Rectangular Selection up one Page")},
+{SCI_PAGEDOWNRECTEXTEND,N_("Extend Rectangular Selection down one Page")},
+{SCI_VCHOMERECTEXTEND,N_("Extend Rectangular Selection to 1st non-whitespace character of line, or\
+ 1st character of line if already at 1st non-whitespace character")},
{SCI_CANCEL,N_("Cancel Selection")},
@@ -150,7 +147,11 @@
{SCI_SELECTIONDUPLICATE,N_("Insert duplicate of selected text after selection. If nothing selected,\
duplicate line")},
-/* editor commands that don't seem to work well in editing
+{SCI_SEARCHNEXT,"Search for next \"\""},
+{SCI_SEARCHPREV,"Search for previous \"\""},
+{SCI_SEARCHANCHOR,"Set start of search to beginning of selection"},
+
+/* editor commands that don't seem to work well in editing
* {SCI_FORMFEED,N_("FormFeed")},
*
* other commands ommited as they don't appear to do anything different to existing commands
@@ -178,7 +179,7 @@ enum GEANY_MACRO_BUTTON {
PLUGIN_VERSION_CHECK(147)
PLUGIN_SET_INFO(_("Macros"),_("Macros for Geany"),
- "1.0","William Fraser <william.fraser at virgin.net>");
+ "1.1","William Fraser <william.fraser at virgin.net>");
/* Plugin user alterable settings */
static gboolean bSaveMacros=TRUE;
@@ -207,20 +208,27 @@ enum GEANY_MACRO_BUTTON {
MacroEvent *me;
GSList * gslTemp=gsl;
+ /* free data held in GSLIST structure */
while(gslTemp!=NULL)
{
me=gslTemp->data;
- /* check to see if it's a message that has string attached, and free it if so */
- if(me->message==SCI_REPLACESEL)
+ /* check to see if it's a message that has string attached, and free it if so
+ * lparam might be NULL for SCI_SEARCHNEXT or SCI_SEARCHPREV but g_free is ok
+ * with this
+ */
+ if(me->message==SCI_REPLACESEL ||
+ me->message==SCI_SEARCHNEXT ||
+ me->message==SCI_SEARCHPREV)
g_free((void*)(me->lparam));
g_free((void*)(gslTemp->data));
gslTemp=g_slist_next(gslTemp);
}
- g_slist_free(gsl);
+ /* free SLIST structure */
+ g_slist_free(gsl);
- return NULL;
+ return NULL;
}
@@ -316,6 +324,7 @@ static void ClearAllMacros(void)
FreeMacro((Macro*)(gsl->data));
gsl=g_slist_next(gsl);
}
+
g_slist_free(mList);
mList=NULL;
}
@@ -327,15 +336,46 @@ static void ReplayMacro(Macro *m)
MacroEvent *me;
GSList *gsl=m->MacroEvents;
ScintillaObject* sci=document_get_current()->editor->sci;
+ gchar *clipboardcontents;
+ gboolean bFoundAnchor=FALSE;
scintilla_send_message(sci,SCI_BEGINUNDOACTION,0,0);
while(gsl!=NULL)
{
me=gsl->data;
-/* may be needed if come across any scintilla messages that use wparam */
-/* scintilla_send_message(sci,me->message,me->wparam,me->lparam); */
- scintilla_send_message(sci,me->message,0,me->lparam);
+
+ /* make not if anchor has been found */
+ if(me->message==SCI_SEARCHANCHOR)
+ bFoundAnchor=TRUE;
+
+ /* possibility that user edited macros might not have anchor before search */
+ if((me->message==SCI_SEARCHNEXT || me->message==SCI_SEARCHPREV) &&
+ bFoundAnchor==FALSE)
+ {
+ scintilla_send_message(sci,SCI_SEARCHANCHOR,0,0);
+ bFoundAnchor=TRUE;
+ }
+
+ /* search might use clipboard to look for: check & hanndle */
+ if((me->message==SCI_SEARCHNEXT || me->message==SCI_SEARCHPREV) &&
+ ((gchar*)me->lparam)==NULL)
+ {
+ clipboardcontents=gtk_clipboard_wait_for_text(gtk_clipboard_get(
+ GDK_SELECTION_CLIPBOARD));
+ /* ensure there is something in the clipboard */
+ if(clipboardcontents==NULL)
+ {
+ dialogs_show_msgbox(GTK_MESSAGE_INFO,_("No text in clipboard!"));
+ break;
+ }
+
+ scintilla_send_message(sci,me->message,me->wparam,(glong)clipboardcontents);
+ }
+ else
+ scintilla_send_message(sci,me->message,me->wparam,me->lparam);
+
+ /* move to next macro event */
gsl=g_slist_next(gsl);
}
@@ -382,9 +422,26 @@ static void ReplayMacro(Macro *m)
/* get event number */
me->message=strtoll(s[(*k)++],NULL,10);
+ /* default to 0 */
+ me->wparam=0;
+
/* now handle lparam if required */
switch(me->message)
{
+ case SCI_SEARCHNEXT:
+ case SCI_SEARCHPREV:
+ /* get text */
+ me->lparam=(glong)(g_strcompress(s[(*k)++]));
+ /* if text is empty string replace with NULL to signify use clipboard */
+ if((*((gchar*)(me->lparam)))==0)
+ {
+ g_free((gchar*)me->lparam);
+ me->lparam=(glong)NULL;
+ }
+
+ /* get search flags */
+ me->wparam=strtoll(s[(*k)++],NULL,10);
+ break;
case SCI_REPLACESEL:
/* get text */
me->lparam=(glong)(g_strcompress(s[(*k)++]));
@@ -415,6 +472,27 @@ static void ReplayMacro(Macro *m)
/* now handle lparam if required */
switch(me->message)
{
+ case SCI_SEARCHNEXT:
+ case SCI_SEARCHPREV:
+ /* check if string is NULL */
+ if(((gchar*)(me->lparam))==NULL)
+ {
+ /* now merge code and data */
+ szNumberAndData=g_strdup_printf("%s,,%lu",szMacroNumber,me->wparam);
+ /* free memory */
+ g_free(szMacroNumber);
+ return szNumberAndData;
+ }
+
+ /* first get string reprisentation of data */
+ pTemp=MakeStringSaveable((gchar*)(me->lparam));
+ /* now merge code and data */
+ szNumberAndData=g_strdup_printf("%s,%s,%lu",szMacroNumber,pTemp,me->wparam);
+ /* free memory */
+ g_free(szMacroNumber);
+ g_free(pTemp);
+ return szNumberAndData;
+
case SCI_REPLACESEL:
/* first get string reprisentation of data */
pTemp=MakeStringSaveable((gchar*)(me->lparam));
@@ -424,6 +502,7 @@ static void ReplayMacro(Macro *m)
g_free(szMacroNumber);
g_free(pTemp);
return szNumberAndData;
+
/* default handler for messages without extra data */
default:
return szMacroNumber;
@@ -431,9 +510,15 @@ static void ReplayMacro(Macro *m)
}
+/* Is there a document open in the editor */
+static gboolean DocumentPresent()
+{
+ return (document_get_current()!=NULL);
+}
+
+
/* check editor notifications and remember editor events */
-static gboolean Notification_Handler(GObject *obj, GeanyEditor *editor, SCNotification *nt,
- gpointer user_data)
+static gboolean Notification_Handler(GObject *obj,GeanyEditor *ed,SCNotification *nt,gpointer ud)
{
MacroEvent *me;
gint i;
@@ -466,9 +551,12 @@ static gboolean Notification_Handler(GObject *obj, GeanyEditor *editor, SCNotifi
}
me=g_new0(MacroEvent,1);
me->message=nt->message;
-/* me->wparam=nt->wParam; */
- /* Special handling for text inserting, duplicate inserted string */
- me->lparam=(me->message==SCI_REPLACESEL)?((glong) g_strdup((gchar *)(nt->lParam))) : nt->lParam;
+ me->wparam=nt->wParam;
+ /* Special handling for text in lparam */
+ me->lparam=(me->message==SCI_SEARCHNEXT ||
+ me->message==SCI_SEARCHPREV ||
+ me->message==SCI_REPLACESEL)
+ ?((glong) g_strdup((gchar *)(nt->lParam))) : nt->lParam;
/* more efficient to create reverse list and reverse it at the end */
RecordingMacro->MacroEvents=g_slist_prepend(RecordingMacro->MacroEvents,me);
@@ -641,7 +729,7 @@ static void LoadSettings(void)
/* extract settings */
bQueryOverwriteMacros=utils_get_setting_boolean(config,"Settings",
- "Question_Macro_Overwrite",FALSE);
+ "Question_Macro_Overwrite",FALSE);
bSaveMacros=utils_get_setting_boolean(config,"Settings","Save_Macros",FALSE);
/* extract macros */
@@ -676,8 +764,10 @@ static void LoadSettings(void)
g_free(pcTemp);
/* now go through macro data generating macros */
for(k=0,m->MacroEvents=NULL;pcMacroCommands[k]!=NULL;)
- m->MacroEvents=g_slist_prepend(m->MacroEvents,GetMacroEventFromString(pcMacroCommands,
- &k));
+ m->MacroEvents=g_slist_prepend(m->MacroEvents,
+ GetMacroEventFromString(pcMacroCommands,
+ &k));
+
/* list created in reverse as more efficient, now turn it around */
m->MacroEvents=g_slist_reverse(m->MacroEvents);
/* macro now complete, add it to the list */
@@ -692,13 +782,6 @@ static void LoadSettings(void)
}
-PluginCallback plugin_callbacks[] =
-{
- { "editor-notify", (GCallback) &Notification_Handler, FALSE, NULL },
- { NULL, NULL, FALSE, NULL }
-};
-
-
/* handle button presses in the preferences dialog box */
static void on_configure_response(GtkDialog *dialog, gint response, gpointer user_data)
{
@@ -767,7 +850,7 @@ void plugin_help(void)
GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
NULL);
-/* setup help text */
+ /* setup help text */
cText=g_strconcat(
_("This Plugin implements Macros in Geany.\n\n"),
_("This plugin allows you to record and use your own macros. "),
@@ -830,7 +913,6 @@ void plugin_help(void)
/* free memory */
g_free(cText);
-
}
@@ -1093,34 +1175,65 @@ static gboolean InitializeMacroRecord(void)
}
+/* function to start the macro recording process */
+static void StartRecordingMacro()
+{
+ /* start recording process, but quit if error, or user cancels */
+ if(!InitializeMacroRecord())
+ return;
+
+ /* start actual recording */
+ scintilla_send_message(document_get_current()->editor->sci,SCI_STARTRECORD,0,0);
+ gtk_widget_hide(Record_Macro_menu_item);
+ gtk_widget_show(Stop_Record_Macro_menu_item);
+}
+
+
+/* function to finish recording a macro */
+static void StopRecordingMacro()
+{
+ scintilla_send_message(document_get_current()->editor->sci,SCI_STOPRECORD,0,0);
+ /* Recorded in reverse as more efficient */
+ RecordingMacro->MacroEvents=g_slist_reverse(RecordingMacro->MacroEvents);
+ /* add macro to list */
+ AddMacroToList(RecordingMacro);
+ /* set ready to record new macro (don't free as macro has been saved in macrolist) */
+ RecordingMacro=NULL;
+ gtk_widget_show(Record_Macro_menu_item);
+ gtk_widget_hide(Stop_Record_Macro_menu_item);
+
+ /* Macros have been changed */
+ bMacrosHaveChanged=TRUE;
+}
+
+
+/* check to see if we are recording a macro and stop it if we are */
+static void on_document_close(GObject *obj, GeanyDocument *doc, gpointer user_data)
+{
+ if(RecordingMacro!=NULL)
+ StopRecordingMacro();
+}
+
+
+PluginCallback plugin_callbacks[] =
+{
+ { "editor-notify", (GCallback) &Notification_Handler, FALSE, NULL },
+ { "document-close", (GCallback) &on_document_close, FALSE, NULL },
+ { NULL, NULL, FALSE, NULL }
+};
+
+
/* handle starting and stopping macro recording */
static void DoMacroRecording(GtkMenuItem *menuitem, gpointer gdata)
{
- if(RecordingMacro==NULL)
- {
- /* start recording process, but quit if error, or user cancels */
- if(!InitializeMacroRecord())
- return;
+ /* can't record if in an empty editor */
+ if(!DocumentPresent())
+ return;
- /* start actual recording */
- scintilla_send_message(document_get_current()->editor->sci,SCI_STARTRECORD,0,0);
- gtk_widget_hide(Record_Macro_menu_item);
- gtk_widget_show(Stop_Record_Macro_menu_item);
- }
- else {
- scintilla_send_message(document_get_current()->editor->sci,SCI_STOPRECORD,0,0);
- /* Recorded in reverse as more efficient */
- RecordingMacro->MacroEvents=g_slist_reverse(RecordingMacro->MacroEvents);
- /* add macro to list */
- AddMacroToList(RecordingMacro);
- /* set ready to record new macro (don't free as macro has been saved in macrolist) */
- RecordingMacro=NULL;
- gtk_widget_show(Record_Macro_menu_item);
- gtk_widget_hide(Stop_Record_Macro_menu_item);
-
- /* Macros have been changed */
- bMacrosHaveChanged=TRUE;
- }
+ if(RecordingMacro==NULL)
+ StartRecordingMacro();
+ else
+ StopRecordingMacro();
}
@@ -1214,6 +1327,200 @@ static void Accel_Render_Edited_CallBack(GtkCellRendererAccel *cell,gchar *iter_
}
+/* Get Search Description string with search text and flags at end*/
+static gchar * GetSearchDescription(gint message,gchar *text,gint flags)
+{
+ return g_strdup_printf(_("Search %s, looking for %s%s%s.%s%s%s%s%s"),
+ message==SCI_SEARCHNEXT?"forewards":"backwards",
+ text==NULL?"":"\"",
+ text==NULL?"clipboard contents":text,
+ text==NULL?"":"\"",
+ (flags&SCFIND_MATCHCASE)==SCFIND_MATCHCASE?" Match case.":"",
+ (flags&SCFIND_WHOLEWORD)==SCFIND_WHOLEWORD?" Match whole word.":"",
+ (flags&SCFIND_WORDSTART)==SCFIND_WORDSTART?" Match start of word.":"",
+ (flags&SCFIND_REGEXP)==SCFIND_REGEXP?" Search by Regular Expression.":"",
+ (flags&SCFIND_POSIX)==SCFIND_POSIX?" Regular Expression is POSIX.":"");
+}
+
+
+/* handle button presses in the preferences dialog box */
+static void on_search_toggle(GtkToggleButton *cb,gpointer user_data)
+{
+ GtkEntry *gtke;
+ GtkLabel *gtkl;
+ gboolean bUseClipboard;
+
+ /* retreive pointers to entry & label */
+ gtke=(GtkEntry*)(g_object_get_data(G_OBJECT(cb),"GeanyMacros_e"));
+ gtkl=(GtkLabel*)(g_object_get_data(G_OBJECT(cb),"GeanyMacros_l"));
+
+ /* find out what we're searching for */
+ bUseClipboard=gtk_toggle_button_get_active(cb);
+
+ /* set entry & label depending on if we're looking for text or not */
+ gtk_widget_set_sensitive((GtkWidget*)gtke,!bUseClipboard);
+ gtk_widget_set_sensitive((GtkWidget*)gtkl,!bUseClipboard);
+}
+
+
+/* Handle editing of options for search */
+static void EditSearchOptions(GtkTreeModel *model,GtkTreeIter *iter)
+{
+ GtkWidget *dialog,*gtke,*hbox,*gtkl;
+ gchar *cTemp,*cData,*cText,*cTemp2;
+ gint iReply=GTK_RESPONSE_OK,i;
+ GtkWidget *vbox,*gtkcb;
+ GtkWidget *cbA,*cbB,*cbC,*cbD,*cbE,*cbF;
+ MacroDetailEntry *mde;
+ gulong flags;
+
+ /* get MacroDetail and data for this line */
+ gtk_tree_model_get(model,iter,2,&mde,3,&cData,-1);
+
+ /* make cText point to search text */
+ cText=strchr(cData,',');
+ cText++;
+
+ /* get search flags */
+ flags=strtoll(cData,NULL,10);
+
+ /* create dialog box */
+ dialog=gtk_dialog_new_with_buttons(_("Search Options:"),
+ GTK_WINDOW(geany->main_widgets->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,NULL);
+
+ /* create buttons */
+ gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Ok"),GTK_RESPONSE_OK);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Cancel"),GTK_RESPONSE_CANCEL);
+
+ /* create box to hold widgets */
+ vbox=gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),vbox);
+ gtk_widget_show(vbox);
+
+ /* create combobox to hold search direction */
+ gtkcb=gtk_combo_box_new_text();
+ gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Search Forwards"));
+ gtk_combo_box_append_text((GtkComboBox*)gtkcb,_("Search Backwards"));
+ gtk_combo_box_set_active((GtkComboBox*)gtkcb,(mde->message==SCI_SEARCHNEXT)?0:1);
+ gtk_box_pack_start(GTK_BOX(vbox),gtkcb,FALSE,FALSE,2);
+ gtk_widget_show(gtkcb);
+
+ /* create checkbox to check for search options */
+ cbA=gtk_check_button_new_with_label(_("Seach for contents of clipboard"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbA),(*cText)==0);
+ gtk_box_pack_start(GTK_BOX(vbox),cbA,FALSE,FALSE,2);
+ /* ensure we monitor for change in this button */
+ g_signal_connect(cbA,"toggled",G_CALLBACK(on_search_toggle),dialog);
+ gtk_widget_show(cbA);
+
+
+ /* create box to hold search text entry box, and label */
+ hbox=gtk_hbox_new(FALSE,0);
+ gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,2);
+ gtk_widget_show(hbox);
+
+ gtkl=gtk_label_new(_("Seach for:"));
+ gtk_box_pack_start(GTK_BOX(hbox),gtkl,FALSE,FALSE,2);
+ gtk_widget_show(gtkl);
+ /* save pointer to label */
+ g_object_set_data(G_OBJECT(cbA),"GeanyMacros_l",gtkl);
+ gtk_widget_set_sensitive((GtkWidget*)gtkl,(*cText)!=0);
+
+ gtke=gtk_entry_new();
+ if((*cText)!=0)
+ gtk_entry_set_text(GTK_ENTRY(gtke),cText);
+
+ gtk_box_pack_start(GTK_BOX(hbox),gtke,FALSE,FALSE,2);
+ gtk_widget_show(gtke);
+ /* save pointer to entry */
+ g_object_set_data(G_OBJECT(cbA),"GeanyMacros_e",gtke);
+ gtk_widget_set_sensitive((GtkWidget*)gtke,(*cText)!=0);
+
+ /* create checkbox to check for search options */
+ cbB=gtk_check_button_new_with_label(_("Seach is case sensitive"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbB),(flags&SCFIND_MATCHCASE)==SCFIND_MATCHCASE);
+ gtk_box_pack_start(GTK_BOX(vbox),cbB,FALSE,FALSE,2);
+
+ cbC=gtk_check_button_new_with_label(_("Seach for whole word"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbC),(flags&SCFIND_WHOLEWORD)==SCFIND_WHOLEWORD);
+ gtk_box_pack_start(GTK_BOX(vbox),cbC,FALSE,FALSE,2);
+
+ cbD=gtk_check_button_new_with_label(_("Seach for start of word"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbD),(flags&SCFIND_WORDSTART)==SCFIND_WORDSTART);
+ gtk_box_pack_start(GTK_BOX(vbox),cbD,FALSE,FALSE,2);
+
+ cbE=gtk_check_button_new_with_label(_("Seach text is regular expression"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbE),(flags&SCFIND_REGEXP)==SCFIND_REGEXP);
+ gtk_box_pack_start(GTK_BOX(vbox),cbE,FALSE,FALSE,2);
+
+ cbF=gtk_check_button_new_with_label(_("Seach text is POSIX compatible"));
+ /* if search text is empty then to seach for clipboard contents */
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbF),(flags&SCFIND_POSIX)==SCFIND_POSIX);
+ gtk_box_pack_start(GTK_BOX(vbox),cbF,FALSE,FALSE,2);
+
+ gtk_widget_show_all(vbox);
+
+ while(iReply==GTK_RESPONSE_OK)
+ {
+ iReply=gtk_dialog_run(GTK_DIALOG(dialog));
+
+ if(iReply==GTK_RESPONSE_OK)
+ {
+ /* handle change in options */
+
+ /* check search direction 0=foreward, 1=backwards */
+ iReply=gtk_combo_box_get_active((GtkComboBox*)gtkcb);
+
+ /* calculate macro detail of relavent detail */
+ i=0;
+ while(MacroDetails[i].message!=SCI_SEARCHNEXT) i++;
+ mde=(MacroDetailEntry *)(&MacroDetails[i+iReply]);
+
+ /* calculate flags */
+ flags=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbB))?SCFIND_MATCHCASE:0;
+ flags|=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbC))?SCFIND_WHOLEWORD:0;
+ flags|=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbD))?SCFIND_WORDSTART:0;
+ flags|=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbE))?SCFIND_REGEXP:0;
+ flags|=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbF))?SCFIND_POSIX:0;
+
+ /* get search string or NULL if using clipboard */
+ cText=(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbA)))?
+ NULL:(gchar*)gtk_entry_get_text((GtkEntry*)(gtke));
+
+ /* get new data */
+ cData=g_strdup_printf("%lu,%s",flags,(cText==NULL)?"":cText);
+
+ /* get new text */
+ cText=GetSearchDescription(mde->message,cText,flags);
+
+ /* get old data for this line */
+ gtk_tree_model_get(model,iter,0,&cTemp,3,&cTemp2,-1);
+
+ /* set text and macro detail */
+ gtk_list_store_set(GTK_LIST_STORE(model),iter,0,cText,2,mde,3,cData,-1);
+
+ /* free up old text */
+ g_free(cTemp);
+ g_free(cTemp2);
+
+ /* break out of loop */
+ break;
+ }
+
+ }
+
+ /* tidy up */
+ gtk_widget_destroy(dialog);
+}
+
+
+/* Handle editing of text for SCI_REPLACESEL */
static void EditSCIREPLACESELText(GtkTreeModel *model,GtkTreeIter *iter)
{
GtkWidget *dialog,*gtke,*hbox,*gtkl;
@@ -1286,6 +1593,7 @@ static void combo_edited(GtkCellRendererText *cell,gchar *iter_id,gchar *new_tex
MacroDetailEntry *mde;
gint i;
gchar *cTemp,*cTemp2;
+ gboolean bNeedButtonUpdate=FALSE;
/* find MacroDetails that has the setting of new setting */
i=0;
@@ -1301,16 +1609,35 @@ static void combo_edited(GtkCellRendererText *cell,gchar *iter_id,gchar *new_tex
/* handle freeing of string if needed */
g_free(cTemp);
- if(mde->message==SCI_REPLACESEL)
+ if(mde->message==SCI_REPLACESEL ||
+ mde->message==SCI_SEARCHNEXT ||
+ mde->message==SCI_SEARCHPREV)
+ {
g_free(cTemp2);
+ bNeedButtonUpdate=TRUE;
+ }
+
+ /* see what text will have to change into */
+ cTemp=(gchar*)(MacroDetails[i].description);
+ cTemp2=NULL;
+ if(MacroDetails[i].message==SCI_REPLACESEL)
+ {
+ cTemp=g_strdup_printf(_("Insert/replace with \"\""));
+ bNeedButtonUpdate=TRUE;
+ }
+ else if(MacroDetails[i].message==SCI_SEARCHNEXT ||
+ MacroDetails[i].message==SCI_SEARCHPREV)
+ {
+ cTemp=GetSearchDescription(MacroDetails[i].message,NULL,0);
+ cTemp2=g_strdup("0,");
+ bNeedButtonUpdate=TRUE;
+ }
/* Update the model */
- gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,(MacroDetails[i].message==SCI_REPLACESEL?
- g_strdup_printf(_("Insert/replace with \"\"")):MacroDetails[i].description),2,
- &(MacroDetails[i]),3,NULL,-1);
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,cTemp,2,&(MacroDetails[i]),3,cTemp2,-1);
/* check if changing to or from SCI_REPLACESEL and enable/disable edit button as needed */
- if(mde->message==SCI_REPLACESEL || MacroDetails[i].message==SCI_REPLACESEL)
+ if(bNeedButtonUpdate)
g_signal_emit_by_name(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),"changed",
G_TYPE_NONE);
}
@@ -1335,21 +1662,23 @@ static void DoEditMacroElementsSelectionChanged(GtkTreeSelection *selection,gpoi
gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,2,&mde,-1);
/* find delete button & enable it*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_DELETE);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bD"));
gtk_widget_set_sensitive(button,TRUE);
/* find edit text button & enable it if looking at a SCI_REPLACESEL item*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_EDIT);
- gtk_widget_set_sensitive(button,mde->message==SCI_REPLACESEL);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bC"));
+ gtk_widget_set_sensitive(button,mde->message==SCI_REPLACESEL ||
+ mde->message==SCI_SEARCHNEXT ||
+ mde->message==SCI_SEARCHPREV);
/* get copy of iteraton */
iter2=iter;
/* if can move to next node then it's not the last. use to set Move down */
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_DOWN);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bB"));
gtk_widget_set_sensitive(button,gtk_tree_model_iter_next(GTK_TREE_MODEL(model),&iter2));
/* find Move up button & enable/disable it */
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_UP);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bA"));
/* get the path of the current selected line */
tpTemp=gtk_tree_model_get_path(GTK_TREE_MODEL(model),&iter);
/* if has previous then can be moved up a line */
@@ -1361,19 +1690,19 @@ static void DoEditMacroElementsSelectionChanged(GtkTreeSelection *selection,gpoi
else
{
/* find delete button & diable it*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_DELETE);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bD"));
gtk_widget_set_sensitive(button,FALSE);
/* find edit text button & diable it*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_EDIT);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bC"));
gtk_widget_set_sensitive(button,FALSE);
/* find Move up button & diable it*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_UP);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bA"));
gtk_widget_set_sensitive(button,FALSE);
/* find Move Down button & diable it*/
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_DOWN);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bB"));
gtk_widget_set_sensitive(button,FALSE);
}
@@ -1383,7 +1712,7 @@ static void DoEditMacroElementsSelectionChanged(GtkTreeSelection *selection,gpoi
/* edit individual existing macro */
static void EditMacroElements(Macro *m)
{
- GtkWidget *table,*dialog;
+ GtkWidget *table,*dialog,*button;
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkTreeSelection *selection;
@@ -1411,26 +1740,43 @@ static void EditMacroElements(Macro *m)
{
me=(MacroEvent*)(gsl->data);
i=0;
- while(MacroDetails[i].description!=NULL) {
+ while(MacroDetails[i].description!=NULL)
+ {
if(MacroDetails[i].message==me->message) break;
i++;
}
gtk_list_store_append(ls,&iter); /* Acquire an iterator */
/* set text, pointer to macro detail, and any ascociated string */
- gtk_list_store_set(ls,&iter,0,(me->message==SCI_REPLACESEL?
- g_strdup_printf(_("Insert/replace with \"%s\""),(gchar*)(me->lparam)):
- MacroDetails[i].description),2,&(MacroDetails[i]),3,
- (me->message==SCI_REPLACESEL?g_strdup((gchar*)(me->lparam)):NULL),-1);
+ cTemp=(gchar*)(MacroDetails[i].description);
+ cTemp2=NULL;
+ if(me->message==SCI_REPLACESEL)
+ {
+ cTemp=g_strdup_printf(_("Insert/replace with \"%s\""),
+ (gchar*)(me->lparam));
+ cTemp2=g_strdup((gchar*)(me->lparam));
+ }
+ else if(MacroDetails[i].message==SCI_SEARCHNEXT ||
+ MacroDetails[i].message==SCI_SEARCHPREV)
+ {
+ cTemp=GetSearchDescription(MacroDetails[i].message,(gchar*)(me->lparam),
+ me->wparam);
+ cTemp2=g_strdup_printf("%lu,%s",me->wparam,((gchar*)(me->lparam)==NULL)?
+ "":((gchar*)(me->lparam)));
+ }
+
+ gtk_list_store_set(ls,&iter,0,cTemp,2,&(MacroDetails[i]),3,cTemp2,-1);
gsl=g_slist_next(gsl);
}
/* create list store for combo renderer */
lsCombo=gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_POINTER);
i=0;
- while(MacroDetails[i].description!=NULL) {
+ while(MacroDetails[i].description!=NULL)
+ {
gtk_list_store_append(lsCombo,&iter);
- gtk_list_store_set(lsCombo,&iter,0,MacroDetails[i].description,1,&(MacroDetails[i]),-1);
+ gtk_list_store_set(lsCombo,&iter,0,MacroDetails[i].description,1,
+ &(MacroDetails[i]),-1);
i++;
}
@@ -1445,8 +1791,8 @@ static void EditMacroElements(Macro *m)
gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(table),GTK_TREE_VIEW_GRID_LINES_BOTH);
/* add column */
- column=gtk_tree_view_column_new_with_attributes(_("Event"),renderer,"text",0,"text-column",1,
- NULL);
+ column=gtk_tree_view_column_new_with_attributes(_("Event"),renderer,"text",0,"text-column"
+ ,1,NULL);
g_signal_connect(renderer,"edited",G_CALLBACK(combo_edited),table);
gtk_tree_view_append_column(GTK_TREE_VIEW(table),column);
@@ -1456,23 +1802,27 @@ static void EditMacroElements(Macro *m)
/* add table to dialog */
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),table);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),table,FALSE,FALSE,2);
+// gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),table,FALSE,FALSE,2);
gtk_widget_show(table);
/* add buttons */
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("Move _Up"),GEANY_MACRO_BUTTON_UP);
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("Move Do_wn"),GEANY_MACRO_BUTTON_DOWN);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("Move _Up"),GEANY_MACRO_BUTTON_UP);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bA",button);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("Move Do_wn"),GEANY_MACRO_BUTTON_DOWN);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bB",button);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("New _Above"),GEANY_MACRO_BUTTON_ABOVE);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("New _Below"),GEANY_MACRO_BUTTON_BELOW);
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Edit Text"),GEANY_MACRO_BUTTON_EDIT);
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Delete"),GEANY_MACRO_BUTTON_DELETE);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Edit"),GEANY_MACRO_BUTTON_EDIT);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bC",button);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Delete"),GEANY_MACRO_BUTTON_DELETE);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bD",button);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Ok"),GEANY_MACRO_BUTTON_APPLY);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Cancel"),GEANY_MACRO_BUTTON_CANCEL);
/* listen for changes in selection */
selection=gtk_tree_view_get_selection(GTK_TREE_VIEW(table));
- g_signal_connect(G_OBJECT(selection),"changed",G_CALLBACK(DoEditMacroElementsSelectionChanged),
- dialog);
+ g_signal_connect(G_OBJECT(selection),"changed",
+ G_CALLBACK(DoEditMacroElementsSelectionChanged),dialog);
/* call callback: this will set buttons acordingly */
DoEditMacroElementsSelectionChanged(selection,dialog);
@@ -1494,9 +1844,14 @@ static void EditMacroElements(Macro *m)
if(i==GEANY_MACRO_BUTTON_DELETE)
{
/* see if need to free non-static string */
- gtk_tree_model_get(GTK_TREE_MODEL(ls),&iter,0,&cTemp,2,&mde,-1);
- if(mde->message==SCI_REPLACESEL)
+ gtk_tree_model_get(GTK_TREE_MODEL(ls),&iter,0,&cTemp,2,&mde,3,&cTemp2,-1);
+ if(mde->message==SCI_REPLACESEL ||
+ mde->message==SCI_SEARCHNEXT ||
+ mde->message==SCI_SEARCHPREV)
+ {
g_free(cTemp);
+ g_free(cTemp2);
+ }
/* remove element */
gtk_list_store_remove(ls,&iter);
@@ -1569,6 +1924,9 @@ static void EditMacroElements(Macro *m)
gtk_tree_model_get(GTK_TREE_MODEL(ls),&iter,2,&mde,-1);
if(mde->message==SCI_REPLACESEL)
EditSCIREPLACESELText(GTK_TREE_MODEL(ls),&iter);
+ else if(mde->message==SCI_SEARCHNEXT || mde->message==SCI_SEARCHPREV)
+ EditSearchOptions(GTK_TREE_MODEL(ls),&iter);
+
}
} //end of commands that require line to be selected
@@ -1602,10 +1960,21 @@ static void EditMacroElements(Macro *m)
me->message=mde->message;
me->lparam=0;
+ me->wparam=0;
/* Special handling for text inserting, duplicate inserted string */
if(me->message==SCI_REPLACESEL)
- me->lparam=(glong)((cTemp!=NULL)?g_strdup(cTemp):g_strdup_printf(""));
+ me->lparam=(glong)((cTemp!=NULL)?g_strdup(cTemp):g_strdup(""));
+
+ /* Special handling for search */
+ if(me->message==SCI_SEARCHNEXT || me->message==SCI_SEARCHPREV)
+ {
+ cTemp2=strchr(cTemp,',');
+ cTemp2++;
+
+ me->lparam=(glong)(((*cTemp2)==0)?NULL:g_strdup(cTemp2));
+ me->wparam=strtoll(cTemp,NULL,10);
+ }
/* more efficient to create reverse list and reverse it at the end */
m->MacroEvents=g_slist_prepend(m->MacroEvents,me);
@@ -1631,7 +2000,8 @@ static void EditMacroElements(Macro *m)
/* free any non-static text */
g_free((void*)(cTemp));
- if(mde->message==SCI_REPLACESEL)
+ if(mde->message==SCI_REPLACESEL || mde->message==SCI_SEARCHNEXT ||
+ mde->message==SCI_SEARCHPREV)
g_free(cTemp2);
/* get next event */
@@ -1661,11 +2031,11 @@ static void DoEditMacroSelectionChanged(GtkTreeSelection *selection,gpointer dat
bHasItemSelected=gtk_tree_selection_get_selected(selection,&model,&iter);
/* now set button sensitive or not depending if there is something for them to act on */
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_RERECORD);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bA"));
gtk_widget_set_sensitive(button,bHasItemSelected);
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_EDIT);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bB"));
gtk_widget_set_sensitive(button,bHasItemSelected);
- button=gtk_dialog_get_widget_for_response(dialog,GEANY_MACRO_BUTTON_DELETE);
+ button=(GtkWidget*)(g_object_get_data(G_OBJECT(dialog),"GeanyMacros_bC"));
gtk_widget_set_sensitive(button,bHasItemSelected);
}
@@ -1673,7 +2043,7 @@ static void DoEditMacroSelectionChanged(GtkTreeSelection *selection,gpointer dat
/* do editing of existing macros */
static void DoEditMacro(GtkMenuItem *menuitem, gpointer gdata)
{
- GtkWidget *table,*dialog;
+ GtkWidget *table,*dialog,*button;
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkTreeSelection *selection;
@@ -1733,14 +2103,16 @@ static void DoEditMacro(GtkMenuItem *menuitem, gpointer gdata)
GTK_SELECTION_SINGLE);
/* add table to dialog */
- gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),table);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),table,FALSE,FALSE,2);
gtk_widget_show(table);
/* add buttons */
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Re-Record"),GEANY_MACRO_BUTTON_RERECORD);
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Edit"),GEANY_MACRO_BUTTON_EDIT);
- gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Delete"),GEANY_MACRO_BUTTON_DELETE);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Re-Record"),GEANY_MACRO_BUTTON_RERECORD);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bA",button);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Edit"),GEANY_MACRO_BUTTON_EDIT);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bB",button);
+ button=gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Delete"),GEANY_MACRO_BUTTON_DELETE);
+ g_object_set_data(G_OBJECT(dialog),"GeanyMacros_bC",button);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Ok"),GEANY_MACRO_BUTTON_CANCEL);
/* listen for changes in selection */
@@ -1783,7 +2155,7 @@ static void DoEditMacro(GtkMenuItem *menuitem, gpointer gdata)
}
/* handle re-record macro */
- if(i==GEANY_MACRO_BUTTON_RERECORD && bEditable)
+ if(i==GEANY_MACRO_BUTTON_RERECORD && bEditable && DocumentPresent())
{
m=FindMacroByName(cTemp);
/* ensure have empty recording macro */
@@ -1812,7 +2184,7 @@ static void DoEditMacro(GtkMenuItem *menuitem, gpointer gdata)
/* Signal that macros have changed (and need to be saved) */
bMacrosHaveChanged=TRUE;
}
-
+
/* free memory */
g_free(cTemp);
}
@@ -1835,7 +2207,7 @@ void plugin_init(GeanyData *data)
/* Calculate what shift '0' to '9 will be (£ is above 3 on uk keyboard, but it's # or ~ on us
* keyboard.)
* there must be an easier way than this of working this out, but I've not figured it out.
- * This is needed to play nicely with the Geany Numbered Bookmarks plugin
+ * This is needed to play nicely with the Geany Numbered Bookmarks plugin
*/
/* go through '0' to '9', work out hardware keycode, then find out what shift+this keycode
Modified: geanynumberedbookmarks/src/geanynumberedbookmarks.c
81 files changed, 41 insertions(+), 40 deletions(-)
===================================================================
@@ -81,7 +81,7 @@
"[FileData]";
/* Definitions for bookmark images */
-static gchar * aszMarkerImage0[] =
+static const gchar * aszMarkerImage0[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -102,7 +102,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage1[] =
+static const gchar * aszMarkerImage1[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -123,7 +123,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage2[] =
+static const gchar * aszMarkerImage2[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -144,7 +144,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage3[] =
+static const gchar * aszMarkerImage3[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -165,7 +165,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage4[] =
+static const gchar * aszMarkerImage4[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -186,7 +186,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage5[] =
+static const gchar * aszMarkerImage5[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -207,7 +207,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage6[] =
+static const gchar * aszMarkerImage6[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -228,7 +228,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage7[] =
+static const gchar * aszMarkerImage7[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -249,7 +249,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage8[] =
+static const gchar * aszMarkerImage8[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -270,7 +270,7 @@
"..B**********B...",
"...BBBBBBBBBB...."
};
-static gchar * aszMarkerImage9[] =
+static const gchar * aszMarkerImage9[] =
{
"17 14 3 1", /* width height colours characters-per-pixel */
". c None",
@@ -292,7 +292,7 @@
"...BBBBBBBBBB...."
};
-static gchar ** aszMarkerImages[]=
+static const gchar ** aszMarkerImages[]=
{
aszMarkerImage0,aszMarkerImage1,aszMarkerImage2,aszMarkerImage3,aszMarkerImage4,
aszMarkerImage5,aszMarkerImage6,aszMarkerImage7,aszMarkerImage8,aszMarkerImage9
@@ -463,7 +463,7 @@ static void LoadSettings(void)
/* extract settings */
bCenterWhenGotoBookmark=utils_get_setting_boolean(config,"Settings",
- "Center_When_Goto_Bookmark",FALSE);
+ "Center_When_Goto_Bookmark",FALSE);
bRememberFolds=utils_get_setting_boolean(config,"Settings","Remember_Folds",FALSE);
/* extract data about files */
@@ -521,7 +521,7 @@ static void DefineMarkers(ScintillaObject* sci)
gint i;
for(i=0;i<10;i++)
scintilla_send_message(sci,SCI_MARKERDEFINEPIXMAP,i+BOOKMARK_BASE,
- (glong)(aszMarkerImages[i]));
+ (glong)(aszMarkerImages[i]));
}
@@ -586,7 +586,8 @@ static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_dat
struct stat sBuf;
GtkWidget *dialog;
gchar *cFoldData=NULL;
- gint iBits,iFlags,iBitCounter;
+ /* keep compiler happy & initialise iBits: will logically be initiated anyway */
+ gint iBits=0,iFlags,iBitCounter;
/* ensure have markers set */
CheckEditorSetup();
@@ -595,16 +596,16 @@ static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_dat
/* check to see if file has changed since geany last saved it */
fd=GetFileData(doc->file_name);
if(stat(doc->file_name,&sBuf)==0 && fd!=NULL && fd->LastChangedTime!=-1 &&
- fd->LastChangedTime!=sBuf.st_mtime)
+ fd->LastChangedTime!=sBuf.st_mtime)
{
/* notify user that file has been changed */
dialog=gtk_message_dialog_new(GTK_WINDOW(geany->main_widgets->window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_NONE,
- _("'%s' has been edited since it was last saved by geany. Marker positions may \
-be unreliable and will not be loaded.\nPress Ignore to try an load markers anyway."),
- doc->file_name);
+ GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_NONE,
+ _("'%s' has been edited since it was last saved by g\
+ eany. Marker positions may be unreliable and will \
+ not be loaded.\nPress Ignore to try an load marker\
+ s anyway."),doc->file_name);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Okay"),GTK_RESPONSE_OK);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Ignore"),GTK_RESPONSE_REJECT);
l=gtk_dialog_run(GTK_DIALOG(dialog));
@@ -624,9 +625,9 @@ static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_dat
if(fd->pcFolding==NULL || bRememberFolds==FALSE)
break;
- cFoldData=fd->pcFolding;
+ cFoldData=fd->pcFolding;
- /* first ensure fold positions exist */
+ /* first ensure fold positions exist */
scintilla_send_message(sci,SCI_COLOURISE,0,-1);
iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
@@ -637,14 +638,14 @@ static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_dat
iFlags=scintilla_send_message(sci,SCI_GETFOLDLEVEL,i,0);
/* ignore non-folding lines */
if((iFlags & SC_FOLDLEVELHEADERFLAG)==0)
- continue;
+ continue;
- /* get next 6 fold states if needed */
+ /* get next 6 fold states if needed */
if(iBitCounter==6)
{
- iBitCounter=0;
- iBits=base64_char_to_int[(gint)(*cFoldData)];
- cFoldData++;
+ iBitCounter=0;
+ iBits=base64_char_to_int[(gint)(*cFoldData)];
+ cFoldData++;
}
/* set fold if needed */
@@ -715,8 +716,8 @@ static void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_dat
if(iBitCounter!=0)
{
guiFold=(guint8)base64_int_to_char[guiFold];
- g_byte_array_append(gbaFoldData,&guiFold,1);
- }
+ g_byte_array_append(gbaFoldData,&guiFold,1);
+ }
/* transfer data to text string */
fdTemp->pcFolding=g_strndup((gchar*)(gbaFoldData->data),gbaFoldData->len);
@@ -745,7 +746,7 @@ static void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_dat
static gint GetLine(ScintillaObject* sci)
{
return scintilla_send_message(sci,SCI_LINEFROMPOSITION,
- scintilla_send_message(sci,SCI_GETCURRENTPOS,10,0),0);
+ scintilla_send_message(sci,SCI_GETCURRENTPOS,10,0),0);
}
@@ -765,7 +766,7 @@ static void on_configure_response(GtkDialog *dialog, gint response, gpointer use
/* first see if settings are going to change */
bSettingsHaveChanged=(bRememberFolds!=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1)));
bSettingsHaveChanged|=(bCenterWhenGotoBookmark!=gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(cb2)));
+ GTK_TOGGLE_BUTTON(cb2)));
/* set new settings settings */
bRememberFolds=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1));
@@ -811,11 +812,10 @@ void plugin_help(void)
GtkWidget *dialog,*label,*scroll;
/* create dialog box */
- dialog=gtk_dialog_new_with_buttons(_("Numbered Bookmarks help"),
- GTK_WINDOW(geany->main_widgets->window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
- NULL);
+ dialog=gtk_dialog_new_with_buttons(_("Numbered Bookmarks help"),
+ GTK_WINDOW(geany->main_widgets->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,NULL);
/* create label */
label=gtk_label_new(
@@ -842,7 +842,7 @@ void plugin_help(void)
/* create scrolled window to display label */
scroll=gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy((GtkScrolledWindow*)scroll,GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_add_with_viewport((GtkScrolledWindow*)scroll,label);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),scroll);
@@ -882,6 +882,7 @@ static void GotoBookMark(gint iBookMark)
/* make sure view is not beyond start or end of document */
if(iLine+iLinesVisible>iLineCount)
iLine=iLineCount-iLinesVisible;
+
if(iLine<0)
iLine=0;
@@ -1019,7 +1020,7 @@ void plugin_init(GeanyData *data)
/* set key press monitor handle */
key_release_signal_id=g_signal_connect(geany->main_widgets->window,"key-release-event",
- G_CALLBACK(Key_Released_CallBack),NULL);
+ G_CALLBACK(Key_Released_CallBack),NULL);
}
@@ -1042,7 +1043,7 @@ void plugin_cleanup(void)
if(documents[i]->is_valid) {
sci=documents[i]->editor->sci;
for(k=0;k<9;k++)
- scintilla_send_message(sci,SCI_MARKERDELETEALL,BOOKMARK_BASE+k,0);
+ scintilla_send_message(sci,SCI_MARKERDELETEALL,BOOKMARK_BASE+k,0);
}
Modified: po/POTFILES.in
40 files changed, 39 insertions(+), 1 deletions(-)
===================================================================
@@ -50,9 +50,47 @@ debugger/src/atree.c
devhelp/src/dhp.h
devhelp/src/dhp-object.c
devhelp/src/dhp-plugin.c
-devhelp/src/dhp-codesearch.c
devhelp/src/dhp-manpages.c
devhelp/src/dhp-settings.c
+# bundled libdevhelp2
+devhelp/devhelp/dh-assistant.c
+devhelp/devhelp/dh-assistant.h
+devhelp/devhelp/dh-assistant-view.c
+devhelp/devhelp/dh-assistant-view.h
+devhelp/devhelp/dh-base.c
+devhelp/devhelp/dh-base.h
+devhelp/devhelp/dh-book.c
+devhelp/devhelp/dh-book.h
+devhelp/devhelp/dh-book-manager.c
+devhelp/devhelp/dh-book-manager.h
+devhelp/devhelp/dh-book-tree.c
+devhelp/devhelp/dh-book-tree.h
+devhelp/devhelp/dh-enum-types.c
+devhelp/devhelp/dh-enum-types.h
+devhelp/devhelp/dh-error.c
+devhelp/devhelp/dh-error.h
+devhelp/devhelp/dh-keyword-model.c
+devhelp/devhelp/dh-keyword-model.h
+devhelp/devhelp/dh-link.c
+devhelp/devhelp/dh-link.h
+devhelp/devhelp/dh-marshal.c
+devhelp/devhelp/dh-marshal.h
+devhelp/devhelp/dh-parser.c
+devhelp/devhelp/dh-parser.h
+devhelp/devhelp/dh-preferences.c
+devhelp/devhelp/dh-preferences.h
+devhelp/devhelp/dh-search.c
+devhelp/devhelp/dh-search.h
+devhelp/devhelp/dh-util.c
+devhelp/devhelp/dh-util.h
+devhelp/devhelp/dh-window.c
+devhelp/devhelp/dh-window.h
+devhelp/devhelp/eggfindbar.c
+devhelp/devhelp/eggfindbar.h
+devhelp/devhelp/ige-conf.c
+devhelp/devhelp/ige-conf-gconf.c
+devhelp/devhelp/ige-conf.h
+devhelp/devhelp/ige-conf-private.h
# geanydoc
geanydoc/tests/unittests.c
@@ Diff output truncated at 100000 characters. @@
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Plugins-Commits
mailing list