diff --git a/ChangeLog b/ChangeLog index d778b7d2..28569db3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,8 @@ * src/keybindings.c, src/editor.c, src/editor.h: Fix bug with 'Delete lines' when cursor is at the start of a multi-line selection. + * src/keybindings.c, src/msgwindow.c, src/msgwindow.h: + Add msgwin_switch_tab(), msgwin_clear_tab() functions. 2007-09-22 Nick Treleaven diff --git a/src/keybindings.c b/src/keybindings.c index e944010e..8cc7247f 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -42,10 +42,6 @@ #include "build.h" #include "tools.h" #include "navqueue.h" -// include vte.h on non-Win32 systems, else define fake vte_init -#ifdef HAVE_VTE -# include "vte.h" -#endif const gboolean swap_alt_tab_order = FALSE; @@ -970,9 +966,7 @@ static void cb_func_switch_editor(G_GNUC_UNUSED guint key_id) static void cb_func_switch_scribble(G_GNUC_UNUSED guint key_id) { - gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_SCRATCH); - msgwin_show_hide(TRUE); - gtk_widget_grab_focus(lookup_widget(app->window, "textview_scribble")); + msgwin_switch_tab(MSG_SCRATCH, TRUE); } static void cb_func_switch_search_bar(G_GNUC_UNUSED guint key_id) @@ -983,15 +977,7 @@ static void cb_func_switch_search_bar(G_GNUC_UNUSED guint key_id) static void cb_func_switch_vte(G_GNUC_UNUSED guint key_id) { -#ifdef HAVE_VTE - if (!vte_info.have_vte) - return; - msgwin_show_hide(TRUE); - /* the msgwin must be visible before we switch to the VTE page so that - * the font settings are applied on realization */ - gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_VTE); - gtk_widget_grab_focus(vc->vte); -#endif + msgwin_switch_tab(MSG_VTE, TRUE); } static void cb_func_switch_tableft(G_GNUC_UNUSED guint key_id) diff --git a/src/msgwindow.c b/src/msgwindow.c index 6eff9d25..07d97907 100644 --- a/src/msgwindow.c +++ b/src/msgwindow.c @@ -40,6 +40,7 @@ #include "filetypes.h" #include "build.h" #include "main.h" +#include "vte.h" #include #include @@ -335,24 +336,9 @@ static void on_message_treeview_clear_activate (GtkMenuItem *menuitem, gpointer user_data) { - GtkListStore *store; + gint tabnum = GPOINTER_TO_INT(user_data); - switch (GPOINTER_TO_INT(user_data)) - { - case MSG_MESSAGE: - gtk_widget_set_sensitive(lookup_widget(app->window, "next_message1"), FALSE); - store = msgwindow.store_msg; - break; - - case MSG_COMPILER: - gtk_widget_set_sensitive(build_get_menu_items(-1)->item_next_error, FALSE); - store = msgwindow.store_compiler; - break; - - default: // MSG_STATUS - store = msgwindow.store_status; - } - gtk_list_store_clear(store); + msgwin_clear_tab(tabnum); } @@ -885,3 +871,51 @@ static gboolean on_msgwin_button_press_event(GtkWidget *widget, GdkEventButton * } +void msgwin_switch_tab(MessageWindowTabNum tabnum, gboolean show) +{ + GtkWidget *widget = NULL; // widget to focus + + switch (tabnum) + { + case MSG_SCRATCH: widget = lookup_widget(app->window, "textview_scribble"); break; +#ifdef HAVE_VTE + case MSG_VTE: widget = (vte_info.have_vte) ? vc->vte : NULL; break; +#endif + default: break; + } + + /* the msgwin must be visible before we switch to the VTE page so that + * the font settings are applied on realization */ + if (show) + msgwin_show_hide(TRUE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), tabnum); + if (show && widget) + gtk_widget_grab_focus(widget); +} + + +void msgwin_clear_tab(MessageWindowTabNum tabnum) +{ + GtkListStore *store = NULL; + + switch (tabnum) + { + case MSG_MESSAGE: + gtk_widget_set_sensitive(lookup_widget(app->window, "next_message1"), FALSE); + store = msgwindow.store_msg; + break; + + case MSG_COMPILER: + gtk_widget_set_sensitive(build_get_menu_items(-1)->item_next_error, FALSE); + store = msgwindow.store_compiler; + break; + + case MSG_STATUS: store = msgwindow.store_status; break; + default: return; + } + if (store == NULL) + return; + gtk_list_store_clear(store); +} + + diff --git a/src/msgwindow.h b/src/msgwindow.h index 0729c1e9..0689757c 100644 --- a/src/msgwindow.h +++ b/src/msgwindow.h @@ -34,14 +34,14 @@ enum COLOR_BLUE }; -enum +typedef enum { MSG_STATUS = 0, // force it to start at 0 to keep in sync with the notebook page numbers MSG_COMPILER, MSG_MESSAGE, MSG_SCRATCH, MSG_VTE, -}; +} MessageWindowTabNum; @@ -69,6 +69,10 @@ void msgwin_finalize(); void msgwin_show_hide(gboolean show); +void msgwin_switch_tab(MessageWindowTabNum tabnum, gboolean show); + +void msgwin_clear_tab(MessageWindowTabNum tabnum); + void msgwin_msg_add_fmt(gint msg_color, gint line, gint idx, const gchar *format, ...) G_GNUC_PRINTF (4, 5);