[gq-commit] gq/src filter.c,1.25,1.26
Status: Beta
Brought to you by:
sur5r
From: <sta...@us...> - 2003-11-02 17:49:51
|
Update of /cvsroot/gqclient/gq/src In directory sc8-pr-cvs1:/tmp/cvs-serv16539 Modified Files: filter.c Log Message: * Fixed several bugs found during testing - switch to the most recently used search tab when selecting a filter through the main window if the current tab in no search tab. - fixed some crashes due to buggy implementation of the new configuration saving policy when dealing with filters * Streamlined filter operations * Some cosmetic changes * Made some windows stateful Index: filter.c =================================================================== RCS file: /cvsroot/gqclient/gq/src/filter.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** filter.c 2 Nov 2003 17:23:49 -0000 1.25 --- filter.c 2 Nov 2003 17:49:46 -0000 1.26 *************** *** 107,111 **** void add_filter(GtkWidget *filternamebox) { ! GtkWidget *focusbox, *menuitem, *button; GtkWidget *server_combo, *searchbase_combo; GList *filterlist; --- 107,111 ---- void add_filter(GtkWidget *filternamebox) { ! GtkWidget *focusbox, *button; GtkWidget *server_combo, *searchbase_combo; GList *filterlist; *************** *** 190,200 **** config->filters = g_list_append(config->filters, filter); /* 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); if (save_config(filternamebox)) { --- 190,196 ---- config->filters = g_list_append(config->filters, filter); + /* and add it to the Filters menu */ ! mainwin_update_filter_menu(&mainwin); if (save_config(filternamebox)) { *************** *** 215,227 **** window = gtk_dialog_new(); ! gtk_container_border_width(GTK_CONTAINER(window), CONTAINER_BORDER_WIDTH); gtk_window_set_title(GTK_WINDOW(window), _("Filter name")); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); - /* What does this mean... (PS: 20030929) */ - gtk_signal_connect_object(GTK_OBJECT(window), "destroy", - (GtkSignalFunc) gtk_widget_destroy, - (gpointer) window); - gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(close_on_esc), --- 211,218 ---- window = gtk_dialog_new(); ! /* gtk_container_border_width(GTK_CONTAINER(window), CONTAINER_BORDER_WIDTH); */ gtk_window_set_title(GTK_WINDOW(window), _("Filter name")); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(close_on_esc), *************** *** 231,234 **** --- 222,227 ---- gtk_widget_show(vbox1); + gtk_container_border_width(GTK_CONTAINER(vbox1), CONTAINER_BORDER_WIDTH); + label = gq_label_new(_("Filter _name")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); *************** *** 257,260 **** --- 250,255 ---- gtk_widget_show(vbox2); + gtk_container_border_width(GTK_CONTAINER(vbox2), CONTAINER_BORDER_WIDTH); + hbox0 = gtk_hbutton_box_new(); gtk_widget_show(hbox0); *************** *** 267,271 **** #endif gtk_signal_connect_object(GTK_OBJECT(button), "clicked", ! GTK_SIGNAL_FUNC(add_filter), GTK_OBJECT(filternamebox)); gtk_box_pack_start(GTK_BOX(hbox0), button, FALSE, FALSE, 0); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); --- 262,268 ---- #endif gtk_signal_connect_object(GTK_OBJECT(button), "clicked", ! GTK_SIGNAL_FUNC(add_filter), ! GTK_OBJECT(filternamebox)); ! gtk_box_pack_start(GTK_BOX(hbox0), button, FALSE, FALSE, 0); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); *************** *** 274,277 **** --- 271,287 ---- gtk_widget_show(button); + + #if GTK_MAJOR >= 2 + button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + #else + button = gq_button_new_with_label(_("_Cancel")); + #endif + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(gtk_widget_destroy), + GTK_OBJECT(window)); + + gtk_box_pack_start(GTK_BOX(hbox0), button, FALSE, FALSE, 0); + gtk_widget_show(button); + gtk_widget_grab_focus(filternamebox); *************** *** 291,297 **** /* we're in luck if the current tab is a Search tab: just use this one */ ! /* if the current tab isn't a Search tab, just ignore */ ! if(tab->type != SEARCH_MODE) return; /* paste filter into searchterm box */ --- 301,315 ---- /* we're in luck if the current tab is a Search tab: just use this one */ ! /* if the current tab isn't a Search tab, find the last used on */ ! if(tab->type != SEARCH_MODE) { ! tab = get_last_of_mode(SEARCH_MODE); ! go_to_page(tab); ! } ! ! /* no search-tab - cannot use filter */ ! if (tab == NULL) { ! /* FIXME: pop up error using an error_context */ return; + } /* paste filter into searchterm box */ *************** *** 304,308 **** if(filter->servername[0]) { server_combo = SEARCHTAB(tab)->serverlist_combo; ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(server_combo)->entry), filter->servername); } --- 322,327 ---- if(filter->servername[0]) { server_combo = SEARCHTAB(tab)->serverlist_combo; ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(server_combo)->entry), ! filter->servername); } *************** *** 310,318 **** if(filter->basedn[0]) { searchbase_combo = SEARCHTAB(tab)->searchbase_combo; ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(searchbase_combo)->entry), filter->basedn); } gtk_signal_emit_by_name(GTK_OBJECT(focusbox), "activate"); - } --- 329,338 ---- if(filter->basedn[0]) { searchbase_combo = SEARCHTAB(tab)->searchbase_combo; ! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(searchbase_combo)->entry), ! filter->basedn); } + /* uhhh, what a hack */ gtk_signal_emit_by_name(GTK_OBJECT(focusbox), "activate"); } *************** *** 329,341 **** char *clist_content[5]; ! window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_border_width(GTK_CONTAINER(window), CONTAINER_BORDER_WIDTH); gtk_window_set_title(GTK_WINDOW(window), _("Filters")); - gtk_window_set_default_size(GTK_WINDOW(window), 670, 350); - /* what does this mean? (PS 20030929) - FIXME */ - gtk_signal_connect_object(GTK_OBJECT(window), "destroy", - (GtkSignalFunc) gtk_widget_destroy, - (gpointer) window); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(close_on_esc), --- 349,358 ---- char *clist_content[5]; ! window = stateful_gtk_window_new(GTK_WINDOW_TOPLEVEL, ! "filterlist", 670, 350); ! gtk_container_border_width(GTK_CONTAINER(window), CONTAINER_BORDER_WIDTH); gtk_window_set_title(GTK_WINDOW(window), _("Filters")); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(close_on_esc), *************** *** 455,458 **** --- 472,476 ---- gtk_widget_show(window); + statusbar_msg(_("Filter list window opened.")); } *************** *** 568,572 **** ! void edit_filter(GtkCList *filter_clist, int is_new_filter, int row, struct gq_filter *filter) { #if GTK_MAJOR >= 2 --- 586,591 ---- ! void edit_filter(GtkCList *filter_clist, int is_new_filter, ! int row, struct gq_filter *filter) { #if GTK_MAJOR >= 2 *************** *** 577,582 **** char *indented; ! window = gtk_window_new(GTK_WINDOW_TOPLEVEL); ! gtk_window_set_default_size(GTK_WINDOW(window), 400, 350); if(!is_new_filter) gtk_object_set_data(GTK_OBJECT(window), "filter", filter); --- 596,602 ---- char *indented; ! window = stateful_gtk_window_new(GTK_WINDOW_TOPLEVEL, ! "editfilter", 400, 350); ! if(!is_new_filter) gtk_object_set_data(GTK_OBJECT(window), "filter", filter); *************** *** 587,594 **** gtk_window_set_title(GTK_WINDOW(window), _("Edit filter")); - /* What does this mean? (PS 20030929) */ - gtk_signal_connect_object(GTK_OBJECT(window), "destroy", - (GtkSignalFunc) gtk_widget_destroy, - (gpointer) window); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(close_on_esc), --- 607,610 ---- *************** *** 758,761 **** --- 774,780 ---- gtk_box_pack_end(GTK_BOX(hbox2), cancel, FALSE, FALSE, 0); gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", + (GtkSignalFunc) statusbar_msg, + (gpointer) _("Editing filter cancelled.")); + gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", (GtkSignalFunc) gtk_widget_destroy, (gpointer) window); *************** *** 766,769 **** --- 785,794 ---- gtk_widget_show(window); + if (filter) { + statusbar_msg(_("Edit filter window opened for filter '%s'."), + filter->name); + } else { + statusbar_msg(_("Edit filter window opened for new filter.")); + } } *************** *** 771,780 **** void save_filter(GtkWidget *window) { ! ! GtkWidget *entry, *text, *filter_clist, *menuitem; ! GList *menuitems, *menuwidgets; ! struct gq_filter *filter, *found_filter; int row, is_a_new_filter; ! char *clist_content[5], *labeltext; const char *filtername, *servername, *basedn; char *filtertext, *flattened = NULL; --- 796,803 ---- void save_filter(GtkWidget *window) { ! GtkWidget *entry, *text, *filter_clist; ! struct gq_filter *filter; int row, is_a_new_filter; ! char *clist_content[5]; const char *filtername, *servername, *basedn; char *filtertext, *flattened = NULL; *************** *** 863,870 **** if (save_config_ext(error_context)) { - save_ok = TRUE; - filter = NULL; /* set to NULL to not free it - in the end */ - /* there's no filter_clist if we got here through the menu */ if(filter_clist) { --- 886,889 ---- *************** *** 882,891 **** /* 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); } else { /* save was not OK - undo changes */ --- 901,909 ---- /* add to Filters menu */ ! mainwin_update_filter_menu(&mainwin); ! ! save_ok = TRUE; ! filter = NULL; /* set to NULL to not free it ! in the end */ } else { /* save was not OK - undo changes */ *************** *** 895,902 **** } else { /* ! is_a_new_filter */ if(strcasecmp(filter->name, filtername)) { - struct gq_filter *old_backup = NULL; - /* existing filter was renamed */ if(check_filtername(filtername)) { --- 913,920 ---- } else { + struct gq_filter *old_backup = NULL; + /* ! is_a_new_filter */ if(strcasecmp(filter->name, filtername)) { /* existing filter was renamed */ if(check_filtername(filtername)) { *************** *** 906,964 **** goto done; } ! old_backup = new_filter(); ! copy_filter(old_backup, filter); ! ! if(strcasecmp(filter->servername, servername)) { ! g_free_and_dup(filter->servername, servername); ! gtk_clist_set_text(GTK_CLIST(filter_clist), row, 1, ! servername); ! } ! ! if(strcasecmp(filter->basedn, basedn)) { ! g_free_and_dup(filter->basedn, basedn); ! gtk_clist_set_text(GTK_CLIST(filter_clist), row, 2, ! basedn); ! } ! ! if(strcasecmp(filter->ldapfilter, flattened)) { ! g_free_and_dup(filter->ldapfilter, flattened); ! gtk_clist_set_text(GTK_CLIST(filter_clist), row, 3, ! flattened); ! } ! ! /* change filtername in internal struct, and in the filter clist window */ ! g_free_and_dup(filter->name, filtername); ! ! if (!save_config_ext(error_context)) { ! /* undo changes */ ! copy_filter(filter, old_backup); ! } else { ! save_ok = TRUE; ! filter = NULL; /* set to NULL to not ! free it */ ! ! /* find old filter in the menu, and change it there */ ! menuitems = gtk_container_children(GTK_CONTAINER(mainwin.filtermenu)); ! while(menuitems) { ! menuitem = menuitems->data; ! found_filter = gtk_object_get_data(GTK_OBJECT(menuitem), "filter"); ! if(filter == found_filter) { ! menuwidgets = gtk_container_children(GTK_CONTAINER(menuitem)); ! if(GTK_IS_LABEL(menuwidgets->data)) { ! gtk_label_get(GTK_LABEL(menuwidgets->data), &labeltext); ! /* make really, really sure */ ! if(!strcasecmp(labeltext, filter->name)) ! gtk_label_set_text(GTK_LABEL(menuwidgets->data), filtername); ! } ! break; ! } ! menuitems = menuitems->next; ! } ! ! gtk_clist_set_text(GTK_CLIST(filter_clist), row, 0, filtername); ! } ! free_filter(old_backup); } } --- 924,965 ---- goto done; } + } + old_backup = new_filter(); + copy_filter(old_backup, filter); + + if(strcasecmp(filter->servername, servername)) { + g_free_and_dup(filter->servername, servername); + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 1, + servername); + } + + if(strcasecmp(filter->basedn, basedn)) { + g_free_and_dup(filter->basedn, basedn); + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 2, + basedn); + } + + if(strcasecmp(filter->ldapfilter, flattened)) { + g_free_and_dup(filter->ldapfilter, flattened); + gtk_clist_set_text(GTK_CLIST(filter_clist), row, 3, + flattened); + } + + /* change filtername in internal struct, and in the filter clist window */ + g_free_and_dup(filter->name, filtername); + + if (!save_config_ext(error_context)) { + /* undo changes */ + copy_filter(filter, old_backup); + } else { + /* udpate filter menu in main window */ + mainwin_update_filter_menu(&mainwin); ! gtk_clist_set_text(GTK_CLIST(filter_clist), row, 0, filtername); ! save_ok = TRUE; ! filter = NULL; /* set to NULL to not ! free it */ } + free_filter(old_backup); } *************** *** 974,978 **** gtk_widget_destroy(window); } - } --- 975,978 ---- |