Skip to content

Commit d50724f

Browse files
committed
Add additional type bounds to Impl traits
1 parent 739e2fa commit d50724f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1046
-134
lines changed

examples/virtual_methods/base_button/mod.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ impl<O: IsA<BaseButton>> BaseButtonExt for O {}
6363
pub trait BaseButtonImpl: ButtonImpl
6464
where
6565
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
66+
<Self as ObjectSubclass>::Type: IsA<gtk::Widget>,
67+
<Self as ObjectSubclass>::Type: IsA<gtk::Button>,
6668
{
6769
/// Default implementation of a virtual method.
6870
///
@@ -91,6 +93,8 @@ where
9193
pub trait BaseButtonImplExt: BaseButtonImpl
9294
where
9395
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
96+
<Self as ObjectSubclass>::Type: IsA<gtk::Widget>,
97+
<Self as ObjectSubclass>::Type: IsA<gtk::Button>,
9498
{
9599
/// Retrieves the parent class' implementation of the virtual method and
96100
/// calls it.
@@ -113,12 +117,20 @@ where
113117
}
114118
}
115119

116-
impl<T: BaseButtonImpl> BaseButtonImplExt for T where <T as ObjectSubclass>::Type: IsA<glib::Object> {}
120+
impl<T: BaseButtonImpl> BaseButtonImplExt for T
121+
where
122+
<T as ObjectSubclass>::Type: IsA<glib::Object>,
123+
<T as ObjectSubclass>::Type: IsA<gtk::Widget>,
124+
<T as ObjectSubclass>::Type: IsA<gtk::Button>,
125+
{
126+
}
117127

118128
/// This allows to implement subclasses of `BaseButton`.
119129
unsafe impl<T: BaseButtonImpl> IsSubclassable<T> for BaseButton
120130
where
121131
<T as ObjectSubclass>::Type: IsA<glib::Object>,
132+
<T as ObjectSubclass>::Type: IsA<gtk::Widget>,
133+
<T as ObjectSubclass>::Type: IsA<gtk::Button>,
122134
{
123135
/// Called whenever the class of a `BaseButton` subclass is initialized,
124136
/// i.e. usually right before the first instance of it is created.

gdk4/src/subclass/content_provider.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::{ffi, prelude::*, subclass::prelude::*, Clipboard, ContentFormats, Co
1212
pub trait ContentProviderImpl: ObjectImpl
1313
where
1414
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
15+
<Self as ObjectSubclass>::Type: IsA<ContentProvider>,
1516
{
1617
fn content_changed(&self) {
1718
self.parent_content_changed()
@@ -50,6 +51,7 @@ where
5051
pub trait ContentProviderImplExt: ContentProviderImpl
5152
where
5253
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
54+
<Self as ObjectSubclass>::Type: IsA<ContentProvider>,
5355
{
5456
fn parent_content_changed(&self) {
5557
unsafe {
@@ -261,14 +263,17 @@ where
261263
}
262264
}
263265

264-
impl<T: ContentProviderImpl> ContentProviderImplExt for T where
265-
<T as ObjectSubclass>::Type: IsA<glib::Object>
266+
impl<T: ContentProviderImpl> ContentProviderImplExt for T
267+
where
268+
<T as ObjectSubclass>::Type: IsA<glib::Object>,
269+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
266270
{
267271
}
268272

269273
unsafe impl<T: ContentProviderImpl> IsSubclassable<T> for ContentProvider
270274
where
271275
<T as ObjectSubclass>::Type: IsA<glib::Object>,
276+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
272277
{
273278
fn class_init(class: &mut glib::Class<Self>) {
274279
Self::parent_class_init::<T>(class);
@@ -289,6 +294,7 @@ unsafe extern "C" fn content_provider_content_changed<T: ContentProviderImpl>(
289294
ptr: *mut ffi::GdkContentProvider,
290295
) where
291296
<T as ObjectSubclass>::Type: IsA<glib::Object>,
297+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
292298
{
293299
let instance = &*(ptr as *mut T::Instance);
294300
let imp = instance.imp();
@@ -301,6 +307,7 @@ unsafe extern "C" fn content_provider_attach_clipboard<T: ContentProviderImpl>(
301307
clipboard_ptr: *mut ffi::GdkClipboard,
302308
) where
303309
<T as ObjectSubclass>::Type: IsA<glib::Object>,
310+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
304311
{
305312
let instance = &*(ptr as *mut T::Instance);
306313
let imp = instance.imp();
@@ -314,6 +321,7 @@ unsafe extern "C" fn content_provider_detach_clipboard<T: ContentProviderImpl>(
314321
clipboard_ptr: *mut ffi::GdkClipboard,
315322
) where
316323
<T as ObjectSubclass>::Type: IsA<glib::Object>,
324+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
317325
{
318326
let instance = &*(ptr as *mut T::Instance);
319327
let imp = instance.imp();
@@ -327,6 +335,7 @@ unsafe extern "C" fn content_provider_formats<T: ContentProviderImpl>(
327335
) -> *mut ffi::GdkContentFormats
328336
where
329337
<T as ObjectSubclass>::Type: IsA<glib::Object>,
338+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
330339
{
331340
let instance = &*(ptr as *mut T::Instance);
332341
let imp = instance.imp();
@@ -339,6 +348,7 @@ unsafe extern "C" fn content_provider_storable_formats<T: ContentProviderImpl>(
339348
) -> *mut ffi::GdkContentFormats
340349
where
341350
<T as ObjectSubclass>::Type: IsA<glib::Object>,
351+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
342352
{
343353
let instance = &*(ptr as *mut T::Instance);
344354
let imp = instance.imp();
@@ -356,6 +366,7 @@ unsafe extern "C" fn content_provider_write_mime_type_async<T: ContentProviderIm
356366
user_data: glib::ffi::gpointer,
357367
) where
358368
<T as ObjectSubclass>::Type: IsA<glib::Object>,
369+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
359370
{
360371
let instance = &*(ptr as *mut T::Instance);
361372
let imp = instance.imp();
@@ -418,6 +429,7 @@ unsafe extern "C" fn content_provider_get_value<T: ContentProviderImpl>(
418429
) -> glib::ffi::gboolean
419430
where
420431
<T as ObjectSubclass>::Type: IsA<glib::Object>,
432+
<T as ObjectSubclass>::Type: IsA<ContentProvider>,
421433
{
422434
let instance = &*(ptr as *mut T::Instance);
423435
let imp = instance.imp();

gdk4/src/subclass/paintable.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::{ffi, prelude::*, subclass::prelude::*, Paintable, PaintableFlags, Sn
1111
pub trait PaintableImpl: ObjectImpl
1212
where
1313
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
14+
<Self as ObjectSubclass>::Type: IsA<Paintable>,
1415
{
1516
#[doc(alias = "get_current_image")]
1617
fn current_image(&self) -> Paintable {
@@ -43,6 +44,7 @@ where
4344
pub trait PaintableImplExt: PaintableImpl
4445
where
4546
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
47+
<Self as ObjectSubclass>::Type: IsA<Paintable>,
4648
{
4749
fn parent_current_image(&self) -> Paintable {
4850
unsafe {
@@ -132,11 +134,17 @@ where
132134
}
133135
}
134136

135-
impl<T: PaintableImpl> PaintableImplExt for T where <T as ObjectSubclass>::Type: IsA<glib::Object> {}
137+
impl<T: PaintableImpl> PaintableImplExt for T
138+
where
139+
<T as ObjectSubclass>::Type: IsA<glib::Object>,
140+
<T as ObjectSubclass>::Type: IsA<Paintable>,
141+
{
142+
}
136143

137144
unsafe impl<T: PaintableImpl> IsImplementable<T> for Paintable
138145
where
139146
<T as ObjectSubclass>::Type: IsA<glib::Object>,
147+
<T as ObjectSubclass>::Type: IsA<Paintable>,
140148
{
141149
fn interface_init(iface: &mut glib::Interface<Self>) {
142150
let iface = iface.as_mut();
@@ -155,6 +163,7 @@ unsafe extern "C" fn paintable_get_current_image<T: PaintableImpl>(
155163
) -> *mut ffi::GdkPaintable
156164
where
157165
<T as ObjectSubclass>::Type: IsA<glib::Object>,
166+
<T as ObjectSubclass>::Type: IsA<Paintable>,
158167
{
159168
let instance = &*(paintable as *mut T::Instance);
160169
let imp = instance.imp();
@@ -167,6 +176,7 @@ unsafe extern "C" fn paintable_get_flags<T: PaintableImpl>(
167176
) -> ffi::GdkPaintableFlags
168177
where
169178
<T as ObjectSubclass>::Type: IsA<glib::Object>,
179+
<T as ObjectSubclass>::Type: IsA<Paintable>,
170180
{
171181
let instance = &*(paintable as *mut T::Instance);
172182
let imp = instance.imp();
@@ -179,6 +189,7 @@ unsafe extern "C" fn paintable_get_intrinsic_width<T: PaintableImpl>(
179189
) -> i32
180190
where
181191
<T as ObjectSubclass>::Type: IsA<glib::Object>,
192+
<T as ObjectSubclass>::Type: IsA<Paintable>,
182193
{
183194
let instance = &*(paintable as *mut T::Instance);
184195
let imp = instance.imp();
@@ -191,6 +202,7 @@ unsafe extern "C" fn paintable_get_intrinsic_height<T: PaintableImpl>(
191202
) -> i32
192203
where
193204
<T as ObjectSubclass>::Type: IsA<glib::Object>,
205+
<T as ObjectSubclass>::Type: IsA<Paintable>,
194206
{
195207
let instance = &*(paintable as *mut T::Instance);
196208
let imp = instance.imp();
@@ -203,6 +215,7 @@ unsafe extern "C" fn paintable_get_intrinsic_aspect_ratio<T: PaintableImpl>(
203215
) -> f64
204216
where
205217
<T as ObjectSubclass>::Type: IsA<glib::Object>,
218+
<T as ObjectSubclass>::Type: IsA<Paintable>,
206219
{
207220
let instance = &*(paintable as *mut T::Instance);
208221
let imp = instance.imp();
@@ -217,6 +230,7 @@ unsafe extern "C" fn paintable_snapshot<T: PaintableImpl>(
217230
height: f64,
218231
) where
219232
<T as ObjectSubclass>::Type: IsA<glib::Object>,
233+
<T as ObjectSubclass>::Type: IsA<Paintable>,
220234
{
221235
let instance = &*(paintable as *mut T::Instance);
222236
let imp = instance.imp();

gtk4/src/subclass/accessible.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::{
1515
pub trait AccessibleImpl: ObjectImpl
1616
where
1717
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
18+
<Self as ObjectSubclass>::Type: IsA<Accessible>,
1819
{
1920
#[doc(alias = "get_platform_state")]
2021
fn platform_state(&self, state: AccessiblePlatformState) -> bool {
@@ -50,6 +51,7 @@ where
5051
pub trait AccessibleImplExt: AccessibleImpl
5152
where
5253
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
54+
<Self as ObjectSubclass>::Type: IsA<Accessible>,
5355
{
5456
fn parent_platform_state(&self, state: AccessiblePlatformState) -> bool {
5557
unsafe {
@@ -167,11 +169,17 @@ where
167169
}
168170
}
169171

170-
impl<T: AccessibleImpl> AccessibleImplExt for T where <T as ObjectSubclass>::Type: IsA<glib::Object> {}
172+
impl<T: AccessibleImpl> AccessibleImplExt for T
173+
where
174+
<T as ObjectSubclass>::Type: IsA<glib::Object>,
175+
<T as ObjectSubclass>::Type: IsA<Accessible>,
176+
{
177+
}
171178

172179
unsafe impl<T: AccessibleImpl> IsImplementable<T> for Accessible
173180
where
174181
<T as ObjectSubclass>::Type: IsA<glib::Object>,
182+
<T as ObjectSubclass>::Type: IsA<Accessible>,
175183
{
176184
fn interface_init(iface: &mut glib::Interface<Self>) {
177185
let iface = iface.as_mut();
@@ -191,6 +199,7 @@ unsafe extern "C" fn accessible_get_platform_state<T: AccessibleImpl>(
191199
) -> glib::ffi::gboolean
192200
where
193201
<T as ObjectSubclass>::Type: IsA<glib::Object>,
202+
<T as ObjectSubclass>::Type: IsA<Accessible>,
194203
{
195204
let instance = &*(accessible as *mut T::Instance);
196205
let imp = instance.imp();
@@ -207,6 +216,7 @@ unsafe extern "C" fn accessible_get_bounds<T: AccessibleImpl>(
207216
) -> glib::ffi::gboolean
208217
where
209218
<T as ObjectSubclass>::Type: IsA<glib::Object>,
219+
<T as ObjectSubclass>::Type: IsA<Accessible>,
210220
{
211221
let instance = &*(accessible as *mut T::Instance);
212222
let imp = instance.imp();
@@ -228,6 +238,7 @@ unsafe extern "C" fn accessible_get_at_context<T: AccessibleImpl>(
228238
) -> *mut ffi::GtkATContext
229239
where
230240
<T as ObjectSubclass>::Type: IsA<glib::Object>,
241+
<T as ObjectSubclass>::Type: IsA<Accessible>,
231242
{
232243
let instance = &*(accessible as *mut T::Instance);
233244
let imp = instance.imp();
@@ -240,6 +251,7 @@ unsafe extern "C" fn accessible_get_accessible_parent<T: AccessibleImpl>(
240251
) -> *mut ffi::GtkAccessible
241252
where
242253
<T as ObjectSubclass>::Type: IsA<glib::Object>,
254+
<T as ObjectSubclass>::Type: IsA<Accessible>,
243255
{
244256
let instance = &*(accessible as *mut T::Instance);
245257
let imp = instance.imp();
@@ -252,6 +264,7 @@ unsafe extern "C" fn accessible_get_first_accessible_child<T: AccessibleImpl>(
252264
) -> *mut ffi::GtkAccessible
253265
where
254266
<T as ObjectSubclass>::Type: IsA<glib::Object>,
267+
<T as ObjectSubclass>::Type: IsA<Accessible>,
255268
{
256269
let instance = &*(accessible as *mut T::Instance);
257270
let imp = instance.imp();
@@ -264,6 +277,7 @@ unsafe extern "C" fn accessible_get_next_accessible_sibling<T: AccessibleImpl>(
264277
) -> *mut ffi::GtkAccessible
265278
where
266279
<T as ObjectSubclass>::Type: IsA<glib::Object>,
280+
<T as ObjectSubclass>::Type: IsA<Accessible>,
267281
{
268282
let instance = &*(accessible as *mut T::Instance);
269283
let imp = instance.imp();

gtk4/src/subclass/accessible_range.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
77
use glib::translate::*;
88

9-
use crate::{ffi, prelude::*, subclass::prelude::*, AccessibleRange};
9+
use crate::{ffi, prelude::*, subclass::prelude::*, AccessibleRange, Widget};
1010

1111
pub trait AccessibleRangeImpl: WidgetImpl
1212
where
1313
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
14+
<Self as ObjectSubclass>::Type: IsA<Widget>,
15+
<Self as ObjectSubclass>::Type: IsA<AccessibleRange>,
1416
{
1517
fn set_current_value(&self, value: f64) -> bool {
1618
self.parent_set_current_value(value)
@@ -20,6 +22,8 @@ where
2022
pub trait AccessibleRangeImplExt: AccessibleRangeImpl
2123
where
2224
<Self as ObjectSubclass>::Type: IsA<glib::Object>,
25+
<Self as ObjectSubclass>::Type: IsA<Widget>,
26+
<Self as ObjectSubclass>::Type: IsA<AccessibleRange>,
2327
{
2428
// Returns true if the operation was performed, false otherwise
2529
fn parent_set_current_value(&self, value: f64) -> bool {
@@ -43,14 +47,19 @@ where
4347
}
4448
}
4549

46-
impl<T: AccessibleRangeImpl> AccessibleRangeImplExt for T where
47-
<T as ObjectSubclass>::Type: IsA<glib::Object>
50+
impl<T: AccessibleRangeImpl> AccessibleRangeImplExt for T
51+
where
52+
<T as ObjectSubclass>::Type: IsA<glib::Object>,
53+
<T as ObjectSubclass>::Type: IsA<Widget>,
54+
<T as ObjectSubclass>::Type: IsA<AccessibleRange>,
4855
{
4956
}
5057

5158
unsafe impl<T: AccessibleRangeImpl> IsImplementable<T> for AccessibleRange
5259
where
5360
<T as ObjectSubclass>::Type: IsA<glib::Object>,
61+
<T as ObjectSubclass>::Type: IsA<Widget>,
62+
<T as ObjectSubclass>::Type: IsA<AccessibleRange>,
5463
{
5564
fn interface_init(iface: &mut glib::Interface<Self>) {
5665
let iface = iface.as_mut();
@@ -65,6 +74,8 @@ unsafe extern "C" fn accessible_range_set_current_value<T: AccessibleRangeImpl>(
6574
) -> glib::ffi::gboolean
6675
where
6776
<T as ObjectSubclass>::Type: IsA<glib::Object>,
77+
<T as ObjectSubclass>::Type: IsA<Widget>,
78+
<T as ObjectSubclass>::Type: IsA<AccessibleRange>,
6879
{
6980
let instance = &*(accessible_range as *mut T::Instance);
7081
let imp = instance.imp();

0 commit comments

Comments
 (0)