Skip to content

Commit 9b094d9

Browse files
committed
fix widgets from crashing ultralight
1 parent 5d697fb commit 9b094d9

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

build.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::fs::{self, DirEntry};
33
use std::path::Path;
44

55
fn main() {
6-
// ensure runtime resources exist
6+
// ensure runtime resources exist - for examples & local tests
77
#[cfg(feature = "ultralight-resources")]
88
{
99
let out = var("OUT_DIR").unwrap();

src/widgets/mod.rs

+30-19
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ impl Default for TabSelectionType {
9898
pub struct IcyBrowser<Engine: BrowserEngine> {
9999
engine: Engine,
100100
home: Url,
101-
nav_bar_state: NavBarState,
101+
nav_bar_state: Option<NavBarState>,
102102
command_window_state: CommandWindowState,
103103
with_tab_bar: bool,
104104
with_nav_bar: bool,
@@ -108,16 +108,13 @@ pub struct IcyBrowser<Engine: BrowserEngine> {
108108
view_size: Size<u32>,
109109
}
110110

111-
impl<Engine> Default for IcyBrowser<Engine>
112-
where
113-
Engine: BrowserEngine,
114-
{
111+
impl<Engine: BrowserEngine> Default for IcyBrowser<Engine> {
115112
fn default() -> Self {
116113
let home = Url::parse(Self::HOME).unwrap();
117114
Self {
118115
engine: Engine::new(),
119116
home,
120-
nav_bar_state: NavBarState::new(),
117+
nav_bar_state: None,
121118
command_window_state: CommandWindowState::new(),
122119
with_tab_bar: false,
123120
with_nav_bar: false,
@@ -133,10 +130,7 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
133130
const HOME: &'static str = "https://google.com";
134131

135132
pub fn new() -> Self {
136-
Self {
137-
engine: Engine::new(),
138-
..Default::default()
139-
}
133+
Self::default()
140134
}
141135

142136
pub fn with_homepage(mut self, homepage: &str) -> Self {
@@ -151,6 +145,7 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
151145

152146
pub fn with_nav_bar(mut self) -> Self {
153147
self.with_nav_bar = true;
148+
self.nav_bar_state = Some(NavBarState::new());
154149
self
155150
}
156151

@@ -242,7 +237,9 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
242237
TabSelectionType::Index(index) => self.engine.get_tabs().index_to_id(index),
243238
};
244239
self.engine.get_tabs_mut().set_current_id(id);
245-
self.nav_bar_state.0 = self.engine.get_tabs().get_current().url();
240+
if let Some(state) = self.nav_bar_state.as_mut() {
241+
state.0 = self.engine.get_tabs().get_current().url();
242+
}
246243
Task::none()
247244
}
248245
Message::CloseCurrentTab => Task::done(Message::CloseTab(TabSelectionType::Id(
@@ -259,11 +256,15 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
259256
TabSelectionType::Index(index) => self.engine.get_tabs().index_to_id(index),
260257
};
261258
self.engine.get_tabs_mut().remove(id);
262-
self.nav_bar_state.0 = self.engine.get_tabs().get_current().url();
259+
if let Some(state) = self.nav_bar_state.as_mut() {
260+
state.0 = self.engine.get_tabs().get_current().url();
261+
}
263262
Task::none()
264263
}
265264
Message::CreateTab => {
266-
self.nav_bar_state.0 = self.home.to_string();
265+
if let Some(state) = self.nav_bar_state.as_mut() {
266+
state.0 = self.home.to_string();
267+
}
267268
let home = self.home.clone();
268269
let bounds = self.view_size;
269270
let tab = self.engine.new_tab(
@@ -279,12 +280,16 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
279280
}
280281
Message::GoBackward => {
281282
self.engine.go_back();
282-
self.nav_bar_state.0 = self.engine.get_tabs().get_current().url();
283+
if let Some(state) = self.nav_bar_state.as_mut() {
284+
state.0 = self.engine.get_tabs().get_current().url();
285+
}
283286
Task::none()
284287
}
285288
Message::GoForward => {
286289
self.engine.go_forward();
287-
self.nav_bar_state.0 = self.engine.get_tabs().get_current().url();
290+
if let Some(state) = self.nav_bar_state.as_mut() {
291+
state.0 = self.engine.get_tabs().get_current().url();
292+
}
288293
Task::none()
289294
}
290295
Message::Refresh => {
@@ -300,11 +305,15 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
300305
Task::none()
301306
}
302307
Message::UpdateUrl => {
303-
self.nav_bar_state.0 = self.engine.get_tabs().get_current().url();
308+
if let Some(state) = self.nav_bar_state.as_mut() {
309+
state.0 = self.engine.get_tabs().get_current().url();
310+
}
304311
Task::none()
305312
}
306313
Message::UrlChanged(url) => {
307-
self.nav_bar_state.0 = url;
314+
if let Some(state) = self.nav_bar_state.as_mut() {
315+
state.0 = url;
316+
}
308317
Task::none()
309318
}
310319
Message::QueryChanged(query) => {
@@ -385,8 +394,10 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
385394
column = column.push(tab_bar(self.engine.get_tabs()))
386395
}
387396
if self.with_nav_bar {
388-
column = column
389-
.push(hoverable(nav_bar(&self.nav_bar_state)).on_focus_change(Message::UpdateUrl))
397+
column = column.push(
398+
hoverable(nav_bar(self.nav_bar_state.as_ref().unwrap()))
399+
.on_focus_change(Message::UpdateUrl),
400+
)
390401
}
391402
if let Some(bookmarks) = self.bookmarks.as_ref() {
392403
column = column.push(bookmark_bar(bookmarks))

0 commit comments

Comments
 (0)