File: | src/baul-notebook.c |
Warning: | line 373, column 5 Value stored to 'position' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ |
2 | /* |
3 | * Copyright © 2002 Christophe Fergeau |
4 | * Copyright © 2003, 2004 Marco Pesenti Gritti |
5 | * Copyright © 2003, 2004, 2005 Christian Persch |
6 | * (ephy-notebook.c) |
7 | * |
8 | * Copyright © 2008 Free Software Foundation, Inc. |
9 | * (baul-notebook.c) |
10 | * |
11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License as published by |
13 | * the Free Software Foundation; either version 2, or (at your option) |
14 | * any later version. |
15 | * |
16 | * This program is distributed in the hope that it will be useful, |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19 | * GNU General Public License for more details. |
20 | * |
21 | * You should have received a copy of the GNU General Public License |
22 | * along with this program; if not, write to the Free Software |
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
24 | * |
25 | */ |
26 | |
27 | #include <config.h> |
28 | |
29 | #include <glib/gi18n.h> |
30 | #include <gio/gio.h> |
31 | #include <ctk/ctk.h> |
32 | |
33 | #include <libbaul-private/baul-dnd.h> |
34 | |
35 | #include "baul-notebook.h" |
36 | #include "baul-navigation-window.h" |
37 | #include "baul-window-manage-views.h" |
38 | #include "baul-window-private.h" |
39 | #include "baul-window-slot.h" |
40 | #include "baul-navigation-window-pane.h" |
41 | |
42 | #define AFTER_ALL_TABS-1 -1 |
43 | |
44 | static int baul_notebook_insert_page (CtkNotebook *notebook, |
45 | CtkWidget *child, |
46 | CtkWidget *tab_label, |
47 | CtkWidget *menu_label, |
48 | int position); |
49 | static void baul_notebook_remove (CtkContainer *container, |
50 | CtkWidget *tab_widget); |
51 | |
52 | enum |
53 | { |
54 | TAB_CLOSE_REQUEST, |
55 | LAST_SIGNAL |
56 | }; |
57 | |
58 | static guint signals[LAST_SIGNAL] = { 0 }; |
59 | |
60 | G_DEFINE_TYPE (BaulNotebook, baul_notebook, CTK_TYPE_NOTEBOOK)static void baul_notebook_init (BaulNotebook *self); static void baul_notebook_class_init (BaulNotebookClass *klass); static GType baul_notebook_get_type_once (void); static gpointer baul_notebook_parent_class = ((void*)0); static gint BaulNotebook_private_offset; static void baul_notebook_class_intern_init (gpointer klass) { baul_notebook_parent_class = g_type_class_peek_parent (klass); if (BaulNotebook_private_offset != 0) g_type_class_adjust_private_offset (klass, &BaulNotebook_private_offset ); baul_notebook_class_init ((BaulNotebookClass*) klass); } __attribute__ ((__unused__)) static inline gpointer baul_notebook_get_instance_private (BaulNotebook *self) { return (((gpointer) ((guint8*) (self) + (glong) (BaulNotebook_private_offset)))); } GType baul_notebook_get_type (void) { static GType static_g_define_type_id = 0; if ((__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer), "Expression evaluates to false"); (void) ( 0 ? (gpointer) * (&static_g_define_type_id) : ((void*)0)) ; (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id ) == sizeof (gpointer), "Expression evaluates to false"); __typeof__ (*(&static_g_define_type_id)) gapg_temp_newval; __typeof__ ((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id ); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5) ; gapg_temp_newval; })) && g_once_init_enter_pointer ( &static_g_define_type_id)); })) ) { GType g_define_type_id = baul_notebook_get_type_once (); (__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer) , "Expression evaluates to false"); 0 ? (void) (*(&static_g_define_type_id ) = (g_define_type_id)) : (void) 0; g_once_init_leave_pointer ((&static_g_define_type_id), (gpointer) (guintptr) (g_define_type_id )); })) ; } return static_g_define_type_id; } __attribute__ ( (__noinline__)) static GType baul_notebook_get_type_once (void ) { GType g_define_type_id = g_type_register_static_simple (( ctk_notebook_get_type ()), g_intern_static_string ("BaulNotebook" ), sizeof (BaulNotebookClass), (GClassInitFunc)(void (*)(void )) baul_notebook_class_intern_init, sizeof (BaulNotebook), (GInstanceInitFunc )(void (*)(void)) baul_notebook_init, (GTypeFlags) 0); { {{}; } } return g_define_type_id; }; |
61 | |
62 | static void |
63 | baul_notebook_class_init (BaulNotebookClass *klass) |
64 | { |
65 | GObjectClass *object_class = G_OBJECT_CLASS (klass)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((klass)), (((GType) ((20) << (2)))))))); |
66 | CtkContainerClass *container_class = CTK_CONTAINER_CLASS (klass)((((CtkContainerClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((klass)), ((ctk_container_get_type ())))))); |
67 | CtkNotebookClass *notebook_class = CTK_NOTEBOOK_CLASS (klass)((((CtkNotebookClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((klass)), ((ctk_notebook_get_type ())))))); |
68 | |
69 | container_class->remove = baul_notebook_remove; |
70 | |
71 | notebook_class->insert_page = baul_notebook_insert_page; |
72 | |
73 | signals[TAB_CLOSE_REQUEST] = |
74 | g_signal_new ("tab-close-request", |
75 | G_OBJECT_CLASS_TYPE (object_class)((((GTypeClass*) (object_class))->g_type)), |
76 | G_SIGNAL_RUN_LAST, |
77 | G_STRUCT_OFFSET (BaulNotebookClass, tab_close_request)((glong) __builtin_offsetof(BaulNotebookClass, tab_close_request )), |
78 | NULL((void*)0), NULL((void*)0), |
79 | g_cclosure_marshal_VOID__OBJECT, |
80 | G_TYPE_NONE((GType) ((1) << (2))), |
81 | 1, |
82 | BAUL_TYPE_WINDOW_SLOT(baul_window_slot_get_type())); |
83 | } |
84 | |
85 | static gint |
86 | find_tab_num_at_pos (BaulNotebook *notebook, gint abs_x, gint abs_y) |
87 | { |
88 | CtkPositionType tab_pos; |
89 | int page_num = 0; |
90 | CtkNotebook *nb = CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))); |
91 | CtkWidget *page; |
92 | CtkAllocation allocation; |
93 | |
94 | tab_pos = ctk_notebook_get_tab_pos (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ()))))))); |
95 | |
96 | while ((page = ctk_notebook_get_nth_page (nb, page_num))) |
97 | { |
98 | CtkWidget *tab; |
99 | gint max_x, max_y; |
100 | gint x_root, y_root; |
101 | |
102 | tab = ctk_notebook_get_tab_label (nb, page); |
103 | g_return_val_if_fail (tab != NULL, -1)do { if ((tab != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "tab != NULL"); return (-1); } } while (0); |
104 | |
105 | if (!ctk_widget_get_mapped (CTK_WIDGET (tab)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((tab)), ((ctk_widget_get_type ())))))))) |
106 | { |
107 | page_num++; |
108 | continue; |
109 | } |
110 | |
111 | cdk_window_get_origin (ctk_widget_get_window (tab), |
112 | &x_root, &y_root); |
113 | ctk_widget_get_allocation (tab, &allocation); |
114 | |
115 | max_x = x_root + allocation.x + allocation.width; |
116 | max_y = y_root + allocation.y + allocation.height; |
117 | |
118 | if (((tab_pos == CTK_POS_TOP) |
119 | || (tab_pos == CTK_POS_BOTTOM)) |
120 | &&(abs_x<=max_x)) |
121 | { |
122 | return page_num; |
123 | } |
124 | else if (((tab_pos == CTK_POS_LEFT) |
125 | || (tab_pos == CTK_POS_RIGHT)) |
126 | && (abs_y<=max_y)) |
127 | { |
128 | return page_num; |
129 | } |
130 | |
131 | page_num++; |
132 | } |
133 | return AFTER_ALL_TABS-1; |
134 | } |
135 | |
136 | static gboolean |
137 | button_press_cb (BaulNotebook *notebook, |
138 | CdkEventButton *event, |
139 | gpointer data G_GNUC_UNUSED__attribute__ ((__unused__))) |
140 | { |
141 | int tab_clicked; |
142 | |
143 | tab_clicked = find_tab_num_at_pos (notebook, event->x_root, event->y_root); |
144 | |
145 | if (event->type == CDK_BUTTON_PRESS && |
146 | (event->button == 3 || event->button == 2) && |
147 | (event->state & ctk_accelerator_get_default_mod_mask ()) == 0) |
148 | { |
149 | if (tab_clicked == -1) |
150 | { |
151 | /* consume event, so that we don't pop up the context menu when |
152 | * the mouse if not over a tab label |
153 | */ |
154 | return TRUE(!(0)); |
155 | } |
156 | |
157 | /* switch to the page the mouse is over, but don't consume the event */ |
158 | ctk_notebook_set_current_page (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), tab_clicked); |
159 | } |
160 | |
161 | return FALSE(0); |
162 | } |
163 | |
164 | static void |
165 | baul_notebook_init (BaulNotebook *notebook) |
166 | { |
167 | CtkStyleContext *context; |
168 | |
169 | context = ctk_widget_get_style_context (CTK_WIDGET (notebook)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_widget_get_type ()))))))); |
170 | ctk_style_context_add_class (context, "baul-notebook"); |
171 | |
172 | ctk_notebook_set_scrollable (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), TRUE(!(0))); |
173 | ctk_notebook_set_show_border (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), FALSE(0)); |
174 | ctk_notebook_set_show_tabs (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), FALSE(0)); |
175 | |
176 | g_signal_connect (notebook, "button-press-event",g_signal_connect_data ((notebook), ("button-press-event"), (( GCallback)button_press_cb), (((void*)0)), ((void*)0), (GConnectFlags ) 0) |
177 | (GCallback)button_press_cb, NULL)g_signal_connect_data ((notebook), ("button-press-event"), (( GCallback)button_press_cb), (((void*)0)), ((void*)0), (GConnectFlags ) 0); |
178 | } |
179 | |
180 | void |
181 | baul_notebook_sync_loading (BaulNotebook *notebook, |
182 | BaulWindowSlot *slot) |
183 | { |
184 | CtkWidget *tab_label, *spinner, *icon; |
185 | gboolean active; |
186 | |
187 | g_return_if_fail (BAUL_IS_NOTEBOOK (notebook))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return; } } while (0); |
188 | g_return_if_fail (BAUL_IS_WINDOW_SLOT (slot))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((slot)); GType __t = ((baul_window_slot_get_type())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_WINDOW_SLOT (slot)"); return; } } while (0); |
189 | |
190 | tab_label = ctk_notebook_get_tab_label (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), slot->content_box); |
191 | g_return_if_fail (CTK_IS_WIDGET (tab_label))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((tab_label)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "CTK_IS_WIDGET (tab_label)"); return; } } while (0); |
192 | |
193 | spinner = CTK_WIDGET (g_object_get_data (G_OBJECT (tab_label), "spinner"))((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((tab_label)), (((GType) ((20) << (2 )))))))), "spinner"))), ((ctk_widget_get_type ())))))); |
194 | icon = CTK_WIDGET (g_object_get_data (G_OBJECT (tab_label), "icon"))((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((tab_label)), (((GType) ((20) << (2 )))))))), "icon"))), ((ctk_widget_get_type ())))))); |
195 | g_return_if_fail (spinner != NULL && icon != NULL)do { if ((spinner != ((void*)0) && icon != ((void*)0) )) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "spinner != NULL && icon != NULL" ); return; } } while (0); |
196 | |
197 | active = FALSE(0); |
198 | g_object_get (spinner, "active", &active, NULL((void*)0)); |
199 | if (active == slot->allow_stop) |
200 | { |
201 | return; |
202 | } |
203 | |
204 | if (slot->allow_stop) |
205 | { |
206 | ctk_widget_hide (icon); |
207 | ctk_widget_show (spinner); |
208 | ctk_spinner_start (CTK_SPINNER (spinner)((((CtkSpinner*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((spinner)), ((ctk_spinner_get_type ()))))))); |
209 | } |
210 | else |
211 | { |
212 | ctk_spinner_stop (CTK_SPINNER (spinner)((((CtkSpinner*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((spinner)), ((ctk_spinner_get_type ()))))))); |
213 | ctk_widget_hide (spinner); |
214 | ctk_widget_show (icon); |
215 | } |
216 | } |
217 | |
218 | void |
219 | baul_notebook_sync_tab_label (BaulNotebook *notebook, |
220 | BaulWindowSlot *slot) |
221 | { |
222 | CtkWidget *hbox, *label; |
223 | |
224 | g_return_if_fail (BAUL_IS_NOTEBOOK (notebook))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return; } } while (0); |
225 | g_return_if_fail (BAUL_IS_WINDOW_SLOT (slot))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((slot)); GType __t = ((baul_window_slot_get_type())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_WINDOW_SLOT (slot)"); return; } } while (0); |
226 | g_return_if_fail (CTK_IS_WIDGET (slot->content_box))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((slot->content_box)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0 ), ((const char*) (__func__)), "CTK_IS_WIDGET (slot->content_box)" ); return; } } while (0); |
227 | |
228 | hbox = ctk_notebook_get_tab_label (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), slot->content_box); |
229 | g_return_if_fail (CTK_IS_WIDGET (hbox))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((hbox)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "CTK_IS_WIDGET (hbox)"); return; } } while (0); |
230 | |
231 | label = CTK_WIDGET (g_object_get_data (G_OBJECT (hbox), "label"))((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((hbox)), (((GType) ((20) << (2))))) ))), "label"))), ((ctk_widget_get_type ())))))); |
232 | g_return_if_fail (CTK_IS_WIDGET (label))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((label)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "CTK_IS_WIDGET (label)"); return; } } while (0 ); |
233 | |
234 | ctk_label_set_text (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), slot->title); |
235 | |
236 | if (slot->location != NULL((void*)0)) |
237 | { |
238 | char *location_name; |
239 | |
240 | /* Set the tooltip on the label's parent (the tab label hbox), |
241 | * so it covers all of the tab label. |
242 | */ |
243 | location_name = g_file_get_parse_name (slot->location); |
244 | ctk_widget_set_tooltip_text (ctk_widget_get_parent (label), location_name); |
245 | g_free (location_name); |
246 | } |
247 | else |
248 | { |
249 | ctk_widget_set_tooltip_text (ctk_widget_get_parent (label), NULL((void*)0)); |
250 | } |
251 | } |
252 | |
253 | static void |
254 | close_button_clicked_cb (CtkWidget *widget G_GNUC_UNUSED__attribute__ ((__unused__)), |
255 | BaulWindowSlot *slot) |
256 | { |
257 | CtkWidget *notebook; |
258 | |
259 | notebook = ctk_widget_get_ancestor (slot->content_box, BAUL_TYPE_NOTEBOOK(baul_notebook_get_type ())); |
260 | if (notebook != NULL((void*)0)) |
261 | { |
262 | g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, slot); |
263 | } |
264 | } |
265 | |
266 | static CtkWidget * |
267 | build_tab_label (BaulNotebook *nb G_GNUC_UNUSED__attribute__ ((__unused__)), |
268 | BaulWindowSlot *slot) |
269 | { |
270 | BaulDragSlotProxyInfo *drag_info; |
271 | CtkWidget *hbox, *label, *close_button, *image, *spinner, *icon; |
272 | |
273 | /* set hbox spacing and label padding (see below) so that there's an |
274 | * equal amount of space around the label */ |
275 | hbox = ctk_box_new (CTK_ORIENTATION_HORIZONTAL, 4); |
276 | ctk_widget_show (hbox); |
277 | |
278 | /* setup load feedback */ |
279 | spinner = ctk_spinner_new (); |
280 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), spinner, FALSE(0), FALSE(0), 0); |
281 | |
282 | /* setup site icon, empty by default */ |
283 | icon = ctk_image_new (); |
284 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), icon, FALSE(0), FALSE(0), 0); |
285 | /* don't show the icon */ |
286 | |
287 | /* setup label */ |
288 | label = ctk_label_new (NULL((void*)0)); |
289 | ctk_label_set_ellipsize (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), PANGO_ELLIPSIZE_END); |
290 | ctk_label_set_single_line_mode (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), TRUE(!(0))); |
291 | ctk_label_set_xalign (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), 0.0); |
292 | ctk_label_set_yalign (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), 0.5); |
293 | |
294 | ctk_widget_set_margin_start (label, 0); |
295 | ctk_widget_set_margin_end (label, 0); |
296 | ctk_widget_set_margin_top (label, 0); |
297 | ctk_widget_set_margin_bottom (label, 0); |
298 | |
299 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), label, TRUE(!(0)), TRUE(!(0)), 0); |
300 | ctk_widget_show (label); |
301 | |
302 | /* setup close button */ |
303 | close_button = ctk_button_new (); |
304 | ctk_button_set_relief (CTK_BUTTON (close_button)((((CtkButton*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((close_button)), ((ctk_button_get_type ())))))), |
305 | CTK_RELIEF_NONE); |
306 | /* don't allow focus on the close button */ |
307 | ctk_widget_set_focus_on_click (close_button, FALSE(0)); |
308 | |
309 | ctk_widget_set_name (close_button, "baul-tab-close-button"); |
310 | |
311 | image = ctk_image_new_from_icon_name ("window-close", CTK_ICON_SIZE_MENU); |
312 | ctk_widget_set_tooltip_text (close_button, _("Close tab")gettext ("Close tab")); |
313 | g_signal_connect_object (close_button, "clicked", |
314 | G_CALLBACK (close_button_clicked_cb)((GCallback) (close_button_clicked_cb)), slot, 0); |
315 | |
316 | ctk_container_add (CTK_CONTAINER (close_button)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((close_button)), ((ctk_container_get_type ())))))), image); |
317 | ctk_widget_show (image); |
318 | |
319 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), close_button, FALSE(0), FALSE(0), 0); |
320 | ctk_widget_show (close_button); |
321 | |
322 | drag_info = g_new0 (BaulDragSlotProxyInfo, 1)((BaulDragSlotProxyInfo *) g_malloc0_n ((1), sizeof (BaulDragSlotProxyInfo ))); |
323 | drag_info->target_slot = slot; |
324 | g_object_set_data_full (G_OBJECT (hbox)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), (((GType) ((20) << (2)))))))), "proxy-drag-info", |
325 | drag_info, (GDestroyNotify) g_free); |
326 | |
327 | baul_drag_slot_proxy_init (hbox, drag_info); |
328 | |
329 | g_object_set_data (G_OBJECT (hbox)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), (((GType) ((20) << (2)))))))), "label", label); |
330 | g_object_set_data (G_OBJECT (hbox)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), (((GType) ((20) << (2)))))))), "spinner", spinner); |
331 | g_object_set_data (G_OBJECT (hbox)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), (((GType) ((20) << (2)))))))), "icon", icon); |
332 | g_object_set_data (G_OBJECT (hbox)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), (((GType) ((20) << (2)))))))), "close-button", close_button); |
333 | |
334 | return hbox; |
335 | } |
336 | |
337 | static int |
338 | baul_notebook_insert_page (CtkNotebook *gnotebook, |
339 | CtkWidget *tab_widget, |
340 | CtkWidget *tab_label, |
341 | CtkWidget *menu_label, |
342 | int position) |
343 | { |
344 | g_assert (CTK_IS_WIDGET (tab_widget))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((tab_widget)); GType __t = ((ctk_widget_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) ; else g_assertion_message_expr (((gchar*) 0), "baul-notebook.c", 344 , ((const char*) (__func__)), "CTK_IS_WIDGET (tab_widget)"); } while (0); |
345 | |
346 | position = CTK_NOTEBOOK_CLASS (baul_notebook_parent_class)((((CtkNotebookClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((baul_notebook_parent_class)), ((ctk_notebook_get_type () ))))))->insert_page (gnotebook, |
347 | tab_widget, |
348 | tab_label, |
349 | menu_label, |
350 | position); |
351 | |
352 | ctk_notebook_set_show_tabs (gnotebook, |
353 | ctk_notebook_get_n_pages (gnotebook) > 1); |
354 | ctk_notebook_set_tab_reorderable (gnotebook, tab_widget, TRUE(!(0))); |
355 | |
356 | return position; |
357 | } |
358 | |
359 | int |
360 | baul_notebook_add_tab (BaulNotebook *notebook, |
361 | BaulWindowSlot *slot, |
362 | int position, |
363 | gboolean jump_to) |
364 | { |
365 | CtkNotebook *gnotebook = CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))); |
366 | CtkWidget *tab_label; |
367 | |
368 | g_return_val_if_fail (BAUL_IS_NOTEBOOK (notebook), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return (-1); } } while (0); |
369 | g_return_val_if_fail (BAUL_IS_WINDOW_SLOT (slot), -1)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((slot)); GType __t = ((baul_window_slot_get_type())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_WINDOW_SLOT (slot)"); return (-1); } } while (0); |
370 | |
371 | tab_label = build_tab_label (notebook, slot); |
372 | |
373 | position = ctk_notebook_insert_page (CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))), |
Value stored to 'position' is never read | |
374 | slot->content_box, |
375 | tab_label, |
376 | position); |
377 | |
378 | ctk_container_child_set (CTK_CONTAINER (notebook)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_container_get_type ())))))), |
379 | slot->content_box, |
380 | "tab-expand", TRUE(!(0)), |
381 | NULL((void*)0)); |
382 | |
383 | baul_notebook_sync_tab_label (notebook, slot); |
384 | baul_notebook_sync_loading (notebook, slot); |
385 | |
386 | |
387 | /* FIXME ctk bug! */ |
388 | /* FIXME: this should be fixed in ctk 2.12; check & remove this! */ |
389 | /* The signal handler may have reordered the tabs */ |
390 | position = ctk_notebook_page_num (gnotebook, slot->content_box); |
391 | |
392 | if (jump_to) |
393 | { |
394 | ctk_notebook_set_current_page (gnotebook, position); |
395 | |
396 | } |
397 | |
398 | return position; |
399 | } |
400 | |
401 | static void |
402 | baul_notebook_remove (CtkContainer *container, |
403 | CtkWidget *tab_widget) |
404 | { |
405 | CtkNotebook *gnotebook = CTK_NOTEBOOK (container)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((container)), ((ctk_notebook_get_type ())))))); |
406 | CTK_CONTAINER_CLASS (baul_notebook_parent_class)((((CtkContainerClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((baul_notebook_parent_class)), ((ctk_container_get_type ( )))))))->remove (container, tab_widget); |
407 | |
408 | ctk_notebook_set_show_tabs (gnotebook, |
409 | ctk_notebook_get_n_pages (gnotebook) > 1); |
410 | |
411 | } |
412 | |
413 | void |
414 | baul_notebook_reorder_current_child_relative (BaulNotebook *notebook, |
415 | int offset) |
416 | { |
417 | CtkNotebook *gnotebook; |
418 | CtkWidget *child; |
419 | int page; |
420 | |
421 | g_return_if_fail (BAUL_IS_NOTEBOOK (notebook))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return; } } while (0); |
422 | |
423 | if (!baul_notebook_can_reorder_current_child_relative (notebook, offset)) |
424 | { |
425 | return; |
426 | } |
427 | |
428 | gnotebook = CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))); |
429 | |
430 | page = ctk_notebook_get_current_page (gnotebook); |
431 | child = ctk_notebook_get_nth_page (gnotebook, page); |
432 | ctk_notebook_reorder_child (gnotebook, child, page + offset); |
433 | } |
434 | |
435 | void |
436 | baul_notebook_set_current_page_relative (BaulNotebook *notebook, |
437 | int offset) |
438 | { |
439 | CtkNotebook *gnotebook; |
440 | int page; |
441 | |
442 | g_return_if_fail (BAUL_IS_NOTEBOOK (notebook))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return; } } while (0); |
443 | |
444 | if (!baul_notebook_can_set_current_page_relative (notebook, offset)) |
445 | { |
446 | return; |
447 | } |
448 | |
449 | gnotebook = CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))); |
450 | |
451 | page = ctk_notebook_get_current_page (gnotebook); |
452 | ctk_notebook_set_current_page (gnotebook, page + offset); |
453 | |
454 | } |
455 | |
456 | static gboolean |
457 | baul_notebook_is_valid_relative_position (BaulNotebook *notebook, |
458 | int offset) |
459 | { |
460 | CtkNotebook *gnotebook; |
461 | int page; |
462 | int n_pages; |
463 | |
464 | gnotebook = CTK_NOTEBOOK (notebook)((((CtkNotebook*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((notebook)), ((ctk_notebook_get_type ())))))); |
465 | |
466 | page = ctk_notebook_get_current_page (gnotebook); |
467 | n_pages = ctk_notebook_get_n_pages (gnotebook) - 1; |
468 | if (page < 0 || |
469 | (offset < 0 && page < -offset) || |
470 | (offset > 0 && page > n_pages - offset)) |
471 | { |
472 | return FALSE(0); |
473 | } |
474 | |
475 | return TRUE(!(0)); |
476 | } |
477 | |
478 | gboolean |
479 | baul_notebook_can_reorder_current_child_relative (BaulNotebook *notebook, |
480 | int offset) |
481 | { |
482 | g_return_val_if_fail (BAUL_IS_NOTEBOOK (notebook), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return ((0)); } } while (0); |
483 | |
484 | return baul_notebook_is_valid_relative_position (notebook, offset); |
485 | } |
486 | |
487 | gboolean |
488 | baul_notebook_can_set_current_page_relative (BaulNotebook *notebook, |
489 | int offset) |
490 | { |
491 | g_return_val_if_fail (BAUL_IS_NOTEBOOK (notebook), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((notebook)); GType __t = ((baul_notebook_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char* ) (__func__)), "BAUL_IS_NOTEBOOK (notebook)"); return ((0)); } } while (0); |
492 | |
493 | return baul_notebook_is_valid_relative_position (notebook, offset); |
494 | } |
495 |