7 #define UNTITLED_TAB_TITLE "untitled"
9 #if GTK_MAJOR_VERSION == 2
21 static bool girara_callback_tab_clicked(GtkWidget* widget, GdkEventButton*
event, gpointer data);
26 if (session == NULL || session->gtk.tabs == NULL) {
34 if (session->gtk.tabbar) {
35 gtk_widget_show(session->gtk.tabbar);
41 bool next_to_current,
void* data)
43 if (session == NULL || widget == NULL) {
47 girara_tab_t*
tab = g_slice_new(girara_tab_t);
54 int position = (next_to_current) ?
55 (gtk_notebook_get_current_page(session->gtk.tabs) + 1) : -1;
58 if (gtk_notebook_insert_page(session->gtk.tabs, tab->widget, NULL, position) == -1) {
60 g_slice_free(girara_tab_t, tab);
65 GtkWidget *tab_label = gtk_label_new(tab->title);
66 GtkWidget *tab_event = gtk_event_box_new();
68 g_object_set_data(G_OBJECT(tab->widget),
"event", (gpointer) tab_event);
69 g_object_set_data(G_OBJECT(tab->widget),
"label", (gpointer) tab_label);
70 g_object_set_data(G_OBJECT(tab->widget),
"tab", (gpointer) tab);
72 g_signal_connect(G_OBJECT(tab_event),
"button_press_event",
73 G_CALLBACK(girara_callback_tab_clicked), tab);
75 gtk_misc_set_alignment(GTK_MISC(tab_label), 0.0f, 0.0f);
76 gtk_misc_set_padding(GTK_MISC(tab_label), 4, 4);
77 gtk_widget_override_font(tab_label, session->style.font);
79 gtk_container_add(GTK_CONTAINER(tab_event), tab_label);
80 gtk_box_pack_start(GTK_BOX(session->gtk.tabbar), tab_event, TRUE, TRUE, 0);
81 gtk_box_reorder_child(GTK_BOX(session->gtk.tabbar), tab_event, position);
83 gtk_widget_show_all(widget);
84 gtk_widget_show_all(tab_event);
86 gtk_notebook_set_current_page(session->gtk.tabs, position);
96 if (session == NULL || tab == NULL || session->gtk.tabbar == NULL) {
104 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
106 if (tab_event != NULL) {
107 gtk_container_remove(GTK_CONTAINER(session->gtk.tabbar), tab_event);
111 gtk_notebook_remove_page(session->gtk.tabs, tab_id);
115 g_slice_free(girara_tab_t, tab);
123 if (session == NULL || session->gtk.tabs == NULL) {
127 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, index);
129 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
135 if (session == NULL || session->gtk.tabs == NULL) {
139 return gtk_notebook_get_n_pages(session->gtk.tabs);
145 if (session == NULL || session->gtk.tabs == NULL) {
153 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, i);
154 girara_tab_t*
tab = (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
160 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
161 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
163 if (i == current_tab) {
164 gtk_widget_override_background_color(tab_event, GTK_STATE_NORMAL, &(session->style.tabbar_focus_background));
165 gtk_widget_override_color(tab_label, GTK_STATE_NORMAL, &(session->style.tabbar_focus_foreground));
167 gtk_widget_override_background_color(tab_event, GTK_STATE_NORMAL, &(session->style.tabbar_background));
168 gtk_widget_override_color(tab_label, GTK_STATE_NORMAL, &(session->style.tabbar_foreground));
176 if (session == NULL || session->gtk.tabs == NULL) {
180 int current = gtk_notebook_get_current_page(session->gtk.tabs);
183 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, current);
184 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
193 if (session == NULL || session->gtk.tabs == NULL
194 || tab == NULL || tab->widget == NULL) {
198 int index = gtk_notebook_page_num(session->gtk.tabs, tab->widget);
201 gtk_notebook_set_current_page(session->gtk.tabs, index);
217 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
219 gtk_label_set_text(GTK_LABEL(tab_label), tab->title);
236 if (session == NULL || session->gtk.tabs == NULL
237 || tab == NULL || tab->widget == NULL) {
241 return gtk_notebook_page_num(session->gtk.tabs, tab->widget);
247 if (session == NULL || session->gtk.tabs == NULL
248 || tab == NULL || tab->widget == NULL) {
252 gtk_notebook_reorder_child(session->gtk.tabs, tab->widget, position);
256 girara_callback_tab_clicked(GtkWidget*
UNUSED(widget), GdkEventButton*
event, gpointer data)
262 girara_tab_t*
tab = (girara_tab_t*) data;
265 switch (event->button) {
girara_session_t * session
void girara_tab_remove(girara_session_t *session, girara_tab_t *tab)
void girara_tab_current_set(girara_session_t *session, girara_tab_t *tab)
girara_tab_t * girara_tab_new(girara_session_t *session, const char *title, GtkWidget *widget, bool next_to_current, void *data)
girara_tab_t * girara_tab_current_get(girara_session_t *session)
bool girara_set_view(girara_session_t *session, GtkWidget *widget)
int girara_tab_position_get(girara_session_t *session, girara_tab_t *tab)
girara_tab_update(session)
int girara_get_number_of_tabs(girara_session_t *session)
void girara_tab_position_set(girara_session_t *session, girara_tab_t *tab, unsigned int position)
girara_tab_t * girara_tab_get(girara_session_t *session, unsigned int index)
const char * girara_tab_title_get(girara_tab_t *tab)
void girara_tabs_enable(girara_session_t *session)
#define UNTITLED_TAB_TITLE
unsigned int number_of_tabs
void girara_tab_title_set(girara_tab_t *tab, const char *title)