1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
// // Copyright (C) 2019 Robert Gill <locke@sdf.org> // // This file is a part of newt-rs. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License version 2.1 as published by the Free Software Foundation. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // use crate::intern::funcs::*; /// /// A callback called when `Ctrl-Z` is pressed. /// pub struct SuspendCallback<FN, T> where FN: FnMut(Option<&T>) { function: FN, data: Option<T> } impl<FN, T> SuspendCallback<FN, T> where FN: FnMut(Option<&T>) { /// /// Create a new `SuspendCallback` to be called when a suspend (`Ctrl-Z`) /// event occurs. /// /// * `function` - The function or closure to be called when a suspend /// event occurs. /// * `data` - The optional user data to pass to the function. /// pub fn new(function: FN, data: Option<T>) -> Box<SuspendCallback<FN, T>> { let cb = Box::new(SuspendCallback { function, data }); newt_set_suspend_callback(cb.as_ref()); cb } pub(crate) fn call(&mut self) { (self.function)(self.data.as_ref()) } } impl<FN, T> Drop for SuspendCallback<FN, T> where FN: FnMut(Option<&T>) { fn drop(&mut self) { newt_unset_suspend_callback(); } }