diff options
Diffstat (limited to 'urgent.tcl')
-rw-r--r-- | urgent.tcl | 66 |
1 files changed, 39 insertions, 27 deletions
@@ -1,6 +1,8 @@ # $Id$ namespace eval urgent { + variable options + custom::defgroup Urgent [::msgcat::mc "Urgency hinting."] -group Plugins custom::defvar options(enabled) 1 \ @@ -38,18 +40,18 @@ proc urgent::chat_message_notify {chatid from type body extras} { groupchat { if {[string equal [chat::get_jid $chatid] $from]} { if {$options(handle_server_messages)} { - notify $chatid + set_urgency_hint $chatid } } else { set mynick [chat::get_nick [chat::get_xlib $chatid] \ [chat::our_jid $chatid] $type] if {[check_message $mynick $body]} { if {$options(handle_personal_messages)} { - notify $chatid + set_urgency_hint $chatid } } else { if {$options(handle_normal_messages)} { - notify $chatid + set_urgency_hint $chatid } } } @@ -66,42 +68,49 @@ proc urgent::chat_message_notify {chatid from type body extras} { } if {$from == "" && $options(handle_server_messages)} { - notify $chatid + set_urgency_hint $chatid } elseif {$options(handle_personal_messages)} { - notify $chatid + set_urgency_hint $chatid } } } } -proc urgent::notify {chatid} { - variable options - variable xwinids - - exec $options(program) -set $xwinids($chatid) -} - -proc urgent::xwinid {win} { +proc urgent::xclientwinid {tkwin} { # Parent window id: 0x2e0001e "Tkabber" - set data [exec xwininfo -children -id [winfo id $win]] + set data [exec xwininfo -children -id [winfo id $tkwin]] if {[regexp {Parent window id: (\S+)} $data -> id]} { return $id } else { - return "" + error [format "Failed to parse `xwininfo` output\ + for Tk window \"%s\"" $tkwin] } } -proc urgent::root_winid {xwinid _chatid} { +proc urgent::root_xwinid {xwinid _chatid} { return $xwinid } -proc urgent::chat_winid {chatid} { - xwinid [winfo id [chat::winid $chatid]] +proc urgent::chat_xwinid {chatid} { + #xclientwinid [chat::winid $chatid] + winfo id [chat::winid $chatid] } proc urgent::record_xwinid {chatid _type} { variable xwinids - set xwinids($chatid) [winid $chatid] + set xwinids($chatid) [xwinid $chatid] +} + +proc urgent::forget_xwinid {chatid} { + variable xwinids + unset xwinids($chatid) +} + +proc urgent::set_urgency_hint {chatid} { + variable options + variable xwinids + + exec $options(program) -set $xwinids($chatid) } proc urgent::clear_urgency_hint {winid} { @@ -122,21 +131,24 @@ namespace eval urgent { } if {![file executable $options(program)]} { puts stderr [::msgcat::mc "Urgency hint setting program \"%s\"\ - is not available or not executed by the current user.\ + is not available or not executable by the current user.\ The \"urgent\" plugin is disabled. Consult its README file." $options(program)] set options(enabled) 0 } - if {$::ifacetk::options(use_tabbar)} { - interp alias {} [namespace current]::winid \ - {} [namespace current]::root_winid [xwinid .] - } else { - interp alias {} [namespace current]::winid \ - {} [namespace current]::chat_winid - } + hook::add finload_hook [namespace code { + if {$::ifacetk::options(use_tabbar)} { + interp alias {} [namespace current]::xwinid \ + {} [namespace current]::root_xwinid [xclientwinid .] + } else { + interp alias {} [namespace current]::xwinid \ + {} [namespace current]::chat_xwinid + } + }] hook::add open_chat_post_hook [namespace current]::record_xwinid 40 + hook::add close_chat_post_hook [namespace current]::forget_xwinid hook::add draw_message_hook [namespace current]::chat_message_notify 19 hook::add got_focus_hook [namespace current]::clear_urgency_hint } |