/*****************************************************************************
 * tracker1.c:
 *
 *         From:
 *                   The X Window System, 
 *            Programming and Applications with Xt
 *                   OPEN LOOK Edition
 *         by
 *              Douglas Young & John Pew
 *              Prentice Hall, 1991
 *
 *              Example described on pages: 
 *
 *
 *  Copyright 1991 by Prentice Hall
 *  All Rights Reserved
 *
 * This code is based on the OPEN LOOK Intrinsics Toolkit (OLIT) and 
 * the X Window System
 *
 * Permission to use, copy, modify, and distribute this software for 
 * any purpose and without fee is hereby granted, provided that the above
 * copyright notice appear in all copies and that both the copyright notice
 * and this permission notice appear in supporting documentation.
 *
 * Prentice Hall and the authors disclaim all warranties with regard to 
 * this software, including all implied warranties of merchantability and 
 * fitness.
 * In no event shall Prentice Hall or the authors be liable for any special,
 * indirect or consequential damages or any damages whatsoever resulting from 
 * loss of use, data or profits, whether in an action of contract, negligence 
 * or other tortious action, arising out of or in connection with the use 
 * or performance of this software.
 *
 * OPEN LOOK is a trademark of UNIX System Laboratories.
 * X Window System is a trademark of the Massachusetts Institute of Technology
 ****************************************************************************/

#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <Xol/StaticText.h>
#include "libXs.h"

create_mouse_tracker(parent, target)
  Widget   parent, target;
{
  extern void  clear_tracker();
  extern void  track_mouse_position();
  Widget       tracker;

  /*
   * Create the tracker widget and register event 
   * handlers for the target widget. 
   */
  tracker = XtCreateManagedWidget("mousetracker", 
                                  staticTextWidgetClass,
                                  parent, NULL, 0);
  XtAddEventHandler(target, LeaveWindowMask, FALSE,
                    clear_tracker, tracker);
  XtAddEventHandler(target, PointerMotionMask, FALSE,
                    track_mouse_position, tracker);
}

void
track_mouse_position(w, client_data, event, continue_to_dispatch)
  Widget    w;
  XtPointer client_data;
  XEvent   *event;
  Boolean  *continue_to_dispatch;
{
  Widget tracker = (Widget)client_data;

  /*
   * Extract the position of the pointer from the event
   * and display it in the tracker widget. 
   */
  xs_wprintf(tracker, "X: %4d, Y: %4d", 
             event->xmotion.x, event->xmotion.y);
}

void
clear_tracker(w, client_data, event, continue_to_dispatch)
  Widget    w;
  XtPointer client_data;
  XEvent   *event;
  Boolean  *continue_to_dispatch;
{
  Widget tracker = (Widget)client_data;

  /*  
   * Display an empty string in the tracker widget. 
   */
  xs_wprintf(tracker, "");
}
