diff --git a/Gir.toml b/Gir.toml index e6bf0db817..0b356d6b5b 100644 --- a/Gir.toml +++ b/Gir.toml @@ -220,6 +220,7 @@ generate = [ "Gtk.Viewport", "Gtk.VolumeButton", "Gtk.WidgetHelpType", + "Gtk.WidgetPath", "Gtk.WindowGroup", "Gtk.WindowPosition", "Gtk.WindowType", @@ -1814,6 +1815,10 @@ status = "generate" [[object.function]] name = "style_get_property" ignore = true + [[object.function]] + name = "get_path" + [object.function.return] + nullable = false [[object.signal]] name = "button-press-event" inhibit = true diff --git a/src/auto/container.rs b/src/auto/container.rs index dd322d4eae..4f17f1dc92 100644 --- a/src/auto/container.rs +++ b/src/auto/container.rs @@ -6,6 +6,7 @@ use Adjustment; use Buildable; use ResizeMode; use Widget; +use WidgetPath; use cairo; use ffi; use glib; @@ -68,7 +69,7 @@ pub trait ContainerExt { fn get_focus_vadjustment(&self) -> Option; - //fn get_path_for_child>(&self, child: &P) -> /*Ignored*/Option; + fn get_path_for_child>(&self, child: &P) -> Option; #[cfg_attr(feature = "v3_12", deprecated)] fn get_resize_mode(&self) -> ResizeMode; @@ -207,9 +208,11 @@ impl + IsA> ContainerExt for O { } } - //fn get_path_for_child>(&self, child: &P) -> /*Ignored*/Option { - // unsafe { TODO: call ffi::gtk_container_get_path_for_child() } - //} + fn get_path_for_child>(&self, child: &P) -> Option { + unsafe { + from_glib_full(ffi::gtk_container_get_path_for_child(self.to_glib_none().0, child.to_glib_none().0)) + } + } fn get_resize_mode(&self) -> ResizeMode { unsafe { diff --git a/src/auto/mod.rs b/src/auto/mod.rs index 47e429f280..d0d6b7d3bc 100644 --- a/src/auto/mod.rs +++ b/src/auto/mod.rs @@ -885,6 +885,9 @@ pub use self::tree_path::TreePath; mod tree_row_reference; pub use self::tree_row_reference::TreeRowReference; +mod widget_path; +pub use self::widget_path::WidgetPath; + mod enums; pub use self::enums::Align; pub use self::enums::ArrowType; diff --git a/src/auto/style_context.rs b/src/auto/style_context.rs index 18167f0bf7..f1462ebabd 100644 --- a/src/auto/style_context.rs +++ b/src/auto/style_context.rs @@ -13,6 +13,7 @@ use StateType; use StyleContextPrintFlags; use StyleProvider; use TextDirection; +use WidgetPath; use ffi; use gdk; use glib; @@ -113,7 +114,7 @@ pub trait StyleContextExt { fn get_parent(&self) -> Option; - //fn get_path(&self) -> /*Ignored*/Option; + fn get_path(&self) -> Option; #[cfg(any(feature = "v3_10", feature = "dox"))] fn get_scale(&self) -> i32; @@ -184,7 +185,7 @@ pub trait StyleContextExt { fn set_parent<'a, P: Into>>(&self, parent: P); - //fn set_path(&self, path: /*Ignored*/&WidgetPath); + fn set_path(&self, path: &WidgetPath); #[cfg(any(feature = "v3_10", feature = "dox"))] fn set_scale(&self, scale: i32); @@ -317,9 +318,11 @@ impl + IsA> StyleContextExt for O { } } - //fn get_path(&self) -> /*Ignored*/Option { - // unsafe { TODO: call ffi::gtk_style_context_get_path() } - //} + fn get_path(&self) -> Option { + unsafe { + from_glib_none(ffi::gtk_style_context_get_path(self.to_glib_none().0)) + } + } #[cfg(any(feature = "v3_10", feature = "dox"))] fn get_scale(&self) -> i32 { @@ -487,9 +490,11 @@ impl + IsA> StyleContextExt for O { } } - //fn set_path(&self, path: /*Ignored*/&WidgetPath) { - // unsafe { TODO: call ffi::gtk_style_context_set_path() } - //} + fn set_path(&self, path: &WidgetPath) { + unsafe { + ffi::gtk_style_context_set_path(self.to_glib_none().0, path.to_glib_none().0); + } + } #[cfg(any(feature = "v3_10", feature = "dox"))] fn set_scale(&self, scale: i32) { diff --git a/src/auto/style_provider.rs b/src/auto/style_provider.rs index fec8c08ade..7d9834f201 100644 --- a/src/auto/style_provider.rs +++ b/src/auto/style_provider.rs @@ -2,6 +2,9 @@ // from gir-files (https://github.com/gtk-rs/gir-files @ 77d1f70) // DO NOT EDIT +use IconFactory; +use StyleProperties; +use WidgetPath; use ffi; use glib::object::IsA; use glib::translate::*; @@ -19,25 +22,29 @@ glib_wrapper! { } pub trait StyleProviderExt { - //#[cfg_attr(feature = "v3_8", deprecated)] - //fn get_icon_factory(&self, path: /*Ignored*/&WidgetPath) -> Option; + #[cfg_attr(feature = "v3_8", deprecated)] + fn get_icon_factory(&self, path: &WidgetPath) -> Option; - //#[cfg_attr(feature = "v3_8", deprecated)] - //fn get_style(&self, path: /*Ignored*/&WidgetPath) -> Option; + #[cfg_attr(feature = "v3_8", deprecated)] + fn get_style(&self, path: &WidgetPath) -> Option; - //fn get_style_property>(&self, path: /*Ignored*/&WidgetPath, state: StateFlags, pspec: &P) -> Option; + //fn get_style_property>(&self, path: &WidgetPath, state: StateFlags, pspec: &P) -> Option; } impl> StyleProviderExt for O { - //fn get_icon_factory(&self, path: /*Ignored*/&WidgetPath) -> Option { - // unsafe { TODO: call ffi::gtk_style_provider_get_icon_factory() } - //} + fn get_icon_factory(&self, path: &WidgetPath) -> Option { + unsafe { + from_glib_none(ffi::gtk_style_provider_get_icon_factory(self.to_glib_none().0, path.to_glib_none().0)) + } + } - //fn get_style(&self, path: /*Ignored*/&WidgetPath) -> Option { - // unsafe { TODO: call ffi::gtk_style_provider_get_style() } - //} + fn get_style(&self, path: &WidgetPath) -> Option { + unsafe { + from_glib_full(ffi::gtk_style_provider_get_style(self.to_glib_none().0, path.to_glib_none().0)) + } + } - //fn get_style_property>(&self, path: /*Ignored*/&WidgetPath, state: StateFlags, pspec: &P) -> Option { + //fn get_style_property>(&self, path: &WidgetPath, state: StateFlags, pspec: &P) -> Option { // unsafe { TODO: call ffi::gtk_style_provider_get_style_property() } //} } diff --git a/src/auto/widget.rs b/src/auto/widget.rs index f5e35ab7c6..d173e718c1 100644 --- a/src/auto/widget.rs +++ b/src/auto/widget.rs @@ -21,6 +21,7 @@ use TargetList; use TextDirection; use Tooltip; use WidgetHelpType; +use WidgetPath; use Window; use cairo; use cairo_ffi; @@ -289,7 +290,7 @@ pub trait WidgetExt { fn get_parent_window(&self) -> Option; - //fn get_path(&self) -> /*Ignored*/Option; + fn get_path(&self) -> WidgetPath; fn get_preferred_height(&self) -> (i32, i32); @@ -1432,9 +1433,11 @@ impl + IsA + glib::object::ObjectExt> Widge } } - //fn get_path(&self) -> /*Ignored*/Option { - // unsafe { TODO: call ffi::gtk_widget_get_path() } - //} + fn get_path(&self) -> WidgetPath { + unsafe { + from_glib_none(ffi::gtk_widget_get_path(self.to_glib_none().0)) + } + } fn get_preferred_height(&self) -> (i32, i32) { unsafe { diff --git a/src/auto/widget_path.rs b/src/auto/widget_path.rs new file mode 100644 index 0000000000..2f6d0105a5 --- /dev/null +++ b/src/auto/widget_path.rs @@ -0,0 +1,261 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir @ fbb95f4) +// from gir-files (https://github.com/gtk-rs/gir-files @ 77d1f70) +// DO NOT EDIT + +use RegionFlags; +#[cfg(any(feature = "v3_14", feature = "dox"))] +use StateFlags; +use Widget; +use ffi; +use glib; +use glib::object::IsA; +use glib::translate::*; +use glib_ffi; +use gobject_ffi; +use std::fmt; +use std::mem; +use std::ptr; + +glib_wrapper! { + pub struct WidgetPath(Shared); + + match fn { + ref => |ptr| ffi::gtk_widget_path_ref(ptr), + unref => |ptr| ffi::gtk_widget_path_unref(ptr), + get_type => || ffi::gtk_widget_path_get_type(), + } +} + +impl WidgetPath { + pub fn new() -> WidgetPath { + assert_initialized_main_thread!(); + unsafe { + from_glib_full(ffi::gtk_widget_path_new()) + } + } + + pub fn append_for_widget>(&self, widget: &P) -> i32 { + unsafe { + ffi::gtk_widget_path_append_for_widget(self.to_glib_none().0, widget.to_glib_none().0) + } + } + + pub fn append_type(&self, type_: glib::types::Type) -> i32 { + unsafe { + ffi::gtk_widget_path_append_type(self.to_glib_none().0, type_.to_glib()) + } + } + + pub fn append_with_siblings(&self, siblings: &WidgetPath, sibling_index: u32) -> i32 { + unsafe { + ffi::gtk_widget_path_append_with_siblings(self.to_glib_none().0, siblings.to_glib_none().0, sibling_index) + } + } + + pub fn copy(&self) -> Option { + unsafe { + from_glib_full(ffi::gtk_widget_path_copy(self.to_glib_none().0)) + } + } + + pub fn get_object_type(&self) -> glib::types::Type { + unsafe { + from_glib(ffi::gtk_widget_path_get_object_type(self.to_glib_none().0)) + } + } + + pub fn has_parent(&self, type_: glib::types::Type) -> bool { + unsafe { + from_glib(ffi::gtk_widget_path_has_parent(self.to_glib_none().0, type_.to_glib())) + } + } + + pub fn is_type(&self, type_: glib::types::Type) -> bool { + unsafe { + from_glib(ffi::gtk_widget_path_is_type(self.to_glib_none().0, type_.to_glib())) + } + } + + pub fn iter_add_class(&self, pos: i32, name: &str) { + unsafe { + ffi::gtk_widget_path_iter_add_class(self.to_glib_none().0, pos, name.to_glib_none().0); + } + } + + #[cfg_attr(feature = "v3_14", deprecated)] + pub fn iter_add_region(&self, pos: i32, name: &str, flags: RegionFlags) { + unsafe { + ffi::gtk_widget_path_iter_add_region(self.to_glib_none().0, pos, name.to_glib_none().0, flags.to_glib()); + } + } + + pub fn iter_clear_classes(&self, pos: i32) { + unsafe { + ffi::gtk_widget_path_iter_clear_classes(self.to_glib_none().0, pos); + } + } + + #[cfg_attr(feature = "v3_14", deprecated)] + pub fn iter_clear_regions(&self, pos: i32) { + unsafe { + ffi::gtk_widget_path_iter_clear_regions(self.to_glib_none().0, pos); + } + } + + pub fn iter_get_name(&self, pos: i32) -> Option { + unsafe { + from_glib_none(ffi::gtk_widget_path_iter_get_name(self.to_glib_none().0, pos)) + } + } + + #[cfg(any(feature = "v3_20", feature = "dox"))] + pub fn iter_get_object_name(&self, pos: i32) -> Option { + unsafe { + from_glib_none(ffi::gtk_widget_path_iter_get_object_name(self.to_glib_none().0, pos)) + } + } + + pub fn iter_get_object_type(&self, pos: i32) -> glib::types::Type { + unsafe { + from_glib(ffi::gtk_widget_path_iter_get_object_type(self.to_glib_none().0, pos)) + } + } + + pub fn iter_get_sibling_index(&self, pos: i32) -> u32 { + unsafe { + ffi::gtk_widget_path_iter_get_sibling_index(self.to_glib_none().0, pos) + } + } + + pub fn iter_get_siblings(&self, pos: i32) -> Option { + unsafe { + from_glib_none(ffi::gtk_widget_path_iter_get_siblings(self.to_glib_none().0, pos)) + } + } + + #[cfg(any(feature = "v3_14", feature = "dox"))] + pub fn iter_get_state(&self, pos: i32) -> StateFlags { + unsafe { + from_glib(ffi::gtk_widget_path_iter_get_state(self.to_glib_none().0, pos)) + } + } + + pub fn iter_has_class(&self, pos: i32, name: &str) -> bool { + unsafe { + from_glib(ffi::gtk_widget_path_iter_has_class(self.to_glib_none().0, pos, name.to_glib_none().0)) + } + } + + pub fn iter_has_name(&self, pos: i32, name: &str) -> bool { + unsafe { + from_glib(ffi::gtk_widget_path_iter_has_name(self.to_glib_none().0, pos, name.to_glib_none().0)) + } + } + + //pub fn iter_has_qclass(&self, pos: i32, qname: /*Ignored*/glib::Quark) -> bool { + // unsafe { TODO: call ffi::gtk_widget_path_iter_has_qclass() } + //} + + //pub fn iter_has_qname(&self, pos: i32, qname: /*Ignored*/glib::Quark) -> bool { + // unsafe { TODO: call ffi::gtk_widget_path_iter_has_qname() } + //} + + //#[cfg_attr(feature = "v3_14", deprecated)] + //pub fn iter_has_qregion(&self, pos: i32, qname: /*Ignored*/glib::Quark) -> Option { + // unsafe { TODO: call ffi::gtk_widget_path_iter_has_qregion() } + //} + + #[cfg_attr(feature = "v3_14", deprecated)] + pub fn iter_has_region(&self, pos: i32, name: &str) -> Option { + unsafe { + let mut flags = mem::uninitialized(); + let ret = from_glib(ffi::gtk_widget_path_iter_has_region(self.to_glib_none().0, pos, name.to_glib_none().0, &mut flags)); + if ret { Some(from_glib(flags)) } else { None } + } + } + + pub fn iter_list_classes(&self, pos: i32) -> Vec { + unsafe { + FromGlibPtrContainer::from_glib_container(ffi::gtk_widget_path_iter_list_classes(self.to_glib_none().0, pos)) + } + } + + #[cfg_attr(feature = "v3_14", deprecated)] + pub fn iter_list_regions(&self, pos: i32) -> Vec { + unsafe { + FromGlibPtrContainer::from_glib_container(ffi::gtk_widget_path_iter_list_regions(self.to_glib_none().0, pos)) + } + } + + pub fn iter_remove_class(&self, pos: i32, name: &str) { + unsafe { + ffi::gtk_widget_path_iter_remove_class(self.to_glib_none().0, pos, name.to_glib_none().0); + } + } + + #[cfg_attr(feature = "v3_14", deprecated)] + pub fn iter_remove_region(&self, pos: i32, name: &str) { + unsafe { + ffi::gtk_widget_path_iter_remove_region(self.to_glib_none().0, pos, name.to_glib_none().0); + } + } + + pub fn iter_set_name(&self, pos: i32, name: &str) { + unsafe { + ffi::gtk_widget_path_iter_set_name(self.to_glib_none().0, pos, name.to_glib_none().0); + } + } + + #[cfg(any(feature = "v3_20", feature = "dox"))] + pub fn iter_set_object_name<'a, P: Into>>(&self, pos: i32, name: P) { + let name = name.into(); + let name = name.to_glib_none(); + unsafe { + ffi::gtk_widget_path_iter_set_object_name(self.to_glib_none().0, pos, name.0); + } + } + + pub fn iter_set_object_type(&self, pos: i32, type_: glib::types::Type) { + unsafe { + ffi::gtk_widget_path_iter_set_object_type(self.to_glib_none().0, pos, type_.to_glib()); + } + } + + #[cfg(any(feature = "v3_14", feature = "dox"))] + pub fn iter_set_state(&self, pos: i32, state: StateFlags) { + unsafe { + ffi::gtk_widget_path_iter_set_state(self.to_glib_none().0, pos, state.to_glib()); + } + } + + pub fn length(&self) -> i32 { + unsafe { + ffi::gtk_widget_path_length(self.to_glib_none().0) + } + } + + pub fn prepend_type(&self, type_: glib::types::Type) { + unsafe { + ffi::gtk_widget_path_prepend_type(self.to_glib_none().0, type_.to_glib()); + } + } + + fn to_string(&self) -> String { + unsafe { + from_glib_full(ffi::gtk_widget_path_to_string(self.to_glib_none().0)) + } + } +} + +impl Default for WidgetPath { + fn default() -> Self { + Self::new() + } +} + +impl fmt::Display for WidgetPath { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.to_string()) + } +}