gtklean is a C header file that is generated directly from the GTK+
header files. The standard GTK+ C API contains much visual clutter and is too
error prone. gtklean.h
provides a cleaner, safer C API for GTK+.
gtklean is freely available under the GNU General Public License.
Eliminates the need for ``gtk_''
in front of every
function name.
Automatically inserts type checking and casting macros such as
GTK_WIDGET()
and GTK_SIGNAL_FUNC()
where
needed so you can't forget them and you never have to see them.
Replaces string literals for signal names with C identifiers to replace run time errors with compile time errors.
Automatically generated from the GTK+ header files using a perl
script, make_gtklean, so gtklean.h
can be
recreated for each new version of GTK+ that you install.
In short, gtklean lets you write code like this:
#include "gtklean.h" void destroy_handler(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int delete_handler(GtkWidget *widget, GdkEvent *event, gpointer data) { return 0; } int main(int ac, char **av) { GtkWidget *top_widget, *box, *label, *separator_item; GtkWidget *menu_bar, *file_item, *file_menu, *exit_item; gtk_init(&ac, &av); top_widget = window_new(GTK_WINDOW_TOPLEVEL); box = vbox_new(0, 0); menu_bar = menu_bar_new(); file_item = menu_item_new_with_label("File"); file_menu = menu_new(); separator_item = menu_item_new(); exit_item = menu_item_new_with_label("Exit"); label = label_new("GTK+ is fun"); widget_set_usize(label, 400, 350); window_set_title(top_widget, "new_gtkfun"); container_set_border_width(top_widget, 0); widget_set_name(top_widget, "new_gtkfun"); signal_connect(exit_item, activate, destroy_handler, NULL); signal_connect(top_widget, delete_event, delete_handler, NULL); signal_connect(top_widget, destroy, destroy_handler, NULL); container_add(top_widget, box); box_pack_start_defaults(box, menu_bar); box_pack_start_defaults(box, label); menu_bar_append(menu_bar, file_item); menu_item_set_submenu(file_item, file_menu); menu_append(file_menu, separator_item); menu_append(file_menu, exit_item); widget_show_all(top_widget); gtk_main(); return 0; }
Instead of code like this:
#include <gtk/gtk.h> void destroy_handler(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int delete_handler(GtkWidget *widget, GdkEvent *event, gpointer data) { return 0; } int main(int ac, char **av) { GtkWidget *top_widget, *box, *label, *separator_item; GtkWidget *menu_bar, *file_item, *file_menu, *exit_item; gtk_init(&ac, &av); top_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); box = gtk_vbox_new(0, 0); menu_bar = gtk_menu_bar_new(); file_item = gtk_menu_item_new_with_label("File"); file_menu = gtk_menu_new(); separator_item = gtk_menu_item_new(); exit_item = gtk_menu_item_new_with_label("Exit"); label = gtk_label_new("GTK+ is fun"); gtk_widget_set_usize(GTK_WIDGET(label), 400, 350); gtk_window_set_title(GTK_WINDOW(top_widget), "new_gtkfun"); gtk_container_set_border_width(GTK_CONTAINER(top_widget), 0); gtk_widget_set_name(GTK_WIDGET(top_widget), "new_gtkfun"); gtk_signal_connect(GTK_OBJECT(exit_item), "activate", GTK_SIGNAL_FUNC(destroy_handler), NULL); gtk_signal_connect(GTK_OBJECT(top_widget), "delete_event", GTK_SIGNAL_FUNC(delete_handler), NULL); gtk_signal_connect(GTK_OBJECT(top_widget), "destroy", GTK_SIGNAL_FUNC(destroy_handler), NULL); gtk_container_add(GTK_CONTAINER(top_widget), GTK_WIDGET(box)); gtk_box_pack_start_defaults(GTK_BOX(box), GTK_WIDGET(menu_bar)); gtk_box_pack_start_defaults(GTK_BOX(box), GTK_WIDGET(label)); gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), GTK_WIDGET(file_item)); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), GTK_WIDGET(file_menu)); gtk_menu_append(GTK_MENU(file_menu), GTK_WIDGET(separator_item)); gtk_menu_append(GTK_MENU(file_menu), GTK_WIDGET(exit_item)); gtk_widget_show_all(GTK_WIDGET(top_widget)); gtk_main(); return 0; }
For more information read the Documentation section.
Currently, gtklean is only known to work with GTK+ 1.2.8 and 1.2.10 but it probably works with 2.x as well (although there will probably be missing signal names).
There is a README file and the manpage for make_gtklean.
README | - | Description, Install, Requirements, Copying, History, Bugs, TODO |
make_gtklean(1) |
- | generate gtklean.h directly from installed GTK+ header files |
Latest: |
gtklean-20010623.tar.gz
|
(MD5 0d65740bacab72596d788aed4c58612e )
|
gtklean-20000621.tar.gz
|
(MD5 672b415e2d1734b0c68f0ea44552ebc3 )
|
If you'd like to be kept up to date with gtklean releases or have questions or suggestions, you can join one or more of the following mailing lists.
gtklean-announce@raf.org | (Announcements) | |
gtklean-users@raf.org | (User forum) | |
gtklean-dev@raf.org | (Development forum) |
To subscribe to any of these mailing lists, send a mail message to listname-request@raf.org with subscribe as the message body.
E.g.
$ echo subscribe | mail gtklean-announce-request@raf.org $ echo subscribe | mail gtklean-users-request@raf.org $ echo subscribe | mail gtklean-dev-request@raf.org
Or you can send a mail message to majordomo@raf.org with subscribe listname in the message body. This way, you can include multiple subscribe commands to subscribe to multiple lists at the same time.
E.g.
$ mail majordomo@raf.org subscribe gtklean-announce subscribe gtklean-users subscribe gtklean-dev .
A digest version of each mailing list is also available. Subscribe to digests as above but append -digest to the listname.
E.g.
$ echo subscribe | mail gtklean-announce-digest-request@raf.org $ echo subscribe | mail gtklean-users-digest-request@raf.org $ echo subscribe | mail gtklean-dev-digest-request@raf.org
Or
$ mail majordomo@raf.org subscribe gtklean-announce-digest subscribe gtklean-users-digest subscribe gtklean-dev-digest .