SF.net SVN: geany:[4894] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Sun May 9 15:48:55 UTC 2010
Revision: 4894
http://geany.svn.sourceforge.net/geany/?rev=4894&view=rev
Author: eht16
Date: 2010-05-09 15:48:55 +0000 (Sun, 09 May 2010)
Log Message:
-----------
Allow '+<number' and '-<number>' as values for Goto Line inputs to jump relative to the current line (closes #2997238).
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/callbacks.c
trunk/src/editor.c
trunk/src/editor.h
trunk/src/geanyentryaction.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-05-09 15:48:42 UTC (rev 4893)
+++ trunk/ChangeLog 2010-05-09 15:48:55 UTC (rev 4894)
@@ -5,9 +5,12 @@
* src/ui_utils.h, src/ui_utils.c:
Add public, generic callback ui_editable_insert_text_callback()
to restrict GtkEntry text inputs to +/- and numeric values only.
- * src/dialogsh, src/dialogs.c:
+ * src/dialogs.h, src/dialogs.c:
Add special variant dialogs_show_input_goto_line() to use a normal
GtkEntry together with dialogs_show_input_goto_line() for text input.
+ * src/geanyentryaction.c, src/callbacks.c, src/editor.c, src/editor.h:
+ Allow '+<number' and '-<number>' as values for Goto Line inputs
+ to jump relative to the current line (closes #2997238).
2010-05-08 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2010-05-09 15:48:42 UTC (rev 4893)
+++ trunk/src/callbacks.c 2010-05-09 15:48:55 UTC (rev 4894)
@@ -1176,21 +1176,45 @@
}
+static void get_line_and_offset_from_text(const gchar *text, gint *line_no, gint *offset)
+{
+ if (*text == '+' || *text == '-')
+ {
+ *line_no = atoi(text + 1);
+ *offset = (*text == '+') ? 1 : -1;
+ }
+ else
+ {
+ *line_no = atoi(text) - 1;
+ *offset = 0;
+ }
+}
+
+
void
on_go_to_line_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- static gdouble val = 1;
+ static gchar value[16] = "";
+ gchar *result;
- if (dialogs_show_input_numeric(_("Go to Line"), _("Enter the line you want to go to:"),
- &val, 1, 100000000, 1))
+ result = dialogs_show_input_goto_line(
+ _("Go to Line"), _("Enter the line you want to go to:"), value);
+ if (result != NULL)
{
GeanyDocument *doc = document_get_current();
+ gint offset;
+ gint line_no;
g_return_if_fail(doc != NULL);
- if (! editor_goto_line(doc->editor, (gint) val - 1))
+ get_line_and_offset_from_text(result, &line_no, &offset);
+ if (! editor_goto_line(doc->editor, line_no, offset))
utils_beep();
+ /* remember value for future calls */
+ g_snprintf(value, sizeof(value), "%s", result);
+
+ g_free(result);
}
}
@@ -1199,10 +1223,13 @@
on_toolbutton_goto_entry_activate(GtkAction *action, const gchar *text, gpointer user_data)
{
GeanyDocument *doc = document_get_current();
+ gint offset;
+ gint line_no;
g_return_if_fail(doc != NULL);
- if (! editor_goto_line(doc->editor, atoi(text) - 1))
+ get_line_and_offset_from_text(text, &line_no, &offset);
+ if (! editor_goto_line(doc->editor, line_no, offset))
utils_beep();
else
keybindings_send_command(GEANY_KEY_GROUP_FOCUS, GEANY_KEYS_FOCUS_EDITOR);
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2010-05-09 15:48:42 UTC (rev 4893)
+++ trunk/src/editor.c 2010-05-09 15:48:55 UTC (rev 4894)
@@ -4589,15 +4589,22 @@
/* Convenience function for editor_goto_pos() to pass in a line number. */
-gboolean editor_goto_line(GeanyEditor *editor, gint line)
+gboolean editor_goto_line(GeanyEditor *editor, gint line_no, gint offset)
{
gint pos;
g_return_val_if_fail(editor, FALSE);
- if (line < 0 || line >= sci_get_line_count(editor->sci))
+ if (line_no < 0 || line_no >= sci_get_line_count(editor->sci))
return FALSE;
- pos = sci_get_position_from_line(editor->sci, line);
+ if (offset != 0)
+ {
+ gint current_line = sci_get_current_line(editor->sci);
+ line_no *= offset;
+ line_no = current_line + line_no;
+ }
+
+ pos = sci_get_position_from_line(editor->sci, line_no);
return editor_goto_pos(editor, pos, TRUE);
}
Modified: trunk/src/editor.h
===================================================================
--- trunk/src/editor.h 2010-05-09 15:48:42 UTC (rev 4893)
+++ trunk/src/editor.h 2010-05-09 15:48:55 UTC (rev 4894)
@@ -288,7 +288,7 @@
gboolean editor_goto_pos(GeanyEditor *editor, gint pos, gboolean mark);
-gboolean editor_goto_line(GeanyEditor *editor, gint line_no);
+gboolean editor_goto_line(GeanyEditor *editor, gint line_no, gint offset);
void editor_set_indentation_guides(GeanyEditor *editor);
Modified: trunk/src/geanyentryaction.c
===================================================================
--- trunk/src/geanyentryaction.c 2010-05-09 15:48:42 UTC (rev 4893)
+++ trunk/src/geanyentryaction.c 2010-05-09 15:48:55 UTC (rev 4894)
@@ -93,21 +93,13 @@
}
-static void entry_insert_text_cb(GtkEditable *editable, gchar *new_text, gint new_text_len,
- gint *position, GeanyEntryAction *action)
-{
- /* don't insert any text when it is not a digit */
- if (! isdigit(*new_text))
- g_signal_stop_emission_by_name(editable, "insert-text");
-}
-
-
static void geany_entry_action_connect_proxy(GtkAction *action, GtkWidget *widget)
{
GeanyEntryActionPrivate *priv = GEANY_ENTRY_ACTION_GET_PRIVATE(action);
if (priv->numeric)
- g_signal_connect(priv->entry, "insert-text", G_CALLBACK(entry_insert_text_cb), action);
+ g_signal_connect(priv->entry, "insert-text",
+ G_CALLBACK(ui_editable_insert_text_callback), NULL);
g_signal_connect(priv->entry, "changed", G_CALLBACK(delegate_entry_changed_cb), action);
g_signal_connect(priv->entry, "activate", G_CALLBACK(delegate_entry_activate_cb), action);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list