Hi, I'll look at this later, when I get time. Thanks for sending the patches. About the resize to original, it's there for a reason, you sometimes need to resize to 'original', also 'original' means by definition, that it would need to fetch it again. Think about this.. a user has his DP's original size set to 150x150.. you do a set to original, with your patch, it gets resized to 96x96, which is wrong.. Also, I sometimes use the 'original' when I want it to redownload.. try for example setting to huge, then small, then huge, then small, then 'normal'.. what do you see ? very very bad image quality, which is why you do 'original', to get back that image quality you lost... About the resize thing, it's a good thing it's getting done, I always knew about the bug, but never did.. but the 200ms workaround is not really a good idea.. I *think* that what I do is to set a callback on Configure and then do a [winfo width] or something.. which is why it does that, because the width/height are not yet updated.. I think the best solution is to use the %W and %H of the bind command. Read the bind manual to see the options and see if we can get the new width and height with the % modifier.. this way, no need to have a 200ms gap, + should work on maximimze.
KaKaRoTo On Thu, Sep 06, 2007 at 08:32:49AM +0000, square87 wrote: > Hi > > chatwindow.tcl > > @@ -533,26 +541,17 @@ U @@ -3693,6 +3702,10 @@ > So... if lesstab and moretab pics are shown and if i maximize chatwindows i > still see them, but delaying "::ChatWindow::CheckForTooManyTabs $window 0" > about 200ms resolve the problem. But the bug is still reproducible in this > way: > 1) Open a chatwindow and maximize it > 2) Disable: "Save chat window size as default when resizing it" > 3) Open 3 tabs > 4) Resize chatwindow until only two tabs are showed: now lesstab and moretab > should appear > 5) Maximize chatwindow: the widget where there are tabs are not updated and > lesstab and moretab are still shown > > @@ -3012,21 +3011,31 @@ > A solution for http://www.amsn-project.net/forums/viewtopic.php?t=3471 > After 8 users in a multichat only 7 users are shown and then there is a msg > "There are X others users. To see all users go in: Contact -> Propierities. > ", that should go in langen. > > @@ -2329,16 +2329,20 @@ > I put also scrollbar-x because i cannot see longs strings ( long nick + > status + userlogin). I can always maximize the window, but... > What do you think about to order nicks in alphabetical order? :P > > skins.tcl and msnp2p.tcl > About: http://www.amsn-project.net/forums/viewtopic.php?t=3972&highlight= > I found this solution...it checks the previous size of dp in chatwindow and > it reloads with the previous size. Then in protocol.tcl, i added a new value > when we call the proc ::MSNP2P::loadUserPic to load a new dp it this way > getDisplayPicture knows that it have to set a new dp with a new size and no > with last size. > > When we set a dp in a chatwindow with another size (huge, for example) and > then we want to set it with the original size we have: > if [::config::getKey autoresizedp] is enabled we download again the DP and > we see it in default size, else if the opt is disabled we cannot see it in > original size. > How to reproduce: > 1) Disable: Automatically resize display pictures to default size > 2) Open a chatwindow, show the user's avatar as huge > 3) set the user's avatar as "original" -> nothing happen > But when we want re-set a DP in original size, we don't need to download it > again just resize for this i put in getDisplayPicture: > if {$opz == 2} { ;# opz is 2 when ::MSNP2P::loadUserPic is called > when reload as 1 > if {[::config::getKey autoresizedp]} { > ::picture::Resize $picName 96 96 > } > return $picName > } > So when we want to re-set a dp we have now that: > we can set dp in original size when autoresizedp is 0, while when > autoresizedp is 1 we don't download again dp to show it in default size. > > Sorry for my English > Bye > Index: chatwindow.tcl > =================================================================== > --- chatwindow.tcl (revision 8995) > +++ chatwindow.tcl (working copy) > @@ -533,26 +541,17 @@ > after 200 [list ::ChatWindow::TopUpdate $chatid] > } > > - set geometry [wm geometry $window] > - set pos_start [string first "+" $geometry] > - #Look if the window changed size with the configure > - > - if {[::config::getKey wincontainersize] != "[string range > $geometry 0 [expr {$pos_start-1}]]"} { > - set sizechanged 1 > - } else { > - set sizechanged 0 > - } > - > #Save size of current container > if { [::config::getKey savechatwinsize] } { > + set geometry [wm geometry $window] > + set pos_start [string first "+" $geometry] > ::config::setKey wincontainersize [string range > $geometry 0 [expr {$pos_start-1}]] > } > > - #If the window changed size use checkfortoomanytabs > - if { [winfo exists ${window}.bar] && $sizechanged} { > - CheckForTooManyTabs $window 0 > + if { [winfo exists ${window}.bar]} { > + after cancel [list ::ChatWindow::CheckForTooManyTabs > $window 0] > + after 200 [list ::ChatWindow::CheckForTooManyTabs > $window 0] > } > - > } > > > #/////////////////////////////////////////////////////////////////////////////// > @@ -3012,21 +3011,31 @@ > > set camicon [::skin::loadPixmap camicon] > > + set count_users 0 > foreach user_login $user_list { > + incr count_users > + if {$count_users > 7} { > + set len [expr [llength $user_list] - > $count_users + 1] > + if {$len != 1} { > + set warningtext "There are $len others > users. To see all users go in: Contact -> Propierities. " > + $top insert text end $warningtext > + break > + } > + } > > set shares_cam [::abook::getContactData $user_login > webcam_shared] > > if { [::config::getKey emailsincontactlist] == 1 } { > set user_name "" > } else { > set user_name [string map {"\n" " "} > [::abook::getDisplayNick $user_login]] > } > set state_code [::abook::getVolatileData $user_login > state] > > - set psmmedia [::abook::getpsmmedia $user_login] > - > if { [::config::getKey psmplace] == 0 } { > set psmmedia "" > + } else { > + set psmmedia [::abook::getpsmmedia $user_login] > } > > #Space added so it doesn't stick next to the status > @@ -3693,6 +3702,10 @@ > variable containerwindows > variable visibletabs > variable win2tab > + > + if {![winfo exists ${container}.bar]} { > + return > + } > set bar_w [winfo width ${container}.bar] > set tab_w [image width [::skin::loadPixmap tab]] > > Index: msnp2p.tcl > =================================================================== > --- msnp2p.tcl (revision 8995) > +++ msnp2p.tcl (working copy) > @@ -130,8 +130,9 @@ > > > #Get picture from $user, if cached, or sets image as "loading", and > request it > #using MSNP2P > - proc loadUserPic { chatid user {reload "0"} } { > + #If $new == 1 it means that an users has changed his picture > + proc loadUserPic { chatid user {reload 0} {new 0}} { > global HOME > > #Line below changed from != -1 to == 0 because -1 means > @@ -155,11 +156,11 @@ > return > } > > - #Reload 1 means that we force aMSN to reload a new display pic > + #Reload 1 means that we force aMSN to reload the display pic > with default or original size > #Destroy it before to avoid TkCxImage to redraw animated gif > above the good display pic > #TODO: FIX: I think the next line is incorrect, did you want > image delete? (be careful if there are images on the screen) > destroy user_pic_$user > - if { ![file readable "[file join $HOME displaypic cache > ${filename}].png"] || $reload == "1" } { > + if { ![file readable "[file join $HOME displaypic cache > ${filename}].png"]} { > status_log "::MSNP2P::GetUser: FILE [file join $HOME > displaypic cache ${filename}] doesn't exist!!\n" white > image create photo user_pic_$user -file > [::skin::GetSkinFile "displaypic" "loading.gif"] -format cximage > > @@ -179,14 +180,16 @@ > } else { > image delete displaypicture_not_$user > } > - } > - > + } > > create_dir [file join $HOME displaypic] > create_dir [file join $HOME displaypic cache] > ::MSNP2P::RequestObject $chatid $user $msnobj > + } elseif { $reload == 1} { > + ::skin::getDisplayPicture $user 1 2 > + ::amsn::UpdateAllPictures > } else { > - ::skin::getDisplayPicture $user 1 > + ::skin::getDisplayPicture $user 1 $new > } > } > > Index: protocol.tcl > =================================================================== > --- protocol.tcl (revision 8995) > +++ protocol.tcl (working copy) > @@ -5059,17 +5059,17 @@ > set users_in_chat [$sb cget -users] > if { [lsearch $users_in_chat $user] != -1 } { > status_log "User changed image while > image in use!! Updating!!\n" white > - ::MSNP2P::loadUserPic [::MSN::ChatFor > $sb] $user > + ::MSNP2P::loadUserPic [::MSN::ChatFor > $sb] $user 0 1 > } > } > } else { > if { [::MSN::myStatusIs] != "FLN" && > [::MSN::myStatusIs] != "HDN"} { > if { ![file readable "[file join $HOME > displaypic cache ${newPic}].png"] } { > set chat_id [::MSN::chatTo $user] > - ::MSN::ChatQueue $chat_id [list > ::MSNP2P::loadUserPic $chat_id $user] > + ::MSN::ChatQueue $chat_id [list > ::MSNP2P::loadUserPic $chat_id $user 0 1] > } else { > #We already have the image so don't > open a convo to get it just load it > - ::MSNP2P::loadUserPic "" $user > + ::MSNP2P::loadUserPic "" $user 0 1 > } > } > } > Index: gui.tcl > =================================================================== > --- gui.tcl (revision 8995) > +++ gui.tcl (working copy) > @@ -2329,16 +2329,20 @@ > frame $wname.blueframe.list -class Amsn -borderwidth 0 > frame $wname.buttons -class Amsn > > - listbox $wname.blueframe.list.items -yscrollcommand > "$wname.blueframe.list.ys set" -font splainf \ > + listbox $wname.blueframe.list.items -yscrollcommand > "$wname.blueframe.list.ys set" -xscrollcommand "$wname.blueframe.list.xs set" > -font splainf \ > -background white -relief flat -highlightthickness 0 > -height 20 -width 60 > scrollbar $wname.blueframe.list.ys -command > "$wname.blueframe.list.items yview" -highlightthickness 0 \ > -borderwidth 1 -elementborderwidth 1 > > + scrollbar $wname.blueframe.list.xs -orient horizontal -command > "$wname.blueframe.list.items xview" -highlightthickness 0 \ > + -borderwidth 1 -elementborderwidth 1 > + > button $wname.buttons.ok -text "[trans ok]" -command [list > ::amsn::listChooseOk $wname $itemlist $command] > button $wname.buttons.cancel -text "[trans cancel]" -command > [list destroy $wname] > > > pack $wname.blueframe.list.ys -side right -fill y > + pack $wname.blueframe.list.xs -side bottom -fill x > pack $wname.blueframe.list.items -side left -expand true -fill > both > pack $wname.blueframe.list -side top -expand true -fill both > -padx 4 -pady 4 > pack $wname.blueframe -side top -expand true -fill both > @@ -2356,7 +2360,7 @@ > pack $wname.buttons -side bottom -fill x -pady 3 > > foreach item $itemlist { > - $wname.blueframe.list.items insert end [lindex $item 0] > + $wname.blueframe.list.items insert end "[lindex $item > 0] - ([lindex $item 1])" > } > > > Index: skins.tcl > =================================================================== > --- skins.tcl (revision 8995) > +++ skins.tcl (working copy) > @@ -234,7 +234,9 @@ > return displaypicture_std_none > } > > - proc getDisplayPicture { email {force 0}} { > + # $opz == 1 the user has changed his pics > + # $opz == 2 we want to show the pic in the original or default size > + proc getDisplayPicture { email {force 0} {opz 0}} { > global HOME > > set picName displaypicture_std_$email > @@ -242,10 +244,15 @@ > if { [::abook::getContactData $email client] == "Webmessenger" > } { > return [::skin::loadPixmap webmsn_dp] > } > if {[catch {image width $picName}] == 0 && $force == 0} { > return $picName > } > > + if { [catch {image width $picName} personalsize] } { > + set personalsize -1 > + } > + > if { [::abook::getContactData $email customdp] != "" } { > set filename [::abook::getContactData $email customdp > ""] > # As custom DP can also be stored outside the cache > folder, > @@ -267,16 +274,26 @@ > } > > if {[catch {image width $picName} res]} { > #status_log "Error while loading $picName: $res" > image create photo $picName > $picName copy [::skin::getNoDisplayPicture] > set file [::skin::GetSkinFile displaypic nopic.gif] > } > > + if {$opz == 2} { > + if {[::config::getKey autoresizedp]} { > + ::picture::Resize $picName 96 96 > + } > + return $picName > + } > > if { [catch {::picture::GetPictureSize $file} cursize] } { > #Corrupted image.. might as well delete it and > redownload it some other time.. > status_log "Error opening $file: $cursize\n" > catch {file delete $file} > + } elseif {![::config::getKey autoresizedp] && $opz == 0 && > $personalsize != -1} { > + ::picture::Resize $picName $personalsize $personalsize > } elseif { [::config::getKey autoresizedp] && > ![::picture::IsAnimated $file] && $cursize != "96x96"} { > ::picture::Resize $picName 96 96 > } > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Amsn-devel mailing list > Amsn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/amsn-devel ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Amsn-devel mailing list Amsn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amsn-devel