home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / XfeWidgets / Xfe / TaskBar.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  18.7 KB  |  647 lines

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /*-----------------------------------------*/
  19. /*                                                                        */
  20. /* Name:        <Xfe/TaskBar.c>                                            */
  21. /* Description:    XfeTaskBar widget source.                                */
  22. /* Author:        Ramiro Estrugo <ramiro@netscape.com>                    */
  23. /*                                                                        */
  24. /*----------------------------------------------------------------------*/
  25.  
  26.  
  27. #include <stdio.h>
  28.  
  29. #include <Xfe/TaskBarP.h>
  30.  
  31. #include <Xfe/Button.h>
  32. #include <Xfe/Tab.h>
  33.  
  34. #include <Xm/AtomMgr.h>
  35. #include <Xm/Protocols.h>
  36.  
  37. #define MESSAGE1 "Widget is not an XfeTaskBar."
  38. #define MESSAGE2 "XmNactionButton is a read-only resource."
  39. #define MESSAGE3 "XmNfirstWidget is a read-only resource."
  40. #define MESSAGE4 "XmNrightWidget is a read-only resource."
  41. #define MESSAGE5 "XmNmaxPosition is too big."
  42. #define MESSAGE6 "XmNminPosition is too small."
  43.  
  44. #define ACTION_BUTTON_NAME            "ActionButton"
  45.  
  46. #define SHADOW_OFFSET 3
  47.  
  48. /*----------------------------------------------------------------------*/
  49. /*                                                                        */
  50. /* Core Class Methods                                                    */
  51. /*                                                                        */
  52. /*----------------------------------------------------------------------*/
  53. static void     Initialize        (Widget,Widget,ArgList,Cardinal *);
  54. static void     Destroy            (Widget);
  55. static Boolean    SetValues        (Widget,Widget,Widget,ArgList,
  56.                                  Cardinal *);
  57.  
  58. /*----------------------------------------------------------------------*/
  59. /*                                                                        */
  60. /* XfeManager Class Methods                                                */
  61. /*                                                                        */
  62. /*----------------------------------------------------------------------*/
  63. static void        PreferredGeometry    (Widget,Dimension *,Dimension *);
  64. static void        LayoutChildren        (Widget);
  65. static void        LayoutComponents    (Widget);
  66.  
  67. /*----------------------------------------------------------------------*/
  68. /*                                                                        */
  69. /* Misc XfeTaskBar functions                                            */
  70. /*                                                                        */
  71. /*----------------------------------------------------------------------*/
  72. static void        LayoutComponentsVertical    (Widget);
  73. static void        LayoutComponentsHorizontal    (Widget);
  74. static void        UpdateActionPixmap            (Widget);
  75. static void        UpdateActionCursor            (Widget);
  76.  
  77. /*----------------------------------------------------------------------*/
  78. /*                                                                        */
  79. /* Action Button callbacks and event handlers                            */
  80. /*                                                                        */
  81. /*----------------------------------------------------------------------*/
  82. static void    ActionCallback            (Widget,XtPointer,XtPointer);
  83.  
  84. /*----------------------------------------------------------------------*/
  85. /*                                                                        */
  86. /* XfeTaskBar Resources                                                 */
  87. /*                                                                        */
  88. /*----------------------------------------------------------------------*/
  89. static XtResource resources[] =     
  90. {                    
  91.     /* Callback resources */         
  92.     { 
  93.         XmNactionCallback,
  94.         XmCCallback,
  95.         XmRCallback,
  96.         sizeof(XtCallbackList),
  97.         XtOffsetOf(XfeTaskBarRec , xfe_task_bar . action_callback),
  98.         XmRImmediate, 
  99.         (XtPointer) NULL
  100.     },
  101.  
  102.     /* Resources */
  103.     { 
  104.         XmNactionButton,
  105.         XmCReadOnly,
  106.         XmRWidget,
  107.         sizeof(Widget),
  108.         XtOffsetOf(XfeTaskBarRec , xfe_task_bar . action_button),
  109.         XmRImmediate, 
  110.         (XtPointer) NULL
  111.     },
  112.     { 
  113.         XmNactionCursor,
  114.         XmCCursor,
  115.         XmRCursor,
  116.         sizeof(Cursor),
  117.         XtOffsetOf(XfeTaskBarRec , xfe_task_bar . action_cursor),
  118.         XmRImmediate, 
  119.         (XtPointer) None
  120.     },
  121.     { 
  122.         XmNactionPixmap,
  123.         XmCActionPixmap,
  124.         XmRPixmap,
  125.         sizeof(Pixmap),
  126.         XtOffsetOf(XfeTaskBarRec , xfe_task_bar . action_pixmap),
  127.         XmRImmediate, 
  128.         (XtPointer) XmUNSPECIFIED_PIXMAP
  129.     },
  130.     { 
  131.         XmNshowActionButton,
  132.         XmCShowActionButton,
  133.         XmRBoolean,
  134.         sizeof(Boolean),
  135.         XtOffsetOf(XfeTaskBarRec , xfe_task_bar . show_action_button),
  136.         XmRImmediate, 
  137.         (XtPointer) False
  138.     },
  139.  
  140.     /* Force all the margins to 0 */
  141.     { 
  142.         XmNmarginBottom,
  143.         XmCMarginBottom,
  144.         XmRVerticalDimension,
  145.         sizeof(Dimension),
  146.         XtOffsetOf(XfeTaskBarRec , xfe_manager . margin_bottom),
  147.         XmRImmediate, 
  148.         (XtPointer) 0
  149.     },
  150.     { 
  151.         XmNmarginLeft,
  152.         XmCMarginLeft,
  153.         XmRHorizontalDimension,
  154.         sizeof(Dimension),
  155.         XtOffsetOf(XfeTaskBarRec , xfe_manager . margin_left),
  156.         XmRImmediate, 
  157.         (XtPointer) 0
  158.     },
  159.     { 
  160.         XmNmarginRight,
  161.         XmCMarginRight,
  162.         XmRHorizontalDimension,
  163.         sizeof(Dimension),
  164.         XtOffsetOf(XfeTaskBarRec , xfe_manager . margin_right),
  165.         XmRImmediate, 
  166.         (XtPointer) 0
  167.     },
  168.     { 
  169.         XmNmarginTop,
  170.         XmCMarginTop,
  171.         XmRVerticalDimension,
  172.         sizeof(Dimension),
  173.         XtOffsetOf(XfeTaskBarRec , xfe_manager . margin_top),
  174.         XmRImmediate, 
  175.         (XtPointer) 0
  176.     },
  177. };   
  178.  
  179. /*----------------------------------------------------------------------*/
  180. /*                                                                        */
  181. /* Widget Class Record Initialization                                   */
  182. /*                                                                        */
  183. /*----------------------------------------------------------------------*/
  184. _XFE_WIDGET_CLASS_RECORD(taskbar,TaskBar) =
  185. {
  186.     {
  187.         (WidgetClass) &xfeToolBarClassRec,        /* superclass           */
  188.         "XfeTaskBar",                            /* class_name           */
  189.         sizeof(XfeTaskBarRec),                    /* widget_size          */
  190.         NULL,                                    /* class_initialize     */
  191.         NULL,                                    /* class_part_initiali    */
  192.         FALSE,                                  /* class_inited         */
  193.         Initialize,                             /* initialize           */
  194.         NULL,                                   /* initialize_hook      */
  195.         XtInheritRealize,                        /* realize              */
  196.         NULL,                                    /* actions              */
  197.         0,                                        /* num_actions          */
  198.         resources,                              /* resources            */
  199.         XtNumber(resources),                    /* num_resources        */
  200.         NULLQUARK,                              /* xrm_class            */
  201.         TRUE,                                   /* compress_motion      */
  202.         XtExposeCompressMaximal,                /* compress_exposure    */
  203.         TRUE,                                   /* compress_enterleave    */
  204.         FALSE,                                  /* visible_interest     */
  205.         Destroy,                                /* destroy              */
  206.         XtInheritResize,                        /* resize               */
  207.         XtInheritExpose,                        /* expose               */
  208.         SetValues,                              /* set_values           */
  209.         NULL,                                   /* set_values_hook      */
  210.         XtInheritSetValuesAlmost,                /* set_values_almost    */
  211.         NULL,                                    /* get_values_hook      */
  212.         NULL,                                   /* accexfe_focus         */
  213.         XtVersion,                              /* version              */
  214.         NULL,                                   /* callback_private     */
  215.         XtInheritTranslations,                    /* tm_table                */
  216.         XtInheritQueryGeometry,                    /* query_geometry       */
  217.         XtInheritDisplayAccelerator,            /* display accel        */
  218.         NULL,                                   /* extension            */
  219.     },
  220.     
  221.     /* Composite Part */
  222.     {
  223.         XtInheritGeometryManager,                /* geometry_manager        */
  224.         XtInheritChangeManaged,                    /* change_managed        */
  225.         XtInheritInsertChild,                    /* insert_child            */
  226.         XtInheritDeleteChild,                    /* delete_child            */
  227.         NULL                                    /* extension            */
  228.     },
  229.  
  230.     /* Constraint Part */
  231.     {
  232.         NULL,                                    /* resource list           */
  233.         0,                                        /* num resources           */
  234.         sizeof(XfeToolBarConstraintRec),        /* constraint size        */
  235.         NULL,                                    /* init proc               */
  236.         NULL,                                   /* destroy proc            */
  237.         NULL,                                    /* set values proc         */
  238.         NULL,                                   /* extension               */
  239.     },
  240.  
  241.     /* XmManager Part */
  242.     {
  243.         XtInheritTranslations,
  244.         NULL,                                    /* syn resources           */
  245.         0,                                        /* num syn_resources       */
  246.         NULL,                                   /* syn_cont_resources      */
  247.         0,                                      /* num_syn_cont_resource*/
  248.         XmInheritParentProcess,                 /* parent_process          */
  249.         NULL,                                   /* extension               */
  250.     },
  251.  
  252.     /* XfeManager Part     */
  253.     {
  254.         XfeInheritBitGravity,                    /* bit_gravity            */
  255.         PreferredGeometry,                        /* preferred_geometry    */
  256.         XfeInheritMinimumGeometry,                /* minimum_geometry        */
  257.         XfeInheritUpdateRect,                    /* update_rect            */
  258.         XfeInheritAcceptChild,                    /* accept_child            */
  259.         XfeInheritInsertChild,                    /* insert_child            */
  260.         XfeInheritDeleteChild,                    /* delete_child            */
  261.         XfeInheritChangeManaged,                /* change_managed        */
  262.         NULL,                                    /* prepare_components    */
  263.         LayoutComponents,                        /* layout_components    */
  264.         LayoutChildren,                            /* layout_children        */
  265.         NULL,                                    /* draw_background        */
  266.         XfeInheritDrawShadow,                    /* draw_shadow            */
  267.         NULL,                                    /* draw_components        */
  268.         NULL,                                    /* extension              */
  269.     },
  270.  
  271.     /* XfeOriented Part */
  272.     {
  273.         NULL,                                    /* enter                */
  274.         NULL,                                    /* leave                */
  275.         NULL,                                    /* motion                */
  276.         NULL,                                    /* drag_start            */
  277.         NULL,                                    /* drag_end                */
  278.         NULL,                                    /* drag_motion            */
  279.         NULL,                                    /* des_enter            */
  280.         NULL,                                    /* des_leave            */
  281.         NULL,                                    /* des_motion            */
  282.         NULL,                                    /* des_drag_start        */
  283.         NULL,                                    /* des_drag_end            */
  284.         NULL,                                    /* des_drag_motion        */
  285.         NULL,                                    /* extension              */
  286.     },
  287.  
  288.  
  289.     /* XfeToolBar Part */
  290.     {
  291.         NULL,                                    /* extension              */
  292.     },
  293.  
  294.     /* XfeTaskBar Part */
  295.     {
  296.         NULL,                                    /* extension              */
  297.     },
  298. };
  299.  
  300. /*----------------------------------------------------------------------*/
  301. /*                                                                        */
  302. /* xfeTaskBarWidgetClass declaration.                                    */
  303. /*                                                                        */
  304. /*----------------------------------------------------------------------*/
  305. _XFE_WIDGET_CLASS(taskbar,TaskBar);
  306.  
  307. /*----------------------------------------------------------------------*/
  308. /*                                                                        */
  309. /* Core Class Methods                                                    */
  310. /*                                                                        */
  311. /*----------------------------------------------------------------------*/
  312. static void
  313. Initialize(Widget rw,Widget nw,ArgList args,Cardinal *nargs)
  314. {
  315.     XfeTaskBarPart *    tp = _XfeTaskBarPart(nw);
  316.  
  317.     /* Create the action button */
  318.     tp->action_button = 
  319.         XtVaCreateWidget(ACTION_BUTTON_NAME,
  320.                          xfeTabWidgetClass,
  321.                          nw,
  322.                          XmNmarginLeft,            0,
  323.                          XmNmarginRight,        0,
  324.                          XmNmarginTop,            0,
  325.                          XmNmarginBottom,        0,
  326.                          XmNprivateComponent,    True,
  327.                          XmNtraversalOn,        False,
  328.                          XmNhighlightThickness,    0,
  329.                          XmNarmOffset,            0,
  330.                          XmNraiseOffset,        0,
  331.                          XmNbackground,            _XfeBackgroundPixel(nw),
  332.                          NULL);
  333.     
  334.     /* Update the pixmaps */
  335.     UpdateActionPixmap(nw);
  336.  
  337.     /* Add callback to action button */
  338.     XtAddCallback(tp->action_button,
  339.                   XmNactivateCallback,
  340.                   ActionCallback,
  341.                   (XtPointer) nw);
  342.  
  343.     /* Finish of initialization */
  344.     _XfeManagerChainInitialize(rw,nw,xfeTaskBarWidgetClass);
  345. }
  346. /*----------------------------------------------------------------------*/
  347. static void
  348. Destroy(Widget w)
  349. {
  350. /*     XfeTaskBarPart * tp = _XfeTaskBarPart(w); */
  351.  
  352. /*     XtRemoveCallback(tp->action_button, */
  353. /*                      XmNactivateCallback, */
  354. /*                      ActionCallback, */
  355. /*                      (XtPointer) nw); */
  356.  
  357. /*     XtRemoveEventHandler(nw, */
  358. /*                          StructureNotifyMask, */
  359. /*                          True, */
  360. /*                          MappingEH, */
  361. /*                          (XtPointer) nw); */
  362. }
  363. /*----------------------------------------------------------------------*/
  364. static Boolean
  365. SetValues(Widget ow,Widget rw,Widget nw,ArgList args,Cardinal *nargs)
  366. {
  367.     XfeTaskBarPart *        np = _XfeTaskBarPart(nw);
  368.     XfeTaskBarPart *        op = _XfeTaskBarPart(ow);
  369.  
  370.     /* action_button */
  371.     if (np->action_button != op->action_button)
  372.     {
  373.         np->action_button = op->action_button;
  374.     }
  375.  
  376.     /* action_pixmap */
  377.     if (np->action_pixmap != op->action_pixmap)
  378.     {
  379.         UpdateActionPixmap(nw);
  380.  
  381.         _XfemConfigFlags(nw) |= XfeConfigGLE;
  382.     }
  383.  
  384.     /* action_cursor */
  385.     if (np->action_cursor != op->action_cursor)
  386.     {
  387.         UpdateActionCursor(nw);
  388.     }
  389.  
  390.     /* show_action_button */
  391.     if (np->show_action_button != op->show_action_button)
  392.     {
  393.         _XfemConfigFlags(nw) |= XfeConfigGLE;
  394.     }
  395.  
  396.     return _XfeManagerChainSetValues(ow,rw,nw,xfeTaskBarWidgetClass);
  397. }
  398. /*----------------------------------------------------------------------*/
  399.  
  400. /*----------------------------------------------------------------------*/
  401. /*                                                                        */
  402. /* XfeManager Class Methods                                                */
  403. /*                                                                        */
  404. /*----------------------------------------------------------------------*/
  405. static void
  406. PreferredGeometry(Widget w,Dimension * width,Dimension * height)
  407. {
  408.     XfeTaskBarPart *        tp = _XfeTaskBarPart(w);
  409.     XfeToolBarWidgetClass    tbc = (XfeToolBarWidgetClass)xfeToolBarWidgetClass;
  410.  
  411.     (*tbc->xfe_manager_class.preferred_geometry)(w,width,height);
  412.  
  413.     if (tp->show_action_button)
  414.     {
  415.         switch (_XfeOrientedOrientation(w))
  416.         {
  417.         case XmHORIZONTAL:
  418.             
  419.             *width += _XfeWidth(tp->action_button);
  420.             
  421.             break;
  422.             
  423.         case XmVERTICAL:
  424.             
  425.             *height += _XfeHeight(tp->action_button);
  426.             
  427.             break;
  428.         }
  429.     }
  430. }
  431. /*----------------------------------------------------------------------*/
  432. static void
  433. LayoutChildren(Widget w)
  434. {
  435.     XfeTaskBarPart *        tp = _XfeTaskBarPart(w);
  436.     XfeToolBarWidgetClass    tbc = (XfeToolBarWidgetClass)xfeToolBarWidgetClass;
  437.     Dimension                action_width;
  438.     Dimension                action_height;
  439.  
  440.     if (tp->show_action_button && _XfeIsAlive(tp->action_button))
  441.     {
  442.         action_width  = _XfeWidth(tp->action_button);
  443.         action_height = _XfeHeight(tp->action_button);
  444.     }
  445.     else
  446.     {
  447.         action_width  = 0;
  448.         action_height = 0;
  449.     }
  450.  
  451.     /* Add the action button's dimensions if needed */
  452.     switch (_XfeOrientedOrientation(w))
  453.     {
  454.     case XmHORIZONTAL:
  455.  
  456.         _XfemMarginLeft(w) += action_width;
  457.         
  458.         (*tbc->xfe_manager_class.layout_children)(w);
  459.         
  460.         _XfemMarginLeft(w) -= action_width;
  461.  
  462.         break;
  463.         
  464.     case XmVERTICAL:
  465.  
  466.         _XfemMarginTop(w) += action_height;
  467.         
  468.         (*tbc->xfe_manager_class.layout_children)(w);
  469.         
  470.         _XfemMarginTop(w) -= action_height;
  471.  
  472.         break;
  473.     }
  474. }
  475. /*----------------------------------------------------------------------*/
  476. static void
  477. LayoutComponents(Widget w)
  478. {
  479.     XfeTaskBarPart *    tp = _XfeTaskBarPart(w);
  480.  
  481.     /* Make sure our one and only component alive and kicking */
  482.     if (!_XfeIsAlive(tp->action_button))
  483.     {
  484.         return;
  485.     }
  486.  
  487.     /* Do our layout */
  488.     switch(_XfeOrientedOrientation(w))
  489.     {
  490.     case XmHORIZONTAL:
  491.         LayoutComponentsHorizontal(w);
  492.         break;
  493.  
  494.     case XmVERTICAL:
  495.         LayoutComponentsVertical(w);
  496.         break;
  497.     }
  498. }
  499. /*----------------------------------------------------------------------*/
  500.  
  501. /*----------------------------------------------------------------------*/
  502. /*                                                                        */
  503. /* Action Button callbacks                                                */
  504. /*                                                                        */
  505. /*----------------------------------------------------------------------*/
  506. static void
  507. ActionCallback(Widget child,XtPointer client_data,XtPointer call_data)
  508. {
  509.     Widget                        w = XtParent(child);
  510.     XfeTaskBarPart *            tp = _XfeTaskBarPart(w);
  511.     XfeButtonCallbackStruct *    cbs = (XfeButtonCallbackStruct *) call_data;
  512.  
  513.     if (_XfeIsAlive(w))
  514.     {
  515.         /* Invoke the action callbacks */
  516.         _XfeInvokeCallbacks(w,tp->action_callback,XmCR_ACTION,
  517.                             cbs->event,False);
  518.     }
  519. }
  520. /*----------------------------------------------------------------------*/
  521.  
  522. /*----------------------------------------------------------------------*/
  523. /*                                                                        */
  524. /* Misc XfeTaskBar functions                                            */
  525. /*                                                                        */
  526. /*----------------------------------------------------------------------*/
  527. static void
  528. LayoutComponentsVertical(Widget w)
  529. {
  530.     XfeTaskBarPart *    tp = _XfeTaskBarPart(w);
  531.  
  532.     XtVaSetValues(tp->action_button,
  533.                   XmNusePreferredWidth,        True,
  534.                   NULL);
  535.     
  536.     /* Layout the action button */
  537.     _XfeConfigureWidget(tp->action_button,
  538.                            
  539.                         0,
  540.                         
  541.                         0,
  542.                         
  543.                         _XfeWidth(w),
  544.                         
  545.                         _XfeHeight(tp->action_button));
  546.  
  547.     /* Show the action button as needed */
  548.     _XfemIgnoreConfigure(w) = True;
  549.  
  550.     if (tp->show_action_button)
  551.     {
  552.         XtManageChild(tp->action_button);
  553.     }
  554.     else
  555.     {
  556.         XtUnmanageChild(tp->action_button);
  557.     }
  558.  
  559.     _XfemIgnoreConfigure(w) = False;
  560. }
  561. /*----------------------------------------------------------------------*/
  562. static void
  563. LayoutComponentsHorizontal(Widget w)
  564. {
  565.     XfeTaskBarPart *    tp = _XfeTaskBarPart(w);
  566.  
  567.     XtVaSetValues(tp->action_button,
  568.                   XmNusePreferredWidth,        True,
  569.                   NULL);
  570.     
  571.     /* Layout the action button */
  572.     _XfeConfigureWidget(tp->action_button,
  573.                            
  574.                         0,
  575.                         
  576.                         0,
  577.  
  578.                         _XfeWidth(tp->action_button),
  579.  
  580.                         _XfeHeight(w));
  581.                         
  582.     /* Show the action button as needed */
  583.     _XfemIgnoreConfigure(w) = True;
  584.  
  585.     if (tp->show_action_button)
  586.     {
  587.         XtManageChild(tp->action_button);
  588.     }
  589.     else
  590.     {
  591.         XtUnmanageChild(tp->action_button);
  592.     }
  593.  
  594.     _XfemIgnoreConfigure(w) = False;
  595. }
  596. /*----------------------------------------------------------------------*/
  597. static void
  598. UpdateActionPixmap(Widget w)
  599. {
  600.     XfeTaskBarPart *    tp = _XfeTaskBarPart(w);
  601.  
  602.     if (_XfePixmapGood(tp->action_pixmap))
  603.     {
  604.         XtVaSetValues(tp->action_button,
  605.                       XmNpixmap,                tp->action_pixmap,
  606.                       NULL);
  607.     }
  608.     else
  609.     {
  610.         _XfeResizeWidget(tp->action_button,16,16);
  611.     }
  612. }
  613. /*----------------------------------------------------------------------*/
  614. static void
  615. UpdateActionCursor(Widget w)
  616. {
  617.     XfeTaskBarPart *    tp = _XfeTaskBarPart(w);
  618.  
  619.     if (tp->action_pixmap != None)
  620.     {
  621.         XtVaSetValues(tp->action_button,
  622.                       XmNcursor,                tp->action_cursor,
  623.                       XmNcursorOn,                True,
  624.                       NULL);
  625.     }
  626.     else
  627.     {
  628.         XtVaSetValues(tp->action_button,
  629.                       XmNcursor,                None,
  630.                       XmNcursorOn,                False,
  631.                       NULL);
  632.     }
  633. }
  634. /*----------------------------------------------------------------------*/
  635.  
  636. /*----------------------------------------------------------------------*/
  637. /*                                                                        */
  638. /* XfeTaskBar Public Methods                                            */
  639. /*                                                                        */
  640. /*----------------------------------------------------------------------*/
  641. Widget
  642. XfeCreateTaskBar(Widget parent,char *name,Arg *args,Cardinal count)
  643. {
  644.     return (XtCreateWidget(name,xfeTaskBarWidgetClass,parent,args,count));
  645. }
  646. /*----------------------------------------------------------------------*/
  647.