# GDBEventHandler class implementation for Insight.
# Copyright (C) 2001 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License (GPL) as published by
# the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# ------------------------------------------------------------
#  PUBLIC PROC:  dispatch - Dispatch the given event to all
#                 event handlers. The name of the handler
#                 method to call is stored in the event's
#                 "handler" method.                  
# ------------------------------------------------------------
itcl::body GDBEventHandler::dispatch {event} {

  set handler [$event handler]

  # invoke event handlers
  foreach w [itcl_info objects -isa GDBEventHandler] {
    dbug I "posting event \"$handler\" to \"$w\""
    if {[catch {$w $handler $event}]} {
      dbug E "On $handler event, $w errored:\n$::errorInfo"
    }
  }
}
