[geany/geany] 00ec17: Callbacks: get rid of the ugly `insert_callback_from_menu` global
Colomban Wendling
git-noreply at xxxxx
Thu Jun 26 16:28:48 UTC 2014
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Thu, 26 Jun 2014 16:28:48 UTC
Commit: 00ec175d63931075fcf82c48497d9245a65da70b
https://github.com/geany/geany/commit/00ec175d63931075fcf82c48497d9245a65da70b
Log Message:
-----------
Callbacks: get rid of the ugly `insert_callback_from_menu` global
Modified Paths:
--------------
src/callbacks.c
Modified: src/callbacks.c
191 lines changed, 96 insertions(+), 95 deletions(-)
===================================================================
@@ -152,10 +152,6 @@ G_MODULE_EXPORT void on_detect_width_from_file_activate(GtkMenuItem *menuitem, g
G_MODULE_EXPORT void on_clone1_activate(GtkMenuItem *menuitem, gpointer user_data);
-/* flag to indicate that an insert callback was triggered from the file menu,
- * so we need to store the current cursor position in editor_info.click_pos. */
-static gboolean insert_callback_from_menu = FALSE;
-
/* represents the state at switching a notebook page(in the left treeviews widget), to not emit
* the selection-changed signal from tv.tree_openfiles */
/*static gboolean switch_tv_notebook_page = FALSE; */
@@ -176,18 +172,6 @@ static gboolean check_no_unsaved(void)
}
-/* set editor_info.click_pos to the current cursor position if insert_callback_from_menu is TRUE
- * to prevent invalid cursor positions which can cause segfaults */
-static void verify_click_pos(GeanyDocument *doc)
-{
- if (insert_callback_from_menu)
- {
- editor_info.click_pos = sci_get_current_position(doc->editor->sci);
- insert_callback_from_menu = FALSE;
- }
-}
-
-
/* should only be called from on_window_delete_event */
static void quit_app(void)
{
@@ -1180,60 +1164,85 @@ G_MODULE_EXPORT void on_comments_function_activate(GtkMenuItem *menuitem, gpoint
}
-G_MODULE_EXPORT void on_comments_multiline_activate(GtkMenuItem *menuitem, gpointer user_data)
+static void insert_multiline_comment(GeanyDocument *doc, gint pos)
{
- GeanyDocument *doc = document_get_current();
+ g_return_if_fail(doc != NULL);
+ g_return_if_fail(pos == -1 || pos >= 0);
- if (doc == NULL || doc->file_type == NULL)
+ if (doc->file_type == NULL)
{
ui_set_statusbar(FALSE,
_("Please set the filetype for the current file before using this function."));
return;
}
- verify_click_pos(doc); /* make sure that the click_pos is valid */
-
if (doc->file_type->comment_open || doc->file_type->comment_single)
+ {
+ /* editor_insert_multiline_comment() uses editor_info.click_pos */
+ if (pos == -1)
+ editor_info.click_pos = sci_get_current_position(doc->editor->sci);
+ else
+ editor_info.click_pos = pos;
editor_insert_multiline_comment(doc->editor);
+ }
else
utils_beep();
}
-G_MODULE_EXPORT void on_comments_gpl_activate(GtkMenuItem *menuitem, gpointer user_data)
+G_MODULE_EXPORT void on_comments_multiline_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_multiline_comment(document_get_current(), editor_info.click_pos);
+}
+
+
+G_MODULE_EXPORT void on_menu_comments_multiline_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_multiline_comment(document_get_current(), -1);
+}
+
+
+static void insert_comment_template(GeanyDocument *doc, gint pos, guint template)
{
- GeanyDocument *doc = document_get_current();
gchar *text;
g_return_if_fail(doc != NULL);
+ g_return_if_fail(pos == -1 || pos >= 0);
+ g_return_if_fail(template < GEANY_MAX_TEMPLATES);
- text = templates_get_template_licence(doc, GEANY_TEMPLATE_GPL);
+ if (pos == -1)
+ pos = sci_get_current_position(doc->editor->sci);
- verify_click_pos(doc); /* make sure that the click_pos is valid */
+ text = templates_get_template_licence(doc, template);
sci_start_undo_action(doc->editor->sci);
- sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
+ sci_insert_text(doc->editor->sci, pos, text);
sci_end_undo_action(doc->editor->sci);
g_free(text);
}
-G_MODULE_EXPORT void on_comments_bsd_activate(GtkMenuItem *menuitem, gpointer user_data)
+G_MODULE_EXPORT void on_comments_gpl_activate(GtkMenuItem *menuitem, gpointer user_data)
{
- GeanyDocument *doc = document_get_current();
- gchar *text;
+ insert_comment_template(document_get_current(), editor_info.click_pos, GEANY_TEMPLATE_GPL);
+}
- g_return_if_fail(doc != NULL);
- text = templates_get_template_licence(doc, GEANY_TEMPLATE_BSD);
+G_MODULE_EXPORT void on_menu_comments_gpl_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_comment_template(document_get_current(), -1, GEANY_TEMPLATE_GPL);
+}
+
- verify_click_pos(doc); /* make sure that the click_pos is valid */
+G_MODULE_EXPORT void on_comments_bsd_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_comment_template(document_get_current(), editor_info.click_pos, GEANY_TEMPLATE_BSD);
+}
- sci_start_undo_action(doc->editor->sci);
- sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
- sci_end_undo_action(doc->editor->sci);
- g_free(text);
+G_MODULE_EXPORT void on_menu_comments_bsd_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_comment_template(document_get_current(), -1, GEANY_TEMPLATE_BSD);
}
@@ -1277,13 +1286,16 @@ G_MODULE_EXPORT void on_comments_fileheader_activate(GtkMenuItem *menuitem, gpoi
}
-void on_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
+static void insert_date(GeanyDocument *doc, gint pos, const gchar *date_style)
{
- GeanyDocument *doc = document_get_current();
const gchar *format = NULL;
gchar *time_str;
g_return_if_fail(doc != NULL);
+ g_return_if_fail(pos == -1 || pos >= 0);
+
+ if (pos == -1)
+ pos = sci_get_current_position(doc->editor->sci);
/* set default value */
if (utils_str_equal("", ui_prefs.custom_date_format))
@@ -1292,19 +1304,19 @@ void on_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
ui_prefs.custom_date_format = g_strdup("%d.%m.%Y");
}
- if (utils_str_equal(_("dd.mm.yyyy"), (gchar*) user_data))
+ if (utils_str_equal(_("dd.mm.yyyy"), date_style))
format = "%d.%m.%Y";
- else if (utils_str_equal(_("mm.dd.yyyy"), (gchar*) user_data))
+ else if (utils_str_equal(_("mm.dd.yyyy"), date_style))
format = "%m.%d.%Y";
- else if (utils_str_equal(_("yyyy/mm/dd"), (gchar*) user_data))
+ else if (utils_str_equal(_("yyyy/mm/dd"), date_style))
format = "%Y/%m/%d";
- else if (utils_str_equal(_("dd.mm.yyyy hh:mm:ss"), (gchar*) user_data))
+ else if (utils_str_equal(_("dd.mm.yyyy hh:mm:ss"), date_style))
format = "%d.%m.%Y %H:%M:%S";
- else if (utils_str_equal(_("mm.dd.yyyy hh:mm:ss"), (gchar*) user_data))
+ else if (utils_str_equal(_("mm.dd.yyyy hh:mm:ss"), date_style))
format = "%m.%d.%Y %H:%M:%S";
- else if (utils_str_equal(_("yyyy/mm/dd hh:mm:ss"), (gchar*) user_data))
+ else if (utils_str_equal(_("yyyy/mm/dd hh:mm:ss"), date_style))
format = "%Y/%m/%d %H:%M:%S";
- else if (utils_str_equal(_("_Use Custom Date Format"), (gchar*) user_data))
+ else if (utils_str_equal(_("_Use Custom Date Format"), date_style))
format = ui_prefs.custom_date_format;
else
{
@@ -1320,11 +1332,9 @@ void on_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
time_str = utils_get_date_time(format, NULL);
if (time_str != NULL)
{
- verify_click_pos(doc); /* make sure that the click_pos is valid */
-
sci_start_undo_action(doc->editor->sci);
- sci_insert_text(doc->editor->sci, editor_info.click_pos, time_str);
- sci_goto_pos(doc->editor->sci, editor_info.click_pos + strlen(time_str), FALSE);
+ sci_insert_text(doc->editor->sci, pos, time_str);
+ sci_goto_pos(doc->editor->sci, pos + strlen(time_str), FALSE);
sci_end_undo_action(doc->editor->sci);
g_free(time_str);
}
@@ -1337,33 +1347,59 @@ void on_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
}
-void on_insert_include_activate(GtkMenuItem *menuitem, gpointer user_data)
+void on_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
{
- GeanyDocument *doc = document_get_current();
- gint pos = -1;
+ insert_date(document_get_current(), editor_info.click_pos, user_data);
+}
+
+
+void on_menu_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_date(document_get_current(), -1, user_data);
+}
+
+
+/* @include include name or NULL for empty with cursor ready for typing it */
+static void insert_include(GeanyDocument *doc, gint pos, const gchar *include)
+{
+ gint pos_after = -1;
gchar *text;
g_return_if_fail(doc != NULL);
- g_return_if_fail(user_data != NULL);
+ g_return_if_fail(include != NULL);
+ g_return_if_fail(pos == -1 || pos >= 0);
- verify_click_pos(doc); /* make sure that the click_pos is valid */
+ if (pos == -1)
+ pos = sci_get_current_position(doc->editor->sci);
- if (utils_str_equal(user_data, "blank"))
+ if (utils_str_equal(include, "blank"))
{
text = g_strdup("#include \"\"\n");
- pos = editor_info.click_pos + 10;
+ pos_after = pos + 10;
}
else
{
- text = g_strconcat("#include <", user_data, ">\n", NULL);
+ text = g_strconcat("#include <", include, ">\n", NULL);
}
sci_start_undo_action(doc->editor->sci);
- sci_insert_text(doc->editor->sci, editor_info.click_pos, text);
+ sci_insert_text(doc->editor->sci, pos, text);
sci_end_undo_action(doc->editor->sci);
g_free(text);
- if (pos >= 0)
- sci_goto_pos(doc->editor->sci, pos, FALSE);
+ if (pos_after >= 0)
+ sci_goto_pos(doc->editor->sci, pos_after, FALSE);
+}
+
+
+void on_insert_include_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_include(document_get_current(), editor_info.click_pos, user_data);
+}
+
+
+void on_menu_insert_include_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+ insert_include(document_get_current(), -1, user_data);
}
@@ -1537,41 +1573,6 @@ G_MODULE_EXPORT void on_previous_message1_activate(GtkMenuItem *menuitem, gpoint
}
-G_MODULE_EXPORT void on_menu_comments_multiline_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
- insert_callback_from_menu = TRUE;
- on_comments_multiline_activate(menuitem, user_data);
-}
-
-
-G_MODULE_EXPORT void on_menu_comments_gpl_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
- insert_callback_from_menu = TRUE;
- on_comments_gpl_activate(menuitem, user_data);
-}
-
-
-G_MODULE_EXPORT void on_menu_comments_bsd_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
- insert_callback_from_menu = TRUE;
- on_comments_bsd_activate(menuitem, user_data);
-}
-
-
-void on_menu_insert_include_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
- insert_callback_from_menu = TRUE;
- on_insert_include_activate(menuitem, user_data);
-}
-
-
-void on_menu_insert_date_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
- insert_callback_from_menu = TRUE;
- on_insert_date_activate(menuitem, user_data);
-}
-
-
G_MODULE_EXPORT void on_project_new1_activate(GtkMenuItem *menuitem, gpointer user_data)
{
project_new();
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list