Skip to content
This repository was archived by the owner on Mar 4, 2024. It is now read-only.

Commit 63cc757

Browse files
authored
Merge pull request #691 from lucab/ups/gtk-builder-bools
gtk/builder: manually implement several methods (custom return codes)
2 parents 52000cd + f97e43c commit 63cc757

File tree

3 files changed

+150
-136
lines changed

3 files changed

+150
-136
lines changed

gtk/Gir.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,21 @@ manual_traits = ["BuilderExtManual"]
527527
#downcast
528528
ignore = true
529529
doc_trait_name = "BuilderExtManual"
530+
[[object.function]]
531+
pattern = "add_from_.+"
532+
#non-boolean return code
533+
manual = true
534+
doc_trait_name = "BuilderExtManual"
535+
[[object.function]]
536+
pattern = "add_objects_from_.+"
537+
#non-boolean return code
538+
manual = true
539+
doc_trait_name = "BuilderExtManual"
540+
[[object.function]]
541+
pattern = "extend_with_template"
542+
#non-boolean return code
543+
manual = true
544+
doc_trait_name = "BuilderExtManual"
530545

531546
[[object]]
532547
name = "Gtk.Button"

gtk/src/auto/builder.rs

Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// DO NOT EDIT
44

55
use crate::Application;
6-
use crate::Widget;
76
use glib::object::Cast;
87
use glib::object::IsA;
98
use glib::signal::connect_raw;
@@ -70,37 +69,12 @@ pub trait BuilderExt: 'static {
7069
//#[doc(alias = "gtk_builder_add_callback_symbols")]
7170
//fn add_callback_symbols<P: FnOnce() + 'static>(&self, first_callback_name: &str, first_callback_symbol: P, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs);
7271

73-
#[doc(alias = "gtk_builder_add_from_resource")]
74-
fn add_from_resource(&self, resource_path: &str) -> Result<(), glib::Error>;
75-
76-
#[doc(alias = "gtk_builder_add_from_string")]
77-
fn add_from_string(&self, buffer: &str) -> Result<(), glib::Error>;
78-
79-
#[doc(alias = "gtk_builder_add_objects_from_resource")]
80-
fn add_objects_from_resource(
81-
&self,
82-
resource_path: &str,
83-
object_ids: &[&str],
84-
) -> Result<(), glib::Error>;
85-
86-
#[doc(alias = "gtk_builder_add_objects_from_string")]
87-
fn add_objects_from_string(&self, buffer: &str, object_ids: &[&str])
88-
-> Result<(), glib::Error>;
89-
9072
//#[doc(alias = "gtk_builder_connect_signals")]
9173
//fn connect_signals(&self, user_data: /*Unimplemented*/Option<Fundamental: Pointer>);
9274

9375
#[doc(alias = "gtk_builder_expose_object")]
9476
fn expose_object(&self, name: &str, object: &impl IsA<glib::Object>);
9577

96-
#[doc(alias = "gtk_builder_extend_with_template")]
97-
fn extend_with_template(
98-
&self,
99-
widget: &impl IsA<Widget>,
100-
template_type: glib::types::Type,
101-
buffer: &str,
102-
) -> Result<(), glib::Error>;
103-
10478
#[doc(alias = "gtk_builder_get_application")]
10579
#[doc(alias = "get_application")]
10680
fn application(&self) -> Option<Application>;
@@ -153,88 +127,6 @@ impl<O: IsA<Builder>> BuilderExt for O {
153127
// unsafe { TODO: call ffi:gtk_builder_add_callback_symbols() }
154128
//}
155129

156-
fn add_from_resource(&self, resource_path: &str) -> Result<(), glib::Error> {
157-
unsafe {
158-
let mut error = ptr::null_mut();
159-
let is_ok = ffi::gtk_builder_add_from_resource(
160-
self.as_ref().to_glib_none().0,
161-
resource_path.to_glib_none().0,
162-
&mut error,
163-
);
164-
assert_eq!(is_ok == 0, !error.is_null());
165-
if error.is_null() {
166-
Ok(())
167-
} else {
168-
Err(from_glib_full(error))
169-
}
170-
}
171-
}
172-
173-
fn add_from_string(&self, buffer: &str) -> Result<(), glib::Error> {
174-
let length = buffer.len() as usize;
175-
unsafe {
176-
let mut error = ptr::null_mut();
177-
let is_ok = ffi::gtk_builder_add_from_string(
178-
self.as_ref().to_glib_none().0,
179-
buffer.to_glib_none().0,
180-
length,
181-
&mut error,
182-
);
183-
assert_eq!(is_ok == 0, !error.is_null());
184-
if error.is_null() {
185-
Ok(())
186-
} else {
187-
Err(from_glib_full(error))
188-
}
189-
}
190-
}
191-
192-
fn add_objects_from_resource(
193-
&self,
194-
resource_path: &str,
195-
object_ids: &[&str],
196-
) -> Result<(), glib::Error> {
197-
unsafe {
198-
let mut error = ptr::null_mut();
199-
let is_ok = ffi::gtk_builder_add_objects_from_resource(
200-
self.as_ref().to_glib_none().0,
201-
resource_path.to_glib_none().0,
202-
object_ids.to_glib_none().0,
203-
&mut error,
204-
);
205-
assert_eq!(is_ok == 0, !error.is_null());
206-
if error.is_null() {
207-
Ok(())
208-
} else {
209-
Err(from_glib_full(error))
210-
}
211-
}
212-
}
213-
214-
fn add_objects_from_string(
215-
&self,
216-
buffer: &str,
217-
object_ids: &[&str],
218-
) -> Result<(), glib::Error> {
219-
let length = buffer.len() as usize;
220-
unsafe {
221-
let mut error = ptr::null_mut();
222-
let is_ok = ffi::gtk_builder_add_objects_from_string(
223-
self.as_ref().to_glib_none().0,
224-
buffer.to_glib_none().0,
225-
length,
226-
object_ids.to_glib_none().0,
227-
&mut error,
228-
);
229-
assert_eq!(is_ok == 0, !error.is_null());
230-
if error.is_null() {
231-
Ok(())
232-
} else {
233-
Err(from_glib_full(error))
234-
}
235-
}
236-
}
237-
238130
//fn connect_signals(&self, user_data: /*Unimplemented*/Option<Fundamental: Pointer>) {
239131
// unsafe { TODO: call ffi:gtk_builder_connect_signals() }
240132
//}
@@ -249,32 +141,6 @@ impl<O: IsA<Builder>> BuilderExt for O {
249141
}
250142
}
251143

252-
fn extend_with_template(
253-
&self,
254-
widget: &impl IsA<Widget>,
255-
template_type: glib::types::Type,
256-
buffer: &str,
257-
) -> Result<(), glib::Error> {
258-
let length = buffer.len() as usize;
259-
unsafe {
260-
let mut error = ptr::null_mut();
261-
let is_ok = ffi::gtk_builder_extend_with_template(
262-
self.as_ref().to_glib_none().0,
263-
widget.as_ref().to_glib_none().0,
264-
template_type.into_glib(),
265-
buffer.to_glib_none().0,
266-
length,
267-
&mut error,
268-
);
269-
assert_eq!(is_ok == 0, !error.is_null());
270-
if error.is_null() {
271-
Ok(())
272-
} else {
273-
Err(from_glib_full(error))
274-
}
275-
}
276-
}
277-
278144
fn application(&self) -> Option<Application> {
279145
unsafe {
280146
from_glib_none(ffi::gtk_builder_get_application(

gtk/src/builder.rs

Lines changed: 135 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

3-
use crate::Builder;
3+
use crate::{Builder, Widget};
44
use glib::prelude::*;
55
use glib::translate::*;
66
use glib::GString;
77
use glib::Object;
88
use std::path::Path;
9+
use std::ptr;
910

1011
impl Builder {
1112
#[doc(alias = "gtk_builder_new_from_file")]
@@ -26,13 +27,36 @@ pub trait BuilderExtManual: 'static {
2627

2728
#[doc(alias = "gtk_builder_add_from_file")]
2829
fn add_from_file<T: AsRef<Path>>(&self, file_path: T) -> Result<(), glib::Error>;
30+
#[doc(alias = "gtk_builder_add_from_resource")]
31+
fn add_from_resource(&self, resource_path: &str) -> Result<(), glib::Error>;
32+
#[doc(alias = "gtk_builder_add_from_string")]
33+
fn add_from_string(&self, buffer: &str) -> Result<(), glib::Error>;
34+
35+
#[doc(alias = "gtk_builder_add_objects_from_resource")]
36+
fn add_objects_from_resource(
37+
&self,
38+
resource_path: &str,
39+
object_ids: &[&str],
40+
) -> Result<(), glib::Error>;
41+
#[doc(alias = "gtk_builder_add_objects_from_string")]
42+
fn add_objects_from_string(&self, buffer: &str, object_ids: &[&str])
43+
-> Result<(), glib::Error>;
44+
2945
#[doc(alias = "gtk_builder_connect_signals_full")]
3046
fn connect_signals<
3147
P: FnMut(&Builder, &str) -> Box<dyn Fn(&[glib::Value]) -> Option<glib::Value> + 'static>,
3248
>(
3349
&self,
3450
func: P,
3551
);
52+
53+
#[doc(alias = "gtk_builder_extend_with_template")]
54+
fn extend_with_template(
55+
&self,
56+
widget: &impl IsA<Widget>,
57+
template_type: glib::types::Type,
58+
buffer: &str,
59+
) -> Result<(), glib::Error>;
3660
}
3761

3862
impl<O: IsA<Builder>> BuilderExtManual for O {
@@ -49,11 +73,94 @@ impl<O: IsA<Builder>> BuilderExtManual for O {
4973
fn add_from_file<T: AsRef<Path>>(&self, file_path: T) -> Result<(), glib::Error> {
5074
unsafe {
5175
let mut error = ::std::ptr::null_mut();
52-
ffi::gtk_builder_add_from_file(
76+
let exit_code = ffi::gtk_builder_add_from_file(
5377
self.upcast_ref().to_glib_none().0,
5478
file_path.as_ref().to_glib_none().0,
5579
&mut error,
5680
);
81+
assert_eq!(exit_code == 0, !error.is_null());
82+
if error.is_null() {
83+
Ok(())
84+
} else {
85+
Err(from_glib_full(error))
86+
}
87+
}
88+
}
89+
90+
fn add_from_resource(&self, resource_path: &str) -> Result<(), glib::Error> {
91+
unsafe {
92+
let mut error = ptr::null_mut();
93+
let exit_code = ffi::gtk_builder_add_from_resource(
94+
self.as_ref().to_glib_none().0,
95+
resource_path.to_glib_none().0,
96+
&mut error,
97+
);
98+
assert_eq!(exit_code == 0, !error.is_null());
99+
if error.is_null() {
100+
Ok(())
101+
} else {
102+
Err(from_glib_full(error))
103+
}
104+
}
105+
}
106+
107+
fn add_from_string(&self, buffer: &str) -> Result<(), glib::Error> {
108+
let length = buffer.len() as usize;
109+
unsafe {
110+
let mut error = ptr::null_mut();
111+
let exit_code = ffi::gtk_builder_add_from_string(
112+
self.as_ref().to_glib_none().0,
113+
buffer.to_glib_none().0,
114+
length,
115+
&mut error,
116+
);
117+
assert_eq!(exit_code == 0, !error.is_null());
118+
if error.is_null() {
119+
Ok(())
120+
} else {
121+
Err(from_glib_full(error))
122+
}
123+
}
124+
}
125+
126+
fn add_objects_from_resource(
127+
&self,
128+
resource_path: &str,
129+
object_ids: &[&str],
130+
) -> Result<(), glib::Error> {
131+
unsafe {
132+
let mut error = ptr::null_mut();
133+
let exit_code = ffi::gtk_builder_add_objects_from_resource(
134+
self.as_ref().to_glib_none().0,
135+
resource_path.to_glib_none().0,
136+
object_ids.to_glib_none().0,
137+
&mut error,
138+
);
139+
assert_eq!(exit_code == 0, !error.is_null());
140+
if error.is_null() {
141+
Ok(())
142+
} else {
143+
Err(from_glib_full(error))
144+
}
145+
}
146+
}
147+
148+
fn add_objects_from_string(
149+
&self,
150+
buffer: &str,
151+
object_ids: &[&str],
152+
) -> Result<(), glib::Error> {
153+
let length = buffer.len() as usize;
154+
unsafe {
155+
let mut error = ptr::null_mut();
156+
let exit_code = ffi::gtk_builder_add_objects_from_string(
157+
self.as_ref().to_glib_none().0,
158+
buffer.to_glib_none().0,
159+
length,
160+
object_ids.to_glib_none().0,
161+
&mut error,
162+
);
163+
assert_eq!(exit_code == 0, !error.is_null());
57164
if error.is_null() {
58165
Ok(())
59166
} else {
@@ -110,4 +217,30 @@ impl<O: IsA<Builder>> BuilderExtManual for O {
110217
);
111218
}
112219
}
220+
221+
fn extend_with_template(
222+
&self,
223+
widget: &impl IsA<Widget>,
224+
template_type: glib::types::Type,
225+
buffer: &str,
226+
) -> Result<(), glib::Error> {
227+
let length = buffer.len() as usize;
228+
unsafe {
229+
let mut error = ptr::null_mut();
230+
let exit_code = ffi::gtk_builder_extend_with_template(
231+
self.as_ref().to_glib_none().0,
232+
widget.as_ref().to_glib_none().0,
233+
template_type.into_glib(),
234+
buffer.to_glib_none().0,
235+
length,
236+
&mut error,
237+
);
238+
assert_eq!(exit_code == 0, !error.is_null());
239+
if error.is_null() {
240+
Ok(())
241+
} else {
242+
Err(from_glib_full(error))
243+
}
244+
}
245+
}
113246
}

0 commit comments

Comments
 (0)