home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / findParent.C < prev    next >
C/C++ Source or Header  |  1998-03-25  |  3KB  |  132 lines

  1. // $Id: findParent.C,v 1.12 1998/03/25 12:45:53 zeller Exp $
  2. // find specific parent
  3.  
  4. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. char findParent_rcsid[] = 
  30.     "$Id: findParent.C,v 1.12 1998/03/25 12:45:53 zeller Exp $";
  31.  
  32. #include <Xm/Xm.h>
  33. #include <iostream.h>
  34.  
  35. #include "findParent.h"
  36. #include "longName.h"
  37. #include "bool.h"
  38.  
  39. // ANSI C++ doesn't like the XtIsRealized() macro
  40. #ifdef XtIsRealized
  41. #undef XtIsRealized
  42. #endif
  43.  
  44. // Set this to true to allow debugging
  45. bool findParent_debug = false;
  46.  
  47. // Find a realized Shell
  48. Widget findShellParent(Widget w)
  49. {
  50.     if (findParent_debug)
  51.     clog << "findShellParent(" << longName(w) << ") = ";
  52.  
  53.     while (w != 0 && (!XtIsWidget(w)
  54.               || !XtIsShell(w)
  55.               || !XtIsRealized(w)
  56.               || XtDisplay(w) == None
  57.               || XtScreen(w) == None
  58.               || XtWindow(w) == None))
  59.     w = XtParent(w);
  60.  
  61.     if (findParent_debug)
  62.     {
  63.     if (w != 0)
  64.         clog << longName(w);
  65.     else
  66.         clog << "(none)";
  67.     clog << "\n";
  68.     }
  69.  
  70.     return w;
  71. }
  72.  
  73.  
  74. // find a (realized) toplevel Shell
  75. Widget findTopLevelShellParent(Widget w)
  76. {
  77.     if (findParent_debug)
  78.     clog << "findTopLevelShellParent(" << longName(w) << ") = ";
  79.  
  80.     while (w != 0 && (!XtIsWidget(w)
  81.               || !XtIsTopLevelShell(w)
  82.               || !XtIsRealized(w)
  83.               || XtDisplay(w) == 0
  84.               || XtScreen(w) == 0
  85.               || XtWindow(w) == 0))
  86.     w = XtParent(w);
  87.  
  88.     if (findParent_debug)
  89.     {
  90.     if (w != 0)
  91.         clog << longName(w);
  92.     else
  93.         clog << "(none)";
  94.     clog << "\n";
  95.     }
  96.  
  97.     return w;
  98. }
  99.  
  100.  
  101. // find highest (realized) toplevel Shell
  102. Widget findTheTopLevelShell(Widget w)
  103. {
  104.     if (findParent_debug)
  105.     clog << "findTopLevelShellParent(" << longName(w) << ") = ";
  106.  
  107.     Widget found = 0;
  108.  
  109.     while (w != 0)
  110.     {
  111.     if (XtIsWidget(w)
  112.         && XtIsTopLevelShell(w) 
  113.         && XtIsRealized(w)
  114.         && XtDisplay(w) != 0
  115.         && XtScreen(w) != 0
  116.         && XtWindow(w) != 0)
  117.         found = w;
  118.     w = XtParent(w);
  119.     }
  120.  
  121.     if (findParent_debug)
  122.     {
  123.     if (found != 0)
  124.         clog << longName(found);
  125.     else
  126.         clog << "(none)";
  127.     clog << "\n";
  128.     }
  129.  
  130.     return found;
  131. }
  132.