7 #define UNTITLED_TAB_TITLE "untitled"
17 static bool girara_callback_tab_clicked(GtkWidget* widget, GdkEventButton* event, gpointer data);
22 if (session == NULL || session->gtk.tabs == NULL) {
30 if (session->gtk.tabbar) {
31 gtk_widget_show(session->gtk.tabbar);
36 girara_tab_new(girara_session_t* session,
const char* title, GtkWidget* widget,
37 bool next_to_current,
void* data)
39 if (session == NULL || widget == NULL) {
43 girara_tab_t* tab = g_slice_new(girara_tab_t);
47 tab->session = session;
50 int position = (next_to_current) ?
51 (gtk_notebook_get_current_page(session->gtk.tabs) + 1) : -1;
54 if (gtk_notebook_insert_page(session->gtk.tabs, tab->widget, NULL, position) == -1) {
56 g_slice_free(girara_tab_t, tab);
61 GtkWidget *tab_label = gtk_label_new(tab->title);
62 GtkWidget *tab_event = gtk_event_box_new();
64 g_object_set_data(G_OBJECT(tab->widget),
"event", (gpointer) tab_event);
65 g_object_set_data(G_OBJECT(tab->widget),
"label", (gpointer) tab_label);
66 g_object_set_data(G_OBJECT(tab->widget),
"tab", (gpointer) tab);
68 g_signal_connect(G_OBJECT(tab_event),
"button_press_event",
69 G_CALLBACK(girara_callback_tab_clicked), tab);
71 gtk_misc_set_alignment(GTK_MISC(tab_label), 0.0f, 0.0f);
72 gtk_misc_set_padding(GTK_MISC(tab_label), 4, 4);
73 gtk_widget_override_font(tab_label, session->style.font);
75 gtk_container_add(GTK_CONTAINER(tab_event), tab_label);
76 gtk_box_pack_start(GTK_BOX(session->gtk.tabbar), tab_event, TRUE, TRUE, 0);
77 gtk_box_reorder_child(GTK_BOX(session->gtk.tabbar), tab_event, position);
79 gtk_widget_show_all(widget);
80 gtk_widget_show_all(tab_event);
82 gtk_notebook_set_current_page(session->gtk.tabs, position);
92 if (session == NULL || tab == NULL || session->gtk.tabbar == NULL) {
100 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
102 if (tab_event != NULL) {
103 gtk_container_remove(GTK_CONTAINER(session->gtk.tabbar), tab_event);
107 gtk_notebook_remove_page(session->gtk.tabs, tab_id);
111 g_slice_free(girara_tab_t, tab);
119 if (session == NULL || session->gtk.tabs == NULL) {
123 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, index);
125 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
131 if (session == NULL || session->gtk.tabs == NULL) {
135 return gtk_notebook_get_n_pages(session->gtk.tabs);
141 if (session == NULL || session->gtk.tabs == NULL) {
148 for (
int i = 0; i < number_of_tabs; i++) {
149 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, i);
150 girara_tab_t* tab = (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
156 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
157 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
159 if (i == current_tab) {
160 gtk_widget_override_background_color(tab_event, GTK_STATE_NORMAL, &(session->style.tabbar_focus_background));
161 gtk_widget_override_color(tab_label, GTK_STATE_NORMAL, &(session->style.tabbar_focus_foreground));
163 gtk_widget_override_background_color(tab_event, GTK_STATE_NORMAL, &(session->style.tabbar_background));
164 gtk_widget_override_color(tab_label, GTK_STATE_NORMAL, &(session->style.tabbar_foreground));
172 if (session == NULL || session->gtk.tabs == NULL) {
176 int current = gtk_notebook_get_current_page(session->gtk.tabs);
179 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, current);
180 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
189 if (session == NULL || session->gtk.tabs == NULL
190 || tab == NULL || tab->widget == NULL) {
194 int index = gtk_notebook_page_num(session->gtk.tabs, tab->widget);
197 gtk_notebook_set_current_page(session->gtk.tabs, index);
213 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
215 gtk_label_set_text(GTK_LABEL(tab_label), tab->title);
232 if (session == NULL || session->gtk.tabs == NULL
233 || tab == NULL || tab->widget == NULL) {
237 return gtk_notebook_page_num(session->gtk.tabs, tab->widget);
243 if (session == NULL || session->gtk.tabs == NULL
244 || tab == NULL || tab->widget == NULL) {
248 gtk_notebook_reorder_child(session->gtk.tabs, tab->widget, position);
252 girara_callback_tab_clicked(GtkWidget*
UNUSED(widget), GdkEventButton* event, gpointer data)
258 girara_tab_t* tab = (girara_tab_t*) data;
259 girara_session_t* session = tab->session;
261 switch (event->button) {
void girara_tab_update(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)
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
void girara_tab_title_set(girara_tab_t *tab, const char *title)