Manuel développeur — gtk4sermo

1. Architecture

gtk4sermo/
├── src/
│   ├── gtkdialog.c + gtk3d.h          # Point d'entrée
│   ├── safe_exec.c/.h          # Wrappers sécurisés
│   ├── automaton.c/.h          # Moteur AST → widgets
│   ├── gtkdialog_parser.y          # Parser Bison
│   ├── gtkdialog_lexer.l           # Lexer Flex
│   ├── variables.c/.h          # Gestion variables
│   ├── widgets.c/.h            # Dispatch widgets
│   └── widget_*.c/.h           # Un fichier par widget
├── configure.in
└── Makefile.am

2. Ajouter un nouveau widget

2.1 Constante (automaton.h)

#define WIDGET_MYWIDGET  0x00D00000

2.2 Header (widget_mywidget.h)

#ifndef WIDGET_MYWIDGET_H
#define WIDGET_MYWIDGET_H
void       widget_mywidget_clear(variable *var);
GtkWidget *widget_mywidget_create(AttributeSet *Attr, tag_attr *attr, gint Type);
gchar     *widget_mywidget_envvar_construct(GtkWidget *widget);
void       widget_mywidget_refresh(variable *var);
#endif

2.3 Dispatch (widgets.c)

// Dans widget_get_text_value() :
case WIDGET_MYWIDGET:
    return widget_mywidget_envvar_construct(widget);

// Dans widgets_to_str() :
case WIDGET_MYWIDGET:
    type = "MYWIDGET"; break;

2.4 Parser (gtkdialog_lexer.l)

"mywidget"   { return MYWIDGET; }

2.5 Makefile.am

gtk4sermo_SOURCES = ... \
    widget_mywidget.c widget_mywidget.h

3. Toolkit — notes spécifiques

gtk4-compat.h (65+ shims GTK3→GTK4) force-inclus via -include

API de référence : docs.gtk.org/gtk4

4. Sécurité — règles obligatoires

5. Vérification syntaxe

gcc -fsyntax-only -std=c11 \
    $(pkg-config --cflags gtk4) \
    -I src/ src/widget_mywidget.c