X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcelleditable.c;h=7302549dc677816f24e875135e6733c5304dee4e;hb=3a86af43fa208786b5c848c09f9c8e1d3f060931;hp=b4dab125ee0074027dc94efc73d775078e12f205;hpb=80581c3011871fa000433a881554ffc1e9363468;p=~andy%2Fgtk diff --git a/gtk/gtkcelleditable.c b/gtk/gtkcelleditable.c index b4dab125e..7302549dc 100644 --- a/gtk/gtkcelleditable.c +++ b/gtk/gtkcelleditable.c @@ -12,118 +12,136 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ +/** + * SECTION:gtkcelleditable + * @Short_description: Interface for widgets which can are used for editing + * cells + * @Title: GtkCellEditable + * @See_also: #GtkEntry, #GtkCellRenderer + * + * The #GtkCellEditable interface must be implemented for widgets to be usable + * when editing the contents of a #GtkTreeView cell. + */ -#include +#include "config.h" #include "gtkcelleditable.h" #include "gtkmarshalers.h" +#include "gtkprivate.h" +#include "gtkintl.h" -static void gtk_cell_editable_base_init (gpointer g_class); - -GType -gtk_cell_editable_get_type (void) -{ - static GType cell_editable_type = 0; - - if (! cell_editable_type) - { - static const GTypeInfo cell_editable_info = - { - sizeof (GtkCellEditableIface), /* class_size */ - gtk_cell_editable_base_init, /* base_init */ - NULL, /* base_finalize */ - NULL, - NULL, /* class_finalize */ - NULL, /* class_data */ - 0, - 0, - NULL - }; - cell_editable_type = - g_type_register_static (G_TYPE_INTERFACE, "GtkCellEditable", - &cell_editable_info, 0); - - g_type_interface_add_prerequisite (cell_editable_type, GTK_TYPE_WIDGET); - } - - return cell_editable_type; -} +typedef GtkCellEditableIface GtkCellEditableInterface; +G_DEFINE_INTERFACE(GtkCellEditable, gtk_cell_editable, GTK_TYPE_WIDGET) static void -gtk_cell_editable_base_init (gpointer g_class) +gtk_cell_editable_default_init (GtkCellEditableInterface *iface) { - static gboolean initialized = FALSE; - - if (! initialized) - { - g_signal_new ("editing_done", - GTK_TYPE_CELL_EDITABLE, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkCellEditableIface, editing_done), - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); - g_signal_new ("remove_widget", - GTK_TYPE_CELL_EDITABLE, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GtkCellEditableIface, remove_widget), - NULL, NULL, - _gtk_marshal_VOID__VOID, - G_TYPE_NONE, 0); - initialized = TRUE; - } + /** + * GtkCellEditable:editing-canceled: + * + * Indicates whether editing on the cell has been canceled. + * + * Since: 2.20 + */ + g_object_interface_install_property (iface, + g_param_spec_boolean ("editing-canceled", + P_("Editing Canceled"), + P_("Indicates that editing has been canceled"), + FALSE, + GTK_PARAM_READWRITE)); + + /** + * GtkCellEditable::editing-done: + * @cell_editable: the object on which the signal was emitted + * + * This signal is a sign for the cell renderer to update its + * value from the @cell_editable. + * + * Implementations of #GtkCellEditable are responsible for + * emitting this signal when they are done editing, e.g. + * #GtkEntry is emitting it when the user presses Enter. + * + * gtk_cell_editable_editing_done() is a convenience method + * for emitting #GtkCellEditable::editing-done. + */ + g_signal_new (I_("editing-done"), + GTK_TYPE_CELL_EDITABLE, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkCellEditableIface, editing_done), + NULL, NULL, + _gtk_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + /** + * GtkCellEditable::remove-widget: + * @cell_editable: the object on which the signal was emitted + * + * This signal is meant to indicate that the cell is finished + * editing, and the widget may now be destroyed. + * + * Implementations of #GtkCellEditable are responsible for + * emitting this signal when they are done editing. It must + * be emitted after the #GtkCellEditable::editing-done signal, + * to give the cell renderer a chance to update the cell's value + * before the widget is removed. + * + * gtk_cell_editable_remove_widget() is a convenience method + * for emitting #GtkCellEditable::remove-widget. + */ + g_signal_new (I_("remove-widget"), + GTK_TYPE_CELL_EDITABLE, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GtkCellEditableIface, remove_widget), + NULL, NULL, + _gtk_marshal_VOID__VOID, + G_TYPE_NONE, 0); } /** * gtk_cell_editable_start_editing: * @cell_editable: A #GtkCellEditable - * @event: A #GdkEvent, or %NULL + * @event: (allow-none): A #GdkEvent, or %NULL * - * Begins editing on a @cell_editable. @event is the #GdkEvent that began the - * editing process. It may be %NULL, in the instance that editing was initiated - * through programatic means. + * Begins editing on a @cell_editable. @event is the #GdkEvent that began + * the editing process. It may be %NULL, in the instance that editing was + * initiated through programatic means. **/ void gtk_cell_editable_start_editing (GtkCellEditable *cell_editable, GdkEvent *event) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); - g_return_if_fail (GTK_CELL_EDITABLE_GET_IFACE (cell_editable)->start_editing != NULL); (* GTK_CELL_EDITABLE_GET_IFACE (cell_editable)->start_editing) (cell_editable, event); } /** * gtk_cell_editable_editing_done: - * @cell_editable: A #GtkTreeEditable + * @cell_editable: A #GtkCellEditable * - * Emits the "editing_done" signal. This signal is a sign for the cell renderer - * to update its value from the cell. + * Emits the #GtkCellEditable::editing-done signal. **/ void gtk_cell_editable_editing_done (GtkCellEditable *cell_editable) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); - g_signal_emit_by_name (cell_editable, "editing_done"); + g_signal_emit_by_name (cell_editable, "editing-done"); } /** * gtk_cell_editable_remove_widget: - * @cell_editable: A #GtkTreeEditable + * @cell_editable: A #GtkCellEditable * - * Emits the "remove_widget" signal. This signal is meant to indicate that the - * cell is finished editing, and the widget may now be destroyed. + * Emits the #GtkCellEditable::remove-widget signal. **/ void gtk_cell_editable_remove_widget (GtkCellEditable *cell_editable) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); - g_signal_emit_by_name (cell_editable, "remove_widget"); + g_signal_emit_by_name (cell_editable, "remove-widget"); }