@@ -261,6 +261,50 @@ impl ApplicationHandler<AppEvent> for App {
261261 state. address_bar_active = true ;
262262 }
263263 } else {
264+ if elem_state == ElementState :: Pressed {
265+ let item_pressed = ( state. cursor_position . 0
266+ / ( address_bar_address_offset. 0 / 3.0 ) )
267+ . floor ( ) as usize ;
268+
269+ let tab_data = state. tab_datas . get_mut ( state. active_tab ) . unwrap ( ) ;
270+
271+ match item_pressed {
272+ 0 => {
273+ let prev_url = tab_data. prev_urls . pop ( ) ;
274+ if prev_url. is_none ( ) {
275+ return ;
276+ }
277+
278+ let prev_url = prev_url. unwrap ( ) ;
279+ let curr_url = tab_data. url . clone ( ) ;
280+
281+ tab_data. next_urls . push ( curr_url) ;
282+
283+ if let Some ( callbacks) = & self . callbacks {
284+ ( callbacks. link_callback ) ( & prev_url) ;
285+ }
286+ }
287+ 1 => {
288+ println ! ( "Refresh button pressed" ) ;
289+ }
290+ 2 => {
291+ let next_url = tab_data. next_urls . pop ( ) ;
292+ if next_url. is_none ( ) {
293+ return ;
294+ }
295+
296+ let next_url = next_url. unwrap ( ) ;
297+ let curr_url = tab_data. url . clone ( ) ;
298+
299+ tab_data. prev_urls . push ( curr_url) ;
300+
301+ if let Some ( callbacks) = & self . callbacks {
302+ ( callbacks. link_callback ) ( & next_url) ;
303+ }
304+ }
305+ _ => unreachable ! ( ) ,
306+ }
307+ }
264308 }
265309 } else {
266310 if let Some ( root) = layout. root_box . as_ref ( ) {
@@ -429,42 +473,38 @@ impl ApplicationHandler<AppEvent> for App {
429473 let state = self . state . as_mut ( ) . unwrap ( ) ;
430474 let agent = self . agent . as_ref ( ) . unwrap ( ) ;
431475
432- if state. tab_datas [ state. active_tab ] . url != url {
433- state. tab_datas [ state. active_tab ] . url = url. clone ( ) ;
434- state. tab_datas [ state. active_tab ] . scroll_x = 0.0 ;
435- state. tab_datas [ state. active_tab ] . scroll_y = 0.0 ;
436- state. tab_datas [ state. active_tab ] . document = None ;
437- state. tab_datas [ state. active_tab ] . layout = None ;
476+ let tab_data = state. tab_datas . get_mut ( state. active_tab ) . unwrap ( ) ;
477+
478+ if tab_data. url != url {
479+ tab_data. prev_urls . push ( tab_data. url . clone ( ) ) ;
480+
481+ tab_data. url = url. clone ( ) ;
482+ tab_data. scroll_x = 0.0 ;
483+ tab_data. scroll_y = 0.0 ;
484+ tab_data. document = None ;
485+ tab_data. layout = None ;
438486 }
439487
440- self . document = Some (
441- state. tab_datas [ state. active_tab ]
442- . document
443- . clone ( )
444- . unwrap_or_else ( || {
445- let doc = agent. borrow_mut ( ) . open ( & url) . unwrap ( ) ;
446- state. tab_datas [ state. active_tab ] . document = Some ( Rc :: clone ( & doc) ) ;
447- doc
448- } ) ,
449- ) ;
488+ self . document = Some ( tab_data. document . clone ( ) . unwrap_or_else ( || {
489+ let doc = agent. borrow_mut ( ) . open ( & url) . unwrap ( ) ;
490+ tab_data. document = Some ( Rc :: clone ( & doc) ) ;
491+ doc
492+ } ) ) ;
450493
451- let layout = state. tab_datas [ state. active_tab ]
452- . layout
453- . clone ( )
454- . unwrap_or_else ( || {
455- let layout = Layout :: make_layout (
456- self . document . as_ref ( ) . unwrap ( ) . clone ( ) ,
457- (
458- state. window . inner_size ( ) . width as f64 ,
459- state. window . inner_size ( ) . height as f64 ,
460- ) ,
461- ) ;
494+ let layout = tab_data. layout . clone ( ) . unwrap_or_else ( || {
495+ let layout = Layout :: make_layout (
496+ self . document . as_ref ( ) . unwrap ( ) . clone ( ) ,
497+ (
498+ state. window . inner_size ( ) . width as f64 ,
499+ state. window . inner_size ( ) . height as f64 ,
500+ ) ,
501+ ) ;
462502
463- let rc = Rc :: new ( RefCell :: new ( layout) ) ;
503+ let rc = Rc :: new ( RefCell :: new ( layout) ) ;
464504
465- state . tab_datas [ state . active_tab ] . layout = Some ( rc. clone ( ) ) ;
466- rc
467- } ) ;
505+ tab_data . layout = Some ( rc. clone ( ) ) ;
506+ rc
507+ } ) ;
468508
469509 state. viewport_height = layout
470510 . borrow ( )
0 commit comments