// This file was generated by gir (https://github.com/gtk-rs/gir)
// from girs
// from gtk-girs (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT

#[cfg(feature = "v1_8")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
use crate::CertChooserFlags;
use crate::ffi;
use crate::gobject;
#[cfg(feature = "v1_8")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
use glib::{
    object::ObjectType as _,
    signal::{SignalHandlerId, connect_raw},
};
use glib::{prelude::*, translate::*};
#[cfg(feature = "v1_8")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
use std::boxed::Box as Box_;

glib::wrapper! {
    ///
    ///
    /// ## Properties
    ///
    ///
    /// #### `flags`
    ///  Writeable | Construct Only
    ///
    ///
    /// #### `title`
    ///  Writeable | Construct Only
    /// <details><summary><h4>Grid</h4></summary>
    ///
    ///
    /// #### `baseline-row`
    ///  The row to align to the baseline when valign is using baseline alignment.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `column-homogeneous`
    ///  If [`true`], the columns are all the same width.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `column-spacing`
    ///  The amount of space between two consecutive columns.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `row-homogeneous`
    ///  If [`true`], the rows are all the same height.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `row-spacing`
    ///  The amount of space between two consecutive rows.
    ///
    /// Readable | Writeable
    /// </details>
    /// <details><summary><h4>Widget</h4></summary>
    ///
    ///
    /// #### `can-focus`
    ///  Whether the widget or any of its descendents can accept
    /// the input focus.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `can-target`
    ///  Whether the widget can receive pointer events.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `css-classes`
    ///  A list of css classes applied to this widget.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `css-name`
    ///  The name of this widget in the CSS tree.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    ///
    /// Readable | Writeable | Construct Only
    ///
    ///
    /// #### `cursor`
    ///  The cursor used by @widget.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `focus-on-click`
    ///  Whether the widget should grab focus when it is clicked with the mouse.
    ///
    /// This property is only relevant for widgets that can take focus.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `focusable`
    ///  Whether this widget itself will accept the input focus.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `halign`
    ///  How to distribute horizontal space if widget gets extra space.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `has-default`
    ///  Whether the widget is the default widget.
    ///
    /// Readable
    ///
    ///
    /// #### `has-focus`
    ///  Whether the widget has the input focus.
    ///
    /// Readable
    ///
    ///
    /// #### `has-tooltip`
    ///  Enables or disables the emission of the [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip]
    /// signal on @widget.
    ///
    /// A true value indicates that @widget can have a tooltip, in this case
    /// the widget will be queried using [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] to
    /// determine whether it will provide a tooltip or not.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `height-request`
    ///  Overrides for height request of the widget.
    ///
    /// If this is -1, the natural request will be used.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `hexpand`
    ///  Whether to expand horizontally.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `hexpand-set`
    ///  Whether to use the `hexpand` property.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `layout-manager`
    ///  The `Gtk::LayoutManager` instance to use to compute
    /// the preferred size of the widget, and allocate its children.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `limit-events`
    ///  Makes this widget act like a modal dialog, with respect to
    /// event delivery.
    ///
    /// Global event controllers will not handle events with targets
    /// inside the widget, unless they are set up to ignore propagation
    /// limits. See `Gtk::EventController::set_propagation_limit()`.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `margin-bottom`
    ///  Margin on bottom side of widget.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `margin-end`
    ///  Margin on end of widget, horizontally.
    ///
    /// This property supports left-to-right and right-to-left text
    /// directions.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `margin-start`
    ///  Margin on start of widget, horizontally.
    ///
    /// This property supports left-to-right and right-to-left text
    /// directions.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `margin-top`
    ///  Margin on top side of widget.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `name`
    ///  The name of the widget.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `opacity`
    ///  The requested opacity of the widget.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `overflow`
    ///  How content outside the widget's content area is treated.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `parent`
    ///  The parent widget of this widget.
    ///
    /// Readable
    ///
    ///
    /// #### `receives-default`
    ///  Whether the widget will receive the default action when it is focused.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `root`
    ///  The [`gtk::Root`][crate::gtk::Root] widget of the widget tree containing this widget.
    ///
    /// This will be `NULL` if the widget is not contained in a root widget.
    ///
    /// Readable
    ///
    ///
    /// #### `scale-factor`
    ///  The scale factor of the widget.
    ///
    /// Readable
    ///
    ///
    /// #### `sensitive`
    ///  Whether the widget responds to input.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `tooltip-markup`
    ///  Sets the text of tooltip to be the given string, which is marked up
    /// with Pango markup.
    ///
    /// Also see `Gtk::Tooltip::set_markup()`.
    ///
    /// This is a convenience property which will take care of getting the
    /// tooltip shown if the given string is not `NULL`:
    /// [`has-tooltip`][struct@crate::gtk::Widget#has-tooltip] will automatically be set to true
    /// and there will be taken care of [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] in
    /// the default signal handler.
    ///
    /// Note that if both [`tooltip-text`][struct@crate::gtk::Widget#tooltip-text] and
    /// [`tooltip-markup`][struct@crate::gtk::Widget#tooltip-markup] are set, the last one wins.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `tooltip-text`
    ///  Sets the text of tooltip to be the given string.
    ///
    /// Also see `Gtk::Tooltip::set_text()`.
    ///
    /// This is a convenience property which will take care of getting the
    /// tooltip shown if the given string is not `NULL`:
    /// [`has-tooltip`][struct@crate::gtk::Widget#has-tooltip] will automatically be set to true
    /// and there will be taken care of [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] in
    /// the default signal handler.
    ///
    /// Note that if both [`tooltip-text`][struct@crate::gtk::Widget#tooltip-text] and
    /// [`tooltip-markup`][struct@crate::gtk::Widget#tooltip-markup] are set, the last one wins.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `valign`
    ///  How to distribute vertical space if widget gets extra space.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `vexpand`
    ///  Whether to expand vertically.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `vexpand-set`
    ///  Whether to use the `vexpand` property.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `visible`
    ///  Whether the widget is visible.
    ///
    /// Readable | Writeable
    ///
    ///
    /// #### `width-request`
    ///  Overrides for width request of the widget.
    ///
    /// If this is -1, the natural request will be used.
    ///
    /// Readable | Writeable
    /// </details>
    /// <details><summary><h4>Accessible</h4></summary>
    ///
    ///
    /// #### `accessible-role`
    ///  The accessible role of the given [`gtk::Accessible`][crate::gtk::Accessible] implementation.
    ///
    /// The accessible role cannot be changed once set.
    ///
    /// Readable | Writeable
    /// </details>
    /// <details><summary><h4>Orientable</h4></summary>
    ///
    ///
    /// #### `orientation`
    ///  The orientation of the orientable.
    ///
    /// Readable | Writeable
    /// </details>
    ///
    /// ## Signals
    ///
    ///
    /// #### `cert-password-validate`
    ///  Emitted when the certificate password needs validation. The handlers
    /// can indicate that the password is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    ///
    ///
    ///
    ///
    /// #### `cert-validate`
    ///  Emitted when the certificate needs validation. The handlers can indicate that
    /// the certificate is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    ///
    ///
    ///
    ///
    /// #### `changed`
    ///  Emitted when anything changes in the certificate chooser, be it a certificate,
    /// a key or associated passwords.
    ///
    ///
    ///
    ///
    /// #### `key-password-validate`
    ///  Emitted when the key password needs validation. The handlers can indicate
    /// that the password is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    ///
    ///
    ///
    ///
    /// #### `key-validate`
    ///  Emitted when the key needs validation. The handlers can indicate that
    /// the key is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    ///
    ///
    /// <details><summary><h4>Widget</h4></summary>
    ///
    ///
    /// #### `destroy`
    ///  Signals that all holders of a reference to the widget should release
    /// the reference that they hold.
    ///
    /// May result in finalization of the widget if all references are released.
    ///
    /// This signal is not suitable for saving widget state.
    ///
    ///
    ///
    ///
    /// #### `direction-changed`
    ///  Emitted when the text direction of a widget changes.
    ///
    ///
    ///
    ///
    /// #### `hide`
    ///  Emitted when @widget is hidden.
    ///
    ///
    ///
    ///
    /// #### `keynav-failed`
    ///  Emitted if keyboard navigation fails.
    ///
    /// See [`WidgetExtManual::keynav_failed()`][crate::gtk::prelude::WidgetExtManual::keynav_failed()] for details.
    ///
    ///
    ///
    ///
    /// #### `map`
    ///  Emitted when @widget is going to be mapped.
    ///
    /// A widget is mapped when the widget is visible (which is controlled with
    /// [`visible`][struct@crate::gtk::Widget#visible]) and all its parents up to the toplevel widget
    /// are also visible.
    ///
    /// The `::map` signal can be used to determine whether a widget will be drawn,
    /// for instance it can resume an animation that was stopped during the
    /// emission of [`unmap`][struct@crate::gtk::Widget#unmap].
    ///
    ///
    ///
    ///
    /// #### `mnemonic-activate`
    ///  Emitted when a widget is activated via a mnemonic.
    ///
    /// The default handler for this signal activates @widget if @group_cycling
    /// is false, or just makes @widget grab focus if @group_cycling is true.
    ///
    ///
    ///
    ///
    /// #### `move-focus`
    ///  Emitted when the focus is moved.
    ///
    /// The `::move-focus` signal is a [keybinding signal](class.SignalAction.html).
    ///
    /// The default bindings for this signal are <kbd>Tab</kbd> to move forward,
    /// and <kbd>Shift</kbd>+<kbd>Tab</kbd> to move backward.
    ///
    /// Action
    ///
    ///
    /// #### `query-tooltip`
    ///  Emitted when the widget’s tooltip is about to be shown.
    ///
    /// This happens when the [`has-tooltip`][struct@crate::gtk::Widget#has-tooltip] property
    /// is true and the hover timeout has expired with the cursor hovering
    /// above @widget; or emitted when @widget got focus in keyboard mode.
    ///
    /// Using the given coordinates, the signal handler should determine
    /// whether a tooltip should be shown for @widget. If this is the case
    /// true should be returned, false otherwise. Note that if @keyboard_mode
    /// is true, the values of @x and @y are undefined and should not be used.
    ///
    /// The signal handler is free to manipulate @tooltip with the therefore
    /// destined function calls.
    ///
    ///
    ///
    ///
    /// #### `realize`
    ///  Emitted when @widget is associated with a `GdkSurface`.
    ///
    /// This means that [`WidgetExtManual::realize()`][crate::gtk::prelude::WidgetExtManual::realize()] has been called
    /// or the widget has been mapped (that is, it is going to be drawn).
    ///
    ///
    ///
    ///
    /// #### `show`
    ///  Emitted when @widget is shown.
    ///
    ///
    ///
    ///
    /// #### `state-flags-changed`
    ///  Emitted when the widget state changes.
    ///
    /// See [`WidgetExtManual::state_flags()`][crate::gtk::prelude::WidgetExtManual::state_flags()].
    ///
    ///
    ///
    ///
    /// #### `unmap`
    ///  Emitted when @widget is going to be unmapped.
    ///
    /// A widget is unmapped when either it or any of its parents up to the
    /// toplevel widget have been set as hidden.
    ///
    /// As `::unmap` indicates that a widget will not be shown any longer,
    /// it can be used to, for example, stop an animation on the widget.
    ///
    ///
    ///
    ///
    /// #### `unrealize`
    ///  Emitted when the `GdkSurface` associated with @widget is destroyed.
    ///
    /// This means that [`WidgetExtManual::unrealize()`][crate::gtk::prelude::WidgetExtManual::unrealize()] has been called
    /// or the widget has been unmapped (that is, it is going to be hidden).
    ///
    ///
    /// </details>
    ///
    /// # Implements
    ///
    /// [`trait@gtk::prelude::GridExt`], [`trait@gtk::prelude::WidgetExt`], [`trait@glib::InitiallyUnownedExt`], [`trait@gtk::prelude::AccessibleExt`], [`trait@gtk::prelude::BuildableExt`], [`trait@gtk::prelude::ConstraintTargetExt`], [`trait@gtk::prelude::OrientableExt`]
    #[doc(alias = "NMACertChooser")]
    pub struct CertChooser(Object<ffi::NMACertChooser, ffi::NMACertChooserClass>) @extends gtk::Grid, gtk::Widget, gobject::InitiallyUnowned, @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;

    match fn {
        type_ => || ffi::nma_cert_chooser_get_type(),
    }
}

impl CertChooser {
    /// Constructs the button that is capable of selecting a certificate
    /// and a key.
    /// ## `title`
    /// title of the certificate chooser dialog
    /// ## `flags`
    /// the flags that configure the capabilities of the button
    ///
    /// # Returns
    ///
    /// the certificate chooser button instance
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_new")]
    pub fn new(title: &str, flags: CertChooserFlags) -> CertChooser {
        assert_initialized_main_thread!();
        unsafe {
            gtk::Widget::from_glib_full(ffi::nma_cert_chooser_new(
                title.to_glib_none().0,
                flags.into_glib(),
            ))
            .unsafe_cast()
        }
    }

    // rustdoc-stripper-ignore-next
    /// Creates a new builder-pattern struct instance to construct [`CertChooser`] objects.
    ///
    /// This method returns an instance of [`CertChooserBuilder`](crate::builders::CertChooserBuilder) which can be used to create [`CertChooser`] objects.
    pub fn builder() -> CertChooserBuilder {
        CertChooserBuilder::new()
    }

    /// Adds the labels to the specified size group so that they are aligned
    /// nicely with other entries in a form.
    ///
    /// It is expected that the NMACertChooser is a GtkGrid with two columns
    /// with the labels in the first one.
    /// ## `group`
    /// a size group
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_add_to_size_group")]
    pub fn add_to_size_group(&self, group: &gtk::SizeGroup) {
        unsafe {
            ffi::nma_cert_chooser_add_to_size_group(self.to_glib_none().0, group.to_glib_none().0);
        }
    }

    /// Gets the real certificate location from the chooser button along with the scheme.
    ///
    /// # Returns
    ///
    /// the certificate path
    ///
    /// ## `scheme`
    /// the scheme of the returned certificate path
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_cert")]
    #[doc(alias = "get_cert")]
    pub fn cert(&self) -> (Option<glib::GString>, nm::Setting8021xCKScheme) {
        unsafe {
            let mut scheme = std::mem::MaybeUninit::uninit();
            let ret = from_glib_full(ffi::nma_cert_chooser_get_cert(
                self.to_glib_none().0,
                scheme.as_mut_ptr(),
            ));
            (ret, from_glib(scheme.assume_init()))
        }
    }

    /// Obtains the password or a PIN that was be required to access the certificate.
    ///
    /// # Returns
    ///
    /// the certificate PIN or password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_cert_password")]
    #[doc(alias = "get_cert_password")]
    pub fn cert_password(&self) -> glib::GString {
        unsafe {
            from_glib_none(ffi::nma_cert_chooser_get_cert_password(
                self.to_glib_none().0,
            ))
        }
    }

    /// Returns secret flags corresponding to the certificate password
    /// if one is present. The chooser would typically call into
    /// nma_utils_menu_to_secret_flags() for the certificate password
    /// entry.
    ///
    /// # Returns
    ///
    /// secret flags corresponding to the certificate password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_cert_password_flags")]
    #[doc(alias = "get_cert_password_flags")]
    pub fn cert_password_flags(&self) -> nm::SettingSecretFlags {
        unsafe {
            from_glib(ffi::nma_cert_chooser_get_cert_password_flags(
                self.to_glib_none().0,
            ))
        }
    }

    /// Gets the real certificate URI from the chooser button along with the scheme.
    ///
    /// # Returns
    ///
    /// the certificate URI
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_cert_uri")]
    #[doc(alias = "get_cert_uri")]
    pub fn cert_uri(&self) -> Option<glib::GString> {
        unsafe { from_glib_full(ffi::nma_cert_chooser_get_cert_uri(self.to_glib_none().0)) }
    }

    /// Gets the real key location from the chooser button along with the scheme.
    ///
    /// # Returns
    ///
    /// the key path
    ///
    /// ## `scheme`
    /// the scheme of the returned key path
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_key")]
    #[doc(alias = "get_key")]
    pub fn key(&self) -> (Option<glib::GString>, nm::Setting8021xCKScheme) {
        unsafe {
            let mut scheme = std::mem::MaybeUninit::uninit();
            let ret = from_glib_full(ffi::nma_cert_chooser_get_key(
                self.to_glib_none().0,
                scheme.as_mut_ptr(),
            ));
            (ret, from_glib(scheme.assume_init()))
        }
    }

    /// Obtains the password or a PIN that was be required to access the key.
    ///
    /// # Returns
    ///
    /// the key PIN or password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_key_password")]
    #[doc(alias = "get_key_password")]
    pub fn key_password(&self) -> glib::GString {
        unsafe {
            from_glib_none(ffi::nma_cert_chooser_get_key_password(
                self.to_glib_none().0,
            ))
        }
    }

    /// Returns secret flags corresponding to the key password
    /// if one is present. The chooser would typically call into
    /// nma_utils_menu_to_secret_flags() for the key password
    /// entry.
    ///
    /// # Returns
    ///
    /// secret flags corresponding to the key password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_key_password_flags")]
    #[doc(alias = "get_key_password_flags")]
    pub fn key_password_flags(&self) -> nm::SettingSecretFlags {
        unsafe {
            from_glib(ffi::nma_cert_chooser_get_key_password_flags(
                self.to_glib_none().0,
            ))
        }
    }

    /// Gets the real key URI from the chooser button along with the scheme.
    ///
    /// # Returns
    ///
    /// the key URI
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_get_key_uri")]
    #[doc(alias = "get_key_uri")]
    pub fn key_uri(&self) -> Option<glib::GString> {
        unsafe { from_glib_full(ffi::nma_cert_chooser_get_key_uri(self.to_glib_none().0)) }
    }

    /// Sets the certificate location for the chooser button.
    /// ## `value`
    /// the path or URI of a certificate
    /// ## `scheme`
    /// the scheme of the certificate path
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_cert")]
    pub fn set_cert(&self, value: &str, scheme: nm::Setting8021xCKScheme) {
        unsafe {
            ffi::nma_cert_chooser_set_cert(
                self.to_glib_none().0,
                value.to_glib_none().0,
                scheme.into_glib(),
            );
        }
    }

    /// Sets the password or a PIN that might be required to access the certificate.
    /// ## `password`
    /// the certificate PIN or password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_cert_password")]
    pub fn set_cert_password(&self, password: &str) {
        unsafe {
            ffi::nma_cert_chooser_set_cert_password(
                self.to_glib_none().0,
                password.to_glib_none().0,
            );
        }
    }

    /// Sets the certificate URI for the chooser button.
    /// ## `uri`
    /// the path or URI of a certificate
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_cert_uri")]
    pub fn set_cert_uri(&self, uri: &str) {
        unsafe {
            ffi::nma_cert_chooser_set_cert_uri(self.to_glib_none().0, uri.to_glib_none().0);
        }
    }

    /// Sets the key location for the chooser button.
    /// ## `value`
    /// the path or URI of a key
    /// ## `scheme`
    /// the scheme of the key path
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_key")]
    pub fn set_key(&self, value: &str, scheme: nm::Setting8021xCKScheme) {
        unsafe {
            ffi::nma_cert_chooser_set_key(
                self.to_glib_none().0,
                value.to_glib_none().0,
                scheme.into_glib(),
            );
        }
    }

    /// Sets the password or a PIN that might be required to access the key.
    /// ## `password`
    /// the key PIN or password
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_key_password")]
    pub fn set_key_password(&self, password: &str) {
        unsafe {
            ffi::nma_cert_chooser_set_key_password(
                self.to_glib_none().0,
                password.to_glib_none().0,
            );
        }
    }

    /// Sets the key URI for the chooser button.
    /// ## `uri`
    /// the URI of a key
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_set_key_uri")]
    pub fn set_key_uri(&self, uri: &str) {
        unsafe {
            ffi::nma_cert_chooser_set_key_uri(self.to_glib_none().0, uri.to_glib_none().0);
        }
    }

    /// This method basically calls nma_utils_setup_password_storage()
    /// on the certificate password entry, in case one is present.
    /// ## `initial_flags`
    /// initial secret flags to setup password menu from
    /// ## `setting`
    /// #NMSetting containing the password, or NULL
    /// ## `password_flags_name`
    /// name of the secret flags (like psk-flags), or NULL
    /// ## `with_not_required`
    /// whether to include "Not required" menu item
    /// ## `ask_mode`
    /// [`true`] if the entry is shown in ASK mode
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_setup_cert_password_storage")]
    pub fn setup_cert_password_storage(
        &self,
        initial_flags: nm::SettingSecretFlags,
        setting: &impl IsA<nm::Setting>,
        password_flags_name: &str,
        with_not_required: bool,
        ask_mode: bool,
    ) {
        unsafe {
            ffi::nma_cert_chooser_setup_cert_password_storage(
                self.to_glib_none().0,
                initial_flags.into_glib(),
                setting.as_ref().to_glib_none().0,
                password_flags_name.to_glib_none().0,
                with_not_required.into_glib(),
                ask_mode.into_glib(),
            );
        }
    }

    /// This method basically calls nma_utils_setup_password_storage()
    /// on the key password entry, in case one is present.
    /// ## `initial_flags`
    /// initial secret flags to setup password menu from
    /// ## `setting`
    /// #NMSetting containing the password, or NULL
    /// ## `password_flags_name`
    /// name of the secret flags (like psk-flags), or NULL
    /// ## `with_not_required`
    /// whether to include "Not required" menu item
    /// ## `ask_mode`
    /// [`true`] if the entry is shown in ASK mode
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_setup_key_password_storage")]
    pub fn setup_key_password_storage(
        &self,
        initial_flags: nm::SettingSecretFlags,
        setting: &impl IsA<nm::Setting>,
        password_flags_name: &str,
        with_not_required: bool,
        ask_mode: bool,
    ) {
        unsafe {
            ffi::nma_cert_chooser_setup_key_password_storage(
                self.to_glib_none().0,
                initial_flags.into_glib(),
                setting.as_ref().to_glib_none().0,
                password_flags_name.to_glib_none().0,
                with_not_required.into_glib(),
                ask_mode.into_glib(),
            );
        }
    }

    /// This method basically calls nma_utils_update_password_storage()
    /// on the certificate password entry, in case one is present.
    /// ## `secret_flags`
    /// secret flags to set
    /// ## `setting`
    /// #NMSetting containing the password, or NULL
    /// ## `password_flags_name`
    /// name of the secret flags (like psk-flags), or NULL
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_update_cert_password_storage")]
    pub fn update_cert_password_storage(
        &self,
        secret_flags: nm::SettingSecretFlags,
        setting: &impl IsA<nm::Setting>,
        password_flags_name: &str,
    ) {
        unsafe {
            ffi::nma_cert_chooser_update_cert_password_storage(
                self.to_glib_none().0,
                secret_flags.into_glib(),
                setting.as_ref().to_glib_none().0,
                password_flags_name.to_glib_none().0,
            );
        }
    }

    /// This method basically calls nma_utils_update_password_storage()
    /// on the key password entry, in case one is present.
    /// ## `secret_flags`
    /// secret flags to set
    /// ## `setting`
    /// #NMSetting containing the password, or NULL
    /// ## `password_flags_name`
    /// name of the secret flags (like psk-flags), or NULL
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_update_key_password_storage")]
    pub fn update_key_password_storage(
        &self,
        secret_flags: nm::SettingSecretFlags,
        setting: &impl IsA<nm::Setting>,
        password_flags_name: &str,
    ) {
        unsafe {
            ffi::nma_cert_chooser_update_key_password_storage(
                self.to_glib_none().0,
                secret_flags.into_glib(),
                setting.as_ref().to_glib_none().0,
                password_flags_name.to_glib_none().0,
            );
        }
    }

    /// Validates whether the chosen values make sense. The users can do further
    /// validation by subscribing to the "*-changed" signals and returning an
    /// error themselves.
    ///
    /// # Returns
    ///
    /// [`true`] if validation passes, [`false`] otherwise
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "nma_cert_chooser_validate")]
    pub fn validate(&self) -> Result<(), glib::Error> {
        unsafe {
            let mut error = std::ptr::null_mut();
            let is_ok = ffi::nma_cert_chooser_validate(self.to_glib_none().0, &mut error);
            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
            if error.is_null() {
                Ok(())
            } else {
                Err(from_glib_full(error))
            }
        }
    }

    /// Emitted when the certificate password needs validation. The handlers
    /// can indicate that the password is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "cert-password-validate")]
    pub fn connect_cert_password_validate<F: Fn(&Self) -> glib::Error + 'static>(
        &self,
        f: F,
    ) -> SignalHandlerId {
        unsafe extern "C" fn cert_password_validate_trampoline<
            F: Fn(&CertChooser) -> glib::Error + 'static,
        >(
            this: *mut ffi::NMACertChooser,
            f: glib::ffi::gpointer,
        ) -> *mut glib::ffi::GError {
            let f: &F = &*(f as *const F);
            f(&from_glib_borrow(this)).to_glib_full()
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"cert-password-validate".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    cert_password_validate_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    /// Emitted when the certificate needs validation. The handlers can indicate that
    /// the certificate is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "cert-validate")]
    pub fn connect_cert_validate<F: Fn(&Self) -> glib::Error + 'static>(
        &self,
        f: F,
    ) -> SignalHandlerId {
        unsafe extern "C" fn cert_validate_trampoline<
            F: Fn(&CertChooser) -> glib::Error + 'static,
        >(
            this: *mut ffi::NMACertChooser,
            f: glib::ffi::gpointer,
        ) -> *mut glib::ffi::GError {
            let f: &F = &*(f as *const F);
            f(&from_glib_borrow(this)).to_glib_full()
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"cert-validate".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    cert_validate_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    /// Emitted when anything changes in the certificate chooser, be it a certificate,
    /// a key or associated passwords.
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "changed")]
    pub fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn changed_trampoline<F: Fn(&CertChooser) + 'static>(
            this: *mut ffi::NMACertChooser,
            f: glib::ffi::gpointer,
        ) {
            let f: &F = &*(f as *const F);
            f(&from_glib_borrow(this))
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"changed".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    changed_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    /// Emitted when the key password needs validation. The handlers can indicate
    /// that the password is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "key-password-validate")]
    pub fn connect_key_password_validate<F: Fn(&Self) -> glib::Error + 'static>(
        &self,
        f: F,
    ) -> SignalHandlerId {
        unsafe extern "C" fn key_password_validate_trampoline<
            F: Fn(&CertChooser) -> glib::Error + 'static,
        >(
            this: *mut ffi::NMACertChooser,
            f: glib::ffi::gpointer,
        ) -> *mut glib::ffi::GError {
            let f: &F = &*(f as *const F);
            f(&from_glib_borrow(this)).to_glib_full()
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"key-password-validate".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    key_password_validate_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }

    /// Emitted when the key needs validation. The handlers can indicate that
    /// the key is invalid by returning an error, which blocks further
    /// signal processing and causes a call to nma_cert_chooser_validate()
    /// to fail.
    #[cfg(feature = "v1_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
    #[doc(alias = "key-validate")]
    pub fn connect_key_validate<F: Fn(&Self) -> glib::Error + 'static>(
        &self,
        f: F,
    ) -> SignalHandlerId {
        unsafe extern "C" fn key_validate_trampoline<
            F: Fn(&CertChooser) -> glib::Error + 'static,
        >(
            this: *mut ffi::NMACertChooser,
            f: glib::ffi::gpointer,
        ) -> *mut glib::ffi::GError {
            let f: &F = &*(f as *const F);
            f(&from_glib_borrow(this)).to_glib_full()
        }
        unsafe {
            let f: Box_<F> = Box_::new(f);
            connect_raw(
                self.as_ptr() as *mut _,
                c"key-validate".as_ptr() as *const _,
                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
                    key_validate_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }
}

#[cfg(feature = "v1_8")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_8")))]
impl Default for CertChooser {
    fn default() -> Self {
        glib::object::Object::new::<Self>()
    }
}

// rustdoc-stripper-ignore-next
/// A [builder-pattern] type to construct [`CertChooser`] objects.
///
/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
#[must_use = "The builder must be built to be used"]
pub struct CertChooserBuilder {
    builder: glib::object::ObjectBuilder<'static, CertChooser>,
}

impl CertChooserBuilder {
    fn new() -> Self {
        Self {
            builder: glib::object::Object::builder(),
        }
    }

    pub fn flags(self, flags: u32) -> Self {
        Self {
            builder: self.builder.property("flags", flags),
        }
    }

    pub fn title(self, title: impl Into<glib::GString>) -> Self {
        Self {
            builder: self.builder.property("title", title.into()),
        }
    }

    /// The row to align to the baseline when valign is using baseline alignment.
    pub fn baseline_row(self, baseline_row: i32) -> Self {
        Self {
            builder: self.builder.property("baseline-row", baseline_row),
        }
    }

    /// If [`true`], the columns are all the same width.
    pub fn column_homogeneous(self, column_homogeneous: bool) -> Self {
        Self {
            builder: self
                .builder
                .property("column-homogeneous", column_homogeneous),
        }
    }

    /// The amount of space between two consecutive columns.
    pub fn column_spacing(self, column_spacing: i32) -> Self {
        Self {
            builder: self.builder.property("column-spacing", column_spacing),
        }
    }

    /// If [`true`], the rows are all the same height.
    pub fn row_homogeneous(self, row_homogeneous: bool) -> Self {
        Self {
            builder: self.builder.property("row-homogeneous", row_homogeneous),
        }
    }

    /// The amount of space between two consecutive rows.
    pub fn row_spacing(self, row_spacing: i32) -> Self {
        Self {
            builder: self.builder.property("row-spacing", row_spacing),
        }
    }

    /// Whether the widget or any of its descendents can accept
    /// the input focus.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    pub fn can_focus(self, can_focus: bool) -> Self {
        Self {
            builder: self.builder.property("can-focus", can_focus),
        }
    }

    /// Whether the widget can receive pointer events.
    pub fn can_target(self, can_target: bool) -> Self {
        Self {
            builder: self.builder.property("can-target", can_target),
        }
    }

    /// A list of css classes applied to this widget.
    pub fn css_classes(self, css_classes: impl Into<glib::StrV>) -> Self {
        Self {
            builder: self.builder.property("css-classes", css_classes.into()),
        }
    }

    /// The name of this widget in the CSS tree.
    ///
    /// This property is meant to be set by widget implementations,
    /// typically in their instance init function.
    pub fn css_name(self, css_name: impl Into<glib::GString>) -> Self {
        Self {
            builder: self.builder.property("css-name", css_name.into()),
        }
    }

    //pub fn cursor(self, cursor: /*Ignored*/&gdk::Cursor) -> Self {
    //    Self { builder: self.builder.property("cursor", cursor), }
    //}

    /// Whether the widget should grab focus when it is clicked with the mouse.
    ///
    /// This property is only relevant for widgets that can take focus.
    pub fn focus_on_click(self, focus_on_click: bool) -> Self {
        Self {
            builder: self.builder.property("focus-on-click", focus_on_click),
        }
    }

    /// Whether this widget itself will accept the input focus.
    pub fn focusable(self, focusable: bool) -> Self {
        Self {
            builder: self.builder.property("focusable", focusable),
        }
    }

    //pub fn halign(self, halign: /*Ignored*/gtk::Align) -> Self {
    //    Self { builder: self.builder.property("halign", halign), }
    //}

    /// Enables or disables the emission of the [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip]
    /// signal on @widget.
    ///
    /// A true value indicates that @widget can have a tooltip, in this case
    /// the widget will be queried using [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] to
    /// determine whether it will provide a tooltip or not.
    pub fn has_tooltip(self, has_tooltip: bool) -> Self {
        Self {
            builder: self.builder.property("has-tooltip", has_tooltip),
        }
    }

    /// Overrides for height request of the widget.
    ///
    /// If this is -1, the natural request will be used.
    pub fn height_request(self, height_request: i32) -> Self {
        Self {
            builder: self.builder.property("height-request", height_request),
        }
    }

    /// Whether to expand horizontally.
    pub fn hexpand(self, hexpand: bool) -> Self {
        Self {
            builder: self.builder.property("hexpand", hexpand),
        }
    }

    /// Whether to use the `hexpand` property.
    pub fn hexpand_set(self, hexpand_set: bool) -> Self {
        Self {
            builder: self.builder.property("hexpand-set", hexpand_set),
        }
    }

    //pub fn layout_manager(self, layout_manager: &impl IsA</*Ignored*/gtk::LayoutManager>) -> Self {
    //    Self { builder: self.builder.property("layout-manager", layout_manager.clone().upcast()), }
    //}

    /// Makes this widget act like a modal dialog, with respect to
    /// event delivery.
    ///
    /// Global event controllers will not handle events with targets
    /// inside the widget, unless they are set up to ignore propagation
    /// limits. See `Gtk::EventController::set_propagation_limit()`.
    #[cfg(feature = "gtk_v4_18")]
    #[cfg_attr(docsrs, doc(cfg(feature = "gtk_v4_18")))]
    pub fn limit_events(self, limit_events: bool) -> Self {
        Self {
            builder: self.builder.property("limit-events", limit_events),
        }
    }

    /// Margin on bottom side of widget.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    pub fn margin_bottom(self, margin_bottom: i32) -> Self {
        Self {
            builder: self.builder.property("margin-bottom", margin_bottom),
        }
    }

    /// Margin on end of widget, horizontally.
    ///
    /// This property supports left-to-right and right-to-left text
    /// directions.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    pub fn margin_end(self, margin_end: i32) -> Self {
        Self {
            builder: self.builder.property("margin-end", margin_end),
        }
    }

    /// Margin on start of widget, horizontally.
    ///
    /// This property supports left-to-right and right-to-left text
    /// directions.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    pub fn margin_start(self, margin_start: i32) -> Self {
        Self {
            builder: self.builder.property("margin-start", margin_start),
        }
    }

    /// Margin on top side of widget.
    ///
    /// This property adds margin outside of the widget's normal size
    /// request, the margin will be added in addition to the size from
    /// [`WidgetExtManual::set_size_request()`][crate::gtk::prelude::WidgetExtManual::set_size_request()] for example.
    pub fn margin_top(self, margin_top: i32) -> Self {
        Self {
            builder: self.builder.property("margin-top", margin_top),
        }
    }

    /// The name of the widget.
    pub fn name(self, name: impl Into<glib::GString>) -> Self {
        Self {
            builder: self.builder.property("name", name.into()),
        }
    }

    /// The requested opacity of the widget.
    pub fn opacity(self, opacity: f64) -> Self {
        Self {
            builder: self.builder.property("opacity", opacity),
        }
    }

    //pub fn overflow(self, overflow: /*Ignored*/gtk::Overflow) -> Self {
    //    Self { builder: self.builder.property("overflow", overflow), }
    //}

    /// Whether the widget will receive the default action when it is focused.
    pub fn receives_default(self, receives_default: bool) -> Self {
        Self {
            builder: self.builder.property("receives-default", receives_default),
        }
    }

    /// Whether the widget responds to input.
    pub fn sensitive(self, sensitive: bool) -> Self {
        Self {
            builder: self.builder.property("sensitive", sensitive),
        }
    }

    /// Sets the text of tooltip to be the given string, which is marked up
    /// with Pango markup.
    ///
    /// Also see `Gtk::Tooltip::set_markup()`.
    ///
    /// This is a convenience property which will take care of getting the
    /// tooltip shown if the given string is not `NULL`:
    /// [`has-tooltip`][struct@crate::gtk::Widget#has-tooltip] will automatically be set to true
    /// and there will be taken care of [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] in
    /// the default signal handler.
    ///
    /// Note that if both [`tooltip-text`][struct@crate::gtk::Widget#tooltip-text] and
    /// [`tooltip-markup`][struct@crate::gtk::Widget#tooltip-markup] are set, the last one wins.
    pub fn tooltip_markup(self, tooltip_markup: impl Into<glib::GString>) -> Self {
        Self {
            builder: self
                .builder
                .property("tooltip-markup", tooltip_markup.into()),
        }
    }

    /// Sets the text of tooltip to be the given string.
    ///
    /// Also see `Gtk::Tooltip::set_text()`.
    ///
    /// This is a convenience property which will take care of getting the
    /// tooltip shown if the given string is not `NULL`:
    /// [`has-tooltip`][struct@crate::gtk::Widget#has-tooltip] will automatically be set to true
    /// and there will be taken care of [`query-tooltip`][struct@crate::gtk::Widget#query-tooltip] in
    /// the default signal handler.
    ///
    /// Note that if both [`tooltip-text`][struct@crate::gtk::Widget#tooltip-text] and
    /// [`tooltip-markup`][struct@crate::gtk::Widget#tooltip-markup] are set, the last one wins.
    pub fn tooltip_text(self, tooltip_text: impl Into<glib::GString>) -> Self {
        Self {
            builder: self.builder.property("tooltip-text", tooltip_text.into()),
        }
    }

    //pub fn valign(self, valign: /*Ignored*/gtk::Align) -> Self {
    //    Self { builder: self.builder.property("valign", valign), }
    //}

    /// Whether to expand vertically.
    pub fn vexpand(self, vexpand: bool) -> Self {
        Self {
            builder: self.builder.property("vexpand", vexpand),
        }
    }

    /// Whether to use the `vexpand` property.
    pub fn vexpand_set(self, vexpand_set: bool) -> Self {
        Self {
            builder: self.builder.property("vexpand-set", vexpand_set),
        }
    }

    /// Whether the widget is visible.
    pub fn visible(self, visible: bool) -> Self {
        Self {
            builder: self.builder.property("visible", visible),
        }
    }

    /// Overrides for width request of the widget.
    ///
    /// If this is -1, the natural request will be used.
    pub fn width_request(self, width_request: i32) -> Self {
        Self {
            builder: self.builder.property("width-request", width_request),
        }
    }

    //pub fn accessible_role(self, accessible_role: /*Ignored*/gtk::AccessibleRole) -> Self {
    //    Self { builder: self.builder.property("accessible-role", accessible_role), }
    //}

    //pub fn orientation(self, orientation: /*Ignored*/gtk::Orientation) -> Self {
    //    Self { builder: self.builder.property("orientation", orientation), }
    //}

    // rustdoc-stripper-ignore-next
    /// Build the [`CertChooser`].
    #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
    pub fn build(self) -> CertChooser {
        assert_initialized_main_thread!();
        self.builder.build()
    }
}
