Hi NWM! Thanks again for your patches, you keep sending them, we keep forgetting them.. lol, I hope this one will get into SVN. maybe a little modified. At least, you seem to be getting the hang of Tcl, wasn't it easy? :) About the fast loading, here's what I think : Currently, we have this schema : file1.tcl : proc ... { } proc ... {} proc ... {} if { initialize_amsn == 1 } { ... }
file2.tcl : namespace {} proc ... {} proc ... {} if { initialize_amsn == 1 } { ... } etc.. what would be nice to have is : file1.tcl : proc .. {} proc ... {} file2.tcl namespace {} proc ... {} proc ... {} bootstrap.tcl : proc init_amsn {} { # here goes all the code that was in initialize_amsn... } this way : 1 - no more 'source' order being important 2 - all the initialization will be done in one place AFTER all the files were source, so after ALL procs are already made available 3 - easier to rearrange stuff since procs are all loaded 4 - less error-prone. So, if that could be done, it would be great, and a lot easier for you to make your patch work correctly! p.s.: You know the amsn team is hiring, no ? ;) KKRT On Wed, Dec 06, 2006 at 03:54:18PM +0100, NoWhereMan wrote: > hi all, > > I've had a look at the code and tried to rearrange some of the > commands to make amsn *feel* quicker at the startup. > > Unfortunately all the dependencies in reload_files are needed, because > of how the code in gui.tcl is; there were just two that could be > loaded later, but it was too little. What I've done is change the > command order in "amsn" and gui.tcl (proc cmsn_draw_main). > > As a side effect if you set aMSN to start in tray it will flash opened > until the bootstrap has finished, so you may not want to apply this > patch anyway, if this is a problem. > > A new proc have been added, cmsn_draw_loading, which is more or less a > copy&paste of cmsn_draw_signin; a new key in language files, "loading" > is now expected to exist. This will be shown under the signin image > (you can change this, of course...) > > Finally also the "amsn" script itself have been a little rearranged, > and it prints some "loading" info to the console (just a few, doing > this...done; doing that...done) you can remove that if you find it > annoying. > > cmsn_draw_offline is now called explictly from "amsn" once that other > "loading/boot" actions have finished (beside the ones of > cmsn_draw_main ;)) > > > Of course the bootstrap process IS NOT faster (it's probably a bit > slower, because of the loading animation) but it should *feel* a > little faster, because the window now appears as soon as it's > possible. > > time from first instruction to window shown > ~3.262.543 > > using the patch: > ~2.818.730 > > of course, not so much... btw it would depend on the processor, etc... > > hope this helps > > bye! > Index: amsn > =================================================================== > --- amsn (revisione 7572) > +++ amsn (copia locale) > @@ -96,6 +96,7 @@ > ### From here we need amsncore, so load it. > ############################################################ > > + > source amsncore.tcl > > > @@ -166,6 +167,7 @@ > } > } > > +puts "initial setup done" > > proc reload_files { } { > uplevel \#0 { > @@ -200,7 +202,7 @@ > source groups.tcl ;# Handle buddy groups > > if { [OnDarwin] } { > - source [file join utils macosx applescript ae.tcl];#AppleEvent > support > + #16source [file join utils macosx applescript > ae.tcl];#AppleEvent support > } > > source alarm.tcl ;# Alarms code (Burger) > @@ -224,29 +226,13 @@ > } > } > > +puts "loading source files..." > reload_files > +puts "DONE" > > + > set initialize_amsn 0 > -#/////////////////////////////////////////////////////////////////////// > > -if { [catch {package require tls}] } { > - # Either tls is not installed, or $auto_path does not point to it. > - # Should now never happen; the check for the presence of tls is made > - # before this point. > -# status_log "Could not find the package tls on this system.\n" > - set tlsinstalled 0 > -} else { > - set tlsinstalled 1 > -} > - > -#create_dir $HOME > -set log_dir "[file join ${HOME} logs]" > -set webcam_dir "[file join ${HOME} webcam]" > -create_dir $log_dir > -create_dir $webcam_dir > - > -NS create ns -stat d -server [split [::config::getKey start_ns_server] ":"] > - > set family [lindex [::config::getGlobalKey basefont] 0] > set size [lindex [::config::getGlobalKey basefont] 1] > > @@ -258,20 +244,48 @@ > set allfonts([string tolower $font]) $font > } > > + > + > +set ::auto_encoding [encoding system] > + > +if { [::config::getKey encoding] != "auto" } { > + set_encoding [::config::getKey encoding] > +} > + > + > +puts "drawing main window..." > +cmsn_draw_main > +puts "done." > + > + > # Bye bye hidden files in file dialogs (works fine with Mac even without > this). > if {[OnLinux]} { > catch { tk_getOpenFile -w00t } ;# start file dialog with unknown option > set ::tk::dialog::file::showHiddenVar 0 > } > > -set ::auto_encoding [encoding system] > > -if { [::config::getKey encoding] != "auto" } { > - set_encoding [::config::getKey encoding] > +#/////////////////////////////////////////////////////////////////////// > + > +if { [catch {package require tls}] } { > + # Either tls is not installed, or $auto_path does not point to it. > + # Should now never happen; the check for the presence of tls is made > + # before this point. > +# status_log "Could not find the package tls on this system.\n" > + set tlsinstalled 0 > +} else { > + set tlsinstalled 1 > } > > -cmsn_draw_main > +#create_dir $HOME > +set log_dir "[file join ${HOME} logs]" > +set webcam_dir "[file join ${HOME} webcam]" > +create_dir $log_dir > +create_dir $webcam_dir > > +NS create ns -stat d -server [split [::config::getKey start_ns_server] ":"] > + > + > bind all <KeyPress> "set idletime 0" > > idleCheck > @@ -292,6 +306,8 @@ > } > } > > +# CONFIGURATION DONE. LET THE USER CONNECT > +cmsn_draw_offline > update idletasks > > init_dock > Index: gui.tcl > =================================================================== > --- gui.tcl (revisione 7572) > +++ gui.tcl (copia locale) > @@ -3400,8 +3400,6 @@ > proc cmsn_draw_main {} { > global pgBuddy pgBuddyTop pgNews argv0 argv > > - create_states_menu .my_menu > - create_other_menus .user_menu .menu_invite > create_main_menu .main_menu > > wm title . "[trans title] - [trans offline]" > @@ -3425,7 +3423,61 @@ > frame .main.f -class Amsn -relief flat -background white -borderwidth 0 > pack .main -fill both -expand true > pack .main.f -expand true -fill both -padx [::skin::getKey > buddylistpad] -pady [::skin::getKey buddylistpad] -side top > + > > + #Set the position on the screen and the size for the contact list, from > config > + #Check if the geometry is available : > + set geometry [::config::getKey wingeometry] > + set width 0 > + set height 0 > + set x 0 > + set y 0 > + set modified 0 > + regexp {=?(\d+)x(\d+)[+\-](-?\d+)[+\-](-?\d+)} $geometry -> width > height x y > + if {[expr {$width + $x}] > [winfo screenwidth .]} { > + set modified 1 > + if { [OnMac] } { > + set x 200 > + } else { > + set x 0 > + } > + } > + if {[expr {$width}] > [winfo screenwidth .]} { > + set modified 1 > + set width 275 > + } > + if {[expr {$height + $y}] > [winfo screenheight .]} { > + set modified 1 > + if { [OnMac] } { > + set y 200 > + } else { > + set y 0 > + } > + } > + if {[expr {$height}] > [winfo screenheight .]} { > + set modified 1 > + set height 400 > + } > + if {$modified == 1} { > + set geometry ${width}x${height}-${x}+${y} > + ::config::setKey wingeometry $geometry > + } > + catch {wm geometry . $geometry} > + > + #To avoid the bug of window behind the menu bar on Mac OS X > + #The menubar's height is 22. > + if { [OnMac] && [winfo y .] < 22 } { > + moveinscreen . 30 > + } > + > + #allow for display updates so window size is correct > + update idletasks > + #Draw main window contents > + cmsn_draw_status > + > + wm state . normal > + update > + > if {[::config::getKey withnotebook]} { > # Create the Notebook and initialize the page paths. These > # page paths must be used for adding new widgets to the > @@ -3464,6 +3516,13 @@ > > $pgBuddy setwidget $pgBuddy.text > > + > + # This is actually a little more than a cmsn_draw_signin copy&paste > + # Btw works well enough... it is displayed for a little while... > + cmsn_draw_loading > + update > + > + > # Initialize the event history > frame .main.eventmenu > combobox::combobox .main.eventmenu.list -editable false > -highlightthickness 0 -width 22 -bg #FFFFFF -font splainf -exportselection > false > @@ -3472,6 +3531,7 @@ > label .main.banner -bd 0 -relief flat -background [::skin::getKey > bannerbg] > pack .main.banner -side bottom -fill x > resetBanner > + > > #delete F10 binding that crashes amsn > bind all <F10> "" > @@ -3536,9 +3596,12 @@ > } > > #Draw main window contents > - cmsn_draw_status > - cmsn_draw_offline > + #cmsn_draw_status > > + create_states_menu .my_menu > + create_other_menus .user_menu .menu_invite > + > + > if { [OnWin] } { > catch {wm iconbitmap . [::skin::GetSkinFile winicons msn.ico]} > catch {wm iconbitmap . -default [::skin::GetSkinFile winicons > msn.ico]} > @@ -3547,58 +3610,11 @@ > catch {wm iconmask . @[::skin::GetSkinFile pixmaps > amsnmask.xbm]} > } > > - update > - > - #Set the position on the screen and the size for the contact list, from > config > - #Check if the geometry is available : > - set geometry [::config::getKey wingeometry] > - set width 0 > - set height 0 > - set x 0 > - set y 0 > - set modified 0 > - regexp {=?(\d+)x(\d+)[+\-](-?\d+)[+\-](-?\d+)} $geometry -> width > height x y > - if {[expr {$width + $x}] > [winfo screenwidth .]} { > - set modified 1 > - if { [OnMac] } { > - set x 200 > - } else { > - set x 0 > - } > - } > - if {[expr {$width}] > [winfo screenwidth .]} { > - set modified 1 > - set width 275 > - } > - if {[expr {$height + $y}] > [winfo screenheight .]} { > - set modified 1 > - if { [OnMac] } { > - set y 200 > - } else { > - set y 0 > - } > - } > - if {[expr {$height}] > [winfo screenheight .]} { > - set modified 1 > - set height 400 > - } > - if {$modified == 1} { > - set geometry ${width}x${height}-${x}+${y} > - ::config::setKey wingeometry $geometry > - } > - catch {wm geometry . $geometry} > - > - #To avoid the bug of window behind the menu bar on Mac OS X > - #The menubar's height is 22. > - if { [OnMac] && [winfo y .] < 22 } { > - moveinscreen . 30 > - } > - > - #allow for display updates so window size is correct > - update idletasks > - > + #update > + #cmsn_draw_offline > + > #Unhide main window now that it has finished being created > - wm state . normal > + #wm state . normal > } > #/////////////////////////////////////////////////////////////////////// > > @@ -4116,7 +4132,6 @@ > #/////////////////////////////////////////////////////////////////////// > > > - > #/////////////////////////////////////////////////////////////////////// > proc cmsn_draw_offline {} { > bind . <Configure> "" > @@ -4270,9 +4285,43 @@ > } > #/////////////////////////////////////////////////////////////////////// > > +######################################################################## > +proc cmsn_draw_loading {} { > + bind . <Configure> "" > > + global pgBuddy pgBuddyTop eventdisconnected > > + set eventdisconnected 1 > + > + wm title . "[trans title] - [::config::getKey login]" > + > + > + pack forget $pgBuddyTop > + $pgBuddy.text configure -state normal -font splainf > + > + $pgBuddy.text delete 0.0 end > + $pgBuddy.text tag conf loading -fore #000000 \ > + -font sboldf -justify center > + #$pgBuddy.text insert end "\n\n\n\n\n\n\n" > + $pgBuddy.text insert end "\n\n\n\n\n" > + > + catch { > + $pgBuddy.text insert end " " loading > + $pgBuddy.text image create end -image [::skin::loadPixmap > loganim] > + $pgBuddy.text insert end " " loading > + > + } > + > + $pgBuddy.text insert end "\n\n" > + $pgBuddy.text insert end "[trans loading]..." loading > + $pgBuddy.text configure -state disabled > + > +} > #/////////////////////////////////////////////////////////////////////// > + > + > + > +#/////////////////////////////////////////////////////////////////////// > proc cmsn_draw_signin {} { > bind . <Configure> "" > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Amsn-devel mailing list > Amsn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/amsn-devel ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Amsn-devel mailing list Amsn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amsn-devel