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);
74 gtk_label_set_ellipsize(GTK_LABEL(tab_label), PANGO_ELLIPSIZE_MIDDLE);
76 gtk_container_add(GTK_CONTAINER(tab_event), tab_label);
77 gtk_box_pack_start(GTK_BOX(session->gtk.tabbar), tab_event, TRUE, TRUE, 0);
78 gtk_box_reorder_child(GTK_BOX(session->gtk.tabbar), tab_event, position);
80 gtk_widget_show_all(widget);
81 gtk_widget_show_all(tab_event);
83 gtk_notebook_set_current_page(session->gtk.tabs, position);
93 if (session == NULL || tab == NULL || session->gtk.tabbar == NULL) {
101 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
103 if (tab_event != NULL) {
104 gtk_container_remove(GTK_CONTAINER(session->gtk.tabbar), tab_event);
108 gtk_notebook_remove_page(session->gtk.tabs, tab_id);
112 g_slice_free(girara_tab_t, tab);
120 if (session == NULL || session->gtk.tabs == NULL) {
124 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, index);
126 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
132 if (session == NULL || session->gtk.tabs == NULL) {
136 return gtk_notebook_get_n_pages(session->gtk.tabs);
142 if (session == NULL || session->gtk.tabs == NULL) {
149 for (
int i = 0; i < number_of_tabs; i++) {
150 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, i);
151 girara_tab_t* tab = (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
157 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
158 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
160 if (i == current_tab) {
161 gtk_widget_set_state_flags(tab_event, GTK_STATE_FLAG_SELECTED,
false);
162 gtk_widget_set_state_flags(tab_label, GTK_STATE_FLAG_SELECTED,
false);
164 gtk_widget_unset_state_flags(tab_event, GTK_STATE_FLAG_SELECTED);
165 gtk_widget_unset_state_flags(tab_label, GTK_STATE_FLAG_SELECTED);
173 if (session == NULL || session->gtk.tabs == NULL) {
177 int current = gtk_notebook_get_current_page(session->gtk.tabs);
180 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, current);
181 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
190 if (session == NULL || session->gtk.tabs == NULL
191 || tab == NULL || tab->widget == NULL) {
195 int index = gtk_notebook_page_num(session->gtk.tabs, tab->widget);
198 gtk_notebook_set_current_page(session->gtk.tabs, index);
214 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
216 gtk_label_set_text(GTK_LABEL(tab_label), tab->title);
233 if (session == NULL || session->gtk.tabs == NULL
234 || tab == NULL || tab->widget == NULL) {
238 return gtk_notebook_page_num(session->gtk.tabs, tab->widget);
244 if (session == NULL || session->gtk.tabs == NULL
245 || tab == NULL || tab->widget == NULL) {
249 gtk_notebook_reorder_child(session->gtk.tabs, tab->widget, position);
253 girara_callback_tab_clicked(GtkWidget*
UNUSED(widget), GdkEventButton* event, gpointer data)
259 girara_tab_t* tab = (girara_tab_t*) data;
260 girara_session_t* session = tab->session;
262 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)
HIDDEN void widget_add_class(GtkWidget *widget, const char *styleclass)
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)