Added some sanity checks to prevent crashes.

git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@477 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Enrico Tröger 2006-06-24 18:46:08 +00:00
parent 01ace30125
commit 378d614885
6 changed files with 46 additions and 25 deletions

View File

@ -356,6 +356,7 @@ on_undo1_activate (GtkMenuItem *menuitem,
gpointer user_data) gpointer user_data)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (sci_can_undo(doc_list[idx].sci)) sci_undo(doc_list[idx].sci); if (sci_can_undo(doc_list[idx].sci)) sci_undo(doc_list[idx].sci);
} }
@ -365,6 +366,7 @@ on_redo1_activate (GtkMenuItem *menuitem,
gpointer user_data) gpointer user_data)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (sci_can_redo(doc_list[idx].sci)) sci_redo(doc_list[idx].sci); if (sci_can_redo(doc_list[idx].sci)) sci_redo(doc_list[idx].sci);
} }
@ -454,8 +456,11 @@ on_toolbutton23_clicked (GtkToolButton *toolbutton,
gpointer user_data) gpointer user_data)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
gchar *basename = g_path_get_basename(doc_list[idx].file_name); gchar *basename;
if (idx == -1 || ! doc_list[idx].is_valid || doc_list[idx].file_name == NULL) return;
basename = g_path_get_basename(doc_list[idx].file_name);
if (dialogs_show_question(_ if (dialogs_show_question(_
("Are you sure you want to reload '%s'?\nAny unsaved changes will be lost."), ("Are you sure you want to reload '%s'?\nAny unsaved changes will be lost."),
basename)) basename))
@ -605,7 +610,7 @@ on_zoom_in1_activate (GtkMenuItem *menuitem,
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
static gboolean done = 1; static gboolean done = 1;
if (doc_list[idx].is_valid) if (idx >= 0 && doc_list[idx].is_valid)
{ {
if (done++ % 3 == 0) sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin, if (done++ % 3 == 0) sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin,
(sci_get_zoom(doc_list[idx].sci) / 2)); (sci_get_zoom(doc_list[idx].sci) / 2));
@ -619,7 +624,7 @@ on_zoom_out1_activate (GtkMenuItem *menuitem,
gpointer user_data) gpointer user_data)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (doc_list[idx].is_valid) if (idx >= 0 && doc_list[idx].is_valid)
{ {
if (sci_get_zoom(doc_list[idx].sci) == 0) if (sci_get_zoom(doc_list[idx].sci) == 0)
sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin, 0); sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin, 0);
@ -633,7 +638,7 @@ on_normal_size1_activate (GtkMenuItem *menuitem,
gpointer user_data) gpointer user_data)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (doc_list[idx].is_valid) if (idx >= 0 && doc_list[idx].is_valid)
{ {
sci_zoom_off(doc_list[idx].sci); sci_zoom_off(doc_list[idx].sci);
sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin, 0); sci_set_line_numbers(doc_list[idx].sci, app->show_linenumber_margin, 0);
@ -2390,4 +2395,3 @@ on_encoding_change (GtkMenuItem *menuitem,
utils_update_statusbar(idx, -1); utils_update_statusbar(idx, -1);
} }

View File

@ -487,7 +487,7 @@ void dialogs_show_color(void)
G_CALLBACK(gtk_widget_hide), NULL); G_CALLBACK(gtk_widget_hide), NULL);
} }
// We make sure the dialog is visible. // We make sure the dialog is visible.
gtk_window_present (GTK_WINDOW(app->open_colorsel)); gtk_window_present(GTK_WINDOW(app->open_colorsel));
#endif #endif
} }
@ -879,6 +879,8 @@ void dialogs_show_replace(void)
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
gchar *sel = NULL; gchar *sel = NULL;
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (sci_get_lines_selected(doc_list[idx].sci) == 1) if (sci_get_lines_selected(doc_list[idx].sci) == 1)
{ {
sel = g_malloc(sci_get_selected_text_length(doc_list[idx].sci)); sel = g_malloc(sci_get_selected_text_length(doc_list[idx].sci));

View File

@ -205,7 +205,7 @@ typedef struct MyApp
GtkWidget *redo_items[2]; GtkWidget *redo_items[2];
GtkWidget *undo_items[2]; GtkWidget *undo_items[2];
GtkWidget *save_buttons[2]; GtkWidget *save_buttons[2];
GtkWidget *sensitive_buttons[31]; GtkWidget *sensitive_buttons[32];
GtkWidget *open_colorsel; GtkWidget *open_colorsel;
GtkWidget *open_fontsel; GtkWidget *open_fontsel;
GtkWidget *open_filesel; GtkWidget *open_filesel;

View File

@ -340,7 +340,6 @@ gboolean keybindings_got_event(GtkWidget *widget, GdkEventKey *event, gpointer u
return TRUE; return TRUE;
} }
} }
return FALSE; return FALSE;
} }
@ -464,18 +463,21 @@ static void cb_func_menu_zoomout(void)
static void cb_func_menu_foldall(void) static void cb_func_menu_foldall(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
document_fold_all(idx); document_fold_all(idx);
} }
static void cb_func_menu_unfoldall(void) static void cb_func_menu_unfoldall(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
document_unfold_all(idx); document_unfold_all(idx);
} }
static void cb_func_build_compile(void) static void cb_func_build_compile(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_type->menu_items->can_compile && doc_list[idx].file_name != NULL) if (doc_list[idx].file_type->menu_items->can_compile && doc_list[idx].file_name != NULL)
on_build_compile_activate(NULL, NULL); on_build_compile_activate(NULL, NULL);
} }
@ -483,6 +485,7 @@ static void cb_func_build_compile(void)
static void cb_func_build_link(void) static void cb_func_build_link(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_type->menu_items->can_link && doc_list[idx].file_name != NULL) if (doc_list[idx].file_type->menu_items->can_link && doc_list[idx].file_name != NULL)
on_build_build_activate(NULL, NULL); on_build_build_activate(NULL, NULL);
} }
@ -490,6 +493,7 @@ static void cb_func_build_link(void)
static void cb_func_build_make(void) static void cb_func_build_make(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_name != NULL) if (doc_list[idx].file_name != NULL)
on_build_make_activate(NULL, GINT_TO_POINTER(0)); on_build_make_activate(NULL, GINT_TO_POINTER(0));
} }
@ -497,6 +501,7 @@ static void cb_func_build_make(void)
static void cb_func_build_makeowntarget(void) static void cb_func_build_makeowntarget(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_name != NULL) if (doc_list[idx].file_name != NULL)
on_build_make_activate(NULL, GINT_TO_POINTER(1)); on_build_make_activate(NULL, GINT_TO_POINTER(1));
} }
@ -504,6 +509,7 @@ static void cb_func_build_makeowntarget(void)
static void cb_func_build_run(void) static void cb_func_build_run(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL) if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL)
on_build_execute_activate(NULL, GINT_TO_POINTER(0)); on_build_execute_activate(NULL, GINT_TO_POINTER(0));
} }
@ -511,6 +517,7 @@ static void cb_func_build_run(void)
static void cb_func_build_run2(void) static void cb_func_build_run2(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL) if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL)
on_build_execute_activate(NULL, GINT_TO_POINTER(1)); on_build_execute_activate(NULL, GINT_TO_POINTER(1));
} }
@ -518,6 +525,7 @@ static void cb_func_build_run2(void)
static void cb_func_build_options(void) static void cb_func_build_options(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if ((doc_list[idx].file_type->menu_items->can_compile || if ((doc_list[idx].file_type->menu_items->can_compile ||
doc_list[idx].file_type->menu_items->can_link || doc_list[idx].file_type->menu_items->can_link ||
doc_list[idx].file_type->menu_items->can_exec) && doc_list[idx].file_type->menu_items->can_exec) &&
@ -528,6 +536,7 @@ static void cb_func_build_options(void)
static void cb_func_reloadtaglist(void) static void cb_func_reloadtaglist(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
document_update_tag_list(idx, TRUE); document_update_tag_list(idx, TRUE);
} }
@ -585,6 +594,7 @@ static void keybindings_call_popup_item(int menuitemkey)
static void cb_func_switch_editor(void) static void cb_func_switch_editor(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci)); gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci));
} }
@ -641,6 +651,7 @@ static void cb_func_toggle_sidebar(void)
static void cb_func_edit_duplicateline(void) static void cb_func_edit_duplicateline(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
if (sci_can_copy(doc_list[idx].sci)) if (sci_can_copy(doc_list[idx].sci))
sci_selection_duplicate(doc_list[idx].sci); sci_selection_duplicate(doc_list[idx].sci);
else else
@ -650,30 +661,35 @@ static void cb_func_edit_duplicateline(void)
static void cb_func_edit_commentline(void) static void cb_func_edit_commentline(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
sci_cb_do_comment(idx); sci_cb_do_comment(idx);
} }
static void cb_func_edit_autocomplete(void) static void cb_func_edit_autocomplete(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
sci_cb_start_auto_complete(doc_list[idx].sci, sci_get_current_position(doc_list[idx].sci)); sci_cb_start_auto_complete(doc_list[idx].sci, sci_get_current_position(doc_list[idx].sci));
} }
static void cb_func_edit_calltip(void) static void cb_func_edit_calltip(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
sci_cb_show_calltip(doc_list[idx].sci, -1); sci_cb_show_calltip(doc_list[idx].sci, -1);
} }
static void cb_func_edit_macrolist(void) static void cb_func_edit_macrolist(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
sci_cb_show_macro_list(doc_list[idx].sci); sci_cb_show_macro_list(doc_list[idx].sci);
} }
static void cb_func_edit_suppresscompletion(void) static void cb_func_edit_suppresscompletion(void)
{ {
gint idx = document_get_cur_idx(); gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
sci_add_text(doc_list[idx].sci, " "); sci_add_text(doc_list[idx].sci, " ");
} }

View File

@ -291,21 +291,22 @@ static void main_init(void)
app->sensitive_buttons[13] = lookup_widget(app->window, "menu_count_words1"); app->sensitive_buttons[13] = lookup_widget(app->window, "menu_count_words1");
app->sensitive_buttons[14] = lookup_widget(app->window, "menu_build1"); app->sensitive_buttons[14] = lookup_widget(app->window, "menu_build1");
app->sensitive_buttons[15] = lookup_widget(app->window, "add_comments1"); app->sensitive_buttons[15] = lookup_widget(app->window, "add_comments1");
app->sensitive_buttons[16] = lookup_widget(app->window, "find1"); app->sensitive_buttons[16] = lookup_widget(app->window, "search1");
app->sensitive_buttons[17] = lookup_widget(app->window, "find_next1"); app->sensitive_buttons[17] = lookup_widget(app->window, "menu_paste1");
app->sensitive_buttons[18] = lookup_widget(app->window, "replace1"); app->sensitive_buttons[18] = lookup_widget(app->window, "menu_undo2");
app->sensitive_buttons[19] = lookup_widget(app->window, "menu_paste1"); app->sensitive_buttons[19] = lookup_widget(app->window, "preferences2");
app->sensitive_buttons[20] = lookup_widget(app->window, "menu_undo2"); app->sensitive_buttons[20] = lookup_widget(app->window, "revert1");
app->sensitive_buttons[21] = lookup_widget(app->window, "preferences2"); app->sensitive_buttons[21] = lookup_widget(app->window, "menu_item4");
app->sensitive_buttons[22] = lookup_widget(app->window, "revert1"); app->sensitive_buttons[22] = lookup_widget(app->window, "menu_markers_margin1");
app->sensitive_buttons[23] = lookup_widget(app->window, "menu_item4"); app->sensitive_buttons[23] = lookup_widget(app->window, "menu_linenumber_margin1");
app->sensitive_buttons[24] = lookup_widget(app->window, "menu_markers_margin1"); app->sensitive_buttons[24] = lookup_widget(app->window, "menu_choose_color1");
app->sensitive_buttons[25] = lookup_widget(app->window, "menu_linenumber_margin1"); app->sensitive_buttons[25] = lookup_widget(app->window, "menu_zoom_in1");
app->sensitive_buttons[26] = lookup_widget(app->window, "menu_choose_color1"); app->sensitive_buttons[26] = lookup_widget(app->window, "menu_zoom_out1");
app->sensitive_buttons[27] = lookup_widget(app->window, "menu_zoom_in1"); app->sensitive_buttons[27] = lookup_widget(app->window, "normal_size1");
app->sensitive_buttons[28] = lookup_widget(app->window, "menu_zoom_out1"); app->sensitive_buttons[28] = lookup_widget(app->window, "toolbutton24");
app->sensitive_buttons[29] = lookup_widget(app->window, "normal_size1"); app->sensitive_buttons[29] = lookup_widget(app->window, "toolbutton25");
app->sensitive_buttons[30] = lookup_widget(app->window, "toolbutton24"); app->sensitive_buttons[30] = lookup_widget(app->window, "entry_goto_line");
app->sensitive_buttons[31] = lookup_widget(app->window, "treeview6");
app->redo_items[0] = lookup_widget(app->popup_menu, "redo1"); app->redo_items[0] = lookup_widget(app->popup_menu, "redo1");
app->redo_items[1] = lookup_widget(app->window, "menu_redo2"); app->redo_items[1] = lookup_widget(app->window, "menu_redo2");
app->undo_items[0] = lookup_widget(app->popup_menu, "undo1"); app->undo_items[0] = lookup_widget(app->popup_menu, "undo1");

View File

@ -40,8 +40,6 @@ void sci_cb_show_macro_list(ScintillaObject *sci);
gboolean sci_cb_handle_xml(ScintillaObject *sci, gchar ch); gboolean sci_cb_handle_xml(ScintillaObject *sci, gchar ch);
gboolean sci_cb_handle_uri(ScintillaObject *sci, gint pos);
gboolean sci_cb_show_calltip(ScintillaObject *sci, gint pos); gboolean sci_cb_show_calltip(ScintillaObject *sci, gint pos);
void sci_cb_do_comment(gint idx); void sci_cb_do_comment(gint idx);