⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trayicon.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
📖 第 1 页 / 共 2 页
字号:
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 + -