bevy_webview_wry 0.5.0

Allows you to create a webview based on wry
Documentation
use crate::webview::WryWebViews;
use bevy::prelude::{
    App, Commands, Component, DetectChanges, Entity, NonSend, Plugin, PostUpdate, Query, Reflect,
    ReflectComponent,
};
use bevy_webview_core::prelude::{IsOpenDevtools, UseDevtools};

pub struct DevtoolsPlugin;

impl Plugin for DevtoolsPlugin {
    fn build(&self, app: &mut App) {
        app.register_type::<DevtoolsReady>()
            .add_systems(PostUpdate, change_open_devtools);
    }
}

#[derive(Component, Reflect)]
#[reflect(Component)]
struct DevtoolsReady;

fn change_open_devtools(
    mut commands: Commands,
    mut views: Query<(
        Entity,
        &mut IsOpenDevtools,
        &UseDevtools,
        Option<&DevtoolsReady>,
    )>,
    web_views: NonSend<WryWebViews>,
) {
    for (entity, mut is_open, use_devtools, ready) in views.iter_mut() {
        if !use_devtools.0 {
            is_open.0 = false;
            continue;
        }
        let Some(webview) = web_views.0.get(&entity) else {
            continue;
        };
        if ready.is_none() || is_open.is_changed() {
            if is_open.0 {
                webview.open_devtools();
            } else {
                webview.close_devtools();
            }
            commands.entity(entity).insert(DevtoolsReady);
        } else {
            is_open.0 = webview.is_devtools_open();
        }
    }
}