Branch: refs/heads/master Author: Thomas Martitz kugel@rockbox.org Committer: Colomban Wendling ban@herbesfolles.org Date: Tue, 24 Jun 2014 13:01:42 UTC Commit: 135b60d25ef7557d2ea75a1a4f684ee49b5c3463 https://github.com/geany/geany/commit/135b60d25ef7557d2ea75a1a4f684ee49b5c34...
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).