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_widget_set_halign(tab_label, GTK_ALIGN_START);
72 gtk_widget_set_valign(tab_label, GTK_ALIGN_START);
75 gtk_label_set_ellipsize(GTK_LABEL(tab_label), PANGO_ELLIPSIZE_MIDDLE);
77 gtk_container_add(GTK_CONTAINER(tab_event), tab_label);
78 gtk_box_pack_start(GTK_BOX(session->gtk.tabbar), tab_event, TRUE, TRUE, 0);
79 gtk_box_reorder_child(GTK_BOX(session->gtk.tabbar), tab_event, position);
81 gtk_widget_show_all(widget);
82 gtk_widget_show_all(tab_event);
84 gtk_notebook_set_current_page(session->gtk.tabs, position);
94 if (session == NULL || tab == NULL || session->gtk.tabbar == NULL) {
102 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
104 if (tab_event != NULL) {
105 gtk_container_remove(GTK_CONTAINER(session->gtk.tabbar), tab_event);
109 gtk_notebook_remove_page(session->gtk.tabs, tab_id);
113 g_slice_free(girara_tab_t, tab);
121 if (session == NULL || session->gtk.tabs == NULL) {
125 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, index);
127 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
133 if (session == NULL || session->gtk.tabs == NULL) {
137 return gtk_notebook_get_n_pages(session->gtk.tabs);
143 if (session == NULL || session->gtk.tabs == NULL) {
150 for (
int i = 0; i < number_of_tabs; i++) {
151 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, i);
152 girara_tab_t* tab = (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
158 GtkWidget* tab_event = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"event"));
159 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
161 if (i == current_tab) {
162 gtk_widget_set_state_flags(tab_event, GTK_STATE_FLAG_SELECTED,
false);
163 gtk_widget_set_state_flags(tab_label, GTK_STATE_FLAG_SELECTED,
false);
165 gtk_widget_unset_state_flags(tab_event, GTK_STATE_FLAG_SELECTED);
166 gtk_widget_unset_state_flags(tab_label, GTK_STATE_FLAG_SELECTED);
174 if (session == NULL || session->gtk.tabs == NULL) {
178 int current = gtk_notebook_get_current_page(session->gtk.tabs);
181 GtkWidget* widget = gtk_notebook_get_nth_page(session->gtk.tabs, current);
182 return (girara_tab_t*) g_object_get_data(G_OBJECT(widget),
"tab");
191 if (session == NULL || session->gtk.tabs == NULL
192 || tab == NULL || tab->widget == NULL) {
196 int index = gtk_notebook_page_num(session->gtk.tabs, tab->widget);
199 gtk_notebook_set_current_page(session->gtk.tabs, index);
215 GtkWidget* tab_label = GTK_WIDGET(g_object_get_data(G_OBJECT(tab->widget),
"label"));
217 gtk_label_set_text(GTK_LABEL(tab_label), tab->title);
234 if (session == NULL || session->gtk.tabs == NULL
235 || tab == NULL || tab->widget == NULL) {
239 return gtk_notebook_page_num(session->gtk.tabs, tab->widget);
245 if (session == NULL || session->gtk.tabs == NULL
246 || tab == NULL || tab->widget == NULL) {
250 gtk_notebook_reorder_child(session->gtk.tabs, tab->widget, position);
254 girara_callback_tab_clicked(GtkWidget*
UNUSED(widget), GdkEventButton* event, gpointer data)
260 girara_tab_t* tab = (girara_tab_t*) data;
261 girara_session_t* session = tab->session;
263 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)