URI: 
       Stop wasting cpu cyles on title updates. - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
  HTML git clone https://git.drkhsh.at/icy_draw.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
       ---
   DIR commit e98ac1cf21437fedd4abca2dc6e3208ee7147a85
   DIR parent fc3420d710090953e2b86117d44ad5ea5b1a8aad
  HTML Author: Mike Krüger <mkrueger@posteo.de>
       Date:   Thu,  2 May 2024 02:44:52 +0200
       
       Stop wasting cpu cyles on title updates.
       
       Diffstat:
         M crates/icy_term/src/ui/app.rs       |       9 ++-------
         M crates/icy_term/src/ui/mod.rs       |      14 ++++++++++----
         M crates/icy_term/src/ui/terminal_th… |       4 +++-
         M crates/icy_term/src/ui/terminal_wi… |       2 ++
       
       4 files changed, 17 insertions(+), 12 deletions(-)
       ---
   DIR diff --git a/crates/icy_term/src/ui/app.rs b/crates/icy_term/src/ui/app.rs
       @@ -129,6 +129,7 @@ impl MainWindow {
                    shift_pressed_during_selection: false,
                    use_rip: false,
                    buffer_parser,
       +            title: String::new()
                };
        
                #[cfg(not(target_arch = "wasm32"))]
       @@ -165,11 +166,11 @@ impl eframe::App for MainWindow {
            fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
                #[cfg(not(target_arch = "wasm32"))]
                self.update_title(ctx);
       +
                match self.get_mode() {
                    MainWindowMode::ShowTerminal => {
                        self.handle_terminal_key_binds(ctx);
                        self.update_terminal_window(ctx, frame, false);
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    }
                    MainWindowMode::ShowDialingDirectory => {
                        self.update_terminal_window(ctx, frame, true);
       @@ -203,7 +204,6 @@ impl eframe::App for MainWindow {
                                } else {
                                    self.send_data(super::connect::SendData::CancelTransfer);
                                    self.set_mode(MainWindowMode::ShowTerminal);
       -                            ctx.request_repaint_after(Duration::from_millis(150));
                                }
                            }
                        }
       @@ -213,28 +213,23 @@ impl eframe::App for MainWindow {
                        if !self.buffer_update_thread.lock().capture_dialog.show_caputure_dialog(ctx) {
                            self.set_mode(MainWindowMode::ShowTerminal);
                        }
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    }
                    MainWindowMode::ShowExportDialog => {
                        self.update_terminal_window(ctx, frame, false);
                        self.show_export_dialog(ctx);
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    }
                    MainWindowMode::ShowUploadDialog => {
                        self.update_terminal_window(ctx, frame, false);
                        self.show_upload_dialog(ctx);
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    }
                    MainWindowMode::ShowIEMSI => {
                        self.update_terminal_window(ctx, frame, false);
                        dialogs::show_iemsi::show_iemsi(self, ctx);
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    } // MainWindowMode::AskDeleteEntry => todo!(),
        
                    MainWindowMode::ShowDisconnectedMessage(time, system) => {
                        self.update_terminal_window(ctx, frame, false);
                        dialogs::show_disconnected_message::show_disconnected(self, ctx, time, system);
       -                ctx.request_repaint_after(Duration::from_millis(150));
                    }
                }
            }
   DIR diff --git a/crates/icy_term/src/ui/mod.rs b/crates/icy_term/src/ui/mod.rs
       @@ -123,7 +123,7 @@ pub struct MainWindow {
        
            pub show_find_dialog: bool,
            pub find_dialog: dialogs::find_dialog::DialogState,
       -
       +    title: String,
            buffer_parser: Box<dyn BufferParser>,
            #[cfg(target_arch = "wasm32")]
            poll_thread: com_thread::ConnectionThreadData,
       @@ -358,8 +358,8 @@ impl MainWindow {
        
            #[cfg(not(target_arch = "wasm32"))]
            pub fn update_title(&mut self, ctx: &egui::Context) {
       -        if let MainWindowMode::ShowDialingDirectory = self.get_mode() {
       -            ctx.send_viewport_cmd(egui::ViewportCommand::Title(crate::DEFAULT_TITLE.to_string()));
       +        let title = if let MainWindowMode::ShowDialingDirectory = self.get_mode() {
       +            crate::DEFAULT_TITLE.to_string()
                } else {
                    let show_disconnect = false;
                    let d = Instant::now().duration_since(self.buffer_update_thread.lock().connection_time);
       @@ -385,12 +385,18 @@ impl MainWindow {
                    } else {
                        fl!(crate::LANGUAGE_LOADER, "title-offline", version = crate::VERSION.to_string())
                    };
       -            ctx.send_viewport_cmd(egui::ViewportCommand::Title(title));
                    if show_disconnect {
                        self.set_mode(MainWindowMode::ShowDisconnectedMessage(system_name.clone(), connection_time.clone()));
                        self.output_string("\nNO CARRIER\n");
                    }
       +            title
       +        };
       +
       +        if self.title != title {
       +            self.title = title.clone();
       +            ctx.send_viewport_cmd(egui::ViewportCommand::Title(title));
                }
       +
            }
        
            fn handle_terminal_key_binds(&mut self, ctx: &egui::Context) {
   DIR diff --git a/crates/icy_term/src/ui/terminal_thread.rs b/crates/icy_term/src/ui/terminal_thread.rs
       @@ -2,7 +2,7 @@ use crate::{
            features::{AutoFileTransfer, AutoLogin},
            get_parser,
            util::SoundThread,
       -    Res, TerminalResult,
       +    Res
        };
        use directories::UserDirs;
        use egui::mutex::Mutex;
       @@ -206,6 +206,8 @@ pub fn start_update_thread(
                                                        }
                                                    }
                                                    ctx.request_repaint();
       +                                        } else {
       +                                            thread::sleep(std::time::Duration::from_millis(20));
                                                }
                                            }
                                        }
   DIR diff --git a/crates/icy_term/src/ui/terminal_window.rs b/crates/icy_term/src/ui/terminal_window.rs
       @@ -6,6 +6,7 @@ use eframe::{
        use egui::{ImageButton, Margin, Modifiers, RichText};
        use i18n_embed_fl::fl;
        use icy_engine::{Position, Selection, TextPane};
       +use web_time::Duration;
        
        use crate::{
            icons::{CALL, DOWNLOAD, KEY, LOGOUT, MENU, UPLOAD},
       @@ -230,6 +231,7 @@ impl MainWindow {
                        self.output_string(&err);
                    }
                }
       +        ctx.request_repaint_after(Duration::from_millis(250));
            }
        
            fn show_terminal_area(&mut self, ui: &mut egui::Ui) {