#include "copyright.h"
/*
-Copyright (C) 1993, 1996, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1993, 1996, 2001-2011 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
#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)
/*
/*
* _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 */
/*
* _XMEventHandler - Internal event handler variable.
*/
-int (*_XMEventHandler)() = NULL;
+int (*_XMEventHandler)(XEvent*) = NULL;
* _XMWinQueInit - Internal routine to initialize the window
* queue.
*/
-_XMWinQueInit()
+void
+_XMWinQueInit(void)
{
/*
* If the queue is not initialized initialize it.
* 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.
* 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.
* 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...
* 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;
* 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. */
* 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. */
* _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. */
* 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. */
* 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. */
* 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. */
* _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;
* _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 {
/*
*/
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) */