Skip to content

destroy event never called #266

@sanpii

Description

@sanpii
use gtk::WidgetExt;
use relm::Widget;

#[derive(relm_derive::Msg, Debug)]
pub enum Msg {
    Destroy,
    DeleteEvent,
}

#[relm_derive::widget]
impl Widget for Win {
    fn model() -> () {
    }

    fn update(&mut self, event: Msg) {
        dbg!(&event);

        if matches!(event, Msg::DeleteEvent) {
            gtk::main_quit();
        }
    }

    view! {
        gtk::Window {
            destroy(_) => Msg::Destroy,
            delete_event(_, _) => (Msg::DeleteEvent, gtk::Inhibit(false)),
        }
    }
}

fn main() {
    Win::run(()).expect("Win::run failed");
}
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/rust`
[src/main.rs:17] &event = DeleteEvent

The same program without relm:

use gtk::prelude::*;

fn main() {
    gtk::init().unwrap();

    let window = gtk::Window::new(gtk::WindowType::Toplevel);

    window.connect_destroy(|_| {
        dbg!("destroy");
    });
    window.connect_delete_event(|_, _| {
        dbg!("delete event");
        gtk::main_quit();
        gtk::Inhibit(false)
    });

    window.show_all();
    gtk::main();
}
$ cargo run
   Compiling rust v0.1.0 (/home/sanpi/test/rust)
    Finished dev [unoptimized + debuginfo] target(s) in 3.37s
     Running `target/debug/rust`
[src/main.rs:21] "delete event" = "delete event"
[src/main.rs:18] "destroy" = "destroy"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions