X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fdemo-Gtk-conf.c;h=23f5944dea4ec7e8de44f208a3d5824683996c61;hb=40eacb5812ef7c0e3374fb139afbb4f5bc8bbfb5;hp=02dad2ba03282455e4073837118c0b6b17cefb5f;hpb=cccbddbc4140cf9a06d7d95cc5c0ca36eb5d6e28;p=xscreensaver diff --git a/driver/demo-Gtk-conf.c b/driver/demo-Gtk-conf.c index 02dad2ba..23f5944d 100644 --- a/driver/demo-Gtk-conf.c +++ b/driver/demo-Gtk-conf.c @@ -1,5 +1,5 @@ /* demo-Gtk-conf.c --- implements the dynamic configuration dialogs. - * xscreensaver, Copyright (c) 2001 Jamie Zawinski + * xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -16,6 +16,8 @@ #if defined(HAVE_GTK) && defined(HAVE_XML) /* whole file */ +#include + #include #ifdef HAVE_UNISTD_H @@ -26,20 +28,47 @@ #include #include -#include /* XML */ +/* + * Both of these workarounds can be removed when support for ancient + * libxml versions is dropped. versions 1.8.11 and 2.3.4 provide the + * correct fixes. + */ + +/* + * Older libxml polluted the global headerspace, while libxml2 fixed + * this. To support both old and recent libxmls, we have this + * workaround. + */ +#ifdef HAVE_OLD_XML_HEADERS +# include +#else /* ! HAVE_OLD_XML_HEADERS */ +# include +#endif /* HAVE_OLD_XML_HEADERS */ + +/* + * handle non-native spelling mistakes in earlier versions and provide + * the source-compat fix for this that may not be in older versions. + */ +#ifndef xmlChildrenNode +# if LIBXML_VERSION >= 20000 +# define xmlChildrenNode children +# define xmlRootNode children +# else +# define xmlChildrenNode childs +# define xmlRootNode root +# endif /* LIBXML_VERSION */ +#endif /* xmlChildrenNode */ #include #include "demo-Gtk-conf.h" -#if (LIBXML_VERSION >= 20000) /* illiteracy finally fixed */ -# define childs children -# define root children -#endif extern const char *blurb (void); +const char *hack_configuration_path = HACK_CONFIGURATION_PATH; + static gboolean debug_p = FALSE; @@ -289,10 +318,10 @@ make_parameter (const char *filename, xmlNodePtr node) } else if (p->type == DESCRIPTION) { - if (node->childs && - node->childs->type == XML_TEXT_NODE && - !node->childs->next) - p->string = strdup (node->childs->content); + if (node->xmlChildrenNode && + node->xmlChildrenNode->type == XML_TEXT_NODE && + !node->xmlChildrenNode->next) + p->string = strdup (node->xmlChildrenNode->content); } p->id = xmlGetProp (node, "id"); @@ -323,7 +352,7 @@ make_parameter (const char *filename, xmlNodePtr node) if (p->type == SELECT) { xmlNodePtr kids; - for (kids = node->childs; kids; kids = kids->next) + for (kids = node->xmlChildrenNode; kids; kids = kids->next) { parameter *s = make_select_option (filename, kids); if (s) @@ -558,7 +587,7 @@ make_parameters_1 (const char *filename, xmlNodePtr node, if (row) (*row)++; - list2 = make_parameters_1 (filename, node->childs, box, 0); + list2 = make_parameters_1 (filename, node->xmlChildrenNode, box, 0); if (list2) list = g_list_concat (list, list2); } @@ -588,7 +617,7 @@ make_parameters (const char *filename, xmlNodePtr node, GtkWidget *parent) { if (node->type == XML_ELEMENT_NODE && !strcmp (node->name, "screensaver")) - return make_parameters_1 (filename, node->childs, parent, &row); + return make_parameters_1 (filename, node->xmlChildrenNode, parent, &row); } return 0; } @@ -640,17 +669,17 @@ make_adjustment (const char *filename, parameter *p) } #endif /* 0 */ - if (p->integer_p) - { - si = (int) (si + 0.5); - pi = (int) (pi + 0.5); - if (si < 1) si = 1; - if (pi < 1) pi = 1; + si = (int) (si + 0.5); + pi = (int) (pi + 0.5); + if (si < 1) si = 1; + if (pi < 1) pi = 1; - if (range <= 500) si = 1; - } - return GTK_ADJUSTMENT (gtk_adjustment_new (value, p->low, p->high, - si, pi, pi)); + if (range <= 500) si = 1; + + return GTK_ADJUSTMENT (gtk_adjustment_new (value, + p->low, + p->high + 1, + si, pi, 1)); } @@ -673,7 +702,7 @@ make_parameter_widget (const char *filename, { if (label) { - GtkWidget *w = gtk_label_new (label); + GtkWidget *w = gtk_label_new (_(label)); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); gtk_widget_show (w); @@ -697,9 +726,9 @@ make_parameter_widget (const char *filename, } case FILENAME: { - GtkWidget *L = gtk_label_new (label ? label : ""); + GtkWidget *L = gtk_label_new (label ? _(label) : ""); GtkWidget *entry = gtk_entry_new (); - GtkWidget *button = gtk_button_new_with_label ("Browse..."); + GtkWidget *button = gtk_button_new_with_label (_("Browse...")); gtk_widget_show (entry); gtk_widget_show (button); p->widget = entry; @@ -743,7 +772,7 @@ make_parameter_widget (const char *filename, if (label) { - labelw = gtk_label_new (label); + labelw = gtk_label_new (_(label)); gtk_label_set_justify (GTK_LABEL (labelw), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (labelw), 0.0, 0.5); gtk_widget_show (labelw); @@ -799,7 +828,7 @@ make_parameter_widget (const char *filename, if (p->low_label) { - GtkWidget *w = gtk_label_new (p->low_label); + GtkWidget *w = gtk_label_new (_(p->low_label)); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); gtk_widget_show (w); @@ -811,7 +840,7 @@ make_parameter_widget (const char *filename, } gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM); - gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); + gtk_scale_set_draw_value (GTK_SCALE (scale), debug_p); gtk_scale_set_digits (GTK_SCALE (scale), (p->integer_p ? 0 : 2)); if (row) gtk_table_attach (GTK_TABLE (parent), scale, 1, 2, @@ -824,7 +853,7 @@ make_parameter_widget (const char *filename, if (p->high_label) { - GtkWidget *w = gtk_label_new (p->high_label); + GtkWidget *w = gtk_label_new (_(p->high_label)); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); gtk_widget_show (w); @@ -848,7 +877,7 @@ make_parameter_widget (const char *filename, if (label) { - GtkWidget *w = gtk_label_new (label); + GtkWidget *w = gtk_label_new (_(label)); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); gtk_widget_show (w); @@ -877,7 +906,7 @@ make_parameter_widget (const char *filename, } case BOOLEAN: { - p->widget = gtk_check_button_new_with_label (label); + p->widget = gtk_check_button_new_with_label (_(label)); if (row) gtk_table_attach (GTK_TABLE (parent), p->widget, 0, 3, *row, *row + 1, @@ -894,7 +923,7 @@ make_parameter_widget (const char *filename, if (label && row) { - GtkWidget *w = gtk_label_new (label); + GtkWidget *w = gtk_label_new (_(label)); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); gtk_widget_show (w); @@ -906,7 +935,7 @@ make_parameter_widget (const char *filename, for (opts = p->options; opts; opts = opts->next) { parameter *s = (parameter *) opts->data; - GtkWidget *i = gtk_menu_item_new_with_label (s->label); + GtkWidget *i = gtk_menu_item_new_with_label (_(s->label)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (menu), i); } @@ -963,7 +992,7 @@ file_sel_ok (GtkWidget *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); GtkWidget *dialog = button; - char *path; + const char *path; while (dialog->parent) dialog = dialog->parent; gtk_widget_hide (dialog); @@ -989,9 +1018,9 @@ static void browse_button_cb (GtkButton *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); - char *text = gtk_entry_get_text (GTK_ENTRY (entry)); + const char *text = gtk_entry_get_text (GTK_ENTRY (entry)); GtkFileSelection *selector = - GTK_FILE_SELECTION (gtk_file_selection_new ("Select file.")); + GTK_FILE_SELECTION (gtk_file_selection_new (_("Select file."))); gtk_file_selection_set_filename (selector, text); gtk_signal_connect (GTK_OBJECT (selector->ok_button), @@ -1157,7 +1186,7 @@ parameter_to_switch (parameter *p) char buf[255]; char *s1; float value = (p->invert_p - ? invert_range (adj->lower, adj->upper, adj->value) + ? invert_range (adj->lower, adj->upper, adj->value) - 1 : adj->value); if (value == p->value) /* same as default */ @@ -1515,7 +1544,7 @@ parameter_set_switch (parameter *p, gpointer value) if (1 == sscanf ((char *) value, "%f %c", &f, &c)) { if (p->invert_p) - f = invert_range (adj->lower, adj->upper, f); + f = invert_range (adj->lower, adj->upper, f) - 1; gtk_adjustment_set_value (adj, f); } break; @@ -1657,7 +1686,7 @@ get_description (GList *parms) d[--L] = 0; } - return d; + return _(d); } } @@ -1669,7 +1698,7 @@ static conf_data * load_configurator_1 (const char *program, const char *arguments, gboolean verbose_p) { - const char *dir = HACK_CONFIGURATION_PATH; + const char *dir = hack_configuration_path; int L = strlen (dir); char *file; char *s; @@ -1731,7 +1760,7 @@ load_configurator_1 (const char *program, const char *arguments, gtk_container_set_border_width (GTK_CONTAINER (table), 8); gtk_widget_show (table); - parms = make_parameters (file, doc->root, table); + parms = make_parameters (file, doc->xmlRootNode, table); xmlFreeDoc (doc); @@ -1806,6 +1835,7 @@ load_configurator (const char *full_command_line, gboolean verbose_p) char *prog; char *args; conf_data *cd; + debug_p = verbose_p; split_command_line (full_command_line, &prog, &args); cd = load_configurator_1 (prog, args, verbose_p); free (prog);