From: <ger...@us...> - 2006-06-30 07:51:33
|
Revision: 6993 Author: germinator2000 Date: 2006-06-30 00:51:20 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/amsn/?rev=6993&view=rev Log Message: ----------- Part of the patch of David Layer about taking care of Read-only text widget for the chatwindow..was already on mac version, now for everybody. should be stable but I know I should have done it on the HEAD branch but it's my first commit and i'm all fucked up and I think it's easy anyway to blame my commit if I fucked everything (witch I don't think I did), I tested it for more than a week anyway (and many mac users also). Can someone put it on the head branch also because I don't know how. Thanks Sander who helped me because it's my first time I commit with SVN, bye bye good night it's 3:50 in the morning, don't worry i'm totally sober Modified Paths: -------------- branches/0_96/amsn/chatwindow.tcl branches/0_96/amsn/gui.tcl branches/0_96/amsn/plugins/remind/remind.tcl Modified: branches/0_96/amsn/chatwindow.tcl =================================================================== --- branches/0_96/amsn/chatwindow.tcl 2006-06-29 16:18:06 UTC (rev 6992) +++ branches/0_96/amsn/chatwindow.tcl 2006-06-30 07:51:20 UTC (rev 6993) @@ -40,7 +40,41 @@ #/////////////////////////////////////////////////////////////////////////////// + #/////////////////////////////////////////////////////////////////////////////// + # ::ChatWindow::rotext -- Read Only text widget via snit + # Changes must be made by "ins" and "del", not "insert" and "delete". + # Leave the window state as "normal" so cut and paste work on all platforms. + # From example on http://wiki.tcl.tk/3963 + ::snit::widgetadaptor rotext { + constructor {args} { + # Turn off the insert cursor + #installhull using text $self -insertwidth 0 + # DDG the $self gaves an error at least with 0.97 onwards + installhull using text -insertwidth 0 + + # Apply an options passed at creation time. + $self configurelist $args + } + + # Disable the insert and delete methods, to make this readonly. + method insert {args} {} + method delete {args} {} + + # Enable ins and del as synonyms, so the program can insert and + # delete. + delegate method ins to hull as insert + delegate method del to hull as delete + + # Pass all other methods and options to the real text widget, so + # that the remaining behavior is as expected. + delegate method * to hull + delegate option * to hull + } #/////////////////////////////////////////////////////////////////////////////// + + + + #/////////////////////////////////////////////////////////////////////////////// # ::ChatWindow::Change (chatid, newchatid) # This proc is called from the protocol layer when a private chat changes into a # conference, right after a JOI command comes from the SB. It means that the window @@ -141,9 +175,7 @@ # - window => Is the chat window widget (.msg_n - Where n is an integer) proc Clear { window } { set window [::ChatWindow::getCurrentTab $window] - [::ChatWindow::GetOutText $window] configure -state normal - [::ChatWindow::GetOutText $window] delete 0.0 end - [::ChatWindow::GetOutText $window] configure -state disabled + [::ChatWindow::GetOutText $window] del 0.0 end } #/////////////////////////////////////////////////////////////////////////////// @@ -1779,7 +1811,8 @@ frame $fr -class Amsn -borderwidth 0 -relief solid \ -background [::skin::getKey chatwindowbg] -height [::config::getKey winchatoutheight] ScrolledWindow $out -auto vertical -scrollbar vertical -ipad 0 - framec $text -type text -relief solid -foreground white -background [::skin::getKey chat_output_back_color] -width 45 -height 3 \ + framec $text -type ::ChatWindow::rotext -relief solid -foreground white \ + -background [::skin::getKey chat_output_back_color] -width 45 -height 3 \ -setgrid 0 -wrap word -exportselection 1 -highlightthickness 0 -selectborderwidth 1 \ -borderwidth [::skin::getKey chat_output_border] \ -bordercolor [::skin::getKey chat_output_border_color] @@ -1794,7 +1827,7 @@ # Configure our widgets - $text configure -state disabled + $text configure -state normal $text tag configure green -foreground darkgreen -font sboldf $text tag configure red -foreground red -font sboldf $text tag configure blue -foreground blue -font sboldf @@ -1811,23 +1844,38 @@ bind $textinner <Button1-ButtonRelease> "copy 0 $w" } - # When someone type something in out.text, regive the focus to in.input and insert that key - bind $textinner <KeyPress> "::ChatWindow::lastKeytyped %A $w" + # When someone type something in out.text, regive the focus to in.input and insert that key, + bind $textinner <KeyPress> "::ChatWindow::lastKeytyped %A %K $w" + if {![catch {tk windowingsystem} wsystem] && $wsystem == "aqua"} { + bind $textinner <Command-KeyPress> ";" + bind $textinner <Command-KeyPress-v> "::ChatWindow::pasteToInput $w" + } - #Added to stop amsn freezing when control-up pressed in the output window #If you can find why it is freezing and can stop it remove this line bind $textinner <Control-Up> "break" return $fr } + + #pasteToInput -- text pasted in output window goes to input window + #This is processed before the paste occurs, so this is sufficient. + proc pasteToInput {w} { + focus -force [::ChatWindow::GetInputText $w] + } #lastkeytyped #Force the focus to the input text box when someone try to write something in the output - proc lastKeytyped {typed w} { - if {[regexp \[a-zA-Z\] $typed]} { + proc lastKeytyped {typed keysym w} { + if {[regexp {^[ -~]$} $typed]} { focus -force [::ChatWindow::GetInputText $w] [::ChatWindow::GetInputText $w] insert insert $typed + } elseif {$keysym == "BackSpace"} { + focus -force [::ChatWindow::GetInputText $w] + [::ChatWindow::GetInputText $w] delete "insert - 1 char" insert + } elseif {$keysym == "Delete"} { + focus -force [::ChatWindow::GetInputText $w] + [::ChatWindow::GetInputText $w] delete insert "insert + 1 char" } } Modified: branches/0_96/amsn/gui.tcl =================================================================== --- branches/0_96/amsn/gui.tcl 2006-06-29 16:18:06 UTC (rev 6992) +++ branches/0_96/amsn/gui.tcl 2006-06-30 07:51:20 UTC (rev 6993) @@ -1522,13 +1522,12 @@ set scrolling [::ChatWindow::getScrolling [::ChatWindow::GetOutText ${win_name}]] - [::ChatWindow::GetOutText ${win_name}] configure -state normal + [::ChatWindow::GetOutText ${win_name}] image create end -image $image if { $scrolling } { ::ChatWindow::Scroll [::ChatWindow::GetOutText ${win_name}] } - [::ChatWindow::GetOutText ${win_name}] configure -state disabled } #/////////////////////////////////////////////////////////////////////////////// @@ -2766,7 +2765,7 @@ set fontcolor [lindex $fontformat 2] - [::ChatWindow::GetOutText ${win_name}] configure -state normal -font bplainf -foreground black + [::ChatWindow::GetOutText ${win_name}] configure -font bplainf -foreground black #Store position for later smiley and URL replacement # use end-1c because text widgets always have \n at the end, and it's better than getting the previous line @@ -2823,7 +2822,7 @@ set evPar(msg) txt ::plugins::PostEvent WinWrite evPar - [::ChatWindow::GetOutText ${win_name}] insert end "$txt" $tagid + [::ChatWindow::GetOutText ${win_name}] ins end "$txt" $tagid #TODO: Make an url_subst procedure, and improve this using regular expressions variable urlcount @@ -2865,8 +2864,8 @@ [::ChatWindow::GetOutText ${win_name}] tag bind $urlname <Button1-ButtonRelease> \ "[::ChatWindow::GetOutText ${win_name}] conf -cursor watch; launch_browser [string map {% %%} [list $urltext]]" - [::ChatWindow::GetOutText ${win_name}] delete $pos $endpos - [::ChatWindow::GetOutText ${win_name}] insert $pos "$urltext" $urlname + [::ChatWindow::GetOutText ${win_name}] del $pos $endpos + [::ChatWindow::GetOutText ${win_name}] ins $pos "$urltext" $urlname #Don't replace smileys in URLs [::ChatWindow::GetOutText ${win_name}] tag add dont_replace_smileys ${urlname}.first ${urlname}.last @@ -2899,7 +2898,7 @@ if { $scrolling } { ::ChatWindow::Scroll [::ChatWindow::GetOutText ${win_name}] } - [::ChatWindow::GetOutText ${win_name}] configure -state disabled + if { $flicker } { ::ChatWindow::Flicker $chatid @@ -2925,13 +2924,13 @@ set scrolling [::ChatWindow::getScrolling [::ChatWindow::GetOutText ${win_name}]] - [::ChatWindow::GetOutText ${win_name}] configure -state normal + [::ChatWindow::GetOutText ${win_name}] image create end -image [::skin::loadPixmap $imagename] -pady $pady -padx $pady if { $scrolling } { ::ChatWindow::Scroll [::ChatWindow::GetOutText ${win_name}] } - [::ChatWindow::GetOutText ${win_name}] configure -state disabled + } proc WinWriteClickable { chatid txt command {tagid ""}} { @@ -2949,7 +2948,7 @@ set tagid [getUniqueValue] } - [::ChatWindow::GetOutText ${win_name}] configure -state normal + [::ChatWindow::GetOutText ${win_name}] tag configure $tagid \ -foreground #000080 -font bboldf -underline false @@ -2962,12 +2961,10 @@ [::ChatWindow::GetOutText ${win_name}] conf -cursor xterm" [::ChatWindow::GetOutText ${win_name}] tag bind $tagid <Button1-ButtonRelease> "$command" - [::ChatWindow::GetOutText ${win_name}] configure -state normal - [::ChatWindow::GetOutText ${win_name}] insert end "$txt" $tagid + [::ChatWindow::GetOutText ${win_name}] ins end "$txt" $tagid if { $scrolling } { ::ChatWindow::Scroll [::ChatWindow::GetOutText ${win_name}] } - [::ChatWindow::GetOutText ${win_name}] configure -state disabled } if { $initialize_amsn == 1 } { Modified: branches/0_96/amsn/plugins/remind/remind.tcl =================================================================== --- branches/0_96/amsn/plugins/remind/remind.tcl 2006-06-29 16:18:06 UTC (rev 6992) +++ branches/0_96/amsn/plugins/remind/remind.tcl 2006-06-30 07:51:20 UTC (rev 6993) @@ -357,7 +357,7 @@ if { $version == "0.94" } { ${win_name}.f.out.text insert end "$txt" $tagid } else { - [::ChatWindow::GetOutText ${win_name}] insert end "$txt" $tagid + [::ChatWindow::GetOutText ${win_name}] ins end "$txt" $tagid } if {[::config::getKey chatsmileys]} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |