Index: ChangeLog =================================================================== RCS file: /cvs/gnome/glade2/ChangeLog,v retrieving revision 1.7 diff -u -5 -r1.7 ChangeLog --- ChangeLog 2001/06/29 05:52:09 1.7 +++ ChangeLog 2001/07/01 07:19:53 @@ -1,5 +1,12 @@ +2001-07-01 Shane Butler + + * src/glade-widget-class.c (glade_widget_class_list_signals): use + class->type to avoid duplication etc + * src/glade-signals-editor.[ch]: moved lots of functionality into smaller + functions, fixed bugs etc. + 2001-06-28 Archit Baweja * src/glade.h (GLADE_TAB_GET_TYPE_FUNCTION): new #define. * src/glade-widget-class.c (glade_widget_class_new_from_node): added Index: src/glade-signal-editor.c =================================================================== RCS file: /cvs/gnome/glade2/src/glade-signal-editor.c,v retrieving revision 1.2 diff -u -5 -r1.2 glade-signal-editor.c --- src/glade-signal-editor.c 2001/06/29 04:21:37 1.2 +++ src/glade-signal-editor.c 2001/07/01 07:19:55 @@ -28,127 +28,163 @@ #include "glade-widget.h" #include "glade-widget-class.h" #include "glade-signal-editor.h" +static void +glade_signal_editor_append_column (GtkTreeView *view, const gint col_num, const gchar *name) +{ + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes (name, renderer, + "text", col_num, NULL); + gtk_tree_view_append_column (view, column); +} + static gboolean -glade_signal_editor_dialog_list_cb (GtkTreeSelection *lst_select, - GtkTreeModel *lst_model, GtkTreePath *lst_path, GList *list) +glade_signal_editor_dialog_list_select_cb (GtkTreeSelection *lst_select, + GtkTreeModel *lst_model, GtkTreePath *lst_path, GladeSignalEditor *editor) { GtkTreeIter iter; GValue *label; - + GList *list = NULL; + GladeWidgetClassSignal *signal; + label = g_new0 (GValue, 1); gtk_tree_model_get_iter (lst_model, &iter, lst_path); gtk_tree_model_get_value (lst_model, &iter, 0, label); - for ( ; list != NULL; list = list->next) { - if (!strcmp (list->data, label->data[0].v_pointer)) { - return FALSE; + for (list = editor->class->signals; list != NULL; list = list->next) { + signal = (GladeWidgetClassSignal *) list->data; + if (!strcmp (signal->name, label->data[0].v_pointer)) { + return TRUE; } } - return TRUE; + return FALSE; } -static void -glade_signal_editor_dialog_cb (GtkButton *button, GladeSignalEditor *editor) +static GtkWidget * +glade_signal_editor_dialog_construct_list (GladeSignalEditor *editor) { + GtkTreeSelection *selection; + GtkTreeStore *model; + GtkTreeView *view; + GtkWidget *view_widget; + + model = gtk_tree_store_new_with_types (1, G_TYPE_STRING); + + view_widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model)); + view = GTK_TREE_VIEW (view_widget); + + g_object_unref (G_OBJECT (model)); + + glade_signal_editor_append_column (view, 0, _("Signals")); + + selection = gtk_tree_view_get_selection (view); + gtk_tree_selection_set_select_function (selection, + (GtkTreeSelectionFunc) glade_signal_editor_dialog_list_select_cb, + editor, NULL); + + gtk_widget_set_usize (view_widget, 150, 200); + return view_widget; +} + +static GtkWidget * +glade_signal_editor_dialog_construct (GladeSignalEditor *editor, GtkWidget **view) +{ GtkWidget *dialog; - GtkWidget *vbox; - GList *list; - GladeWidgetClassSignal *signal; - gchar *type; - gint response; - GtkTreeModel *lst_model; - GtkTreeView *lst_view; - GtkCellRenderer *lst_cellr; - GtkTreeViewColumn *lst_column; - GtkTreeSelection *lst_select; - GValue *label; - GtkTreeIter *parent_iter = NULL; - GtkTreeIter *iter = NULL; - GtkTreeSelection *lst_selected; GtkWidget *scroll; - GList *widget_class_list = NULL; - - g_return_if_fail (editor->class->signals != NULL); + GtkWidget *vbox; dialog = gtk_dialog_new_with_buttons (_("Select signal"), NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); - vbox = gtk_bin_get_child (GTK_BIN (dialog)); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start_defaults (GTK_BOX (vbox), GTK_WIDGET (scroll)); + *view = glade_signal_editor_dialog_construct_list (editor); + gtk_container_add (GTK_CONTAINER (scroll), *view); - lst_model = GTK_TREE_MODEL (gtk_tree_store_new_with_types (1, G_TYPE_STRING)); - - lst_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (lst_model))); - gtk_widget_set_usize (GTK_WIDGET (lst_view), 150, 200); - gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (lst_view)); - - g_object_unref (G_OBJECT (lst_model)); - - lst_cellr = gtk_cell_renderer_text_new (); - lst_column = gtk_tree_view_column_new_with_attributes (_("Signals"), lst_cellr, - "text", 0, NULL); - gtk_tree_view_append_column (lst_view, lst_column); + gtk_widget_show_all (vbox); + return dialog; +} +static GtkTreeIter * +glade_signal_editor_dialog_append_signal (GtkTreeStore *lst_model, + const gchar *label_text, GtkTreeIter *parent) +{ + GtkTreeIter *iter; + GValue *label; - type = ""; label = g_new0 (GValue, 1); label = g_value_init (label, G_TYPE_STRING); - for (list = editor->class->signals; list != NULL; list = list->next) { - signal = (GladeWidgetClassSignal *) list->data; + iter = g_new0 (GtkTreeIter, 1); + gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent); + label->data[0].v_pointer = (gchar *) label_text; + gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label); - if (!strcmp (type, signal->type)) { + return iter; +} - iter = g_new0 (GtkTreeIter, 1); - gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent_iter); - label->data[0].v_pointer = signal->name; - gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label); - } else { - - parent_iter = g_new0 (GtkTreeIter, 1); - gtk_tree_store_append (GTK_TREE_STORE (lst_model), parent_iter, NULL); - label->data[0].v_pointer = signal->type; - gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), parent_iter, 0, label); +static void +glade_signal_editor_dialog_load_signals (GladeSignalEditor *editor, GtkWidget *view) +{ + GtkTreeStore *lst_model; + gchar *type; + GtkTreeIter *parent = NULL; + GList *list = NULL; + GladeWidgetClassSignal *signal; - widget_class_list = g_list_append(widget_class_list, g_strdup (signal->type)); + type = ""; + lst_model = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view))); - iter = g_new0 (GtkTreeIter, 1); - gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent_iter); - label->data[0].v_pointer = signal->name; - gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label); + for (list = editor->class->signals; list != NULL; list = list->next) { + signal = (GladeWidgetClassSignal *) list->data; + if (strcmp (type, signal->type)) { + parent = glade_signal_editor_dialog_append_signal (lst_model, signal->type, NULL); type = signal->type; } + glade_signal_editor_dialog_append_signal (lst_model, signal->name, parent); } +} - lst_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (lst_view)); - gtk_tree_selection_set_select_function (lst_select, (GtkTreeSelectionFunc) glade_signal_editor_dialog_list_cb, - widget_class_list, NULL); +static void +glade_signal_editor_dialog_cb (GtkButton *button, GladeSignalEditor *editor) +{ + GValue *label; + GtkTreeIter *iter; + GtkTreeModel *lst_model; + GtkTreeSelection *lst_selected; + GtkWidget *dialog; + GtkWidget *view; - gtk_widget_show_all (vbox); - response = gtk_dialog_run (GTK_DIALOG (dialog)); + g_return_if_fail (editor->class->signals != NULL); + + dialog = glade_signal_editor_dialog_construct (editor, &view); + glade_signal_editor_dialog_load_signals (editor, view); - switch (response) { + switch (gtk_dialog_run (GTK_DIALOG (dialog))) { case GTK_RESPONSE_ACCEPT: - lst_selected = gtk_tree_view_get_selection (lst_view); + lst_model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); + lst_selected = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); + iter = g_new0 (GtkTreeIter, 1); if (gtk_tree_selection_get_selected (lst_selected, &lst_model, iter)) { label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (lst_model), iter, 0, label); + gtk_tree_model_get_value (lst_model, iter, 0, label); gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), (gchar *) label->data[0].v_pointer); } break; default: @@ -156,21 +192,28 @@ } gtk_widget_destroy (dialog); } +/* glade_signal_editor_update_signal () will add a 'signal' to the list of + * signals displayed by the signal editor if 'iter' is NULL, otherwise it will + * update the item at position 'iter' to the value of 'signal' + */ static void -glade_signal_editor_append_signal (GladeSignalEditor *editor, GladeWidgetSignal *signal) +glade_signal_editor_update_signal (GladeSignalEditor *editor, GladeWidgetSignal *signal, + GtkTreeIter *iter) { GtkTreeStore *lst_model; - GtkTreeIter *iter; GValue *label; lst_model = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list))); - iter = g_new0 (GtkTreeIter, 1); - gtk_tree_store_append (lst_model, iter, NULL); + if (iter == NULL) { + iter = g_new0 (GtkTreeIter, 1); + gtk_tree_store_append (lst_model, iter, NULL); + } + label = g_new0 (GValue, 1); label = g_value_init (label, G_TYPE_STRING); label->data[0].v_pointer = g_strdup (signal->name); gtk_tree_store_set_value (lst_model, iter, 0, label); @@ -222,32 +265,52 @@ } else { g_object_set (G_OBJECT (button), "label", _("No"), NULL); } } -static void -glade_signal_editor_add_cb (GladeSignalEditor *editor) +static gboolean +glade_signal_editor_validate_entries (GladeSignalEditor *editor) { - GladeWidgetSignal *signal; + GtkWidget *dialog; gchar *name_text; gchar *handler_text; - GtkWidget *dialog; - - g_return_if_fail (editor != NULL); - g_return_if_fail (editor->widget != NULL); + GList *list; + gboolean found; + GladeWidgetClassSignal *signal; name_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_name_entry)); if (!strcmp (name_text, "")) { /* FIXME: Should fix to use Gnome APIs or a glade dialog */ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, - _("Please enter a signal name")); + _("Please enter a valid signal name")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); - return; + return FALSE; + } + + /* check that signal exists */ + found = FALSE; + for (list = editor->class->signals; list != NULL; list = list->next) { + signal = (GladeWidgetClassSignal *) list->data; + if (!strcmp (signal->name, name_text)) { + found = TRUE; + break; + } + } + if (found == FALSE) { + /* FIXME: Should fix to use Gnome APIs or a glade dialog */ + dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + _("Please enter a valid signal name")); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + return FALSE; } handler_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_handler_entry)); if (!strcmp (handler_text, "")) { /* FIXME: Should fix to use Gnome APIs or a glade dialog */ @@ -256,185 +319,181 @@ GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, _("Please enter a signal handler")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); - return; + return FALSE; } - - signal = g_new0 (GladeWidgetSignal, 1); - signal->name = g_strdup (name_text); - signal->handler = g_strdup (handler_text); - signal->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON - (editor->signal_after_button)); - editor->widget->signals = g_list_append (editor->widget->signals, signal); - - glade_signal_editor_append_signal (editor, signal); + return TRUE; +} + +static void +glade_signal_editor_clear_entries (GladeSignalEditor *editor) +{ + g_return_if_fail (editor != NULL); + gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), ""); gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), ""); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->signal_after_button), FALSE); } -static void -glade_signal_editor_update_cb (GladeSignalEditor *editor) +static GladeWidgetSignal * +glade_signal_editor_get_signal_at_iter (GladeSignalEditor *editor, GtkTreeIter *iter) { - GtkTreeIter iter; - GtkTreeSelection *select; + GladeWidgetSignal *signal; GtkTreeModel *model; - GladeWidgetSignal signal; - GladeWidgetSignal *sig; GValue *label; + + signal = g_new0 (GladeWidgetSignal, 1); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list)); + + label = g_new0 (GValue, 1); + gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 0, label); + signal->name = (gchar *) label->data[0].v_pointer; + + label = g_new0 (GValue, 1); + gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 1, label); + signal->handler = (gchar *) label->data[0].v_pointer; + + label = g_new0 (GValue, 1); + gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 2, label); + if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes"))) + signal->after = TRUE; + else + signal->after = FALSE; + + return signal; +} + +/* glade_signal_editor_update_widget_signal () is used to add signal to a + * widget's internal list of signals. If old_signal is NULL, the signal + * is appended to the list, however if a signal is supplied as old_signal, + * the func will find that signal and update it rather than add a new signal + */ +static GladeWidgetSignal * +glade_signal_editor_update_widget_signal (GladeSignalEditor *editor, + GladeWidgetSignal *old_signal) +{ + GladeWidgetSignal *signal = NULL; + GladeWidgetSignal *sigtmp; GList *list; - gchar *name_text; - gchar *handler_text; - GtkWidget *dialog; + + if (old_signal == NULL) { + signal = g_new0 (GladeWidgetSignal, 1); + editor->widget->signals = g_list_append (editor->widget->signals, signal); + } else { + for (list = editor->widget->signals; list != NULL; list = list->next) { + sigtmp = (GladeWidgetSignal *) list->data; + if (!strcmp (sigtmp->name, old_signal->name) && + !strcmp (sigtmp->handler, old_signal->handler) && + sigtmp->after == old_signal->after) { + signal = sigtmp; + break; + } + } + } + + g_return_val_if_fail (signal != NULL, NULL); + + signal->name = g_strdup ((gchar *) gtk_entry_get_text (GTK_ENTRY + (editor->signal_name_entry))); + signal->handler = g_strdup ((gchar *) gtk_entry_get_text (GTK_ENTRY + (editor->signal_handler_entry))); + signal->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON + (editor->signal_after_button)); + + return signal; +} + +static void +glade_signal_editor_add_cb (GladeSignalEditor *editor) +{ + GladeWidgetSignal *signal; g_return_if_fail (editor != NULL); g_return_if_fail (editor->widget != NULL); - name_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_name_entry)); - if (!strcmp (name_text, "")) { - /* FIXME: Should fix to use Gnome APIs or a glade dialog */ - dialog = gtk_message_dialog_new (NULL, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_CLOSE, - _("Please enter a signal name")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + if (!glade_signal_editor_validate_entries (editor)) return; - } - handler_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_handler_entry)); - if (!strcmp (handler_text, "")) { - /* FIXME: Should fix to use Gnome APIs or a glade dialog */ - dialog = gtk_message_dialog_new (NULL, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_CLOSE, - _("Please enter a signal handler")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + signal = glade_signal_editor_update_widget_signal (editor, NULL); + glade_signal_editor_update_signal (editor, signal, NULL); + + glade_signal_editor_clear_entries (editor); +} + +static void +glade_signal_editor_update_cb (GladeSignalEditor *editor) +{ + GtkTreeIter iter; + GtkTreeSelection *select; + GtkTreeModel *model; + GladeWidgetSignal *old_sig; + GladeWidgetSignal *new_sig; + + g_return_if_fail (editor != NULL); + g_return_if_fail (editor->widget != NULL); + + if (!glade_signal_editor_validate_entries (editor)) return; - } select = gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->signals_list)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list)); - if (gtk_tree_selection_get_selected (select, &model, &iter)) { - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 0, label); - signal.name = (gchar *) label->data[0].v_pointer; - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 1, label); - signal.handler = (gchar *) label->data[0].v_pointer; - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 2, label); - if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes"))) - signal.after = TRUE; - else - signal.after = FALSE; - - label = g_new0 (GValue, 1); - label = g_value_init (label, G_TYPE_STRING); - label->data[0].v_pointer = name_text; - gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 0, label); - label->data[0].v_pointer = handler_text; - gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 1, label); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->signal_after_button))) { - label->data[0].v_pointer = _("Yes"); - } else { - label->data[0].v_pointer = _("No"); - } - gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 2, label); + if (gtk_tree_selection_get_selected (select, &model, &iter) == TRUE) { + old_sig = glade_signal_editor_get_signal_at_iter (editor, &iter); - list = editor->widget->signals; - for ( ; list != NULL; list = list->next) { - sig = (GladeWidgetSignal *) list->data; - if (!strcmp (sig->name, signal.name) && - !strcmp (sig->handler, signal.handler) && - sig->after == signal.after) { - sig->name = g_strdup (name_text); - sig->handler = g_strdup (handler_text); - sig->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->signal_after_button)); - break; - } - } + new_sig = glade_signal_editor_update_widget_signal (editor, old_sig); + glade_signal_editor_update_signal (editor, new_sig, &iter); } } static void glade_signal_editor_delete_cb (GladeSignalEditor *editor) { GtkTreeIter iter; GtkTreeSelection *select; GtkTreeModel *model; - GladeWidgetSignal signal; + GladeWidgetSignal *signal; GladeWidgetSignal *sig; - GValue *label; GList *list; g_return_if_fail (editor != NULL); g_return_if_fail (editor->widget != NULL); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->signals_list)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list)); - if (gtk_tree_selection_get_selected (select, &model, &iter)) { - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 0, label); - signal.name = (gchar *) label->data[0].v_pointer; - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 1, label); - signal.handler = (gchar *) label->data[0].v_pointer; - label = g_new0 (GValue, 1); - gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 2, label); - if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes"))) - signal.after = TRUE; - else - signal.after = FALSE; + if (gtk_tree_selection_get_selected (select, &model, &iter) == TRUE) { + signal = glade_signal_editor_get_signal_at_iter (editor, &iter); gtk_tree_store_remove (GTK_TREE_STORE (model), &iter); list = editor->widget->signals; for ( ; list != NULL; list = list->next) { sig = (GladeWidgetSignal *) list->data; - if (!strcmp (sig->name, signal.name) && - !strcmp (sig->handler, signal.handler) && - sig->after == signal.after) { + if (!strcmp (sig->name, signal->name) && + !strcmp (sig->handler, signal->handler) && + sig->after == signal->after) { editor->widget->signals = g_list_remove (editor->widget->signals, list->data); break; } } + + glade_signal_editor_clear_entries (editor); } } static void glade_signal_editor_clear_cb (GladeSignalEditor *editor) { g_return_if_fail (editor != NULL); - g_return_if_fail (editor->widget != NULL); - gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), ""); - gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), ""); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (editor->signal_after_button), FALSE); -} - -static void -glade_signal_editor_append_column (GtkTreeView *view, const gchar *name) -{ - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes (name, renderer, - "text", 0, NULL); - gtk_tree_view_append_column (view, column); + glade_signal_editor_clear_entries (editor); } static GtkWidget * glade_signal_editor_construct_signals_list (GladeSignalEditor *editor) { @@ -448,13 +507,13 @@ view_widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model)); view = GTK_TREE_VIEW (view_widget); g_object_unref (G_OBJECT (model)); - glade_signal_editor_append_column (view, _("Signal")); - glade_signal_editor_append_column (view, _("Handler")); - glade_signal_editor_append_column (view, _("After")); + glade_signal_editor_append_column (view, 0, _("Signal")); + glade_signal_editor_append_column (view, 1, _("Handler")); + glade_signal_editor_append_column (view, 2, _("After")); selection = gtk_tree_view_get_selection (view); gtk_tree_selection_set_select_function (selection, (GtkTreeSelectionFunc) glade_signal_editor_list_select_cb, editor, NULL); @@ -514,11 +573,11 @@ editor->signal_handler_entry = glade_signal_editor_table_append_entry (table, hbox, 1); /* The Yes/No button */ hbox = gtk_hbox_new (FALSE, 0); - button = gtk_toggle_button_new (); + button = gtk_toggle_button_new_with_label (_("No")); gtk_signal_connect (GTK_OBJECT (button), "toggled", GTK_SIGNAL_FUNC (glade_signal_editor_after_cb), editor); gtk_box_pack_start_defaults (GTK_BOX (hbox), button); gtk_table_attach_defaults (GTK_TABLE (table), hbox, 1, 2, 2, 3); @@ -592,14 +651,14 @@ editor->signals_list = glade_signal_editor_construct_signals_list (editor); gtk_container_add (GTK_CONTAINER (scroll), editor->signals_list); table = glade_signal_editor_construct_table (editor); - gtk_box_pack_start_defaults (GTK_BOX (vbox), table); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); hbox = glade_signal_editor_construct_buttons (editor); - gtk_box_pack_start_defaults (GTK_BOX (vbox), hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show_all (editor->main_window); } @@ -622,19 +681,10 @@ glade_signal_editor_construct (editor); return editor; } -static void -glade_signal_editor_set_contents (GladeSignalEditor *editor) -{ - gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), ""); - gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), ""); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (editor->signal_after_button), FALSE); -} - void glade_signal_editor_load_widget (GladeSignalEditor *editor, GladeWidget *widget) { GladeWidgetSignal *signal; GtkTreeStore *model; @@ -644,14 +694,14 @@ gtk_tree_store_clear (model); editor->widget = widget; editor->class = widget->class; - glade_signal_editor_set_contents (editor); + glade_signal_editor_clear_entries (editor); list = widget->signals; for (; list != NULL; list = list->next) { signal = list->data; - glade_signal_editor_append_signal (editor, signal); + glade_signal_editor_update_signal (editor, signal, NULL); } } Index: src/glade-signal-editor.h =================================================================== RCS file: /cvs/gnome/glade2/src/glade-signal-editor.h,v retrieving revision 1.2 diff -u -5 -r1.2 glade-signal-editor.h --- src/glade-signal-editor.h 2001/06/29 04:21:37 1.2 +++ src/glade-signal-editor.h 2001/07/01 07:19:56 @@ -5,13 +5,12 @@ G_BEGIN_DECLS #define GLADE_SIGNAL_EDITOR(e) ((GladeSignalEditor *)e) #define GLADE_IS_SIGNAL_EDITOR(e) (e != NULL) -/* The GladeSignalEditor is used to - * - * +/* The GladeSignalEditor is used to house the signal editor interface and + * associated functionality. */ struct _GladeSignalEditor { GtkWidget *main_window; /* A vbox where all the widgets are added */ @@ -20,11 +19,11 @@ GtkWidget *signals_list; GtkWidget *signal_name_entry; GtkWidget *signal_handler_entry; - GtkWidget *signal_after_button; /* A GtkToggleButton */ + GtkWidget *signal_after_button; /* Buttons */ GtkWidget *add_button; GtkWidget *update_button; GtkWidget *delete_button; Index: src/glade-widget-class.c =================================================================== RCS file: /cvs/gnome/glade2/src/glade-widget-class.c,v retrieving revision 1.4 diff -u -5 -r1.4 glade-widget-class.c --- src/glade-widget-class.c 2001/06/29 05:27:50 1.4 +++ src/glade-widget-class.c 2001/07/01 07:19:57 @@ -110,19 +110,14 @@ guint count; guint *sig_ids; guint num_signals; GladeWidgetClassSignal *cur; - signals = NULL; - /* FIXME: This should work. Apparently this is because you need to have an - * instance of an object before you can get its type?!? need to fix this - * to use class->type when bighead applys his patch. - shane - */ - type = g_type_from_name (class->name); - - g_return_val_if_fail (type != 0, NULL); + g_return_val_if_fail (class->type != 0, NULL); + signals = NULL; + type = class->type; while (g_type_is_a (type, GTK_TYPE_OBJECT)) { if (G_TYPE_IS_INSTANTIATABLE (type) || G_TYPE_IS_INTERFACE (type)) { sig_ids = g_signal_list_ids (type, &num_signals); for (count = 0; count < num_signals; count++) {