¿Hay alguna manera, usando la biblioteca Gtk en C, de clonar un botón Gtk (por ejemplo) y empaquetarlo en otro lugar de la aplicación? Sé que no puedes empacar el mismo widget dos veces. Y que este código, obviamente, no iba a funcionar, pero muestra lo que sucede cuando intento una copia superficial del botón:¿Hay una buena manera de copiar un widget Gtk?
GtkButton *a = g_object_new(GTK_TYPE_BUTTON, "label", "o_0", NULL);
GtkButton *b = g_memdup(a, sizeof *a);
gtk_box_pack_start_defaults(GTK_BOX(vbox), GTK_WIDGET(b));
No es que crea un código vbox y lo empaqueta en una ventana y se ejecuta gtk_main circundante() . Esto resultará en estos difíciles de entender los mensajes de error:
(main:6044): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)' failed
(main:6044): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
**
Gtk:ERROR:/build/buildd/gtk+2.0-2.18.3/gtk/gtkwidget.c:8431:gtk_widget_real_map: assertion failed: (GTK_WIDGET_REALIZED (widget))
En la misma línea, si tuviera que escribir mi propia GObject (no necesariamente un widget GTK), hay una buena manera de escribir un constructor de copia. Estoy pensando que debería ser una interfaz con ganchos opcionales y basada principalmente en las propiedades, manejando la jerarquía de la clase de alguna manera.
que me gustaría hacer esto:
GtkButton *b = copyable_copy(COPYABLE(a));
Si GtkButton podría utilizar una interfaz copiable teórico.
Puedes crear una interfaz GObject que haga lo que se puede "copiar" proporcionando los enganches y esas cosas ... Aunque no quisiera escribirlo, probablemente terminaría siendo complicado ... – Spudd86