Branch: refs/heads/master Author: Dimitar Zhekov dimitar.zhekov@gmail.com Committer: Dimitar Zhekov dimitar.zhekov@gmail.com Date: Tue, 18 Feb 2014 19:20:19 UTC Commit: a33f914cfb8e8716b71eda947a67ca8dc45aab32 https://github.com/geany/geany-plugins/commit/a33f914cfb8e8716b71eda947a67ca...
Log Message: ----------- scope - remember initial ignore count, version 0.93.2
Modified Paths: -------------- scope/ChangeLog scope/NEWS scope/data/scope.glade scope/docs/codes.html scope/docs/scope.html scope/src/break.c scope/src/scope.c scope/src/store/scptreestore.c scope/src/views.c scope/src/views.h
Modified: scope/ChangeLog 32 files changed, 30 insertions(+), 2 deletions(-) =================================================================== @@ -1,3 +1,30 @@ +2013-02-17 Dimitar Zhekov dimitar.zhekov@gmail.com + + * src/store/scptreestore.c: + Fixed warning generated by emitting "rows-reordered" for empty + brances (g_new() returns NULL for 0 elements). + * docs/scope.html, src/scope.c: + Increased version to 0.93.2. + + +2013-02-13 Dimitar Zhekov dimitar.zhekov@gmail.com + + * data/scope.glade, docs/codes.html, docs/scope.html, src/break.c, + src/views.c, src/views.h: + Remember the total (initial) breakpoint ignore count and restore + it on each run. + * docs/codes.html, docs/scope.html: + Small changes and clarifications. + + +2013-01-08 Dimitar Zhekov dimitar.zhekov@gmail.com + + * src/utils.c: + Check whether file from a thread/breakpoint/stack location exists + before attempting to open it (gdb 7.6+ includes "fullname" for + missing files). + + 2013-01-06 Dimitar Zhekov dimitar.zhekov@gmail.com
* data/scope.glade, src/break.c: @@ -25,6 +52,7 @@ * docs/scope.html, src/scope.c: Increased version to 0.93.1.
+ 2013-10-26 Dimitar Zhekov dimitar.zhekov@gmail.com
* src/memory.c: @@ -90,8 +118,8 @@
2013-08-25 Dimitar Zhekov dimitar.zhekov@gmail.com
- * docs/codes.html, docs/scope.html, src/inspect.c, - src/prefs.c, src/prefs.h, src/views.c: + * docs/codes.html, docs/scope.html, src/inspect.c, src/prefs.c, + src/prefs.h, src/views.c: Fixed Inspect Refresh. Added an option to disable Inspect Refresh/update in Hang mode (causes internal gdb error).
Modified: scope/NEWS 9 files changed, 8 insertions(+), 1 deletions(-) =================================================================== @@ -1,3 +1,10 @@ +Scope 0.93.2 (2013-02-13): + + * Remember the total (initial) breakpoint ignore count and + restore it on each run. Saving the current (remaining) value + across restarts was not very useful. + + Scope 0.93.1 (2014-01-06):
* Show breakpoint origin in the type column, with tooltip. @@ -86,7 +93,7 @@ Scope 0.79 (2012-12-27) Scope 0.78 (2012-12-23)
* Added option "keep_exec_point" to keep the execution point marker - and Threads location columns when a thread execution is resumed. + and Threads location column when a thread execution is resumed.
Scope 0.77 (2012-12-16)
Modified: scope/data/scope.glade 2 files changed, 2 insertions(+), 0 deletions(-) =================================================================== @@ -1407,6 +1407,8 @@ <column type="gchararray" utf8_collate="false"/> <!-- column-name break_store_script --> <column type="gchararray" utf8_collate="false"/> + <!-- column-name break_store_ignnow --> + <column type="gchararray" utf8_collate="false"/> <!-- column-name break_store_pending --> <column type="gboolean"/> <!-- column-name break_store_location -->
Modified: scope/docs/codes.html 24 files changed, 16 insertions(+), 8 deletions(-) =================================================================== @@ -41,20 +41,28 @@
<tr><td class="nowrap">022<id>-break-after</td> <td class="tab">breakpoint <em>Ignore</em> column edited</td> - <td class="tab"><id>-break-info</td></tr> + <td class="tab">022-break-info <id></td></tr>
-<tr><td class="nowrap">022<id>-break-condition</td> +<tr><td class="nowrap">023<id>-break-after</td> + <td class="tab">run program if ignore != [ignore]</td> + <td class="tab">022-break-info <id></td></tr> + +<tr><td class="nowrap">023<id>-break-condition</td> <td class="tab">breakpoint <em>Condition</em> column edited</td> - <td class="tab"><id>-break-info</td></tr> + <td class="tab">-break-info <id></td></tr>
-<tr><td class="nowrap">022<id>-break-commands</td> +<tr><td class="nowrap">023<id>-break-commands</td> <td class="tab">breakpoint <em>Script</em> column edited</td> - <td class="tab"><id>-break-info</td></tr> + <td class="tab">-break-info <id></td></tr>
-<tr><td class="nowrap">023<id>-break-delete</td> +<tr><td class="nowrap">024<id>-break-delete</td> <td class="tab"><em>Delete</em> or un-<em>Toggle breakpoint</em></td> <td class="tab">remove breakpoint from the list or clear id</td></tr>
+<tr><td class="nowrap">022-break-info</td> + <td class="tab">see 022<id>-break-after</td> + <td class="tab">load break info and set [IGNORE] count</td></tr> + <tr><td class="nowrap">02-break-list</td> <td class="tab"><em>Refresh</em> breakpoints</td> <td class="tab">full breakpoint list refresh (without token is partial)</td></tr> @@ -100,7 +108,7 @@ <td class="tab">029<fid>-data-list-register-values <all></td>
<tr><td class="nowrap">029<fid>-data-list-register-values</td> - <td class="tab"><em>Refresh</em> registers, see above</td> + <td class="tab"><em>Refresh</em> registers, see prev line</td> <td class="tab">update register values</td>
<tr><td class="nowrap">02<f><fid>-data-list-register-values</td> @@ -168,7 +176,7 @@ <td class="tab">049<fid>-data-list-register-values <changed></td>
<tr><td class="nowrap">049<fid>-data-list-register-values</td> - <td class="tab">views idle update, see above</td> + <td class="tab">views idle update, see prev line</td> <td class="tab">same as 02</td>
<tr><td class="nowrap">04<scid>-var-evaluate-expression</td>
Modified: scope/docs/scope.html 19 files changed, 14 insertions(+), 5 deletions(-) =================================================================== @@ -50,7 +50,7 @@ <li><a href="#local_watch">Locals/Watches</a></li> <li><a href="#console">Debug Console</a></li> </ul></li> - <li>Side panel<ul> + <li>Side pages<ul> <li><a href="#inspect">Inspect</a></li> <li><a href="#register">Registers</a></li> </ul></li> @@ -363,14 +363,21 @@ invoke <em>Add Break / Add Watch</em> [HRD], which brings up the command dialog.</p>
<p>Breakpoints created with MI commands are kept in the list permanently. When a temporary MI -breakpoint is hit, it's Id column is cleared. <em>Toggle breakpoint</em>, <em>Add Break</em> -and <em>Add Watch</em> use MI commands.</p> +breakpoint is hit, it's <em>Id</em> column is cleared. <em>Toggle breakpoint</em>, <em>Add +Break</em> and <em>Add Watch</em> use MI commands.</p>
<p>Breakpoints created with CLI commands (from scripts or <em>GDB Command</em>) are removed when the program is unloaded. When a temporary CLI breakpoint is hit, it's removed. If a MI command produces none or invalid output, and the breapoint appears later (from Refresh or async message), Scope will consider it CLI.</p>
+<p>Scope remembers the total (initial) ignore count, and re-applies it on each run. When a +breakpoint is applied, <em>Ignore</em> shows the current value, followed by the total value +surrounded in brackets. On gdb 'ignore' (or -break-after followed by refresh), the total value +will be set only if the new count is larger: there is no way to tell whether a smaller count +resulted from a command execution or breakpoint hit(s). Edit the <em>Ignore</em> column to set +a smaller count.</p> + <p>The above paragraphs apply to watchpoints and tracepoints as well.</p>
<div>Due to MI limitations and deficiencies:</div> @@ -388,7 +395,7 @@ a local expression.</p>
<p>Shift-clicking <em>Apply</em> applies the breakpoint for the currently selected thread -only.</p> +only, if any.</p>
<p>GDB may report an error for invalid <em>Condition</em> and/or <em>Script</em>, but still accept them, and continue to emit errors each time they are evaluated.</p> @@ -467,6 +474,8 @@ immediately resuming the program execution; or the prompt may be followed by asynchronous messages. The Scope state (Busy, Debug etc.) is more accurate.</p>
+<h3>Side pages</h3> + <p><b><a name="inspect">Inspect</a></b></p>
<p>-var-* commands entered from the command line will not update the <em>Inspect</em> view, @@ -758,7 +767,7 @@
<b><a name="copyright">Copyright</a></b>
-<p>Scope 0.93.1, Copyright (C) 2013 Dimitar Toshkov Zhekov</p> +<p>Scope 0.93.2, Copyright (C) 2013 Dimitar Toshkov Zhekov</p>
<p>The menu and toolbar icons are from <a href="http://netbeans.org">Netbeans</a>, except for BreakPoint.</p>
Modified: scope/src/break.c 153 files changed, 114 insertions(+), 39 deletions(-) =================================================================== @@ -39,6 +39,7 @@ enum BREAK_IGNORE, BREAK_COND, BREAK_SCRIPT, + BREAK_IGNNOW, BREAK_PENDING, BREAK_LOCATION, BREAK_RUN_APPLY, @@ -114,8 +115,9 @@ static gint break_location_compare(ScpTreeStore *store, GtkTreeIter *a, GtkTreeI BG_DISCARD, BG_UNKNOWN, BG_PARTLOC, - BG_APPLY, + BG_APPLIED, BG_FOLLOW, + BG_IGNORE, BG_ONLOAD, BG_RUNTO, BG_COUNT @@ -135,6 +137,7 @@ static gint break_location_compare(ScpTreeStore *store, GtkTreeIter *a, GtkTreeI { '\0', NULL }, { '\0', NULL }, { 'c', N_("CLI") }, + { '\0', NULL }, { 'l', N_("on load") }, { 'r', N_("Run to Cursor") } }; @@ -166,6 +169,24 @@ static void break_type_set_data_func(G_GNUC_UNUSED GtkTreeViewColumn *column, g_string_free(string, TRUE); }
+static void break_ignore_set_data_func(G_GNUC_UNUSED GtkTreeViewColumn *column, + GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, + G_GNUC_UNUSED gpointer gdata) +{ + const gchar *ignore, *ignnow; + + gtk_tree_model_get(model, iter, BREAK_IGNORE, &ignore, BREAK_IGNNOW, &ignnow, -1); + + if (ignnow) + { + char *text = g_strdup_printf("%s [%s]", ignnow, ignore); + g_object_set(cell, "text", text, NULL); + g_free(text); + } + else + g_object_set(cell, "text", ignore, NULL); +} + static ScpTreeStore *store; static GtkTreeSelection *selection; static gint scid_gen = 0; @@ -239,24 +260,42 @@ static void on_break_column_edited(G_GNUC_UNUSED GtkCellRendererText *renderer, { char *locale = utils_get_locale_from_display(new_text, HB_DEFAULT);
- debug_send_format(F, "022%s-break-%s %s %s", id, break_command(index, type), id, - locale ? locale : index ? "" : "0"); + if (index) + { + debug_send_format(F, "023%s-break-%s %s %s", id, break_command(index, type), + id, locale ? locale : ""); + } + else + { + debug_send_format(N, "022%s-break-%s %s %s", id, break_command(0, type), id, + locale ? locale : "0"); + } g_free(locale); } else if (!id) - scp_tree_store_set(store, &iter, index + BREAK_IGNORE, set_text, -1); + { + scp_tree_store_set(store, &iter, index + BREAK_IGNORE, set_text, + index ? -1 : BREAK_IGNNOW, NULL, -1); + } else plugin_beep(); }
static void on_break_ignore_editing_started(G_GNUC_UNUSED GtkCellRenderer *cell, - GtkCellEditable *editable, G_GNUC_UNUSED const gchar *path, G_GNUC_UNUSED gpointer gdata) + GtkCellEditable *editable, const gchar *path_str, G_GNUC_UNUSED gpointer gdata) { + GtkTreeIter iter; + const gchar *ignore; + if (GTK_IS_EDITABLE(editable)) validator_attach(GTK_EDITABLE(editable), VALIDATOR_NUMERIC);
if (GTK_IS_ENTRY(editable)) gtk_entry_set_max_length(GTK_ENTRY(editable), 10); + + scp_tree_store_get_iter_from_string(store, &iter, path_str); + scp_tree_store_get(store, &iter, BREAK_IGNORE, &ignore, -1); + g_signal_connect(editable, "map", G_CALLBACK(on_view_editable_map), g_strdup(ignore)); }
static const TreeCell break_cells[] = @@ -376,10 +415,13 @@ static void break_node_parse(const ParseNode *node, BreakData *bd) borts = strchr(BP_BORTS, type) != NULL; parse_location(nodes, &loc);
- if (bd->stage != BG_APPLY) + if (bd->stage != BG_APPLIED) { const ParseNode *script = parse_find_node(nodes, "script"); GtkTreeIter iter1; + gchar *cond = utils_get_display_from_7bit(parse_find_value(nodes, "cond"), + HB_DEFAULT); + gchar *commands;
if (store_find(store, &iter1, BREAK_ID, id)) { @@ -452,7 +494,7 @@ static void break_node_parse(const ParseNode *node, BreakData *bd)
if (script) { - GString *string = g_string_sized_new(0x3F); + GString *string = g_string_sized_new(0x7F);
if (script->type == PT_VALUE) append_script_command(script, string); @@ -462,23 +504,29 @@ static void break_node_parse(const ParseNode *node, BreakData *bd) (GFunc) append_script_command, string); }
- scp_tree_store_set(store, iter, BREAK_SCRIPT, string->str, -1); - g_string_free(string, TRUE); + commands = g_string_free(string, FALSE); } else - scp_tree_store_set(store, iter, BREAK_SCRIPT, NULL, -1); + commands = NULL; + + scp_tree_store_set(store, iter, BREAK_ENABLED, enabled, BREAK_COND, cond, + BREAK_SCRIPT, commands, -1); + g_free(cond); + g_free(commands); }
- if (borts || bd->stage != BG_APPLY) + if (strchr(BP_BREAKS, type) || bd->stage != BG_APPLIED) { - gchar *cond = utils_get_display_from_7bit(parse_find_value(nodes, "cond"), - HB_DEFAULT); - const char *ignore = parse_find_value(nodes, "ignore"); + const char *ignnow = parse_find_value(nodes, "ignore"); + const char *ignore;
- scp_tree_store_set(store, iter, BREAK_ENABLED, enabled, BREAK_COND, cond, - strchr(BP_BREAKS, type) || bd->stage != BG_APPLY ? BREAK_IGNORE : -1, - ignore ? ignore : parse_find_value(nodes, "pass"), -1); - g_free(cond); + if (!ignnow) + ignnow = parse_find_value(nodes, "pass"); + + scp_tree_store_get(store, iter, BREAK_IGNORE, &ignore, -1); + scp_tree_store_set(store, iter, BREAK_IGNNOW, ignnow, + !ignore || utils_atoi0(ignnow) > atoi(ignore) || + bd->stage == BG_IGNORE ? BREAK_IGNORE : -1, ignnow, -1); }
scp_tree_store_set(store, iter, BREAK_ID, id, BREAK_FILE, loc.file, BREAK_LINE, @@ -487,7 +535,7 @@ static void break_node_parse(const ParseNode *node, BreakData *bd)
parse_location_free(&loc);
- if (bd->stage == BG_APPLY) + if (bd->stage == BG_APPLIED) break_iter_applied(iter, id); else if (bd->stage == BG_RUNTO) debug_send_thread("-exec-continue"); @@ -512,7 +560,7 @@ void on_break_inserted(GArray *nodes) iff (store_find(store, &bd.iter, BREAK_SCID, token), "%s: b_scid not found", token) { - bd.stage = BG_APPLY; + bd.stage = BG_APPLIED; } } else @@ -527,7 +575,7 @@ static void break_apply(GtkTreeIter *iter, gboolean thread) GString *command = g_string_sized_new(0x1FF); gint scid; char type; - const char *ignore, *location; + const char *ignore, *location, *s; gboolean enabled, pending, temporary; const gchar *cond; gboolean borts; @@ -574,7 +622,16 @@ static void break_apply(GtkTreeIter *iter, gboolean thread) else if (strchr(BP_WATOPTS, type)) g_string_append_printf(command, " -%c", type);
- g_string_append_printf(command, " %s", location); + for (s = location; *s; s++) + { + if (isspace(*s)) + { + s = """; + break; + } + } + + g_string_append_printf(command, " %s%s%s", s, location, s); debug_send_command(F, command->str); g_string_free(command, TRUE); } @@ -584,7 +641,7 @@ static void break_clear(GtkTreeIter *iter) char type;
scp_tree_store_get(store, iter, BREAK_TYPE, &type, -1); - scp_tree_store_set(store, iter, BREAK_ID, NULL, BREAK_ADDR, NULL, + scp_tree_store_set(store, iter, BREAK_ID, NULL, BREAK_ADDR, NULL, BREAK_IGNNOW, NULL, strchr(BP_BORTS, type) ? -1 : BREAK_TEMPORARY, FALSE, -1); }
@@ -630,32 +687,36 @@ static gboolean break_remove_all(const char *pref, gboolean force) void on_break_done(GArray *nodes) { const char *token = parse_grab_token(nodes); - GtkTreeIter iter; + const char oper = *token++; + const char *prefix = "";
- switch (*token) + switch (oper) { case '0' : case '1' : { - iff (store_find(store, &iter, BREAK_SCID, token + 1), "%s: b_scid not found", + GtkTreeIter iter; + + iff (store_find(store, &iter, BREAK_SCID, token), "%s: b_scid not found", token) { - break_enable(&iter, *token == '1'); + break_enable(&iter, oper == '1'); } break; } - case '2' : + case '2' : prefix = "022"; /* and continue */ + case '3' : { - debug_send_format(N, "-break-info %s", token + 1); + debug_send_format(N, "%s-break-info %s", prefix, token); break; } - case '3' : + case '4' : { - if (!break_remove_all(token + 1, TRUE)) + if (!break_remove_all(token, TRUE)) dc_error("%s: bid not found", token); break; } - default : dc_error("%s: invalid b_oper", token); + default : dc_error("%c%s: invalid b_oper", oper, token); } }
@@ -697,13 +758,14 @@ void on_break_list(GArray *nodes) { iff ((nodes = parse_find_array(parse_lead_array(nodes), "body")) != NULL, "no body") { - gboolean refresh = parse_grab_token(nodes) != NULL; + const char *token = parse_grab_token(nodes); + gboolean refresh = !g_strcmp0(token, ""); BreakData bd;
if (refresh) store_foreach(store, (GFunc) break_iter_missing, NULL);
- bd.stage = BG_DISCARD; + bd.stage = !g_strcmp0(token, "2") ? BG_IGNORE : BG_DISCARD; parse_foreach(nodes, (GFunc) break_node_parse, &bd);
if (refresh) @@ -766,7 +828,7 @@ static void break_delete(GtkTreeIter *iter) if (debug_state() == DS_INACTIVE || !id) break_remove(iter); else - debug_send_format(N, "023%s-break-delete %s", id, id); + debug_send_format(N, "024%s-break-delete %s", id, id); }
static void break_iter_mark(GtkTreeIter *iter, GeanyDocument *doc) @@ -821,12 +883,22 @@ void breaks_reset(void)
static void break_iter_apply(GtkTreeIter *iter, G_GNUC_UNUSED gpointer gdata) { - const char *id; + const char *id, *ignore, *ignnow; + char type; gboolean run_apply;
- scp_tree_store_get(store, iter, BREAK_ID, &id, BREAK_RUN_APPLY, &run_apply, -1); + scp_tree_store_get(store, iter, BREAK_ID, &id, BREAK_TYPE, &type, BREAK_IGNORE, &ignore, + BREAK_IGNNOW, &ignnow, BREAK_RUN_APPLY, &run_apply, -1);
- if (run_apply && !id) + if (id) + { + if (g_strcmp0(ignore, ignnow)) + { + debug_send_format(F, "023-break-%s %s %s", break_command(0, type), id, + ignore); + } + } + else if (run_apply) break_apply(iter, FALSE); }
@@ -1373,13 +1445,16 @@ void break_init(void) { GtkWidget *menu; guint i; + GtkCellRenderer *break_ignore = GTK_CELL_RENDERER(get_object("break_ignore"));
break_type_column = get_column("break_type_column"); break_display_column = get_column("break_display_column"); tree = view_connect("break_view", &store, &selection, break_cells, "break_window", NULL); gtk_tree_view_column_set_cell_data_func(break_type_column, GTK_CELL_RENDERER(get_object("break_type")), break_type_set_data_func, NULL, NULL); - g_signal_connect(get_object("break_ignore"), "editing-started", + gtk_tree_view_column_set_cell_data_func(get_column("break_ignore_column"), break_ignore, + break_ignore_set_data_func, NULL, NULL); + g_signal_connect(break_ignore, "editing-started", G_CALLBACK(on_break_ignore_editing_started), NULL); view_set_sort_func(store, BREAK_ID, break_id_compare); view_set_sort_func(store, BREAK_IGNORE, store_gint_compare);
Modified: scope/src/scope.c 2 files changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -32,7 +32,7 @@ PLUGIN_VERSION_CHECK(215)
PLUGIN_SET_TRANSLATABLE_INFO(LOCALEDIR, GETTEXT_PACKAGE, _("Scope Debugger"), - _("Relatively simple GDB front-end."), "0.93", + _("Relatively simple GDB front-end."), "0.93.2", "Dimitar Toshkov Zhekov dimitar.zhekov@gmail.com")
/* Keybinding(s) */
Modified: scope/src/store/scptreestore.c 2 files changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -2036,7 +2036,7 @@ void scp_tree_store_register_dynamic(void) if (!type) { type = scp_tree_store_get_type(); - g_type_class_unref(g_type_class_ref(type)); /* force class create */ + g_type_class_unref(g_type_class_ref(type)); /* force class creation */ } else if (!scp_tree_store_type_id_volatile) {
Modified: scope/src/views.c 31 files changed, 17 insertions(+), 14 deletions(-) =================================================================== @@ -246,6 +246,22 @@ gboolean on_view_query_base_tooltip(GtkWidget *widget, gint x, gint y, gboolean return FALSE; }
+gboolean on_view_editable_map(GtkWidget *widget, gchar *replace) +{ + iff (GTK_IS_EDITABLE(widget), "cell editable: not an editable") + { + gint position = 0; + GtkEditable *editable = GTK_EDITABLE(widget); + + gtk_editable_delete_text(editable, 0, -1); + gtk_editable_insert_text(editable, replace ? replace : "", -1, &position); + gtk_editable_select_region(editable, -1, 0); + g_free(replace); + } + + return FALSE; +} + GtkTreeView *view_create(const char *name, ScpTreeStore **store, GtkTreeSelection **selection) { GtkTreeView *tree = GTK_TREE_VIEW(get_widget(name)); @@ -262,18 +278,6 @@ static void on_editing_started(G_GNUC_UNUSED GtkCellRenderer *cell, GtkCellEdita gtk_entry_set_cursor_hadjustment(GTK_ENTRY(editable), hadjustment); }
-static gboolean on_display_editable_map(GtkWidget *widget, gchar *display) -{ - gint position = 0; - GtkEditable *editable = GTK_EDITABLE(widget); - - gtk_editable_delete_text(editable, 0, -1); - gtk_editable_insert_text(editable, display ? display : "", -1, &position); - gtk_editable_select_region(editable, -1, 0); - g_free(display); - return FALSE; -} - static void on_display_editing_started(G_GNUC_UNUSED GtkCellRenderer *cell, GtkCellEditable *editable, const gchar *path_str, ScpTreeStore *store) { @@ -281,11 +285,10 @@ static void on_display_editing_started(G_GNUC_UNUSED GtkCellRenderer *cell, const char *value; gint hb_mode;
- g_assert(GTK_IS_EDITABLE(editable)); scp_tree_store_get_iter_from_string(store, &iter, path_str); scp_tree_store_get(store, &iter, COLUMN_VALUE, &value, COLUMN_HB_MODE, &hb_mode, -1); /* scrolling editable to the proper position is left as an exercise for the reader */ - g_signal_connect(editable, "map", G_CALLBACK(on_display_editable_map), + g_signal_connect(editable, "map", G_CALLBACK(on_view_editable_map), parse_get_display_from_7bit(value, hb_mode, MR_EDITVC)); }
Modified: scope/src/views.h 1 files changed, 1 insertions(+), 0 deletions(-) =================================================================== @@ -51,6 +51,7 @@ gboolean on_view_button_1_press(GtkWidget *widget, GdkEventButton *event, ViewSeeker seeker); gboolean on_view_query_base_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, GtkTreeViewColumn *base_name_column); +gboolean on_view_editable_map(GtkWidget *widget, gchar *replace);
enum {
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
plugins-commits@lists.geany.org