@@ -98,7 +98,7 @@ impl Default for TabSelectionType {
98
98
pub struct IcyBrowser < Engine : BrowserEngine > {
99
99
engine : Engine ,
100
100
home : Url ,
101
- nav_bar_state : NavBarState ,
101
+ nav_bar_state : Option < NavBarState > ,
102
102
command_window_state : CommandWindowState ,
103
103
with_tab_bar : bool ,
104
104
with_nav_bar : bool ,
@@ -108,16 +108,13 @@ pub struct IcyBrowser<Engine: BrowserEngine> {
108
108
view_size : Size < u32 > ,
109
109
}
110
110
111
- impl < Engine > Default for IcyBrowser < Engine >
112
- where
113
- Engine : BrowserEngine ,
114
- {
111
+ impl < Engine : BrowserEngine > Default for IcyBrowser < Engine > {
115
112
fn default ( ) -> Self {
116
113
let home = Url :: parse ( Self :: HOME ) . unwrap ( ) ;
117
114
Self {
118
115
engine : Engine :: new ( ) ,
119
116
home,
120
- nav_bar_state : NavBarState :: new ( ) ,
117
+ nav_bar_state : None ,
121
118
command_window_state : CommandWindowState :: new ( ) ,
122
119
with_tab_bar : false ,
123
120
with_nav_bar : false ,
@@ -133,10 +130,7 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
133
130
const HOME : & ' static str = "https://google.com" ;
134
131
135
132
pub fn new ( ) -> Self {
136
- Self {
137
- engine : Engine :: new ( ) ,
138
- ..Default :: default ( )
139
- }
133
+ Self :: default ( )
140
134
}
141
135
142
136
pub fn with_homepage ( mut self , homepage : & str ) -> Self {
@@ -151,6 +145,7 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
151
145
152
146
pub fn with_nav_bar ( mut self ) -> Self {
153
147
self . with_nav_bar = true ;
148
+ self . nav_bar_state = Some ( NavBarState :: new ( ) ) ;
154
149
self
155
150
}
156
151
@@ -242,7 +237,9 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
242
237
TabSelectionType :: Index ( index) => self . engine . get_tabs ( ) . index_to_id ( index) ,
243
238
} ;
244
239
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
+ }
246
243
Task :: none ( )
247
244
}
248
245
Message :: CloseCurrentTab => Task :: done ( Message :: CloseTab ( TabSelectionType :: Id (
@@ -259,11 +256,15 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
259
256
TabSelectionType :: Index ( index) => self . engine . get_tabs ( ) . index_to_id ( index) ,
260
257
} ;
261
258
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
+ }
263
262
Task :: none ( )
264
263
}
265
264
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
+ }
267
268
let home = self . home . clone ( ) ;
268
269
let bounds = self . view_size ;
269
270
let tab = self . engine . new_tab (
@@ -279,12 +280,16 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
279
280
}
280
281
Message :: GoBackward => {
281
282
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
+ }
283
286
Task :: none ( )
284
287
}
285
288
Message :: GoForward => {
286
289
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
+ }
288
293
Task :: none ( )
289
294
}
290
295
Message :: Refresh => {
@@ -300,11 +305,15 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
300
305
Task :: none ( )
301
306
}
302
307
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
+ }
304
311
Task :: none ( )
305
312
}
306
313
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
+ }
308
317
Task :: none ( )
309
318
}
310
319
Message :: QueryChanged ( query) => {
@@ -385,8 +394,10 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
385
394
column = column. push ( tab_bar ( self . engine . get_tabs ( ) ) )
386
395
}
387
396
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
+ )
390
401
}
391
402
if let Some ( bookmarks) = self . bookmarks . as_ref ( ) {
392
403
column = column. push ( bookmark_bar ( bookmarks) )
0 commit comments