📄 trayicon.tcl
字号:
if { $initialize_amsn == 1 } { global statusicon mailicon systemtray_exist iconmenu ishidden defaultbackground set statusicon 0 set mailicon 0 set systemtray_exist 0 set iconmenu 0 set ishidden 0}proc iconify_proc {} { global statusicon systemtray_exist if { [OnWin] } { taskbar_icon_handler WM_LBUTTONDBLCLK 0 0 } else { if { [winfo exists .bossmode] } { wm state .bossmode normal raise .bossmode focus -force .bossmode return } if { [focus] == "."} { wm iconify . wm state . withdrawn } else { wm deiconify . wm state . normal raise . focus -force . } } #bind $statusicon <Button-1> deiconify_proc}proc isWinicoLoaded {} { foreach lib [info loaded] { if {[lindex $lib 1] == "Winico" } { return 1 } } return 0}# Load the needed library (platform dependent) and create the context-menuproc trayicon_init {} { global systemtray_exist password iconmenu wintrayicon statusicon if { [WinDock] } { #added to stop creation of more than 1 icon if { $statusicon != 0 } { return } catch {package require Winico} if {![isWinicoLoaded] } { set ext "[file join utils windows winico05.dll]" if { [file exists $ext] != 1 } { msg_box "[trans needwinico2]" close_dock return } if { [catch {load $ext winico}] } { close_dock return } } set systemtray_exist 1 set wintrayicon [winico create [::skin::GetSkinFile winicons msn.ico]] #add the icon winico taskbar add $wintrayicon -text "[trans offline]" -callback "taskbar_icon_handler %m %x %y" set statusicon 1 } else { if { [catch {package require libtray} res] } { set systemtray_exist 0 status_log "[trans traynotcompiled] : $res" close_dock return } set systemtray_exist [systemtray_exist]; #a system tray exist? } #workaround for bug with the popup not unposting destroy .trayiconwin toplevel .trayiconwin -class Amsn wm overrideredirect .trayiconwin 1 wm geometry .trayiconwin "+0+[expr {2 * [winfo screenheight .]}]" wm state .trayiconwin withdrawn destroy .trayiconwin.immain set iconmenu .trayiconwin.immain #destroy .immain #set iconmenu .immain menu $iconmenu -tearoff 0 -type normal menu $iconmenu.imstatus -tearoff 0 -type normal $iconmenu.imstatus add command -label [trans online] -command "ChCustomState NLN" $iconmenu.imstatus add command -label [trans noactivity] -command "ChCustomState IDL" $iconmenu.imstatus add command -label [trans busy] -command "ChCustomState BSY" $iconmenu.imstatus add command -label [trans rightback] -command "ChCustomState BRB" $iconmenu.imstatus add command -label [trans away] -command "ChCustomState AWY" $iconmenu.imstatus add command -label [trans onphone] -command "ChCustomState PHN" $iconmenu.imstatus add command -label [trans gonelunch] -command "ChCustomState LUN" $iconmenu.imstatus add command -label [trans appearoff] -command "ChCustomState HDN" $iconmenu add command -label "[trans offline]" -command iconify_proc $iconmenu add separator $iconmenu add command -label "[trans sendmsg]..." -command [list ::amsn::ShowUserList [trans sendmsg] ::amsn::chatUser] $iconmenu add separator $iconmenu add cascade -label "[trans mystatus]" -menu $iconmenu.imstatus -state disabled $iconmenu add separator $iconmenu add command -label "[trans changenick]..." -command cmsn_change_name -state disabled $iconmenu add checkbutton -label "[trans sound]" -onvalue 1 -offvalue 0 -variable [::config::getVar sound] # $iconmenu add command -label "[trans preferences]..." -command Preferences $iconmenu add separator $iconmenu add command -label "[trans gotoinbox]" -command ::hotmail::hotmail_login $iconmenu add separator #the login/logout one, defined later on (see below) $iconmenu add command $iconmenu add command -label "[trans quit]" -command "exit" CreateStatesMenu .my_menu statusicon_proc [::MSN::myStatusIs] ## set icon to current status if added icon while already logged in if { [::MSN::myStatusIs] != "FLN" } { $iconmenu add separator mailicon_proc [::hotmail::unreadMessages] }}proc taskbar_icon_handler { msg x y } { global iconmenu ishidden if { [winfo exists .bossmode] } { if { $msg=="WM_LBUTTONDBLCLK" } { wm state .bossmode normal focus -force .bossmode } return } if { $msg=="WM_RBUTTONUP" } { #tk_popup $iconmenu $x $y #workaround for bug with the popup not unposting wm state .trayiconwin normal wm geometry .trayiconwin "+0+[expr {2 * [winfo screenheight .]}]" focus -force .trayiconwin tk_popup $iconmenu [expr "$x + 85"] [expr "$y - 11"] [$iconmenu index end] #workaround for bug with the popup not unposting wm state .trayiconwin withdrawn } if { $msg=="WM_LBUTTONDBLCLK" } { if { $ishidden == 0 } { #wm iconify . if { [wm state .] == "zoomed" } { set ishidden 2 } else { set ishidden 1 } wm state . withdrawn #set ishidden 1 } else { #wm deiconify . #wm state . normal #raise . if { $ishidden == 2 } { wm state . zoomed } else { wm state . normal } focus -force . set ishidden 0 } }}proc trayicon_callback {imgSrc imgDst width height} { $imgDst copy $imgSrc if { [image width $imgSrc] > $width || [image height $imgSrc] > $height} { ::picture::ResizeWithRatio $imgDst $width $height }}proc statusicon_proc {status} { global systemtray_exist statusicon list_states iconmenu wintrayicon tcl_platform defaultbackground set cmdline "" if { ![WinDock] } { set icon .si if { $systemtray_exist == 1 && $statusicon == 0 && [UnixDock]} { set pixmap "[::skin::GetSkinFile pixmaps doffline.png]" image create photo statustrayicon -file $pixmap image create photo statustrayiconres #add the icon set statusicon [newti $icon -tooltip offline -pixmap statustrayiconres -command "::trayicon_callback statustrayicon statustrayiconres"] bind $icon <Button1-ButtonRelease> iconify_proc bind $icon <Button3-ButtonRelease> "tk_popup $iconmenu %X %Y" } } set my_name [::abook::getPersonal MFN] if { $systemtray_exist == 1 && $statusicon != 0 && $status == "REMOVE" } { if {$tcl_platform(platform) == "windows"} { winico taskbar delete $wintrayicon } else { remove_icon $statusicon destroy trayicon } set statusicon 0 } elseif {$systemtray_exist == 1 && $statusicon != 0 && ( [UnixDock] || [WinDock] ) && $status != "REMOVE"} { if { $status != "" } { if { $status == "FLN" } { # Send message $iconmenu entryconfigure 2 -state disabled #Status submenu $iconmenu entryconfigure 4 -state disabled #Change nick $iconmenu entryconfigure 6 -state disabled #Login/Logout $iconmenu entryconfigure 11 -label "[trans login]" -command "::MSN::connect" -state normal } else { $iconmenu entryconfigure 2 -state normal $iconmenu entryconfigure 4 -state normal $iconmenu entryconfigure 6 -state normal $iconmenu entryconfigure 11 -label "[trans logout]" -command "::MSN::logout" } switch $status { "FLN" { set pixmap "[::skin::GetSkinFile pixmaps doffline.png]" set tooltip "[trans offline]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons offline.ico]] } } "NLN" { set pixmap "[::skin::GetSkinFile pixmaps donline.png]" set tooltip "$my_name ([::config::getKey login]): [trans online]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons online.ico]] } } "IDL" { set pixmap "[::skin::GetSkinFile pixmaps dinactive.png]" set tooltip "$my_name ([::config::getKey login]): [trans noactivity]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons inactive.ico]] } } "BSY" { set pixmap "[::skin::GetSkinFile pixmaps dbusy.png]" set tooltip "$my_name ([::config::getKey login]): [trans busy]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons busy.ico]] } } "BRB" { set pixmap "[::skin::GetSkinFile pixmaps dbrb.png]" set tooltip "$my_name ([::config::getKey login]): [trans rightback]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons brb.ico]] } } "AWY" { set pixmap "[::skin::GetSkinFile pixmaps daway.png]" set tooltip "$my_name ([::config::getKey login]): [trans away]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons away.ico]] } } "PHN" { set pixmap "[::skin::GetSkinFile pixmaps dphone.png]" set tooltip "$my_name ([::config::getKey login]): [trans onphone]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons phone.ico]] } } "LUN" { set pixmap "[::skin::GetSkinFile pixmaps dlunch.png]" set tooltip "$my_name ([::config::getKey login]): [trans gonelunch]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons lunch.ico]] } } "HDN" { set pixmap "[::skin::GetSkinFile pixmaps dhidden.png]" set tooltip "$my_name ([::config::getKey login]): [trans appearoff]" if { [WinDock] } { set trayicon [winico create [::skin::GetSkinFile winicons hidden.ico]]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -