From dd1547a94f52159dc6800cf537c4c9a25b11add5 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 5 Nov 2019 16:27:43 +0100 Subject: [PATCH] subclass: Always allow to override the vfuns of classes --- src/subclass/application_window.rs | 5 ++++- src/subclass/bin.rs | 5 ++++- src/subclass/box_.rs | 5 ++++- src/subclass/container.rs | 2 ++ src/subclass/dialog.rs | 2 ++ src/subclass/event_box.rs | 5 ++++- src/subclass/header_bar.rs | 5 ++++- src/subclass/stack.rs | 5 ++++- src/subclass/widget.rs | 2 ++ src/subclass/window.rs | 2 ++ 10 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/subclass/application_window.rs b/src/subclass/application_window.rs index a90fa69290..57abf6318b 100644 --- a/src/subclass/application_window.rs +++ b/src/subclass/application_window.rs @@ -2,11 +2,14 @@ use glib::subclass::prelude::*; use super::window::WindowImpl; use ApplicationWindowClass; +use WindowClass; pub trait ApplicationWindowImpl: WindowImpl + 'static {} unsafe impl IsSubclassable for ApplicationWindowClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/bin.rs b/src/subclass/bin.rs index c73cb524aa..f4c896de89 100644 --- a/src/subclass/bin.rs +++ b/src/subclass/bin.rs @@ -2,9 +2,12 @@ use glib::subclass::prelude::*; use super::container::ContainerImpl; use BinClass; +use ContainerClass; pub trait BinImpl: ContainerImpl + 'static {} unsafe impl IsSubclassable for BinClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/box_.rs b/src/subclass/box_.rs index 44a43f48f9..208f9d2511 100644 --- a/src/subclass/box_.rs +++ b/src/subclass/box_.rs @@ -2,9 +2,12 @@ use glib::subclass::prelude::*; use super::container::ContainerImpl; use BoxClass; +use ContainerClass; pub trait BoxImpl: ContainerImpl + 'static {} unsafe impl IsSubclassable for BoxClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/container.rs b/src/subclass/container.rs index 2a6de7d833..48f219f937 100644 --- a/src/subclass/container.rs +++ b/src/subclass/container.rs @@ -8,6 +8,7 @@ use super::widget::WidgetImpl; use Container; use ContainerClass; use Widget; +use WidgetClass; use WidgetPath; pub trait ContainerImpl: ContainerImplExt + WidgetImpl + 'static { @@ -115,6 +116,7 @@ impl ContainerImplExt for T { unsafe impl IsSubclassable for ContainerClass { fn override_vfuncs(&mut self) { + >::override_vfuncs(self); unsafe { let klass = &mut *(self as *mut Self as *mut gtk_sys::GtkContainerClass); klass.add = Some(container_add::); diff --git a/src/subclass/dialog.rs b/src/subclass/dialog.rs index cf0e3ab195..bf7df9eba3 100644 --- a/src/subclass/dialog.rs +++ b/src/subclass/dialog.rs @@ -8,6 +8,7 @@ use super::window::WindowImpl; use Dialog; use DialogClass; use ResponseType; +use WindowClass; pub trait DialogImpl: DialogImplExt + WindowImpl + 'static { fn response(&self, dialog: &Dialog, response: ResponseType) { @@ -50,6 +51,7 @@ impl DialogImplExt for T { unsafe impl IsSubclassable for DialogClass { fn override_vfuncs(&mut self) { + >::override_vfuncs(self); unsafe { let klass = &mut *(self as *mut Self as *mut gtk_sys::GtkDialogClass); klass.response = Some(dialog_response::); diff --git a/src/subclass/event_box.rs b/src/subclass/event_box.rs index 357bac6302..c59b990599 100644 --- a/src/subclass/event_box.rs +++ b/src/subclass/event_box.rs @@ -1,10 +1,13 @@ use glib::subclass::prelude::*; use super::bin::BinImpl; +use BinClass; use EventBoxClass; pub trait EventBoxImpl: BinImpl + 'static {} unsafe impl IsSubclassable for EventBoxClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/header_bar.rs b/src/subclass/header_bar.rs index 5d2036e4ef..f4dceb7b71 100644 --- a/src/subclass/header_bar.rs +++ b/src/subclass/header_bar.rs @@ -1,10 +1,13 @@ use glib::subclass::prelude::*; use super::container::ContainerImpl; +use ContainerClass; use HeaderBarClass; pub trait HeaderBarImpl: ContainerImpl + 'static {} unsafe impl IsSubclassable for HeaderBarClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/stack.rs b/src/subclass/stack.rs index c52d22ebd4..92873b64d1 100644 --- a/src/subclass/stack.rs +++ b/src/subclass/stack.rs @@ -1,10 +1,13 @@ use glib::subclass::prelude::*; use super::container::ContainerImpl; +use ContainerClass; use StackClass; pub trait StackImpl: ContainerImpl + 'static {} unsafe impl IsSubclassable for StackClass { - fn override_vfuncs(&mut self) {} + fn override_vfuncs(&mut self) { + >::override_vfuncs(self); + } } diff --git a/src/subclass/widget.rs b/src/subclass/widget.rs index bb1b2052b6..dadd6539c2 100644 --- a/src/subclass/widget.rs +++ b/src/subclass/widget.rs @@ -3,6 +3,7 @@ use gtk_sys; use glib::translate::*; use glib::subclass::prelude::*; +use glib::ObjectClass; use crate::DragResult; use crate::Inhibit; @@ -689,6 +690,7 @@ impl WidgetImplExt for T { unsafe impl IsSubclassable for WidgetClass { fn override_vfuncs(&mut self) { + >::override_vfuncs(self); unsafe { let klass = &mut *(self as *mut Self as *mut gtk_sys::GtkWidgetClass); klass.adjust_baseline_allocation = Some(widget_adjust_baseline_allocation::); diff --git a/src/subclass/window.rs b/src/subclass/window.rs index d886105b14..1d6dc10645 100644 --- a/src/subclass/window.rs +++ b/src/subclass/window.rs @@ -5,6 +5,7 @@ use glib::translate::*; use glib::subclass::prelude::*; use super::bin::BinImpl; +use BinClass; use Widget; use Window; use WindowClass; @@ -98,6 +99,7 @@ impl WindowImplExt for T { unsafe impl IsSubclassable for WindowClass { fn override_vfuncs(&mut self) { + >::override_vfuncs(self); unsafe { let klass = &mut *(self as *mut Self as *mut gtk_sys::GtkWindowClass); klass.set_focus = Some(window_set_focus::);