home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / SDMOUGTK.C < prev    next >
C/C++ Source or Header  |  1990-05-12  |  3KB  |  95 lines

  1. /*
  2.     sdmougtk.c  10/27/89
  3.  
  4.     % sedmou_GreedyTrack
  5.  
  6.     A tracking, keep control mousehandler
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      5/25/89 jmd    Fixed it up
  15.      6/03/89 jmd    Added trapwin test
  16.      6/22/89 jmd    Added out of win test
  17.  
  18.      1/24/90 ted    Revamped for new nested MEV_START/STOPCUR msg scheme.
  19.      3/28/90 jmd    ansi-fied
  20.      5/12/90 jmd    mouse handlers now return ints
  21. */
  22.  
  23. #include <stdio.h>
  24. #include "cscape.h"
  25.  
  26. #include "scancode.h"        /* for MOU codes */
  27. /* -------------------------------------------------------------------------- */
  28.  
  29. int sedmou_GreedyTrack(sed_type sed, int msg, mev_struct *mev)
  30. /*
  31.     A mouse handler for pop-ups.
  32.     This mouse handler prevents all other windows from getting
  33.     mouse events while it is active.
  34.     It is used for creating popup windows that require attention.
  35.     (uses sedmou_Track for most of its work)
  36. */
  37. {
  38.     int ret;
  39.  
  40.     switch (msg) {
  41.     case MEV_STARTCUR:
  42.         /* Trap all mouse events while we're current */
  43.         disp_TrapMouse(sed);
  44.         break;
  45.  
  46.     case MEV_STOPCUR:
  47.         break;
  48.  
  49.     case MEV_STARTOFFER:
  50.     case MEV_OFFER:
  51.     case MEV_ENDOFFER:
  52.         /* Only respond to offers if trapping is on */
  53.         if (disp_IsTrappedMouse()) {
  54.             /* If the event is inside our window or border do the normal thing;
  55.                 otherwise bail out of the sed */
  56.             if ((ret = sedmev_greedyclip(sed, mev)) == MOU_HERE) {
  57.                 return(sedmou_Track(sed, msg, mev));
  58.             }
  59.             else {
  60.                 /* Event is not in our win, but trapping is on, so one of our
  61.                     children must be current; the standard response for a click
  62.                     outside is to exit the child and ourselves */
  63.                 /* Mouse was outside the window; don't accept the offer, but
  64.                     if the mouse was clicked return MOU_THERE so that
  65.                     the popup will be removed */
  66.                 mev_ClearEvent(mev);
  67.                 return(ret);
  68.             }
  69.         }
  70.         mev_ClearEvent(mev);
  71.         break;
  72.         
  73.     case MEV_REQUEST:    /* we're the current window so trapping must be on */
  74.         return(sedmou_Track(sed, msg, mev));
  75.  
  76.     case MEV_STARTEVENT:
  77.         win_SetDebounced(sed, mev_IsButtonDown(mev));
  78.         /* no break, fall through */
  79.     case MEV_EVENT:        /* we're the current window so trapping must be on */
  80.     case MEV_ENDEVENT:
  81.  
  82.         /* If the event is inside our window or border do the normal thing;
  83.             otherwise bail out of the sed */
  84.         if ((ret = sedmev_greedyclip(sed, mev)) == MOU_HERE) {
  85.             return(sedmou_Track(sed, msg, mev));
  86.         }
  87.         else {     /* Otherwise exit if button is clicked */
  88.             return(ret);
  89.         }
  90.     }
  91.     return(MOU_IGNORE);        /* Ignore this mouse event */
  92. }
  93. /* -------------------------------------------------------------------------- */
  94.  
  95.