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

Commit 9a9c60c

Browse files
authored
Merge pull request #786 from pbor/winstate
widget: support window_state_event when subclassing
2 parents e4b66aa + d088f83 commit 9a9c60c

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

gtk/src/subclass/widget.rs

+33
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ pub trait WidgetImpl: WidgetImplExt + ObjectImpl {
7979
self.parent_configure_event(event)
8080
}
8181

82+
fn window_state_event(&self, event: &gdk::EventWindowState) -> Inhibit {
83+
self.parent_window_state_event(event)
84+
}
85+
8286
fn damage_event(&self, event: &gdk::EventExpose) -> Inhibit {
8387
self.parent_damage_event(event)
8488
}
@@ -252,6 +256,7 @@ pub trait WidgetImplExt: ObjectSubclass {
252256
fn parent_composited_changed(&self);
253257
fn parent_compute_expand(&self, hexpand: &mut bool, vexpand: &mut bool);
254258
fn parent_configure_event(&self, event: &gdk::EventConfigure) -> Inhibit;
259+
fn parent_window_state_event(&self, event: &gdk::EventWindowState) -> Inhibit;
255260
fn parent_damage_event(&self, event: &gdk::EventExpose) -> Inhibit;
256261
fn parent_delete_event(&self, event: &gdk::Event) -> Inhibit;
257262
fn parent_destroy(&self);
@@ -487,6 +492,22 @@ impl<T: WidgetImpl> WidgetImplExt for T {
487492
}
488493
}
489494

495+
fn parent_window_state_event(&self, event: &gdk::EventWindowState) -> Inhibit {
496+
unsafe {
497+
let data = T::type_data();
498+
let parent_class = data.as_ref().parent_class() as *mut ffi::GtkWidgetClass;
499+
if let Some(f) = (*parent_class).window_state_event {
500+
let ev_glib = glib::translate::mut_override(event.to_glib_none().0);
501+
Inhibit(from_glib(f(
502+
self.obj().unsafe_cast_ref::<Widget>().to_glib_none().0,
503+
ev_glib,
504+
)))
505+
} else {
506+
Inhibit(false)
507+
}
508+
}
509+
}
510+
490511
fn parent_damage_event(&self, event: &gdk::EventExpose) -> Inhibit {
491512
unsafe {
492513
let data = T::type_data();
@@ -959,6 +980,7 @@ unsafe impl<T: WidgetImpl> IsSubclassable<T> for Widget {
959980
klass.composited_changed = Some(widget_composited_changed::<T>);
960981
klass.compute_expand = Some(widget_compute_expand::<T>);
961982
klass.configure_event = Some(widget_configure_event::<T>);
983+
klass.window_state_event = Some(widget_window_state_event::<T>);
962984
klass.damage_event = Some(widget_damage_event::<T>);
963985
klass.delete_event = Some(widget_delete_event::<T>);
964986
klass.destroy = Some(widget_destroy::<T>);
@@ -1136,6 +1158,17 @@ unsafe extern "C" fn widget_configure_event<T: WidgetImpl>(
11361158
imp.configure_event(&evwrap).into_glib()
11371159
}
11381160

1161+
unsafe extern "C" fn widget_window_state_event<T: WidgetImpl>(
1162+
ptr: *mut ffi::GtkWidget,
1163+
winstateptr: *mut gdk::ffi::GdkEventWindowState,
1164+
) -> glib::ffi::gboolean {
1165+
let instance = &*(ptr as *mut T::Instance);
1166+
let imp = instance.imp();
1167+
let evwrap: Borrowed<gdk::EventWindowState> = from_glib_borrow(winstateptr);
1168+
1169+
imp.window_state_event(&evwrap).into_glib()
1170+
}
1171+
11391172
unsafe extern "C" fn widget_damage_event<T: WidgetImpl>(
11401173
ptr: *mut ffi::GtkWidget,
11411174
exposeptr: *mut gdk::ffi::GdkEventExpose,

0 commit comments

Comments
 (0)