diff options
author | Lars Hamann <lars@gtk.org> | 1999-02-11 23:47:48 +0000 |
---|---|---|
committer | Lars Hamann <lars@src.gnome.org> | 1999-02-11 23:47:48 +0000 |
commit | 1f85d83ef357fed2f5dbdcfd99c14dcfbddb0326 (patch) | |
tree | 2119177a5cad92c8d68a683bd974b65b6c4e076e /tests | |
parent | ed219818b1795864ae2fec4fd10e7ff7c833c814 (diff) | |
download | gtk+-1f85d83ef357fed2f5dbdcfd99c14dcfbddb0326.tar.gz |
don't autoselect focus_row in case of GTK_SELECTION_EXTENDED
Fri Feb 12 00:08:01 1999 Lars Hamann <lars@gtk.org>
* gtk/gtklist.c (gtk_list_remove_items_internal): don't autoselect
focus_row in case of GTK_SELECTION_EXTENDED
* gtk/testgtk.c : few changes in list example.
* gtk/gtklistitem.c (gtk_list_item_class_init):
* gtk/gtkctree.c (gtk_ctree_class_init):
* gtk/gtkclist.c (gtk_clist_class_init):
fixed indentation, removed unused key bindings
Diffstat (limited to 'tests')
-rw-r--r-- | tests/testgtk.c | 237 |
1 files changed, 109 insertions, 128 deletions
diff --git a/tests/testgtk.c b/tests/testgtk.c index fa1997e9f0..980ac75c76 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -3281,25 +3281,45 @@ list_add (GtkWidget *widget, static void list_remove (GtkWidget *widget, - GtkWidget *list) + GtkList *list) { - GList *tmp_list; - GList *clear_list; + GList *clear_list = NULL; + GList *sel_row = NULL; + GList *work = NULL; - tmp_list = GTK_LIST (list)->selection; - clear_list = NULL; - - while (tmp_list) + if (list->selection_mode == GTK_SELECTION_EXTENDED) { - clear_list = g_list_prepend (clear_list, tmp_list->data); - tmp_list = tmp_list->next; + GtkWidget *item; + + item = GTK_CONTAINER (list)->focus_child; + if (!item && list->selection) + item = list->selection->data; + + if (item) + { + work = g_list_find (list->children, item); + for (sel_row = work; sel_row; sel_row = sel_row->next) + if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED) + break; + + if (!sel_row) + { + for (sel_row = work; sel_row; sel_row = sel_row->prev) + if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED) + break; + } + } } - clear_list = g_list_reverse (clear_list); + for (work = list->selection; work; work = work->next) + clear_list = g_list_prepend (clear_list, work->data); + clear_list = g_list_reverse (clear_list); gtk_list_remove_items (GTK_LIST (list), clear_list); - g_list_free (clear_list); + + if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row) + gtk_list_select_child (list, GTK_WIDGET(sel_row->data)); } static void @@ -3309,13 +3329,6 @@ list_clear (GtkWidget *widget, gtk_list_clear_items (GTK_LIST (list), 0, -1); } -static void -list_undo_selection (GtkWidget *widget, - GtkWidget *list) -{ - gtk_list_undo_selection (GTK_LIST (list)); -} - #define RADIOMENUTOGGLED(_rmi_, __i) { \ GSList * __g; \ __i = 0; \ @@ -3346,21 +3359,27 @@ static void create_list (void) { static GtkWidget *window = NULL; - GtkWidget *box1; - GtkWidget *box2; - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *scrolled_win; - GtkWidget *list; - GtkWidget *button; - GtkWidget *separator; - GtkWidget *menu; - GtkWidget *menu_item; - GSList *group; - FILE *infile; + + static OptionMenuItem items[] = + { + { "Single", list_toggle_sel_mode }, + { "Browse", list_toggle_sel_mode }, + { "Multiple", list_toggle_sel_mode }, + { "Extended", list_toggle_sel_mode } + }; if (!window) { + GtkWidget *cbox; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *scrolled_win; + GtkWidget *list; + GtkWidget *button; + GtkWidget *separator; + FILE *infile; + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy", @@ -3370,23 +3389,21 @@ create_list (void) gtk_window_set_title (GTK_WINDOW (window), "list"); gtk_container_set_border_width (GTK_CONTAINER (window), 0); - box1 = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), box1); - - box2 = gtk_vbox_new (FALSE, 10); - gtk_container_set_border_width (GTK_CONTAINER (box2), 10); - gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0); + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), vbox); scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5); + gtk_widget_set_usize (scrolled_win, -1, 300); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0); - gtk_widget_set_usize (scrolled_win, -1, 300); list = gtk_list_new (); gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list); + gtk_scrolled_window_add_with_viewport + (GTK_SCROLLED_WINDOW (scrolled_win), list); gtk_container_set_focus_vadjustment (GTK_CONTAINER (list), gtk_scrolled_window_get_vadjustment @@ -3413,93 +3430,54 @@ create_list (void) fclose (infile); } - hbox = gtk_hbox_new (TRUE, 10); - gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0); - button = gtk_button_new_with_label ("Undo Selection"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC(list_undo_selection), - list); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); + hbox = gtk_hbox_new (TRUE, 5); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); - button = gtk_button_new_with_label ("Remove Selection"); + button = gtk_button_new_with_label ("Insert Row"); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (list_remove), + GTK_SIGNAL_FUNC (list_add), list); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); button = gtk_button_new_with_label ("Clear List"); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (list_clear), list); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0); - button = gtk_button_new_with_label ("Insert Row"); + button = gtk_button_new_with_label ("Remove Selection"); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (list_add), + GTK_SIGNAL_FUNC (list_remove), list); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); + + cbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0); + + hbox = gtk_hbox_new (FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); + gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0); label = gtk_label_new ("Selection Mode :"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC(list_remove), - list); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); - list_omenu = gtk_option_menu_new (); - menu = gtk_menu_new (); - group = NULL; - - menu_item = gtk_radio_menu_item_new_with_label (group, "Single"); - gtk_signal_connect (GTK_OBJECT (menu_item), "activate", - GTK_SIGNAL_FUNC (list_toggle_sel_mode), list); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); - gtk_menu_append (GTK_MENU (menu), menu_item); - gtk_widget_show (menu_item); - - menu_item = gtk_radio_menu_item_new_with_label (group, "Browse"); - gtk_signal_connect (GTK_OBJECT (menu_item), "activate", - GTK_SIGNAL_FUNC (list_toggle_sel_mode), list); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); - gtk_menu_append (GTK_MENU (menu), menu_item); - gtk_widget_show (menu_item); - - menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple"); - gtk_signal_connect (GTK_OBJECT (menu_item), "activate", - GTK_SIGNAL_FUNC (list_toggle_sel_mode), list); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); - gtk_menu_append (GTK_MENU (menu), menu_item); - gtk_widget_show (menu_item); - - menu_item = gtk_radio_menu_item_new_with_label (group, "Extended"); - gtk_signal_connect (GTK_OBJECT (menu_item), "activate", - GTK_SIGNAL_FUNC (list_toggle_sel_mode), list); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); - gtk_menu_append (GTK_MENU (menu), menu_item); - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE); - gtk_widget_show (menu_item); - - gtk_option_menu_set_menu (GTK_OPTION_MENU (list_omenu), menu); + list_omenu = build_option_menu (items, 4, 3, list); gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0); - - gtk_option_menu_set_history (GTK_OPTION_MENU (list_omenu), 3); separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); - + gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0); - box2 = gtk_vbox_new (FALSE, 10); - gtk_container_set_border_width (GTK_CONTAINER (box2), 10); - gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0); + cbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0); button = gtk_button_new_with_label ("close"); + gtk_container_set_border_width (GTK_CONTAINER (button), 10); + gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (window)); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_widget_grab_default (button); @@ -3884,8 +3862,8 @@ create_clist (void) char text[TESTGTK_CLIST_COLUMNS][50]; char *texts[TESTGTK_CLIST_COLUMNS]; - GtkWidget *box1; - GtkWidget *box2; + GtkWidget *vbox; + GtkWidget *hbox; GtkWidget *clist; GtkWidget *button; GtkWidget *separator; @@ -3910,8 +3888,8 @@ create_clist (void) gtk_window_set_title (GTK_WINDOW (window), "clist"); gtk_container_set_border_width (GTK_CONTAINER (window), 0); - box1 = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), box1); + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), vbox); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5); @@ -3927,79 +3905,79 @@ create_clist (void) (GtkSignalFunc) clist_click_column, NULL); /* control buttons */ - box2 = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (box2), 5); - gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); + hbox = gtk_hbox_new (FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Insert Row"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) insert_row_clist, (gpointer) clist); button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) add1000_clist, (gpointer) clist); button = gtk_button_new_with_label ("Add 10,000 Rows"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) add10000_clist, (gpointer) clist); /* second layer of buttons */ - box2 = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (box2), 5); - gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); + hbox = gtk_hbox_new (FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Clear List"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) clear_clist, (gpointer) clist); button = gtk_button_new_with_label ("Remove Selection"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) clist_remove_selection, (gpointer) clist); undo_button = gtk_button_new_with_label ("Undo Selection"); - gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (undo_button), "clicked", (GtkSignalFunc) undo_selection, (gpointer) clist); button = gtk_button_new_with_label ("Warning Test"); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) clist_warning_test,(gpointer) clist); /* third layer of buttons */ - box2 = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (box2), 5); - gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); + hbox = gtk_hbox_new (FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); check = gtk_check_button_new_with_label ("Show Title Buttons"); - gtk_box_pack_start (GTK_BOX (box2), check, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (check), "clicked", GTK_SIGNAL_FUNC (toggle_title_buttons), clist); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE); check = gtk_check_button_new_with_label ("Reorderable"); - gtk_box_pack_start (GTK_BOX (box2), check, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (check), "clicked", GTK_SIGNAL_FUNC (toggle_reorderable), clist); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE); label = gtk_label_new ("Selection Mode :"); - gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); clist_omenu = build_option_menu (items, 4, 3, clist); - gtk_box_pack_start (GTK_BOX (box2), clist_omenu, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0); /* * the rest of the clist configuration */ - gtk_box_pack_start (GTK_BOX (box1), scrolled_win, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0); gtk_clist_set_row_height (GTK_CLIST (clist), 18); gtk_widget_set_usize (clist, -1, 300); @@ -4057,11 +4035,14 @@ create_clist (void) } separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); button = gtk_button_new_with_label ("close"); gtk_container_set_border_width (GTK_CONTAINER (button), 10); - gtk_box_pack_start (GTK_BOX (box1), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (window)); |