[gq-commit] gq/src browse.c,1.73,1.74 filter.c,1.21,1.22 gq.c,1.19,1.20 input.c,1.62,1.63 mainwin.c,
Status: Beta
Brought to you by:
sur5r
From: <sta...@us...> - 2003-10-09 05:47:31
|
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv9389 Modified Files: browse.c filter.c gq.c input.c mainwin.c mainwin.h prefs.c util.c Log Message: * Got rid of the set_data/get_data stuff in the main window by introducing the struct mainwin_data * Changed the about window label justification and added some more version information Index: browse.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/browse.c,v retrieving revision 1.73 retrieving revision 1.74 diff -C2 -d -r1.73 -r1.74 *** browse.c 8 Oct 2003 22:01:04 -0000 1.73 --- browse.c 9 Oct 2003 05:47:26 -0000 1.74 *************** *** 406,410 **** gtk_widget_show(pane2_vbox); ! gtk_widget_set_parent_window(pane2_vbox, (GdkWindow *) mainwin); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pane2_scrwin), pane2_vbox); --- 406,410 ---- gtk_widget_show(pane2_vbox); ! gtk_widget_set_parent_window(pane2_vbox, (mainwin.mainwin->window)); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pane2_scrwin), pane2_vbox); *************** *** 815,819 **** ld = open_connection(entry->server); } ! statusbar_msg(ldap_err2string(msg)); } else { if(res == NULL) continue; --- 815,819 ---- ld = open_connection(entry->server); } ! statusbar_msg("%s", ldap_err2string(msg)); } else { if(res == NULL) continue; *************** *** 1118,1122 **** search_tab = get_last_of_mode(SEARCH_MODE); if (!search_tab) { ! new_modetab(SEARCH_MODE); search_tab = get_last_of_mode(SEARCH_MODE); } --- 1118,1122 ---- search_tab = get_last_of_mode(SEARCH_MODE); if (!search_tab) { ! new_modetab(&mainwin, SEARCH_MODE); search_tab = get_last_of_mode(SEARCH_MODE); } Index: filter.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/filter.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** filter.c 9 Oct 2003 05:15:06 -0000 1.21 --- filter.c 9 Oct 2003 05:47:26 -0000 1.22 *************** *** 95,99 **** void add_filter(GtkWidget *filternamebox) { ! GtkWidget *focusbox, *filtermenu, *menuitem, *button; GtkWidget *server_combo, *searchbase_combo; GList *filterlist; --- 95,99 ---- void add_filter(GtkWidget *filternamebox) { ! GtkWidget *focusbox, *menuitem, *button; GtkWidget *server_combo, *searchbase_combo; GList *filterlist; *************** *** 106,111 **** /* find current tab */ ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(mainbook)); ! tab = g_list_nth_data(tablist, tabnum); /* ignore if it's not a search mode tab */ --- 106,111 ---- /* find current tab */ ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(mainwin.mainbook)); ! tab = g_list_nth_data(mainwin.tablist, tabnum); /* ignore if it's not a search mode tab */ *************** *** 181,190 **** /* and add it to the Filters menu */ - filtermenu = gtk_object_get_data(GTK_OBJECT(mainwin), "filtermenu"); menuitem = gtk_menu_item_new_with_label(filtername); gtk_object_set_data(GTK_OBJECT(menuitem), "filter", filter); gtk_signal_connect_object(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(filter_selected), (GtkObject *) filter); ! gtk_container_add(GTK_CONTAINER(filtermenu), menuitem); gtk_widget_show(menuitem); --- 181,189 ---- /* and add it to the Filters menu */ menuitem = gtk_menu_item_new_with_label(filtername); gtk_object_set_data(GTK_OBJECT(menuitem), "filter", filter); gtk_signal_connect_object(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(filter_selected), (GtkObject *) filter); ! gtk_container_add(GTK_CONTAINER(mainwin.filtermenu), menuitem); gtk_widget_show(menuitem); *************** *** 276,281 **** /* find current tab */ ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(mainbook)); ! tab = g_list_nth_data(tablist, tabnum); /* we're in luck if the current tab is a Search tab: just use this one */ --- 275,280 ---- /* find current tab */ ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(mainwin.mainbook)); ! tab = g_list_nth_data(mainwin.tablist, tabnum); /* we're in luck if the current tab is a Search tab: just use this one */ *************** *** 532,541 **** void remove_from_filtermenu(struct gq_filter *filter) { ! GtkWidget *filtermenu, *menuitem; GList *menuitems; struct gq_filter *found_filter; ! filtermenu = gtk_object_get_data(GTK_OBJECT(mainwin), "filtermenu"); ! menuitems = gtk_container_children(GTK_CONTAINER(filtermenu)); while(menuitems) { --- 531,539 ---- void remove_from_filtermenu(struct gq_filter *filter) { ! GtkWidget *menuitem; GList *menuitems; struct gq_filter *found_filter; ! menuitems = gtk_container_children(GTK_CONTAINER(mainwin.filtermenu)); while(menuitems) { *************** *** 543,547 **** found_filter = gtk_object_get_data(GTK_OBJECT(menuitem), "filter"); if(filter == found_filter) { ! gtk_container_remove(GTK_CONTAINER(filtermenu), menuitem); break; } --- 541,545 ---- found_filter = gtk_object_get_data(GTK_OBJECT(menuitem), "filter"); if(filter == found_filter) { ! gtk_container_remove(GTK_CONTAINER(mainwin.filtermenu), menuitem); break; } *************** *** 757,761 **** { ! GtkWidget *entry, *text, *filter_clist, *filtermenu, *menuitem; GList *filterlist, *menuitems, *menuwidgets; struct gq_filter *filter, *found_filter; --- 755,759 ---- { ! GtkWidget *entry, *text, *filter_clist, *menuitem; GList *filterlist, *menuitems, *menuwidgets; struct gq_filter *filter, *found_filter; *************** *** 866,875 **** /* add to Filters menu */ - filtermenu = gtk_object_get_data(GTK_OBJECT(mainwin), "filtermenu"); menuitem = gtk_menu_item_new_with_label(filter->name); gtk_object_set_data(GTK_OBJECT(menuitem), "filter", filter); gtk_signal_connect_object(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(filter_selected), (GtkObject *) filter); ! gtk_container_add(GTK_CONTAINER(filtermenu), menuitem); gtk_widget_show(menuitem); --- 864,872 ---- /* add to Filters menu */ menuitem = gtk_menu_item_new_with_label(filter->name); gtk_object_set_data(GTK_OBJECT(menuitem), "filter", filter); gtk_signal_connect_object(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(filter_selected), (GtkObject *) filter); ! gtk_container_add(GTK_CONTAINER(mainwin.filtermenu), menuitem); gtk_widget_show(menuitem); *************** *** 889,894 **** /* find old filter in the menu, and change it there */ ! filtermenu = gtk_object_get_data(GTK_OBJECT(mainwin), "filtermenu"); ! menuitems = gtk_container_children(GTK_CONTAINER(filtermenu)); while(menuitems) { menuitem = menuitems->data; --- 886,890 ---- /* find old filter in the menu, and change it there */ ! menuitems = gtk_container_children(GTK_CONTAINER(mainwin.filtermenu)); while(menuitems) { menuitem = menuitems->data; Index: gq.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/gq.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** gq.c 5 Oct 2003 22:22:12 -0000 1.19 --- gq.c 9 Oct 2003 05:47:26 -0000 1.20 *************** *** 125,129 **** setup_fonts(); ! create_mainwin(); g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); --- 125,129 ---- setup_fonts(); ! create_mainwin(&mainwin); g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); Index: input.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/input.c,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** input.c 9 Oct 2003 05:15:06 -0000 1.62 --- input.c 9 Oct 2003 05:47:26 -0000 1.63 *************** *** 1219,1223 **** gq_exploded_free(rdn); ! for (tabs = g_list_first(tablist) ; tabs ; tabs = g_list_next(tabs)) { tab = (struct tab *) tabs->data; if(tab->type == BROWSE_MODE) { --- 1219,1224 ---- gq_exploded_free(rdn); ! for (tabs = g_list_first(mainwin.tablist) ; tabs ; ! tabs = g_list_next(tabs)) { tab = (struct tab *) tabs->data; if(tab->type == BROWSE_MODE) { Index: mainwin.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/mainwin.c,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** mainwin.c 9 Oct 2003 05:15:06 -0000 1.38 --- mainwin.c 9 Oct 2003 05:47:26 -0000 1.39 *************** *** 52,61 **** #endif ! GtkWidget *mainwin = NULL; ! GtkWidget *mainbook = NULL; ! GtkWidget *statusbar; ! GList *tablist = NULL; - static GHashTable *lastofmode = NULL; --- 52,57 ---- #endif ! struct mainwin_data mainwin; *************** *** 64,71 **** { ! if(!lastofmode) return NULL; ! return g_hash_table_lookup(lastofmode, GINT_TO_POINTER(mode)); } --- 60,67 ---- { ! if(!mainwin.lastofmode) return NULL; ! return g_hash_table_lookup(mainwin.lastofmode, GINT_TO_POINTER(mode)); } *************** *** 74,78 **** { ! gtk_notebook_set_page(GTK_NOTEBOOK(mainbook), g_list_index(tablist, tab)); } --- 70,75 ---- { ! gtk_notebook_set_page(GTK_NOTEBOOK(mainwin.mainbook), ! g_list_index(mainwin.tablist, tab)); } *************** *** 82,89 **** { ! if(!lastofmode) ! lastofmode = g_hash_table_new(g_direct_hash, g_direct_equal); ! g_hash_table_insert(lastofmode, (gpointer) tab->type, tab); } --- 79,86 ---- { ! if(!mainwin.lastofmode) ! mainwin.lastofmode = g_hash_table_new(g_direct_hash, g_direct_equal); ! g_hash_table_insert(mainwin.lastofmode, (gpointer) tab->type, tab); } *************** *** 116,128 **** /* gtk2 checked (multiple destroy callbacks safety), confidence 0.7: cleanup_all_tabs semantics? */ ! void gq_exit(GtkWidget *widget, gpointer *data) { ! cleanup(); gtk_main_quit(); } ! void cleanup(void) { ! cleanup_all_tabs(); } --- 113,125 ---- /* gtk2 checked (multiple destroy callbacks safety), confidence 0.7: cleanup_all_tabs semantics? */ ! void gq_exit(GtkWidget *widget, struct mainwin_data *win) { ! cleanup(win); gtk_main_quit(); } ! void cleanup(struct mainwin_data *win) { ! cleanup_all_tabs(win); } *************** *** 160,164 **** } ! void create_mainwin(void) { GtkWidget *outer_vbox, *main_vbox, *menubar, *menuitem, *submenu; --- 157,176 ---- } ! static void new_modetab_search(struct mainwin_data *win) ! { ! new_modetab(win, SEARCH_MODE); ! } ! ! static void new_modetab_browse(struct mainwin_data *win) ! { ! new_modetab(win, BROWSE_MODE); ! } ! ! static void new_modetab_schema(struct mainwin_data *win) ! { ! new_modetab(win, SCHEMA_MODE); ! } ! ! void create_mainwin(struct mainwin_data *win) { GtkWidget *outer_vbox, *main_vbox, *menubar, *menuitem, *submenu; *************** *** 172,187 **** struct gq_filter *filter; /* mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); */ /* gtk_window_set_default_size(GTK_WINDOW(mainwin), 770, 478); */ ! mainwin = stateful_gtk_window_new(GTK_WINDOW_TOPLEVEL, ! "mainwin", 770, 478); ! gtk_container_border_width(GTK_CONTAINER(mainwin), 0); ! gtk_signal_connect(GTK_OBJECT(mainwin), "destroy", GTK_SIGNAL_FUNC(gq_exit), ! NULL); ! gtk_window_set_title(GTK_WINDOW(mainwin), _("GQ")); ! gtk_window_set_policy(GTK_WINDOW(mainwin), FALSE, TRUE, FALSE); --- 184,200 ---- struct gq_filter *filter; + assert(win != NULL); /* mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); */ /* gtk_window_set_default_size(GTK_WINDOW(mainwin), 770, 478); */ ! win->mainwin = stateful_gtk_window_new(GTK_WINDOW_TOPLEVEL, ! "mainwin", 770, 478); ! gtk_container_border_width(GTK_CONTAINER(win->mainwin), 0); ! gtk_signal_connect(GTK_OBJECT(win->mainwin), "destroy", GTK_SIGNAL_FUNC(gq_exit), ! win); ! gtk_window_set_title(GTK_WINDOW(win->mainwin), _("GQ")); ! gtk_window_set_policy(GTK_WINDOW(win->mainwin), FALSE, TRUE, FALSE); *************** *** 190,197 **** gtk_container_border_width(GTK_CONTAINER(outer_vbox), 0); gtk_widget_show(outer_vbox); ! gtk_container_add(GTK_CONTAINER(mainwin), outer_vbox); main_vbox = gtk_vbox_new(FALSE, 2); - gtk_object_set_data(GTK_OBJECT(mainwin), "main_vbox", main_vbox); gtk_container_border_width(GTK_CONTAINER(main_vbox), 4); gtk_widget_show(main_vbox); --- 203,209 ---- gtk_container_border_width(GTK_CONTAINER(outer_vbox), 0); gtk_widget_show(outer_vbox); ! gtk_container_add(GTK_CONTAINER(win->mainwin), outer_vbox); main_vbox = gtk_vbox_new(FALSE, 2); gtk_container_border_width(GTK_CONTAINER(main_vbox), 4); gtk_widget_show(main_vbox); *************** *** 201,207 **** #if GTK_MAJOR < 2 ! gtk_accel_group_attach(accel_group, GTK_OBJECT(mainwin)); #else ! gtk_window_add_accel_group(GTK_WINDOW(mainwin), accel_group); #endif --- 213,219 ---- #if GTK_MAJOR < 2 ! gtk_accel_group_attach(accel_group, GTK_OBJECT(win->mainwin)); #else ! gtk_window_add_accel_group(GTK_WINDOW(win->mainwin), accel_group); #endif *************** *** 235,240 **** gtk_menu_append(GTK_MENU(submenu), Search); gtk_signal_connect_object(GTK_OBJECT(Search), "activate", ! GTK_SIGNAL_FUNC(new_modetab), ! GINT_TO_POINTER(SEARCH_MODE)); gtk_widget_add_accelerator(Search, "activate", accel_group, 'S', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); --- 247,252 ---- gtk_menu_append(GTK_MENU(submenu), Search); gtk_signal_connect_object(GTK_OBJECT(Search), "activate", ! GTK_SIGNAL_FUNC(new_modetab_search), ! (gpointer) win); gtk_widget_add_accelerator(Search, "activate", accel_group, 'S', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); *************** *** 245,255 **** gtk_menu_append(GTK_MENU(submenu), Browse); gtk_signal_connect_object(GTK_OBJECT(Browse), "activate", ! GTK_SIGNAL_FUNC(new_modetab), ! GINT_TO_POINTER(BROWSE_MODE)); gtk_widget_add_accelerator(Browse, "activate", accel_group, 'B', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); /* ctrl-b is used by text widgets, so the searchterm textbox that always has focus in search mode blocks the above accelerator...*/ ! gtk_signal_connect(GTK_OBJECT(mainwin), "key_press_event", GTK_SIGNAL_FUNC(ctrl_b_hack), (gpointer) Browse); --- 257,267 ---- gtk_menu_append(GTK_MENU(submenu), Browse); gtk_signal_connect_object(GTK_OBJECT(Browse), "activate", ! GTK_SIGNAL_FUNC(new_modetab_browse), ! (gpointer) win); gtk_widget_add_accelerator(Browse, "activate", accel_group, 'B', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); /* ctrl-b is used by text widgets, so the searchterm textbox that always has focus in search mode blocks the above accelerator...*/ ! gtk_signal_connect(GTK_OBJECT(win->mainwin), "key_press_event", GTK_SIGNAL_FUNC(ctrl_b_hack), (gpointer) Browse); *************** *** 263,268 **** #ifdef HAVE_LDAP_STR2OBJECTCLASS gtk_signal_connect_object(GTK_OBJECT(Schema), "activate", ! GTK_SIGNAL_FUNC(new_modetab), ! GINT_TO_POINTER(SCHEMA_MODE)); #else gtk_widget_set_sensitive(Schema, FALSE); --- 275,280 ---- #ifdef HAVE_LDAP_STR2OBJECTCLASS gtk_signal_connect_object(GTK_OBJECT(Schema), "activate", ! GTK_SIGNAL_FUNC(new_modetab_schema), ! (gpointer) win); #else gtk_widget_set_sensitive(Schema, FALSE); *************** *** 288,292 **** GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); /* :-( */ ! gtk_signal_connect(GTK_OBJECT(mainwin), "key_press_event", GTK_SIGNAL_FUNC(ctrl_w_hack), (gpointer) Close); --- 300,304 ---- GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); /* :-( */ ! gtk_signal_connect(GTK_OBJECT(win->mainwin), "key_press_event", GTK_SIGNAL_FUNC(ctrl_w_hack), (gpointer) Close); *************** *** 298,302 **** gtk_signal_connect_object(GTK_OBJECT(Quit), "activate", GTK_SIGNAL_FUNC(gtk_widget_destroy), ! GTK_OBJECT(mainwin)); gtk_widget_add_accelerator(Quit, "activate", accel_group, 'Q', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); --- 310,314 ---- gtk_signal_connect_object(GTK_OBJECT(Quit), "activate", GTK_SIGNAL_FUNC(gtk_widget_destroy), ! GTK_OBJECT(win->mainwin)); gtk_widget_add_accelerator(Quit, "activate", accel_group, 'Q', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); *************** *** 310,314 **** menuFilters = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(Filters), menuFilters); ! gtk_object_set_data(GTK_OBJECT(mainwin), "filtermenu", menuFilters); /* Filters | New */ --- 322,326 ---- menuFilters = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(Filters), menuFilters); ! mainwin.filtermenu = menuFilters; /* Filters | New */ *************** *** 386,413 **** GTK_SIGNAL_FUNC(create_about_window), NULL); ! mainbook = gtk_notebook_new(); ! gtk_widget_show(mainbook); /* GTK_WIDGET_UNSET_FLAGS(GTK_NOTEBOOK(mainbook), GTK_CAN_FOCUS); */ ! gtk_box_pack_start(GTK_BOX(main_vbox), mainbook, TRUE, TRUE, 0); ! statusbar = gtk_statusbar_new(); ! gtk_object_set_data(GTK_OBJECT(mainwin), "statusbar", statusbar); ! gtk_widget_show(statusbar); ! gtk_box_pack_end(GTK_BOX(main_vbox), statusbar, FALSE, FALSE, 5); ! gtk_widget_set_sensitive(statusbar, TRUE); ! new_modetab(SEARCH_MODE); ! new_modetab(BROWSE_MODE | 32768); ! new_modetab(SCHEMA_MODE | 32768); ! gtk_signal_connect(GTK_OBJECT(mainbook), "switch-page", ! GTK_SIGNAL_FUNC(switchpage_refocus), NULL); ! gtk_widget_show(mainwin); } ! void new_modetab(int mode) { GtkWidget *content, *label, *focusbox; --- 398,424 ---- GTK_SIGNAL_FUNC(create_about_window), NULL); ! win->mainbook = gtk_notebook_new(); ! gtk_widget_show(win->mainbook); /* GTK_WIDGET_UNSET_FLAGS(GTK_NOTEBOOK(mainbook), GTK_CAN_FOCUS); */ ! gtk_box_pack_start(GTK_BOX(main_vbox), win->mainbook, TRUE, TRUE, 0); ! win->statusbar = gtk_statusbar_new(); ! gtk_widget_show(win->statusbar); ! gtk_box_pack_end(GTK_BOX(main_vbox), win->statusbar, FALSE, FALSE, 5); ! gtk_widget_set_sensitive(win->statusbar, TRUE); ! new_modetab(win, SEARCH_MODE); ! new_modetab(win, BROWSE_MODE | 32768); ! new_modetab(win, SCHEMA_MODE | 32768); ! gtk_signal_connect(GTK_OBJECT(win->mainbook), "switch-page", ! GTK_SIGNAL_FUNC(switchpage_refocus), win); ! gtk_widget_show(win->mainwin); } ! void new_modetab(struct mainwin_data *win, int mode) { GtkWidget *content, *label, *focusbox; *************** *** 444,451 **** enter_last_of_mode(tab); gtk_widget_show(label); ! gtk_notebook_append_page(GTK_NOTEBOOK(mainbook), content, label); if(focus) { ! gtk_notebook_set_page(GTK_NOTEBOOK(mainbook), -1); focusbox = tab->focus; --- 455,462 ---- enter_last_of_mode(tab); gtk_widget_show(label); ! gtk_notebook_append_page(GTK_NOTEBOOK(win->mainbook), content, label); if(focus) { ! gtk_notebook_set_page(GTK_NOTEBOOK(win->mainbook), -1); focusbox = tab->focus; *************** *** 454,458 **** } ! tablist = g_list_append(tablist, tab); } --- 465,469 ---- } ! win->tablist = g_list_append(win->tablist, tab); } *************** *** 460,468 **** void switchpage_refocus(GtkNotebook *notebook, GtkNotebookPage *page, ! int pagenum, gpointer data) { GtkWidget *focusbox; struct tab *tab; ! tab = g_list_nth_data(tablist, pagenum); if(!tab) return; --- 471,479 ---- void switchpage_refocus(GtkNotebook *notebook, GtkNotebookPage *page, ! int pagenum, struct mainwin_data *win) { GtkWidget *focusbox; struct tab *tab; ! tab = g_list_nth_data(win->tablist, pagenum); if(!tab) return; *************** *** 480,484 **** ! void cleanup_all_tabs(void) { GList *tabs; --- 491,495 ---- ! void cleanup_all_tabs(struct mainwin_data *win) { GList *tabs; *************** *** 486,493 **** /* don't waste time refocusing on disappearing tabs */ ! gtk_signal_disconnect_by_func(GTK_OBJECT(mainbook), GTK_SIGNAL_FUNC(switchpage_refocus), NULL); ! tabs = tablist; while(tabs) { tab = (struct tab *) tabs->data; --- 497,504 ---- /* don't waste time refocusing on disappearing tabs */ ! gtk_signal_disconnect_by_func(GTK_OBJECT(win->mainbook), GTK_SIGNAL_FUNC(switchpage_refocus), NULL); ! tabs = win->tablist; while(tabs) { tab = (struct tab *) tabs->data; *************** *** 500,504 **** ! void close_current_tab(void) { GList *tl; --- 511,515 ---- ! void close_current_tab(struct mainwin_data *win) { GList *tl; *************** *** 507,512 **** thismode = -1; ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(mainbook)); ! tab = g_list_nth_data(tablist, tabnum); if(tab) --- 518,523 ---- thismode = -1; ! tabnum = gtk_notebook_get_current_page(GTK_NOTEBOOK(win->mainbook)); ! tab = g_list_nth_data(win->tablist, tabnum); if(tab) *************** *** 516,530 **** free(tab->modeinfo); free(tab); ! gtk_notebook_remove_page(GTK_NOTEBOOK(mainbook), tabnum); ! tablist = g_list_remove(tablist, tab); ! if(tablist == NULL) ! gtk_widget_destroy(mainwin); ! g_hash_table_insert(lastofmode, (gpointer) thismode, NULL); /* try to find another tab with the same mode so we can put that one into lastofmode... */ ! for (tl = tablist; tl; tl = tl->next) { if( ((struct tab *)(tl->data))->type == thismode) { /* found one! */ --- 527,541 ---- free(tab->modeinfo); free(tab); ! gtk_notebook_remove_page(GTK_NOTEBOOK(win->mainbook), tabnum); ! win->tablist = g_list_remove(win->tablist, tab); ! if(win->tablist == NULL) ! gtk_widget_destroy(win->mainwin); ! g_hash_table_insert(win->lastofmode, (gpointer) thismode, NULL); /* try to find another tab with the same mode so we can put that one into lastofmode... */ ! for (tl = win->tablist; tl; tl = tl->next) { if( ((struct tab *)(tl->data))->type == thismode) { /* found one! */ *************** *** 557,566 **** ! void update_serverlist(void) { GList *tabs; struct tab *tab; ! tabs = tablist; while(tabs) { tab = (struct tab *) tabs->data; --- 568,577 ---- ! void update_serverlist(struct mainwin_data *win) { GList *tabs; struct tab *tab; ! tabs = win->tablist; while(tabs) { tab = (struct tab *) tabs->data; *************** *** 586,593 **** static void close_license_window(GtkWidget *window) { - license_window = NULL; gtk_widget_destroy(window); } void create_license_window(void) { --- 597,609 ---- static void close_license_window(GtkWidget *window) { gtk_widget_destroy(window); } + static void destroy_license_window(GtkWidget *window) + { + assert(window == license_window); + license_window = NULL; + } + void create_license_window(void) { *************** *** 611,616 **** license_window = window = gtk_dialog_new(); ! gtk_object_set_data(GTK_OBJECT(window), "close_func", ! close_license_window); gtk_widget_set_usize(window, 540, 400); gtk_window_set_title(GTK_WINDOW(window), _("License")); --- 627,632 ---- license_window = window = gtk_dialog_new(); ! /* gtk_object_set_data(GTK_OBJECT(window), "close_func", */ ! /* close_license_window); */ gtk_widget_set_usize(window, 540, 400); gtk_window_set_title(GTK_WINDOW(window), _("License")); *************** *** 685,696 **** GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); gtk_widget_grab_default(ok_button); ! gtk_signal_connect_object(GTK_OBJECT(window), "delete_event", ! (GtkSignalFunc) close_license_window, ! GTK_OBJECT(window)); gtk_signal_connect_object(GTK_OBJECT(ok_button), "clicked", (GtkSignalFunc) close_license_window, GTK_OBJECT(window)); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", ! (GtkSignalFunc) func_on_esc, (gpointer) window); --- 701,712 ---- GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); gtk_widget_grab_default(ok_button); ! gtk_signal_connect(GTK_OBJECT(window), "destroy", ! (GtkSignalFunc) destroy_license_window, ! NULL); gtk_signal_connect_object(GTK_OBJECT(ok_button), "clicked", (GtkSignalFunc) close_license_window, GTK_OBJECT(window)); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", ! (GtkSignalFunc) close_on_esc, (gpointer) window); *************** *** 701,708 **** static GtkWidget *about_window = NULL; ! static void close_about_window(GtkWidget *window) { about_window = NULL; - gtk_widget_destroy(window); } --- 717,724 ---- static GtkWidget *about_window = NULL; ! static void destroy_about_window(GtkWidget *window) { + assert(window == about_window); about_window = NULL; } *************** *** 750,756 **** snprintf(about_text, sizeof(about_text), ! "GQ %s\n\n\n%s", VERSION, about_blurb); about_label = gtk_label_new(about_text); ! gtk_label_set_justify(GTK_LABEL(about_label), GTK_JUSTIFY_CENTER); gtk_widget_show(about_label); gtk_box_pack_start(GTK_BOX(hbox), about_label, FALSE, FALSE, 4); --- 766,778 ---- snprintf(about_text, sizeof(about_text), ! "GQ %s\n\n\n%s\n\n" ! "GTK version %d.%d.%d\n" ! "GLib version %d.%d.%d\n", ! VERSION, about_blurb, ! gtk_major_version, gtk_minor_version, gtk_micro_version, ! glib_major_version, glib_minor_version, glib_micro_version); ! about_label = gtk_label_new(about_text); ! gtk_label_set_justify(GTK_LABEL(about_label), GTK_JUSTIFY_LEFT); gtk_widget_show(about_label); gtk_box_pack_start(GTK_BOX(hbox), about_label, FALSE, FALSE, 4); *************** *** 784,790 **** GTK_SIGNAL_FUNC(close_on_esc), (gpointer) about_window); ! gtk_signal_connect_object(GTK_OBJECT(about_window), "delete_event", ! (GtkSignalFunc) close_about_window, ! GTK_OBJECT(about_window)); gtk_widget_show(about_window); --- 806,812 ---- GTK_SIGNAL_FUNC(close_on_esc), (gpointer) about_window); ! gtk_signal_connect(GTK_OBJECT(about_window), "destroy", ! (GtkSignalFunc) destroy_about_window, ! NULL); gtk_widget_show(about_window); Index: mainwin.h =================================================================== RCS file: /cvsroot/gqclient/gq/src/mainwin.h,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** mainwin.h 9 Oct 2003 05:42:50 -0000 1.18 --- mainwin.h 9 Oct 2003 05:47:26 -0000 1.19 *************** *** 39,47 **** "http://biot.com/gq/\n" ! extern GList *tablist; ! extern GtkWidget *mainwin; ! extern GtkWidget *mainbook; ! extern GtkWidget *statusbar; struct tab *get_last_of_mode(int mode); --- 39,52 ---- "http://biot.com/gq/\n" + struct mainwin_data { + GList *tablist; + GtkWidget *mainwin; + GtkWidget *mainbook; + GtkWidget *statusbar; + GtkWidget *filtermenu; + GHashTable *lastofmode; + }; ! extern struct mainwin_data mainwin; struct tab *get_last_of_mode(int mode); *************** *** 50,63 **** void fill_serverlist_combo(GtkWidget *combo); ! void cleanup(void); ! void gq_exit(GtkWidget *widget, gpointer *data); ! void create_mainwin(void); ! void new_modetab(int mode); void switchpage_refocus(GtkNotebook *notebook, GtkNotebookPage *page, ! int pagenum, gpointer data); ! void cleanup_all_tabs(void); ! void close_current_tab(void); void cleanup_tab(struct tab *tab); ! void update_serverlist(void); void create_license_window(void); /* void close_license_window(GtkWidget *widget); */ --- 55,68 ---- void fill_serverlist_combo(GtkWidget *combo); ! void cleanup(struct mainwin_data *win); ! void gq_exit(GtkWidget *widget, struct mainwin_data *win); ! void create_mainwin(struct mainwin_data *); ! void new_modetab(struct mainwin_data *, int mode); void switchpage_refocus(GtkNotebook *notebook, GtkNotebookPage *page, ! int pagenum, struct mainwin_data *win); ! void cleanup_all_tabs(struct mainwin_data *win); ! void close_current_tab(struct mainwin_data *win); void cleanup_tab(struct tab *tab); ! void update_serverlist(struct mainwin_data *win); void create_license_window(void); /* void close_license_window(GtkWidget *widget); */ Index: prefs.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/prefs.c,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** prefs.c 9 Oct 2003 05:15:06 -0000 1.36 --- prefs.c 9 Oct 2003 05:47:26 -0000 1.37 *************** *** 258,262 **** /* so the cancel button doesn't really cancel :-) */ save_config(); ! update_serverlist(); if (cb_data->edit_new_server) { --- 258,262 ---- /* so the cancel button doesn't really cancel :-) */ save_config(); ! update_serverlist(&mainwin); if (cb_data->edit_new_server) { *************** *** 943,947 **** fill_serverlist_serverstab(); ! update_serverlist(); } } --- 943,947 ---- fill_serverlist_serverstab(); ! update_serverlist(&mainwin); } } Index: util.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/util.c,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -d -r1.66 -r1.67 *** util.c 9 Oct 2003 05:38:58 -0000 1.66 --- util.c 9 Oct 2003 05:47:26 -0000 1.67 *************** *** 562,566 **** busycursor = gdk_cursor_new(GDK_WATCH); ! gdk_window_set_cursor(mainwin->window, busycursor); gdk_cursor_destroy(busycursor); --- 562,566 ---- busycursor = gdk_cursor_new(GDK_WATCH); ! gdk_window_set_cursor(mainwin.mainwin->window, busycursor); gdk_cursor_destroy(busycursor); *************** *** 574,578 **** { ! gdk_window_set_cursor(mainwin->window, NULL); } --- 574,578 ---- { ! gdk_window_set_cursor(mainwin.mainwin->window, NULL); } *************** *** 702,705 **** --- 702,706 ---- + /* these should probably belong to struct mainwin_data */ static guint context = 0, msgid = 0; *************** *** 940,946 **** gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 10); ! warning = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(mainwin)->window, &warning_mask, ! &mainwin->style->white, warning_xpm); pixmap = gtk_pixmap_new(warning, warning_mask); --- 941,947 ---- gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 10); ! warning = gdk_pixmap_create_from_xpm_d(GTK_WIDGET(mainwin.mainwin)->window, &warning_mask, ! &mainwin.mainwin->style->white, warning_xpm); pixmap = gtk_pixmap_new(warning, warning_mask); |