git-svn-id: http://ltt.polymtl.ca/svn@293 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / poly / lttv / modules / gui / mainWin / src / callbacks.c
CommitLineData
561eba2a 1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <gtk/gtk.h>
6#include <gmodule.h>
7
8#include "callbacks.h"
9#include "interface.h"
10#include "support.h"
95cd67ef 11#include <lttv/mainWindow.h>
37d0eca6 12#include <lttv/menu.h>
13#include <lttv/toolbar.h>
58960b51 14#include <lttv/gtkTraceSet.h>
6b1d3120 15#include <lttv/module.h>
16
17#define PATH_LENGTH 256
561eba2a 18
19extern systemView * gSysView;
ec25ff5e 20extern LttvTracesetContext * gTracesetContext;
21
22/** Array containing instanced objects. */
23extern GSList * Main_Window_List;
561eba2a 24
561eba2a 25mainWindow * get_window_data_struct(GtkWidget * widget);
26
27/* test part */
28void insertView(GtkWidget* widget, view_constructor constructor);
29
30void
31on_textview1_grab_focus (GtkTextView *text_view,
32 gpointer user_data)
33{
34 GtkWidget * widget;
35 GtkCustom * custom = (GtkCustom*)user_data;
36 widget = gtk_widget_get_parent((GtkWidget*)text_view);
37 widget = gtk_widget_get_parent(widget);
38 gtk_custom_set_focus((GtkWidget*)custom, (gpointer)widget);
39}
40
41void
42insertViewTest(GtkMenuItem *menuitem, gpointer user_data)
43{
44 guint val = 20;
37d0eca6 45 insertView((GtkWidget*)menuitem, (view_constructor)user_data);
46 // selected_hook(&val);
561eba2a 47}
48
49void
50on_insert_viewer_test_activate (GtkMenuItem *menuitem,
51 gpointer user_data)
52{
53 GtkWidget *scrolledwindow1, *textview1, *label;
54 static int count = 0;
55 char str[64];
56 GtkCustom * custom;
57 GtkTextBuffer* buf;
58
59 mainWindow * mwData;
60 mwData = get_window_data_struct((GtkWidget*)menuitem);
61 if(!mwData->CurrentTab) return;
62 custom = mwData->CurrentTab->custom;
63
64 sprintf(str,"label : %d",++count);
65 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
66 gtk_widget_show (scrolledwindow1);
67 label = gtk_label_new(str);
68 gtk_widget_show(label);
69
70 gtk_custom_widget_add(custom, scrolledwindow1);
71 gtk_widget_set_size_request ((GtkWidget*)scrolledwindow1, 800, 100);
72
73 textview1 = gtk_text_view_new ();
74 gtk_widget_show (textview1);
75 gtk_container_add (GTK_CONTAINER (scrolledwindow1), textview1);
76 buf = gtk_text_view_get_buffer((GtkTextView*)textview1);
77 sprintf(str,"text view : %d",count);
78 gtk_text_buffer_set_text(buf,str, -1);
79
80 g_signal_connect ((gpointer) textview1, "grab_focus",
81 G_CALLBACK (on_textview1_grab_focus), custom);
82}
83
84/* end of test part */
85
86
87/* internal functions */
88void insertView(GtkWidget* widget, view_constructor constructor)
89{
90 GtkCustom * custom;
91 mainWindow * mwData;
f9334f6f 92 GtkWidget * viewer;
561eba2a 93
94 mwData = get_window_data_struct(widget);
95 if(!mwData->CurrentTab) return;
96 custom = mwData->CurrentTab->custom;
97
f9334f6f 98 viewer = (GtkWidget*)constructor(mwData);
99 if(viewer)
f0d936c0 100 {
101 gtk_custom_widget_add(custom, viewer);
102 // Added by MD
8af8e4c5 103 // g_object_unref(G_OBJECT(viewer));
f0d936c0 104 }
561eba2a 105}
106
107void get_label_string (GtkWidget * text, gchar * label)
108{
109 GtkEntry * entry = (GtkEntry*)text;
110 if(strlen(gtk_entry_get_text(entry))!=0)
111 strcpy(label,gtk_entry_get_text(entry));
112}
113
6b1d3120 114void get_label(GtkWindow * mw, gchar * str, gchar* dialogue_title, gchar * label_str)
561eba2a 115{
116 GtkWidget * dialogue;
117 GtkWidget * text;
118 GtkWidget * label;
119 gint id;
120
6b1d3120 121 dialogue = gtk_dialog_new_with_buttons(dialogue_title,mw,
561eba2a 122 GTK_DIALOG_MODAL,
123 GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
124 GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT,
125 NULL);
126
6b1d3120 127 label = gtk_label_new(label_str);
561eba2a 128 gtk_widget_show(label);
129
130 text = gtk_entry_new();
131 gtk_widget_show(text);
132
133 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), label,TRUE, TRUE,0);
134 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), text,FALSE, FALSE,0);
135
136 id = gtk_dialog_run(GTK_DIALOG(dialogue));
137 switch(id){
138 case GTK_RESPONSE_ACCEPT:
139 get_label_string(text,str);
140 gtk_widget_destroy(dialogue);
141 break;
142 case GTK_RESPONSE_REJECT:
143 default:
144 gtk_widget_destroy(dialogue);
145 break;
146 }
147}
148
149mainWindow * get_window_data_struct(GtkWidget * widget)
150{
151 GtkWidget * mw;
152 mainWindow * mwData;
153
154 mw = lookup_widget(widget, "MWindow");
155 if(mw == NULL){
156 g_printf("Main window does not exist\n");
157 return;
158 }
159
160 mwData = (mainWindow *) g_object_get_data(G_OBJECT(mw),"mainWindow");
161 if(mwData == NULL){
162 g_printf("Main window data does not exist\n");
163 return;
164 }
165 return mwData;
166}
167
168void createNewWindow(GtkWidget* widget, gpointer user_data, gboolean clone)
169{
170 GtkWidget * mw = NULL; /* Main window */
171 systemView * sv = NULL; /* System view */
172 systemView * newSv; /* New system view displayed in the new window */
173 GtkWidget * newWindow; /* New generated main window */
174 mainWindow * newMWindow;/* New main window structure */
175
176 //test
37d0eca6 177 int i;
178 GtkWidget * ToolMenuTitle_menu, *insert_view, *pixmap;
179 LttvMenus * menu;
180 LttvToolbars * toolbar;
181 lttv_menu_closure *menuItem;
182 lttv_toolbar_closure *toolbarItem;
183 LttvAttributeValue value;
184 LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
185 view_constructor constructor;
186 GdkPixbuf *pixbuf;
561eba2a 187 //end
188
189 mw = lookup_widget (widget, "MWindow");
190 if(mw == NULL){
191 g_printf("Can not find main window\n");
192 return;
193 }
194
195 sv = (systemView *)g_object_get_data(G_OBJECT(mw),"systemView");
196 if(sv == NULL){
197 g_printf("Can not find system view\n");
198 return;
199 }
200
201 newMWindow = g_new(mainWindow, 1);
ec25ff5e 202
203 /* Add the object's information to the module's array */
204 Main_Window_List = g_slist_append(Main_Window_List, mw);
205
561eba2a 206 newWindow = create_MWindow();
207 gtk_widget_show (newWindow);
208
209
210 newSv = g_new(systemView, 1);
211 while(sv->Next) sv = sv->Next;
212 sv->Next = newSv;
213
214 newSv->EventDB = NULL;
215 newSv->SystemInfo = NULL;
216 newSv->Options = NULL;
217 newSv->Next = NULL;
218 newSv->Window = newMWindow;
219
220 newMWindow->MWindow = newWindow;
221 newMWindow->Tab = NULL;
222 newMWindow->CurrentTab = NULL;
223 newMWindow->SystemView = newSv;
ec25ff5e 224 newMWindow->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
225 newMWindow->traceset_context = LTTV_TRACESET_CONTEXT(gTracesetContext);
226 newMWindow->traceset = (LTTV_TRACESET_CONTEXT(gTracesetContext))->ts;
227 g_object_ref(gTracesetContext);
561eba2a 228
229 //test yxx
37d0eca6 230 g_assert(lttv_iattribute_find_by_path(attributes,
231 "viewers/menu", LTTV_POINTER, &value));
232 menu = (LttvMenus*)*(value.v_pointer);
233
234 if(menu){
235 for(i=0;i<menu->len;i++){
236 menuItem = &g_array_index(menu, lttv_menu_closure, i);
237 constructor = menuItem->con;
238 ToolMenuTitle_menu = lookup_widget(newMWindow->MWindow,"ToolMenuTitle_menu");
239 insert_view = gtk_menu_item_new_with_mnemonic (menuItem->menuText);
240 gtk_widget_show (insert_view);
241 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu), insert_view);
242 g_signal_connect ((gpointer) insert_view, "activate",
243 G_CALLBACK (insertViewTest),
244 constructor);
245 }
246 }
247 g_assert(lttv_iattribute_find_by_path(attributes,
248 "viewers/toolbar", LTTV_POINTER, &value));
249 toolbar = (LttvToolbars*)*(value.v_pointer);
250
251 if(toolbar){
252 for(i=0;i<toolbar->len;i++){
253 toolbarItem = &g_array_index(toolbar, lttv_toolbar_closure, i);
254 constructor = toolbarItem->con;
255 ToolMenuTitle_menu = lookup_widget(newMWindow->MWindow,"MToolbar2");
256 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem->pixmap);
257 pixmap = gtk_image_new_from_pixbuf(pixbuf);
258 insert_view = gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu),
259 GTK_TOOLBAR_CHILD_BUTTON,
260 NULL,
261 "",
262 toolbarItem->tooltip, NULL,
263 pixmap, NULL, NULL);
264 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu)->children)->data))->label), TRUE);
265 gtk_widget_show (insert_view);
266 gtk_container_set_border_width (GTK_CONTAINER (insert_view), 1);
267 g_signal_connect ((gpointer) insert_view, "clicked",G_CALLBACK (insertViewTest),constructor);
268 }
269 }
561eba2a 270 //end
271
272 g_object_set_data(G_OBJECT(newWindow), "systemView", (gpointer)newSv);
273 g_object_set_data(G_OBJECT(newWindow), "mainWindow", (gpointer)newMWindow);
274
275 if(clone){
276 g_printf("Clone : use the same traceset\n");
277 }else{
278 g_printf("Empty : traceset is set to NULL\n");
279 }
280}
281
282void move_up_viewer(GtkWidget * widget, gpointer user_data)
283{
284 mainWindow * mw = get_window_data_struct(widget);
285 if(!mw->CurrentTab) return;
286 gtk_custom_widget_move_up(mw->CurrentTab->custom);
287}
288
289void move_down_viewer(GtkWidget * widget, gpointer user_data)
290{
291 mainWindow * mw = get_window_data_struct(widget);
292 if(!mw->CurrentTab) return;
293 gtk_custom_widget_move_down(mw->CurrentTab->custom);
294}
295
296void delete_viewer(GtkWidget * widget, gpointer user_data)
297{
298 mainWindow * mw = get_window_data_struct(widget);
299 if(!mw->CurrentTab) return;
300 gtk_custom_widget_delete(mw->CurrentTab->custom);
301}
302
303void open_traceset(GtkWidget * widget, gpointer user_data)
304{
305 g_printf("Open a trace set\n");
306}
307
308void add_trace(GtkWidget * widget, gpointer user_data)
309{
310 g_printf("add a trace to a trace set\n");
311}
312
313void remove_trace(GtkWidget * widget, gpointer user_data)
314{
315 g_printf("remove a trace from a trace set\n");
316}
317
318void save(GtkWidget * widget, gpointer user_data)
319{
320 g_printf("Save\n");
321}
322
323void save_as(GtkWidget * widget, gpointer user_data)
324{
325 g_printf("Save as\n");
326}
327
328void zoom_in(GtkWidget * widget, gpointer user_data)
329{
330 g_printf("Zoom in\n");
331}
332
333void zoom_out(GtkWidget * widget, gpointer user_data)
334{
335 g_printf("Zoom out\n");
336}
337
338void zoom_extended(GtkWidget * widget, gpointer user_data)
339{
340 g_printf("Zoom extended\n");
341}
342
343void go_to_time(GtkWidget * widget, gpointer user_data)
344{
345 g_printf("Go to time\n");
346}
347
348void show_time_frame(GtkWidget * widget, gpointer user_data)
349{
350 g_printf("Show time frame\n");
351}
352
353
354/* callback function */
355
356void
357on_empty_traceset_activate (GtkMenuItem *menuitem,
358 gpointer user_data)
359{
360 createNewWindow((GtkWidget*)menuitem, user_data, FALSE);
361}
362
363
364void
365on_clone_traceset_activate (GtkMenuItem *menuitem,
366 gpointer user_data)
367{
368 createNewWindow((GtkWidget*)menuitem, user_data, TRUE);
369}
370
371
372void
373on_tab_activate (GtkMenuItem *menuitem,
374 gpointer user_data)
375{
376 GList * list;
6b1d3120 377 gchar label[PATH_LENGTH];
561eba2a 378
379 tab * tmpTab;
380 GtkWidget * pane;
381 mainWindow * mwData;
382 GtkNotebook * notebook = (GtkNotebook *)lookup_widget((GtkWidget*)menuitem, "MNotebook");
383 if(notebook == NULL){
384 g_printf("Notebook does not exist\n");
385 return;
386 }
387
388 mwData = get_window_data_struct((GtkWidget*)menuitem);
389
390 tmpTab = mwData->Tab;
391 while(tmpTab && tmpTab->Next) tmpTab = tmpTab->Next;
392 if(!tmpTab){
ec25ff5e 393 mwData->CurrentTab = NULL;
561eba2a 394 tmpTab = g_new(tab,1);
ec25ff5e 395 mwData->Tab = tmpTab;
561eba2a 396 }else{
397 tmpTab->Next = g_new(tab,1);
398 tmpTab = tmpTab->Next;
399 }
ec25ff5e 400 if(mwData->CurrentTab){
401 tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
402 tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
403 tmpTab->startTime = mwData->CurrentTab->startTime;
404 tmpTab->endTime = mwData->CurrentTab->endTime;
405 tmpTab->currentTime = mwData->CurrentTab->currentTime;
58960b51 406 }else{
407 getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
408 tmpTab->startTime = tmpTab->traceStartTime;
409 tmpTab->endTime = tmpTab->traceEndTime;
410 tmpTab->currentTime = tmpTab->traceStartTime;
ec25ff5e 411 }
412 tmpTab->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
561eba2a 413 // mwData->CurrentTab = tmpTab;
414 tmpTab->custom = (GtkCustom*)gtk_custom_new();
58960b51 415 tmpTab->custom->mw = mwData;
561eba2a 416 gtk_widget_show((GtkWidget*)tmpTab->custom);
417 tmpTab->Next = NULL;
418
6b1d3120 419 strcpy(label,"Page");
420 get_label((GtkWindow*)mwData->MWindow, label,"Get the name of the tab","Please input tab's name");
561eba2a 421 tmpTab->label = gtk_label_new (label);
422 gtk_widget_show (tmpTab->label);
423
424 gtk_notebook_append_page(notebook, (GtkWidget*)tmpTab->custom, tmpTab->label);
425
426 list = gtk_container_get_children(GTK_CONTAINER(notebook));
427 gtk_notebook_set_current_page(notebook,g_list_length(list)-1);
428}
429
430
431void
432on_open_activate (GtkMenuItem *menuitem,
433 gpointer user_data)
434{
435 open_traceset((GtkWidget*)menuitem, user_data);
436}
437
438
439void
440on_close_activate (GtkMenuItem *menuitem,
441 gpointer user_data)
442{
443 g_printf("Close\n");
444}
445
446
447void
448on_close_tab_activate (GtkMenuItem *menuitem,
449 gpointer user_data)
450{
451 g_printf("Close tab\n");
452}
453
454
455void
456on_add_trace_activate (GtkMenuItem *menuitem,
457 gpointer user_data)
458{
459 add_trace((GtkWidget*)menuitem, user_data);
460}
461
462
463void
464on_remove_trace_activate (GtkMenuItem *menuitem,
465 gpointer user_data)
466{
467 remove_trace((GtkWidget*)menuitem, user_data);
468}
469
470
471void
472on_save_activate (GtkMenuItem *menuitem,
473 gpointer user_data)
474{
475 save((GtkWidget*)menuitem, user_data);
476}
477
478
479void
480on_save_as_activate (GtkMenuItem *menuitem,
481 gpointer user_data)
482{
483 save_as((GtkWidget*)menuitem, user_data);
484}
485
486
487void
488on_quit_activate (GtkMenuItem *menuitem,
489 gpointer user_data)
490{
491 on_MWindow_destroy(GTK_OBJECT(menuitem), user_data);
492}
493
494
495void
496on_cut_activate (GtkMenuItem *menuitem,
497 gpointer user_data)
498{
499 g_printf("Cut\n");
500}
501
502
503void
504on_copy_activate (GtkMenuItem *menuitem,
505 gpointer user_data)
506{
507 g_printf("Copye\n");
508}
509
510
511void
512on_paste_activate (GtkMenuItem *menuitem,
513 gpointer user_data)
514{
515 g_printf("Paste\n");
516}
517
518
519void
520on_delete_activate (GtkMenuItem *menuitem,
521 gpointer user_data)
522{
523 g_printf("Delete\n");
524}
525
526
527void
528on_zoom_in_activate (GtkMenuItem *menuitem,
529 gpointer user_data)
530{
531 zoom_in((GtkWidget*)menuitem, user_data);
532}
533
534
535void
536on_zoom_out_activate (GtkMenuItem *menuitem,
537 gpointer user_data)
538{
539 zoom_out((GtkWidget*)menuitem, user_data);
540}
541
542
543void
544on_zoom_extended_activate (GtkMenuItem *menuitem,
545 gpointer user_data)
546{
547 zoom_extended((GtkWidget*)menuitem, user_data);
548}
549
550
551void
552on_go_to_time_activate (GtkMenuItem *menuitem,
553 gpointer user_data)
554{
555 go_to_time((GtkWidget*)menuitem, user_data);
556}
557
558
559void
560on_show_time_frame_activate (GtkMenuItem *menuitem,
561 gpointer user_data)
562{
563 show_time_frame((GtkWidget*)menuitem, user_data);
564}
565
566
567void
568on_move_viewer_up_activate (GtkMenuItem *menuitem,
569 gpointer user_data)
570{
571 move_up_viewer((GtkWidget*)menuitem, user_data);
572}
573
574
575void
576on_move_viewer_down_activate (GtkMenuItem *menuitem,
577 gpointer user_data)
578{
579 move_down_viewer((GtkWidget*)menuitem, user_data);
580}
581
582
583void
584on_remove_viewer_activate (GtkMenuItem *menuitem,
585 gpointer user_data)
586{
587 delete_viewer((GtkWidget*)menuitem, user_data);
588}
589
590
591void
592on_load_module_activate (GtkMenuItem *menuitem,
593 gpointer user_data)
594{
595 g_printf("Load module\n");
596}
597
598
599void
600on_unload_module_activate (GtkMenuItem *menuitem,
601 gpointer user_data)
602{
603 g_printf("Unload module\n");
604}
605
606
607void
608on_add_module_search_path_activate (GtkMenuItem *menuitem,
609 gpointer user_data)
610{
6b1d3120 611 gchar str[PATH_LENGTH];
612 mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem);
561eba2a 613 g_printf("Add module search path\n");
6b1d3120 614 str[0] = '\0';
615 get_label((GtkWindow*)mwData->MWindow, str, "Add module search path", "Please input a search path:");
616 if(strlen(str)){
617 lttv_module_path_add(str);
618 }
561eba2a 619}
620
621
622void
623on_color_activate (GtkMenuItem *menuitem,
624 gpointer user_data)
625{
626 g_printf("Color\n");
627}
628
629
630void
631on_filter_activate (GtkMenuItem *menuitem,
632 gpointer user_data)
633{
634 g_printf("Filter\n");
635}
636
637
638void
639on_save_configuration_activate (GtkMenuItem *menuitem,
640 gpointer user_data)
641{
642 g_printf("Save configuration\n");
643}
644
645
646void
647on_content_activate (GtkMenuItem *menuitem,
648 gpointer user_data)
649{
650 g_printf("Content\n");
651}
652
653
654void
655on_about_activate (GtkMenuItem *menuitem,
656 gpointer user_data)
657{
658 g_printf("About...\n");
659}
660
661
662void
663on_button_new_clicked (GtkButton *button,
664 gpointer user_data)
665{
666 createNewWindow((GtkWidget*)button, user_data, FALSE);
667}
668
669
670void
671on_button_open_clicked (GtkButton *button,
672 gpointer user_data)
673{
674 open_traceset((GtkWidget*)button, user_data);
675}
676
677
678void
679on_button_add_trace_clicked (GtkButton *button,
680 gpointer user_data)
681{
682 add_trace((GtkWidget*)button, user_data);
683}
684
685
686void
687on_button_remove_trace_clicked (GtkButton *button,
688 gpointer user_data)
689{
690 remove_trace((GtkWidget*)button, user_data);
691}
692
693
694void
695on_button_save_clicked (GtkButton *button,
696 gpointer user_data)
697{
698 save((GtkWidget*)button, user_data);
699}
700
701
702void
703on_button_save_as_clicked (GtkButton *button,
704 gpointer user_data)
705{
706 save_as((GtkWidget*)button, user_data);
707}
708
709
710void
711on_button_zoom_in_clicked (GtkButton *button,
712 gpointer user_data)
713{
714 zoom_in((GtkWidget*)button, user_data);
715}
716
717
718void
719on_button_zoom_out_clicked (GtkButton *button,
720 gpointer user_data)
721{
722 zoom_out((GtkWidget*)button, user_data);
723}
724
725
726void
727on_button_zoom_extended_clicked (GtkButton *button,
728 gpointer user_data)
729{
730 zoom_extended((GtkWidget*)button, user_data);
731}
732
733
734void
735on_button_go_to_time_clicked (GtkButton *button,
736 gpointer user_data)
737{
738 go_to_time((GtkWidget*)button, user_data);
739}
740
741
742void
743on_button_show_time_frame_clicked (GtkButton *button,
744 gpointer user_data)
745{
746 show_time_frame((GtkWidget*)button, user_data);
747}
748
749
750void
751on_button_move_up_clicked (GtkButton *button,
752 gpointer user_data)
753{
754 move_up_viewer((GtkWidget*)button, user_data);
755}
756
757
758void
759on_button_move_down_clicked (GtkButton *button,
760 gpointer user_data)
761{
762 move_down_viewer((GtkWidget*)button, user_data);
763}
764
765
766void
767on_button_delete_viewer_clicked (GtkButton *button,
768 gpointer user_data)
769{
770 delete_viewer((GtkWidget*)button, user_data);
771}
772
773void
774on_MWindow_destroy (GtkObject *object,
775 gpointer user_data)
776{
777 systemView * sv = gSysView;
778 gint count = 0;
779 while(sv->Next){
780 g_printf("There are : %d windows\n",++count);
781 sv = sv->Next;
782 }
783 g_printf("There are : %d windows\n",++count);
784
785 gtk_main_quit ();
786
787}
788
789
790void
791on_MNotebook_switch_page (GtkNotebook *notebook,
792 GtkNotebookPage *page,
793 guint page_num,
794 gpointer user_data)
795{
796 mainWindow * mw = get_window_data_struct((GtkWidget*)notebook);
797 tab * Tab = mw->Tab;
798
799 while(page_num){
800 Tab = Tab->Next;
801 page_num--;
802 }
803 mw->CurrentTab = Tab;
804}
805
This page took 0.053553 seconds and 4 git commands to generate.