/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ static void gb_combo_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { gboolean value_in_list, ok_if_empty, case_sensitive, arrows, arrows_always; gchar *items; GList *item_list = NULL; value_in_list = gb_widget_input_bool (data, ValueInList); if (data->apply) { gtk_object_set_data (GTK_OBJECT (widget), ValueInList, value_in_list ? "TRUE" : NULL); } ok_if_empty = gb_widget_input_bool (data, OKIfEmpty); if (data->apply) { gtk_object_set_data (GTK_OBJECT (widget), OKIfEmpty, ok_if_empty ? "TRUE" : NULL); } case_sensitive = gb_widget_input_bool (data, Case); if (data->apply) gtk_combo_set_case_sensitive (GTK_COMBO (widget), case_sensitive); arrows = gb_widget_input_bool (data, Arrows); if (data->apply) gtk_combo_set_use_arrows (GTK_COMBO (widget), arrows); arrows_always = gb_widget_input_bool (data, Always); if (data->apply) gtk_combo_set_use_arrows_always (GTK_COMBO (widget), arrows_always); items = gb_widget_input_text (data, Items); if (data->apply) { gchar *pos = items; gchar *items_end = &items[strlen (items)]; while (pos < items_end) { gchar *item_end = strchr (pos, '\n'); if (item_end == NULL) item_end = items_end; *item_end = '\0'; item_list = g_list_append (item_list, pos); pos = item_end + 1; } if (item_list) gtk_combo_set_popdown_strings (GTK_COMBO (widget), item_list); else gtk_list_clear_items (GTK_LIST (GTK_COMBO (widget)->list), 0, -1); g_list_free (item_list); } if (data->action == GB_APPLYING) g_free (items); }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ static void gb_gnome_href_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { gchar *url, *label_text; gboolean focus_on_click; url = gb_widget_input_string (data, HRefURL); if (data->apply) gnome_href_set_url (GNOME_HREF (widget), url && url[0] ? url : ""); label_text = gb_widget_input_text (data, HRefLabel); /* Support the old name we used for the property. */ if (!data->apply && data->action == GB_LOADING) label_text = gb_widget_input_text (data, "label"); if (data->apply) gnome_href_set_text (GNOME_HREF (widget), label_text); if (data->action == GB_APPLYING) g_free (label_text); focus_on_click = gb_widget_input_bool (data, FocusOnClick); if (data->apply) gtk_button_set_focus_on_click (GTK_BUTTON (widget), focus_on_click); }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ static void gb_combo_box_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { gchar *items; gboolean add_tearoffs, focus_on_click; items = gb_widget_input_text (data, Items); if (data->apply) { GtkTreeModel *model; gchar *pos = items; gchar *items_end = &items[strlen (items)]; /* Save a copy so it is easy to get out later. */ gtk_object_set_data_full (GTK_OBJECT (widget), Items, g_strdup (items), g_free); /* Clear the list. */ model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); gtk_list_store_clear (GTK_LIST_STORE (model)); /* Now add the items one at a time. */ while (pos < items_end) { gchar *item_end = strchr (pos, '\n'); if (item_end == NULL) item_end = items_end; *item_end = '\0'; gtk_combo_box_append_text (GTK_COMBO_BOX (widget), pos); if (item_end != items_end) *item_end = '\n'; pos = item_end + 1; } } if (data->action == GB_APPLYING) g_free (items); add_tearoffs = gb_widget_input_bool (data, AddTearoffs); if (data->apply) gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (widget), add_tearoffs); focus_on_click = gb_widget_input_bool (data, FocusOnClick); if (data->apply) gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (widget), focus_on_click); }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ static void gb_option_menu_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { gchar *items; GtkWidget *menu, *menuitem; gint choice; items = gb_widget_input_text (data, Items); if (data->apply) { gchar *pos = items; gchar *items_end = &items[strlen (items)]; menu = gtk_menu_new (); gtk_signal_connect (GTK_OBJECT (menu), "deactivate", GTK_SIGNAL_FUNC (gb_option_menu_on_option_selected), widget); while (pos < items_end) { gchar *item_end = strchr (pos, '\n'); if (item_end == NULL) item_end = items_end; *item_end = '\0'; menuitem = gtk_menu_item_new_with_label (pos); gtk_widget_show (menuitem); gtk_menu_append (GTK_MENU (menu), menuitem); pos = item_end + 1; } gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu); } if (data->action == GB_APPLYING) g_free (items); choice = gb_widget_input_int (data, Choice); if (data->apply) { gtk_option_menu_set_history (GTK_OPTION_MENU (widget), choice); } }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ static void gb_gnome_message_box_set_properties (GtkWidget * widget, GbWidgetSetArgData * data) { GtkWidget *pixmap, *label; gchar *message, *type_name; gboolean auto_close, hide_on_close; get_message_box_widgets (widget, &pixmap, &label); g_return_if_fail (pixmap != NULL); g_return_if_fail (label != NULL); type_name = gb_widget_input_choice (data, MessageBoxType); if (data->apply) { set_message_box_type (widget, pixmap, type_name); } message = gb_widget_input_text (data, Message); if (data->apply) { gtk_label_set_text (GTK_LABEL (label), message); } if (data->action == GB_APPLYING) g_free (message); gb_window_set_standard_properties (widget, data, Title, NULL, Position, Modal, DefaultWidth, DefaultHeight, Shrink, Grow, AutoShrink, WMName, WMClass); auto_close = gb_widget_input_bool (data, AutoClose); if (data->apply) gnome_dialog_set_close (GNOME_DIALOG (widget), auto_close); hide_on_close = gb_widget_input_bool (data, HideOnClose); if (data->apply) gnome_dialog_close_hides (GNOME_DIALOG (widget), hide_on_close); }
/* * Sets the properties of the widget. This is used for both applying the * properties changed in the property editor, and also for loading. */ void gb_label_set_standard_properties (GtkWidget * widget, GbWidgetSetArgData * data, const char *label_p, const char *use_underline_p, const char *use_markup_p, const char *justify_p, const char *wrap_p, const char *selectable_p, const char *xalign_p, const char *yalign_p, const char *xpad_p, const char *ypad_p, const char *focus_target_p) { gchar *label, *justify, *accel_target; const gchar *label_text; gfloat xalign, yalign; gint xpad, ypad, i; gboolean wrap, selectable, set_alignment = FALSE, set_padding = FALSE; gboolean use_underline, use_markup; gboolean set_label = FALSE; use_underline = gb_widget_input_bool (data, use_underline_p); if (data->apply) gtk_label_set_use_underline (GTK_LABEL (widget), use_underline); use_markup = gb_widget_input_bool (data, use_markup_p); if (data->apply) { set_label = TRUE; gtk_object_set_data (GTK_OBJECT (widget), use_markup_p, GINT_TO_POINTER (use_markup)); } label = gb_widget_input_text (data, label_p); if (data->apply) { set_label = TRUE; label_text = label; } else { label_text = gtk_label_get_label (GTK_LABEL (widget)); } if (set_label) { gboolean prev_use_markup; use_markup = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (widget), use_markup_p)); /* We try to parse the markup here, and if it isn't valid, we will turn use_markup off and show it as plain text. */ if (use_markup) { GError *error = NULL; gunichar accel_marker = 0; PangoAttrList *attrs = NULL; gunichar accel_char = 0; gchar *text = NULL; if (gtk_label_get_use_underline (GTK_LABEL (widget))) accel_marker = '_'; /* We check it is valid markup. If it isn't we will set "use_markup" to FALSE. Note that we don't need attrs, text, or accel_char but it seems to crash otherwise. */ if (!pango_parse_markup (label_text, -1, accel_marker, &attrs, &text, &accel_char, &error)) { use_markup = FALSE; g_error_free (error); } else { if (attrs) pango_attr_list_unref (attrs); g_free (text); } } /* If we are turning use_markup off, we want to do that before setting the text. If we are turning it on, we want to do it after. */ prev_use_markup = gtk_label_get_use_markup (GTK_LABEL (widget)); if (!use_markup && prev_use_markup) gtk_label_set_use_markup (GTK_LABEL (widget), use_markup); gtk_label_set_label (GTK_LABEL (widget), label_text); if (use_markup && !prev_use_markup) gtk_label_set_use_markup (GTK_LABEL (widget), use_markup); } if (data->action == GB_APPLYING) g_free (label); justify = gb_widget_input_choice (data, justify_p); if (data->apply) { for (i = 0; i < sizeof (GbJustifyValues) / sizeof (GbJustifyValues[0]); i++) { if (!strcmp (justify, GbJustifyChoices[i]) || !strcmp (justify, GbJustifySymbols[i])) { gtk_label_set_justify (GTK_LABEL (widget), GbJustifyValues[i]); break; } } } wrap = gb_widget_input_bool (data, wrap_p); if (data->apply) gtk_label_set_line_wrap (GTK_LABEL (widget), wrap); selectable = gb_widget_input_bool (data, selectable_p); if (data->apply) gtk_label_set_selectable (GTK_LABEL (widget), selectable); xalign = gb_widget_input_float (data, xalign_p); if (data->apply) set_alignment = TRUE; else xalign = GTK_MISC (widget)->xalign; yalign = gb_widget_input_float (data, yalign_p); if (data->apply) set_alignment = TRUE; else yalign = GTK_MISC (widget)->yalign; if (set_alignment) gtk_misc_set_alignment (GTK_MISC (widget), xalign, yalign); xpad = gb_widget_input_int (data, xpad_p); if (data->apply) set_padding = TRUE; else xpad = GTK_MISC (widget)->xpad; ypad = gb_widget_input_int (data, ypad_p); if (data->apply) set_padding = TRUE; else ypad = GTK_MISC (widget)->ypad; if (set_padding) gtk_misc_set_padding (GTK_MISC (widget), xpad, ypad); /* Labels not in buttons may have a focus target widget. */ accel_target = gb_widget_input_combo (data, focus_target_p); if (data->apply) { if (!gb_label_find_mnemonic_widget (widget)) { if (!strcmp (accel_target, _("Auto"))) accel_target = NULL; gtk_object_set_data_full (GTK_OBJECT (widget), focus_target_p, g_strdup (accel_target), accel_target ? g_free : NULL); } } }