C'è un modo, usando la libreria Gtk in C, per clonare un pulsante Gtk (per esempio), e metterlo da qualche altra parte nell'app. So che non puoi impacchettare lo stesso widget due volte. E che questo codice, ovviamente, non avrebbe funzionato, ma mostra cosa succede quando si tenta una copia del pulsante:C'è un buon modo per copiare 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));
è presente un codice che crea un vbox e confezioni in una finestra e corre gtk_main circostante() . Questo si tradurrà in questi difficili da capire i messaggi di errore:
(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))
Sulla stessa linea, se dovessi scrivere il mio GObject (non necessariamente un widget Gtk), c'è un buon modo per scrivere un costruttore di copia. Sto pensando che dovrebbe essere un'interfaccia con ganci opzionali e basata principalmente sulle proprietà, gestendo in qualche modo la gerarchia della classe.
avrei voluto fare questo:
GtkButton *b = copyable_copy(COPYABLE(a));
Se GtkButton potrebbe usare un'interfaccia copiabile teorica.
È possibile creare un'interfaccia GObject che faccia la cosa "copiabile" fornendo i ganci e tutto il resto ... Non vorrei scriverlo, ma probabilmente finirebbe per essere complicato ... – Spudd86