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

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