Merge from emacs-24; up to 2012-05-02T11:38:01Z!lekktu@gmail.com
[bpt/emacs.git] / oldXMenu / Internal.c
index b00841b..dc8dc01 100644 (file)
@@ -3,8 +3,7 @@
 #include "copyright.h"
 
 /*
-Copyright (C) 1993, 1996, 2001, 2002, 2003, 2004, 2005, 2006,
-  2007, 2008, 2009, 2010  Free Software Foundation, Inc.
+Copyright (C) 1993, 1996, 2001-2012  Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -33,18 +32,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <config.h>
 #include "XMenuInt.h"
 
-/*
- * Toggle color macro.
- */
-#define toggle_color(x) \
-       ((x) == menu->bkgnd_color ? menu->s_frg_color : menu->bkgnd_color)
-
 /*
  * Internal Window creation queue sizes.
  */
 #define S_QUE_SIZE     300
 #define P_QUE_SIZE     20
-#define BUFFER_SIZE    (S_QUE_SIZE >= P_QUE_SIZE ? S_QUE_SIZE : P_QUE_SIZE)
 
 
 /*
@@ -72,7 +64,7 @@ int _XMErrorCode = XME_NO_ERROR;
 /*
  * _XMErrorList - Global XMenu error code description strings.
  */
-char *
+char const *const
 _XMErrorList[XME_CODE_COUNT] = {
     "No error",                                /* XME_NO_ERROR */
     "Menu not initialized",            /* XME_NOT_INIT */
@@ -96,7 +88,7 @@ _XMErrorList[XME_CODE_COUNT] = {
 /*
  * _XMEventHandler - Internal event handler variable.
  */
-int (*_XMEventHandler)() = NULL;
+int (*_XMEventHandler)(XEvent*) = NULL;
 
 
 
@@ -104,7 +96,8 @@ int (*_XMEventHandler)() = NULL;
  * _XMWinQueInit - Internal routine to initialize the window
  *                queue.
  */
-_XMWinQueInit()
+void
+_XMWinQueInit(void)
 {
     /*
      * If the queue is not initialized initialize it.
@@ -138,10 +131,10 @@ _XMWinQueInit()
  *                   window queue.
  */
 int
-_XMWinQueAddPane(display, menu, p_ptr)
-    register Display *display;
-    register XMenu *menu;      /* Menu being manipulated. */
-    register XMPane *p_ptr;    /* XMPane being queued. */
+_XMWinQueAddPane(register Display *display, register XMenu *menu, register XMPane *p_ptr)
+
+                               /* Menu being manipulated. */
+                               /* XMPane being queued. */
 {
     /*
      * If the queue is currently full then flush it.
@@ -172,10 +165,10 @@ _XMWinQueAddPane(display, menu, p_ptr)
  *                        the selection window queue.
  */
 int
-_XMWinQueAddSelection(display, menu, s_ptr)
-    register Display *display;
-    register XMenu *menu;      /* Menu being manipulated. */
-    register XMSelect *s_ptr;  /* XMSelection being queued. */
+_XMWinQueAddSelection(register Display *display, register XMenu *menu, register XMSelect *s_ptr)
+
+                               /* Menu being manipulated. */
+                               /* XMSelection being queued. */
 {
     /*
      * If this entry will overflow the queue then flush it.
@@ -206,17 +199,18 @@ _XMWinQueAddSelection(display, menu, s_ptr)
  *                 selection window queues.
  */
 int
-_XMWinQueFlush(display, menu, pane, select)
-    register Display *display;
-    register XMenu *menu;              /* Menu being manipulated. */
-    register XMPane *pane;             /* Current pane. */
+_XMWinQueFlush(register Display *display, register XMenu *menu, register XMPane *pane, XMSelect *sel)
+
+                                       /* Menu being manipulated. */
+                                       /* Current pane. */
 {
     register int pq_index;             /* Pane queue index. */
     register int sq_index;             /* Selection queue index. */
     register XMPane *p_ptr;            /* XMPane pointer. */
     register XMSelect *s_ptr;          /* XMSelect pointer. */
     unsigned long valuemask;           /* Which attributes to set. */
-    XSetWindowAttributes *attributes;  /* Attributes to be set. */
+    XSetWindowAttributes attributes_buf; /* Attributes to be set. */
+    XSetWindowAttributes *attributes = &attributes_buf;
 
     /*
      * If the pane window queue is not empty...
@@ -227,7 +221,6 @@ _XMWinQueFlush(display, menu, pane, select)
         * set up attributes for pane window to be created.
         */
        valuemask = (CWBackPixmap | CWBorderPixel | CWOverrideRedirect);
-       attributes = (XSetWindowAttributes *)malloc(sizeof(XSetWindowAttributes));
        attributes->border_pixel = menu->p_bdr_color;
        attributes->background_pixmap = menu->inact_pixmap;
        attributes->override_redirect = True;
@@ -346,9 +339,9 @@ _XMWinQueFlush(display, menu, pane, select)
  *                     a pane pointer that points to the indexed pane.
  */
 XMPane *
-_XMGetPanePtr(menu, p_num)
-    register XMenu *menu;      /* Menu to find the pane in. */
-    register int p_num;                /* Index number of pane to find. */
+_XMGetPanePtr(register XMenu *menu, register int p_num)
+                               /* Menu to find the pane in. */
+                                       /* Index number of pane to find. */
 {
     register XMPane *p_ptr;    /* Pane pointer to be returned. */
     register int i;            /* Loop counter. */
@@ -382,9 +375,9 @@ _XMGetPanePtr(menu, p_num)
  *                     indexed selection.
  */
 XMSelect *
-_XMGetSelectionPtr(p_ptr, s_num)
-    register XMPane *p_ptr;    /* Pane to find the selection in. */
-    register int s_num;                /* Index number of the selection to find. */
+_XMGetSelectionPtr(register XMPane *p_ptr, register int s_num)
+                               /* Pane to find the selection in. */
+                                       /* Index number of the selection to find. */
 {
     register XMSelect *s_ptr;  /* Selection pointer to be returned. */
     register int i;            /* Loop counter. */
@@ -416,9 +409,10 @@ _XMGetSelectionPtr(p_ptr, s_num)
  * _XMRecomputeGlobals - Internal subroutine to recompute menu wide
  *                      global values.
  */
-_XMRecomputeGlobals(display, menu)
-    register Display *display; /*X11 display variable. */
-    register XMenu *menu;      /* Menu object to compute from. */
+void
+_XMRecomputeGlobals(register Display *display, register XMenu *menu)
+                               /*X11 display variable. */
+                               /* Menu object to compute from. */
 {
     register XMPane *p_ptr;    /* Pane pointer. */
     register XMSelect *s_ptr;  /* Selection pointer. */
@@ -531,11 +525,11 @@ _XMRecomputeGlobals(display, menu)
  *                   window dependencies.
  */
 int
-_XMRecomputePane(display, menu, p_ptr, p_num)
-    register Display *display; /* Standard X display variable. */
-    register XMenu *menu;      /* Menu object being recomputed. */
-    register XMPane *p_ptr;    /* Pane pointer. */
-    register int p_num;                /* Pane sequence number. */
+_XMRecomputePane(register Display *display, register XMenu *menu, register XMPane *p_ptr, register int p_num)
+                               /* Standard X display variable. */
+                               /* Menu object being recomputed. */
+                               /* Pane pointer. */
+                                       /* Pane sequence number. */
 {
     register int window_x;     /* Recomputed window X coordinate. */
     register int window_y;     /* Recomputed window Y coordinate. */
@@ -681,11 +675,11 @@ _XMRecomputePane(display, menu, p_ptr, p_num)
  *                        selection window dependencies.
  */
 int
-_XMRecomputeSelection(display, menu, s_ptr, s_num)
-    register Display *display;
-    register XMenu *menu;      /* Menu object being recomputed. */
-    register XMSelect *s_ptr;  /* Selection pointer. */
-    register int s_num;                /* Selection sequence number. */
+_XMRecomputeSelection(register Display *display, register XMenu *menu, register XMSelect *s_ptr, register int s_num)
+
+                               /* Menu object being recomputed. */
+                               /* Selection pointer. */
+                                       /* Selection sequence number. */
 {
     register Bool config_s = False;    /* Reconfigure selection window? */
     XWindowChanges *changes;           /* Values to change in configure. */
@@ -811,15 +805,16 @@ _XMRecomputeSelection(display, menu, s_ptr, s_num)
  *                     recomputed before calling this routine or
  *                     unpredictable results will follow.
  */
-_XMTransToOrigin(display, menu, p_ptr, s_ptr, x_pos, y_pos, orig_x, orig_y)
-    Display *display;          /* Not used. Included for consistency. */
-    register XMenu *menu;      /* Menu being computed against. */
-    register XMPane *p_ptr;    /* Current pane pointer. */
-    register XMSelect *s_ptr;  /* Current selection pointer. */
-    int x_pos;                 /* X coordinate of point to translate. */
-    int y_pos;                 /* Y coordinate of point to translate. */
-    int *orig_x;               /* Return value X coord. of the menu origin. */
-    int *orig_y;               /* Return value Y coord. of the menu origin. */
+void
+_XMTransToOrigin(Display *display, register XMenu *menu, register XMPane *p_ptr, register XMSelect *s_ptr, int x_pos, int y_pos, int *orig_x, int *orig_y)
+                               /* Not used. Included for consistency. */
+                               /* Menu being computed against. */
+                               /* Current pane pointer. */
+                               /* Current selection pointer. */
+                               /* X coordinate of point to translate. */
+                               /* Y coordinate of point to translate. */
+                               /* Return value X coord. of the menu origin. */
+                               /* Return value Y coord. of the menu origin. */
 {
     register int l_orig_x;     /* Local X coordinate of the menu origin. */
     register int l_orig_y;     /* Local Y coordinate of the menu origin. */
@@ -871,10 +866,8 @@ _XMTransToOrigin(display, menu, p_ptr, s_ptr, x_pos, y_pos, orig_x, orig_y)
  * _XMRefreshPane - Internal subroutine to completely refresh
  *                 the contents of a pane.
  */
-_XMRefreshPane(display, menu, pane)
-    register Display *display;
-    register XMenu *menu;
-    register XMPane *pane;
+void
+_XMRefreshPane(register Display *display, register XMenu *menu, register XMPane *pane)
 {
     register XMSelect *s_list = pane->s_list;
     register XMSelect *s_ptr;
@@ -941,85 +934,80 @@ _XMRefreshPane(display, menu, pane)
  * _XMRefreshSelection - Internal subroutine that refreshes
  *                      a single selection window.
  */
-_XMRefreshSelection(display, menu, select)
-    register Display *display;
-    register XMenu *menu;
-    register XMSelect *select;
+void
+_XMRefreshSelection(register Display *display, register XMenu *menu, register XMSelect *sel)
 {
-    register int width = select->window_w;
-    register int height = select->window_h;
+    register int width = sel->window_w;
+    register int height = sel->window_h;
     register int bdr_width = menu->s_bdr_width;
 
-    if (select->type == SEPARATOR) {
+    if (sel->type == SEPARATOR) {
         XDrawLine(display,
-                  select->parent_p->window,
+                  sel->parent_p->window,
                   menu->normal_select_GC,
-                  select->window_x,
-                  select->window_y + height / 2,
-                  select->window_x + width,
-                  select->window_y + height / 2);
+                  sel->window_x,
+                  sel->window_y + height / 2,
+                  sel->window_x + width,
+                  sel->window_y + height / 2);
     }
-    else if (select->activated) {
+    else if (sel->activated) {
        if (menu->menu_mode == INVERT) {
            XFillRectangle(display,
-                          select->parent_p->window,
+                          sel->parent_p->window,
                           menu->normal_select_GC,
-                          select->window_x, select->window_y,
+                          sel->window_x, sel->window_y,
                           width, height);
            XDrawString(display,
-                       select->parent_p->window,
+                       sel->parent_p->window,
                        menu->inverse_select_GC,
-                       select->label_x,
-                       select->label_y,
-                       select->label, select->label_length);
+                       sel->label_x,
+                       sel->label_y,
+                       sel->label, sel->label_length);
        }
         else {
             /*
             * Using BOX mode.
              * Since most drawing routines with arbitrary width lines
-            * are slow compared to raster-ops lets use a raster-op to
+            * are slow compared to raster-ops let's use a raster-op to
             * draw the boxes.
              */
 
            XDrawRectangle(display,
-                          select->parent_p->window,
+                          sel->parent_p->window,
                           menu->normal_select_GC,
-                          select->window_x + (bdr_width >> 1),
-                          select->window_y + (bdr_width >> 1 ),
+                          sel->window_x + (bdr_width >> 1),
+                          sel->window_y + (bdr_width >> 1 ),
                           width - bdr_width,
                           height - bdr_width);
            XDrawString(display,
-                       select->parent_p->window,
+                       sel->parent_p->window,
                        menu->normal_select_GC,
-                       select->label_x,
-                       select->label_y,
-                       select->label, select->label_length);
+                       sel->label_x,
+                       sel->label_y,
+                       sel->label, sel->label_length);
         }
     }
     else {
        XClearArea(display,
-                  select->parent_p->window,
-                  select->window_x, select->window_y,
+                  sel->parent_p->window,
+                  sel->window_x, sel->window_y,
                   width, height,
                   False);
-       if (select->active) {
+       if (sel->active) {
            XDrawString(display,
-                       select->parent_p->window,
+                       sel->parent_p->window,
                        menu->normal_select_GC,
-                       select->label_x,
-                       select->label_y,
-                       select->label, select->label_length);
+                       sel->label_x,
+                       sel->label_y,
+                       sel->label, sel->label_length);
        }
        else {
            XDrawString(display,
-                       select->parent_p->window,
+                       sel->parent_p->window,
                        menu->inact_GC,
-                       select->label_x,
-                       select->label_y,
-                       select->label, select->label_length);
+                       sel->label_x,
+                       sel->label_y,
+                       sel->label, sel->label_length);
        }
     }
 }
-
-/* arch-tag: 3ac61957-0852-4e72-8b88-7dfab1a5dee9
-   (do not change this comment) */