/* Příklad vytvoření nového widgetu (upravený widget GtkEv z knihy * Havoc Pennington: GTK+/Gnome Application Development). * Tento hlavičkový soubor definuje interface widgetu. */ #ifndef GTKEV_H #define GTKEV_H #include /* GtkEv je widget, který napodobuje program xev: má 2 GDK (a tedy X) okna, v * jednom chytá události, ve druhém je zobrazuje. */ /* Makra pro zjištění typu a přetypování */ #define GTK_TYPE_EV (gtk_ev_get_type()) #define GTK_EV(obj) (GTK_CHECK_CAST((obj), GTK_TYPE_EV, GtkEv)) #define GTK_EV_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass), GTK_TYPE_EV, GtkEvClass)) #define GTK_IS_EV(obj) (GTK_CHECK_TYPE((obj), GTK_TYPE_EV)) #define GTK_IS_EV_CLASS(klass) (GTK_CHECK_CLASS_TYPE((klass), GTK_TYPE_EV)) typedef struct _GtkEvClass GtkEvClass; typedef struct _GtkEv GtkEv; /* Struktura pro widget */ struct _GtkEv { GtkWidget widget; /* Rodičovská struktura musí být první */ GdkWindow *ev_win; /* Okno pro události (vnitřní), vnější okno je widget.window */ GdkRectangle ev_win_rect; /* Oblast překrytá vnitřním oknem */ GdkRectangle list_rect; /* Oblast překrytá seznamem událostí */ GList *list; /* Seznam zachycených událostí */ GList *list_end; /* Konec seznamu */ gint list_len; /* Počet událostí v seznamu */ guint ev_count; /* Celkový počet zachycených událostí */ gboolean constructed; /* Proběhl konstruktor pro objekt */ }; /* Veřejné funkce */ GtkType gtk_ev_get_type(void); /* Identifikátor typu */ GtkWidget *gtk_ev_new(void); /* Vytvoření objektu */ /* Struktura pro třídu */ struct _GtkEvClass { GtkWidgetClass parent_class; /* Rodičovská struktura musí být první */ void (*event_received)(GtkWidget *widget, GdkEventType ev_type, gpointer data); /* Defaultní handler signálu "event_received" */ }; #endif /* GTKEV_H */