gtk2/gtk/maketypes.awk
Tim Janik d07573c090 added gtkaccelmap.sgml. other updates.
Mon Nov 12 23:06:38 2001  Tim Janik  <timj@gtk.org>

        * added gtkaccelmap.sgml. other updates.

Mon Nov 12 23:08:37 2001  Tim Janik  <timj@gtk.org>

	* gtk/maketypes.awk: fix type utils generation on unix.

	* gtk/gtkaccelmap.[hc]: new files, implementing a global accelerator
	registry.

	* gtk/gtkaccelgroup.[hc]: major API/implementation revamp:
	removed GTK_ACCEL_SIGNAL_VISIBLE, gtk_accel_group_get_default,
	gtk_accel_group_get_entry, gtk_accel_group_(un)lock_entry,
	gtk_accel_group_add/remove, gtk_accel_group_handle_add/remove,
	gtk_accel_group_create_add/remove, gtk_accel_group_entries_from_object.
	introduced ::accel_changed signal for change notification, and
	gtk_accel_group_connect/disconnect to connect closures to accel groups.
	made gtk_accel_group_attach/detach and gtk_accel_group_activate private
	functions.
	deprecated gtk_accel_group_ref/unref.

	* gtk/gtkaccellabel.[hc]: changes to make accellabels pay attention
	to accel group changed notification and basically operate on closures.
	removed gtk_accel_label_get_accel_object and
	gtk_accel_label_set_accel_object.
	introduced gtk_accel_label_set_accel_closure, and for convenience,
	gtk_accel_label_set_accel_widget.

	* gtk/gtkitemfactory.[hc]: removed accelerator propagation code
	which mostly moved into gtkaccelmap.[hc].
	removed gtk_item_factory_parse_rc*, gtk_item_factory_dump_*
	and gtk_item_factory_print_func.

	* gtk/gtkmain.c: call _gtk_accel_map_init().

	* gtk/gtkmenuitem.[hc]: introduced gtk_menu_item_set_accel_path(),
	that associates an accelerator path with menu items, through which
	persistent accelerator settings on menu items are enabled.

	* gtk/gtkmenu.[hc]: added gtk_menu_set_accel_path() so accelerator
	paths of menu item can be default constructed to allow installation
	of accelerators on menu items that don't come with an accelerator
	binding by default.

	* gtk/gtksettings.c: fix STRING type rc settings by special casing
	them appropriately in the parser.

	* gtk/gtksignal.[hc]: allow a class function offset of 0 for
	gtk_signal_newv().

	* gtk/gtkwidget.[hc]: accelerator API revamp.
	removed ::accelerator_add/remove signals, gtk_widget_accelerator_signal,
	gtk_widget_accelerators_locked, gtk_widget_remove_accelerators and
	gtk_widget_(un)lock_accelerators.
	accelerators maintained through gtk_widget_add/remove_accelerator()
	are not runtime changable now, the correct sequence to setup a
	widget for runtime changable accelerators is now:
	  gtk_accel_map_add_entry(accel_path, key, mods);
	  _gtk_widget_set_accel_path(widget, accel_path, accel_group);

	* gtk/gtkwindow.[hc]: accelerator changes, proxy and coalesce accel
	group changes (as well as mnemonic changes) through the new signal
	::accels_changed.

Sat Nov 10 12:08:56 2001  Tim Janik  <timj@gtk.org>

	* gtk/gtksettings.c (_gtk_settings_parse_convert): properly handle
	GString->string conversions.
2001-11-13 00:53:47 +00:00

156 lines
3.6 KiB
Awk

BEGIN {
type_name = ""; # GtkEnumType
type_macro = ""; # GTK_TYPE_ENUM_TYPE
type_ident = ""; # _gtk_enum_type
type_counter = 0;
gen_macros = 0;
gen_entries = 0;
gen_vars = 0;
boxed_copy = "";
boxed_free = "";
for (i = 2; i < ARGC; i++)
{
if (ARGV[i] == "macros")
gen_macros = 1;
else if (ARGV[i] == "entries")
gen_entries = 1;
else if (ARGV[i] == "variables")
gen_vars = 1;
ARGV[i] = "";
}
if (gen_macros)
{
printf ("/* type macros, generated by maketypes.awk */\n");
printf ("\n");
printf ("#ifdef G_OS_WIN32\n");
printf ("# ifdef GTK_COMPILATION\n");
printf ("# define GTKTYPEBUILTINS_VAR __declspec(dllexport)\n");
printf ("# else\n");
printf ("# define GTKTYPEBUILTINS_VAR extern __declspec(dllimport)\n");
printf ("# endif\n");
printf ("#else\n");
printf ("# ifdef GTK_COMPILATION\n");
printf ("# define GTKTYPEBUILTINS_VAR\n");
printf ("# else\n");
printf ("# define GTKTYPEBUILTINS_VAR extern\n");
printf ("# endif\n");
printf ("#endif\n");
printf ("\n");
}
else if (gen_entries)
printf ("/* type entries, generated by maketypes.awk */\n\n");
else if (gen_vars)
printf ("/* type variables, generated by maketypes.awk */\n\n");
else
{
printf ("hm? what do you want me to do?\n") > "/dev/stderr";
exit 1;
}
}
function set_type (set_type_1)
{
type_counter += 1;
type_name = set_type_1;
type_macro = "GTK_TYPE_";
tmp = type_name;
# OK, the following is ridiculous, and sed s///g would be far easier
gsub ("[A-Z]", "@&", tmp);
gsub ("[^A-Z]@", "&_", tmp);
gsub ("@", "", tmp);
gsub ("[A-Z][A-Z][A-Z][0-9a-z]", "@&", tmp);
gsub ("@..", "&_", tmp);
gsub ("@", "", tmp);
type_macro = type_macro toupper (tmp);
type_ident = "_" tolower (tmp);
sub ("^GTK_TYPE_GTK_", "GTK_TYPE_", type_macro);
}
function generate (generate_what)
{
if (gen_macros)
{
printf ("GTKTYPEBUILTINS_VAR GtkType %s;\n", type_macro);
}
if (gen_entries)
{
printf (" { \"%s\", &%s,\n", type_name, type_macro);
if (generate_what == "BOXED")
printf (" GTK_TYPE_%s, %s, %s, },\n", generate_what, boxed_copy, boxed_free);
else
printf (" GTK_TYPE_%s, %s_values },\n", generate_what, type_ident);
}
if (gen_vars)
{
printf ("GTKTYPEBUILTINS_VAR GtkType %s = 0;\n", type_macro);
}
}
# skip scheme comments
";" {
sub (";.*", "");
}
# parse keywords
/\(define-enum/ {
if ($2 == "")
printf ("huh? define-enum keyword without arg?\n") > "/dev/stderr";
else
{
set_type($2);
generate("ENUM");
}
}
/\(define-flags/ {
if ($2 == "")
printf ("huh? define-flags keyword without arg?\n") > "/dev/stderr";
else
{
set_type($2);
generate("FLAGS");
}
}
/\(define-boxed/ {
if ($2 == "")
printf ("huh? define-boxed keyword without arg?\n") > "/dev/stderr";
else
{
boxed_copy = "NULL";
boxed_free = "NULL";
set_type($2);
do {
getline;
sub (";.*", "", $0);
} while ($0 ~ /^[ \t]*$/);
tmp_var1 = $1;
if ($0 ~ /\)/) { generate("BOXED"); next; }
do {
getline;
sub (";.*", "", $0);
} while ($0 ~ /^[ \t]*$/);
tmp_var2 = $1;
sub (/\).*/, "", tmp_var2);
if (tmp_var1 ~ /^[_A-Za-z][_A-Za-z0-9]*$/ &&
tmp_var2 ~ /^[_A-Za-z][_A-Za-z0-9]*$/)
{
boxed_copy = tmp_var1;
boxed_free = tmp_var2;
# printf ("read boxed funcs: %s %s\n", boxed_copy, boxed_free) > "/dev/stderr";
}
generate("BOXED");
}
}
END {
if (gen_macros)
printf("\n#define\tGTK_TYPE_N_BUILTINS\t(%u)\n", type_counter);
}