@@ -232,6 +232,7 @@ fn create_fixes_section(builder: &Builder) -> gtk::Box {
232
232
let dnsserver_btn = gtk:: Button :: with_label ( & fl ! ( "dnsserver-title" ) ) ;
233
233
let install_gaming_btn = gtk:: Button :: with_label ( & fl ! ( "install-gaming-title" ) ) ;
234
234
let install_snapper_btn = gtk:: Button :: with_label ( & fl ! ( "install-snapper-title" ) ) ;
235
+ let install_spoof_dpi_btn = gtk:: Button :: with_label ( & fl ! ( "install-spoof-dpi-title" ) ) ;
235
236
236
237
{
237
238
removelock_btn. set_widget_name ( "remove-lock-title" ) ;
@@ -244,6 +245,7 @@ fn create_fixes_section(builder: &Builder) -> gtk::Box {
244
245
dnsserver_btn. set_widget_name ( "dnsserver-title" ) ;
245
246
install_gaming_btn. set_widget_name ( "install-gaming-title" ) ;
246
247
install_snapper_btn. set_widget_name ( "install-snapper-title" ) ;
248
+ install_spoof_dpi_btn. set_widget_name ( "install-spoof-dpi-title" ) ;
247
249
}
248
250
249
251
// Create context channel.
@@ -253,6 +255,7 @@ fn create_fixes_section(builder: &Builder) -> gtk::Box {
253
255
let dialog_tx_clone = dialog_tx. clone ( ) ;
254
256
let dialog_tx_gaming = dialog_tx. clone ( ) ;
255
257
let dialog_tx_snapper = dialog_tx. clone ( ) ;
258
+ let dialog_tx_spoof = dialog_tx. clone ( ) ;
256
259
removelock_btn. connect_clicked ( move |_| {
257
260
let dialog_tx_clone = dialog_tx_clone. clone ( ) ;
258
261
std:: thread:: spawn ( move || {
@@ -367,6 +370,24 @@ fn create_fixes_section(builder: &Builder) -> gtk::Box {
367
370
let stack: gtk:: Stack = builder. object( "stack" ) . unwrap( ) ;
368
371
stack. set_visible_child_name( & format!( "{name}page" ) ) ;
369
372
} ) ) ;
373
+ install_spoof_dpi_btn. connect_clicked ( move |_| {
374
+ let dialog_tx_spoof_dpi = dialog_tx_spoof. clone ( ) ;
375
+ // Spawn child process in separate thread.
376
+ std:: thread:: spawn ( move || {
377
+ const alpm_package_name: & str = "spoof-dpi-bin" ;
378
+ if !utils:: is_alpm_pkg_installed ( alpm_package_name) {
379
+ let _ = utils:: run_cmd_terminal ( format ! ( "pacman -S {alpm_package_name}" ) , true ) ;
380
+ } else {
381
+ dialog_tx_spoof_dpi
382
+ . send ( DialogMessage {
383
+ msg : fl ! ( "spoof-dpi-package-installed" ) ,
384
+ msg_type : gtk:: MessageType :: Info ,
385
+ action : Action :: InstallSnapper ,
386
+ } )
387
+ . expect ( "Couldn't send data to channel" ) ;
388
+ }
389
+ } ) ;
390
+ } ) ;
370
391
371
392
// Setup receiver.
372
393
let removelock_btn_clone = removelock_btn. clone ( ) ;
@@ -410,6 +431,7 @@ fn create_fixes_section(builder: &Builder) -> gtk::Box {
410
431
button_box_t. pack_end ( & install_snapper_btn, true , true , 2 ) ;
411
432
}
412
433
button_box_t. pack_end ( & install_gaming_btn, true , true , 2 ) ;
434
+ button_box_frth. pack_end ( & install_spoof_dpi_btn, true , true , 2 ) ;
413
435
button_box_frth. pack_end ( & dnsserver_btn, true , true , 2 ) ;
414
436
button_box_f. set_halign ( gtk:: Align :: Fill ) ;
415
437
button_box_s. set_halign ( gtk:: Align :: Fill ) ;
0 commit comments