[geany/geany] 135b60: callbacks: Refactor on_reload_as_activate() as document_reload_prompt()
Thomas Martitz
git-noreply at xxxxx
Tue Jun 24 13:01:42 UTC 2014
Branch: refs/heads/master
Author: Thomas Martitz <kugel at rockbox.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Tue, 24 Jun 2014 13:01:42 UTC
Commit: 135b60d25ef7557d2ea75a1a4f684ee49b5c3463
https://github.com/geany/geany/commit/135b60d25ef7557d2ea75a1a4f684ee49b5c3463
Log Message:
-----------
callbacks: Refactor on_reload_as_activate() as document_reload_prompt()
The callback wasn't used from glade but is useful for some other places so
it's worth moving into document.c. This also fixes a bug where reload via sidebar
always reloads the current document instead of the actually clicked one.
Modified Paths:
--------------
src/callbacks.c
src/callbacks.h
src/document.c
src/document.h
src/encodings.c
src/sidebar.c
Modified: src/callbacks.c
36 lines changed, 1 insertions(+), 35 deletions(-)
===================================================================
@@ -395,45 +395,11 @@ G_MODULE_EXPORT void on_toolbutton_quit_clicked(GtkAction *action, gpointer user
/* reload file */
G_MODULE_EXPORT void on_toolbutton_reload_clicked(GtkAction *action, gpointer user_data)
{
- on_reload_as_activate(NULL, GINT_TO_POINTER(-1));
-}
-
-
-/* also used for reloading when user_data is -1 */
-G_MODULE_EXPORT void on_reload_as_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
GeanyDocument *doc = document_get_current();
- gchar *base_name;
- gint i = GPOINTER_TO_INT(user_data);
- const gchar *charset = NULL;
g_return_if_fail(doc != NULL);
- /* No need to reload "untitled" (non-file-backed) documents */
- if (doc->file_name == NULL)
- return;
-
- if (i >= 0)
- {
- if (i >= GEANY_ENCODINGS_MAX || encodings[i].charset == NULL)
- return;
- charset = encodings[i].charset;
- }
- else
- charset = doc->encoding;
-
- base_name = g_path_get_basename(doc->file_name);
- /* don't prompt if file hasn't been edited at all */
- if ((!doc->changed && !document_can_undo(doc) && !document_can_redo(doc)) ||
- dialogs_show_question_full(NULL, _("_Reload"), GTK_STOCK_CANCEL,
- _("Any unsaved changes will be lost."),
- _("Are you sure you want to reload '%s'?"), base_name))
- {
- document_reload_file(doc, charset);
- if (charset != NULL)
- ui_update_statusbar(doc, -1);
- }
- g_free(base_name);
+ document_reload_prompt(doc, NULL);
}
Modified: src/callbacks.h
4 lines changed, 0 insertions(+), 4 deletions(-)
===================================================================
@@ -385,10 +385,6 @@ on_menu_remove_indicators1_activate (GtkMenuItem *menuitem,
gpointer user_data);
G_MODULE_EXPORT void
-on_reload_as_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-
-G_MODULE_EXPORT void
on_print1_activate (GtkMenuItem *menuitem,
gpointer user_data);
Modified: src/document.c
32 lines changed, 32 insertions(+), 0 deletions(-)
===================================================================
@@ -1382,6 +1382,38 @@ gboolean document_reload_file(GeanyDocument *doc, const gchar *forced_enc)
}
+/* also used for reloading when forced_enc is NULL */
+gboolean document_reload_prompt(GeanyDocument *doc, const gchar *forced_enc)
+{
+ gchar *base_name;
+ gboolean result = FALSE;
+
+ g_return_if_fail(doc != NULL);
+
+ /* No need to reload "untitled" (non-file-backed) documents */
+ if (doc->file_name == NULL)
+ return FALSE;
+
+ if (forced_enc == NULL)
+ forced_enc = doc->encoding;
+
+ base_name = g_path_get_basename(doc->file_name);
+ /* don't prompt if file hasn't been edited at all */
+ if ((!doc->changed && !document_can_undo(doc) && !document_can_redo(doc)) ||
+ dialogs_show_question_full(NULL, _("_Reload"), GTK_STOCK_CANCEL,
+ _("Any unsaved changes will be lost."),
+ _("Are you sure you want to reload '%s'?"), base_name))
+ {
+ result = document_reload_file(doc, forced_enc);
+ if (forced_enc != NULL)
+ ui_update_statusbar(doc, -1);
+ }
+ g_free(base_name);
+
+ return result;
+}
+
+
static gboolean document_update_timestamp(GeanyDocument *doc, const gchar *locale_filename)
{
#ifndef USE_GIO_FILEMON
Modified: src/document.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -194,6 +194,8 @@ GeanyDocument* document_open_file(const gchar *locale_filename, gboolean readonl
gboolean document_reload_file(GeanyDocument *doc, const gchar *forced_enc);
+gboolean document_reload_prompt(GeanyDocument *doc, const gchar *forced_enc);
+
void document_set_text_changed(GeanyDocument *doc, gboolean changed);
void document_set_filetype(GeanyDocument *doc, GeanyFiletype *type);
Modified: src/encodings.c
23 lines changed, 16 insertions(+), 7 deletions(-)
===================================================================
@@ -360,11 +360,11 @@ static gchar *regex_match(GRegex *preg, const gchar *buffer, gsize size)
static void encodings_radio_item_change_cb(GtkCheckMenuItem *menuitem, gpointer user_data)
{
GeanyDocument *doc = document_get_current();
- guint i = GPOINTER_TO_INT(user_data);
+ const gchar *charset = user_data;
- if (ignore_callback || doc == NULL || encodings[i].charset == NULL ||
+ if (ignore_callback || doc == NULL || charset == NULL ||
! gtk_check_menu_item_get_active(menuitem) ||
- utils_str_equal(encodings[i].charset, doc->encoding))
+ utils_str_equal(charset, doc->encoding))
return;
if (doc->readonly)
@@ -374,7 +374,16 @@ static void encodings_radio_item_change_cb(GtkCheckMenuItem *menuitem, gpointer
}
document_undo_add(doc, UNDO_ENCODING, g_strdup(doc->encoding));
- document_set_encoding(doc, encodings[i].charset);
+ document_set_encoding(doc, charset);
+}
+
+static void encodings_reload_radio_item_change_cb(GtkMenuItem *menuitem, gpointer user_data)
+{
+ GeanyDocument *doc = document_get_current();
+
+ g_return_if_fail(doc != NULL);
+
+ document_reload_prompt(doc, user_data);
}
@@ -416,7 +425,7 @@ void encodings_init(void)
menu[0] = ui_lookup_widget(main_widgets.window, "set_encoding1_menu");
menu[1] = ui_lookup_widget(main_widgets.window, "menu_reload_as1_menu");
cb_func[0] = G_CALLBACK(encodings_radio_item_change_cb);
- cb_func[1] = G_CALLBACK(on_reload_as_activate);
+ cb_func[1] = G_CALLBACK(encodings_reload_radio_item_change_cb);
for (k = 0; k < 2; k++)
{
@@ -488,8 +497,8 @@ void encodings_init(void)
item = gtk_menu_item_new_with_label(label);
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(submenu), item);
- g_signal_connect(item, "activate",
- cb_func[k], GINT_TO_POINTER(encodings[j].idx));
+ g_signal_connect(item, "activate", cb_func[k],
+ (gpointer) encodings[j].charset);
g_free(label);
break;
}
Modified: src/sidebar.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -819,7 +819,7 @@ static void document_action(GeanyDocument *doc, gint action)
}
case OPENFILES_ACTION_RELOAD:
{
- on_toolbutton_reload_clicked(NULL, NULL);
+ document_reload_prompt(doc, NULL);
break;
}
}
--------------
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