@@ -164,6 +164,23 @@ impl Window {
164164 let imp = this. imp ( ) ;
165165 imp. config . replace ( config) ;
166166
167+ this. squeezer_changed ( ) ;
168+ this. setup_settings ( ) ;
169+ this. setup_zoom_popover_item ( ) ;
170+ this. setup_css_providers ( ) ;
171+ this. setup_actions ( ) ;
172+ this. setup_signals ( ) ;
173+ this. open_in_new_tab ( bookmarks_url ( ) . as_str ( ) ) ;
174+ this
175+ }
176+ fn setup_settings ( & self ) {
177+ let imp = self . imp ( ) ;
178+ let settings = gio:: Settings :: new ( APP_ID ) ;
179+ settings. bind ( "zoom" , self , "zoom" ) . build ( ) ;
180+ imp. settings . replace ( Some ( settings) ) ;
181+ }
182+ fn setup_css_providers ( & self ) {
183+ let imp = self . imp ( ) ;
167184 gtk:: StyleContext :: add_provider_for_display (
168185 & gdk:: Display :: default ( ) . unwrap ( ) ,
169186 & * imp. style_provider . borrow ( ) ,
@@ -176,55 +193,8 @@ impl Window {
176193 & imp. zoom . borrow ( ) . provider ,
177194 gtk:: STYLE_PROVIDER_PRIORITY_APPLICATION ,
178195 ) ;
179-
180- let popover: gtk:: PopoverMenu = imp. primary_menu_btn . popover ( ) . unwrap ( ) . downcast ( ) . unwrap ( ) ;
181- let zoom_box = gtk:: Box :: builder ( )
182- . spacing ( 12 )
183- . margin_start ( 18 )
184- . margin_end ( 18 )
185- . build ( ) ;
186-
187- zoom_box. append (
188- & gtk:: Button :: builder ( )
189- . icon_name ( "zoom-out-symbolic" )
190- . action_name ( "win.zoom-out" )
191- . css_classes ( vec ! [ "flat" . into( ) , "circular" . into( ) ] )
192- . build ( ) ,
193- ) ;
194-
195- let value_btn = gtk:: Button :: with_label ( "100%" ) ;
196- value_btn. set_hexpand ( true ) ;
197- this. bind_property ( "zoom" , & value_btn, "label" )
198- . transform_to ( |_, v| {
199- let zoom: f64 = v. get ( ) . unwrap ( ) ;
200- Some ( format ! ( "{:3}%" , ( zoom * 100.0 ) as usize ) . to_value ( ) )
201- } )
202- . build ( ) ;
203- value_btn. set_action_name ( Some ( "win.reset-zoom" ) ) ;
204- value_btn. add_css_class ( "flat" ) ;
205- value_btn. add_css_class ( "body" ) ;
206- value_btn. add_css_class ( "numeric" ) ;
207-
208- zoom_box. append ( & value_btn) ;
209- zoom_box. append (
210- & gtk:: Button :: builder ( )
211- . icon_name ( "zoom-in-symbolic" )
212- . css_classes ( vec ! [ "flat" . into( ) , "circular" . into( ) ] )
213- . action_name ( "win.zoom-in" )
214- . build ( ) ,
215- ) ;
216- popover. add_child ( & zoom_box, "zoom" ) ;
217-
218- let settings = gio:: Settings :: new ( APP_ID ) ;
219- settings. bind ( "zoom" , & this, "zoom" ) . build ( ) ;
220- imp. settings . replace ( Some ( settings) ) ;
221-
222- this. squeezer_changed ( ) ;
223- this. setup_actions_signals ( ) ;
224- this. open_in_new_tab ( bookmarks_url ( ) . as_str ( ) ) ;
225- this
226196 }
227- fn setup_actions_signals ( & self ) {
197+ fn setup_actions ( & self ) {
228198 let imp = self . imp ( ) ;
229199
230200 let action_previous = self_action ! ( self , "previous" , previous) ;
@@ -271,8 +241,10 @@ impl Window {
271241 clone ! ( @weak self as this => move |_, v| this. set_clipboard( v. unwrap( ) . get:: <String >( ) . unwrap( ) . as_str( ) ) ) ,
272242 ) ;
273243 self . add_action ( & act_set_clipboard) ;
244+ }
245+ fn setup_signals ( & self ) {
246+ let imp = self . imp ( ) ;
274247
275- // Signals
276248 self . add_controller ( & imp. scroll_ctrl ) ;
277249 imp. scroll_ctrl
278250 . set_propagation_phase ( gtk:: PropagationPhase :: Capture ) ;
@@ -329,6 +301,47 @@ impl Window {
329301 } ) ,
330302 ) ;
331303 }
304+ fn setup_zoom_popover_item ( & self ) {
305+ let imp = self . imp ( ) ;
306+
307+ let popover: gtk:: PopoverMenu = imp. primary_menu_btn . popover ( ) . unwrap ( ) . downcast ( ) . unwrap ( ) ;
308+ let zoom_box = gtk:: Box :: builder ( )
309+ . spacing ( 12 )
310+ . margin_start ( 18 )
311+ . margin_end ( 18 )
312+ . build ( ) ;
313+
314+ zoom_box. append (
315+ & gtk:: Button :: builder ( )
316+ . icon_name ( "zoom-out-symbolic" )
317+ . action_name ( "win.zoom-out" )
318+ . css_classes ( vec ! [ "flat" . into( ) , "circular" . into( ) ] )
319+ . build ( ) ,
320+ ) ;
321+
322+ let value_btn = gtk:: Button :: with_label ( "100%" ) ;
323+ value_btn. set_hexpand ( true ) ;
324+ self . bind_property ( "zoom" , & value_btn, "label" )
325+ . transform_to ( |_, v| {
326+ let zoom: f64 = v. get ( ) . unwrap ( ) ;
327+ Some ( format ! ( "{:3}%" , ( zoom * 100.0 ) as usize ) . to_value ( ) )
328+ } )
329+ . build ( ) ;
330+ value_btn. set_action_name ( Some ( "win.reset-zoom" ) ) ;
331+ value_btn. add_css_class ( "flat" ) ;
332+ value_btn. add_css_class ( "body" ) ;
333+ value_btn. add_css_class ( "numeric" ) ;
334+
335+ zoom_box. append ( & value_btn) ;
336+ zoom_box. append (
337+ & gtk:: Button :: builder ( )
338+ . icon_name ( "zoom-in-symbolic" )
339+ . css_classes ( vec ! [ "flat" . into( ) , "circular" . into( ) ] )
340+ . action_name ( "win.zoom-in" )
341+ . build ( ) ,
342+ ) ;
343+ popover. add_child ( & zoom_box, "zoom" ) ;
344+ }
332345 fn add_tab ( & self ) -> adw:: TabPage {
333346 let imp = self . imp ( ) ;
334347 let tab = Tab :: new ( imp. config . borrow ( ) . clone ( ) ) ;
0 commit comments