1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Take a look at the license at the top of the repository in the LICENSE file.

use crate::CellEditable;
use glib::translate::*;
use glib::IsA;

pub trait CellEditableExtManual {
    /// Begins editing on a @self.
    ///
    /// The [`CellRenderer`][crate::CellRenderer] for the cell creates and returns a [`CellEditable`][crate::CellEditable] from
    /// gtk_cell_renderer_start_editing(), configured for the [`CellRenderer`][crate::CellRenderer] type.
    ///
    /// gtk_cell_editable_start_editing() can then set up @self suitably for
    /// editing a cell, e.g. making the Esc key emit `GtkCellEditable::editing-done`.
    ///
    /// Note that the @self is created on-demand for the current edit; its
    /// lifetime is temporary and does not persist across other edits and/or cells.
    /// ## `event`
    /// The [`gdk::Event`][crate::gdk::Event] that began the editing process, or
    ///   [`None`] if editing was initiated programmatically
    #[doc(alias = "gtk_cell_editable_start_editing")]
    fn start_editing(&self, event: Option<&impl AsRef<gdk::Event>>);
}

impl<O: IsA<CellEditable>> CellEditableExtManual for O {
    fn start_editing(&self, event: Option<&impl AsRef<gdk::Event>>) {
        unsafe {
            ffi::gtk_cell_editable_start_editing(
                self.as_ref().to_glib_none().0,
                event.map(|e| e.as_ref()).to_glib_none().0,
            );
        }
    }
}