event_watcher_enter_id := 0; event_watcher_leave_id := 0; /* An event watcher function is given three special variables: object: the object on which the event took place signal_id: the signal ID in question (faster than signal name) gtk_args: an array of the arguments to the event in question */ function event_watcher() { princ ("Watch: ", gtk_signal_name(signal_id), " emitted for ", class_name(object), "\n"); TRUE; } function event_watcher_down() { if (event_watcher_enter_id != 0) { local signal_id; signal_id = gtk_signal_lookup ("enter_notify_event", gtk_widget_get_type()); gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id); event_watcher_enter_id = 0; signal_id = gtk_signal_lookup ("leave_notify_event", gtk_widget_get_type()); gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id); event_watcher_leave_id = 0; } } function event_watcher_toggle(button) { if(button.get_active() == FALSE) event_watcher_down(); else { local signal_id; signal_id = gtk_signal_lookup ("enter_notify_event", gtk_widget_get_type()); event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, #event_watcher()); signal_id = gtk_signal_lookup ("leave_notify_event", gtk_widget_get_type()); event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, #event_watcher()); } } function create_event_watcher () { local button, vbox, separator, action_area; win_event_watcher = new (GtkDialog); win_event_watcher.signal ("destroy", #event_watcher_down()); win_event_watcher.signal ("destroy", #win_event_watcher = nil); win_event_watcher.title = "Event Watcher"; win_event_watcher.border_width = 0; win_event_watcher.set_usize(200, 110); vbox = car(win_event_watcher.children()); separator = car(vbox.children()); action_area = cadr(vbox.children()); button = new(GtkToggleButton); button.label = "Activate Watch"; button.signal("clicked", `event_watcher_toggle(@button)); button.set_border_width(10); vbox.pack_start(button, TRUE, TRUE, 0); button.show(); button = new (GtkButton); button.label = "Close"; button.signal ("clicked", `(@win_event_watcher).destroy()); action_area.pack_start (button, TRUE, TRUE, 0); button.can_default = TRUE; button.grab_default(); button.show(); win_event_watcher.show_all(); win_event_watcher; } function main () { local window, win_event_watcher; TRUE=1; FALSE=0; window = create_event_watcher (); window.signal ("destroy", #exit_program(0)); init_ipc("event_wat", "event_watq"); gtk_main (); }
Copyright © 1995-2010 by Cogent Real-Time Systems, Inc. All rights reserved.