diff --git a/ChangeLog b/ChangeLog index 695d8a52..c2e491e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,8 @@ * src/vte.c, src/vte.h: Move struct _VteTerminal, VteFunctions from vte.h to vte.c. Call vte_restart() in vte_keypress() as the code is the same. + * src/build.c, src/build.h, src/msgwindow.c: + Add Previous Error menu item. 2008-06-25 Nick Treleaven diff --git a/src/build.c b/src/build.c index 7f35dcd6..4b06670f 100644 --- a/src/build.c +++ b/src/build.c @@ -83,9 +83,9 @@ enum }; static BuildMenuItems default_menu_items = - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static BuildMenuItems latex_menu_items = - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static struct @@ -110,6 +110,7 @@ static void on_build_build_activate(GtkMenuItem *menuitem, gpointer user_data); static void on_build_make_activate(GtkMenuItem *menuitem, gpointer user_data); static void on_build_execute_activate(GtkMenuItem *menuitem, gpointer user_data); static void on_build_next_error(GtkMenuItem *menuitem, gpointer user_data); +static void on_build_previous_error(GtkMenuItem *menuitem, gpointer user_data); static void kill_process(GPid *pid); @@ -1105,6 +1106,13 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_next_error), NULL); menu_items->item_next_error = item; + item = gtk_image_menu_item_new_with_mnemonic(_("_Previous Error")); + gtk_widget_show(item); + /*GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_, item);*/ + gtk_container_add(GTK_CONTAINER(menu), item); + g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_previous_error), NULL); + menu_items->item_previous_error = item; + item = gtk_separator_menu_item_new(); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); @@ -1215,6 +1223,13 @@ static void create_build_menu_tex(BuildMenuItems *menu_items) g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_next_error), NULL); menu_items->item_next_error = item; + item = gtk_image_menu_item_new_with_mnemonic(_("_Previous Error")); + gtk_widget_show(item); + /*GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_, item);*/ + gtk_container_add(GTK_CONTAINER(menu), item); + g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_previous_error), NULL); + menu_items->item_previous_error = item; + item = gtk_separator_menu_item_new(); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); @@ -1721,6 +1736,8 @@ void build_menu_update(GeanyDocument *doc) NULL) > 0; if (menu_items->item_next_error) gtk_widget_set_sensitive(menu_items->item_next_error, have_errors); + if (menu_items->item_previous_error) + gtk_widget_set_sensitive(menu_items->item_previous_error, have_errors); } @@ -2048,6 +2065,20 @@ on_build_next_error (GtkMenuItem *menuitem, } +static void +on_build_previous_error (GtkMenuItem *menuitem, + gpointer user_data) +{ + if (ui_tree_view_find_previous(GTK_TREE_VIEW(msgwindow.tree_compiler), + msgwin_goto_compiler_file_line)) + { + gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_COMPILER); + } + else + ui_set_statusbar(FALSE, _("No more build errors.")); +} + + void build_init() { widgets.compile_button = lookup_widget(main_widgets.window, "toolbutton13"); diff --git a/src/build.h b/src/build.h index cf0c1675..3ae096e4 100644 --- a/src/build.h +++ b/src/build.h @@ -55,6 +55,7 @@ typedef struct BuildMenuItems GtkWidget *item_make_custom; GtkWidget *item_make_object; GtkWidget *item_next_error; + GtkWidget *item_previous_error; GtkWidget *item_exec; GtkWidget *item_exec2; GtkWidget *item_set_args; diff --git a/src/msgwindow.c b/src/msgwindow.c index 1a00781f..39f7c811 100644 --- a/src/msgwindow.c +++ b/src/msgwindow.c @@ -250,6 +250,7 @@ void msgwin_compiler_add(gint msg_color, const gchar *msg) /* calling build_menu_update for every build message would be overkill */ gtk_widget_set_sensitive(build_get_menu_items(-1)->item_next_error, TRUE); + gtk_widget_set_sensitive(build_get_menu_items(-1)->item_previous_error, TRUE); } @@ -1013,9 +1014,9 @@ void msgwin_clear_tab(gint tabnum) break; case MSG_COMPILER: - gtk_widget_set_sensitive(build_get_menu_items(-1)->item_next_error, FALSE); - store = msgwindow.store_compiler; - break; + gtk_list_store_clear(msgwindow.store_compiler); + build_menu_update(NULL); /* update next error items */ + return; case MSG_STATUS: store = msgwindow.store_status; break; default: return;