Fri Oct 8 15:31:49 PDT 1999 Michael Jennings <mej@eterm.org>
This should fix all the weird menu behavior from time to time (well, I hope it does anyway). SVN revision: 719
This commit is contained in:
parent
dd84c6abab
commit
11b7b87dad
|
@ -2556,3 +2556,9 @@ Thu Oct 7 18:48:31 PDT 1999 Michael Jennings <mej@eterm.org>
|
||||||
fixing some small leaks here and there.
|
fixing some small leaks here and there.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
Fri Oct 8 15:31:49 PDT 1999 Michael Jennings <mej@eterm.org>
|
||||||
|
|
||||||
|
This should fix all the weird menu behavior from time to time (well,
|
||||||
|
I hope it does anyway).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
|
@ -2158,7 +2158,7 @@ run_command(char *argv[])
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; argv[i]; i++) {
|
for (i = 0; argv[i]; i++) {
|
||||||
DPRINTF1(("argv[%d] = \"%s\"\n", i, argv[i]));
|
DPRINTF(("argv[%d] = \"%s\"\n", i, argv[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -54,7 +54,7 @@ extern unsigned int debug_level;
|
||||||
/* Macros for printing debugging messages */
|
/* Macros for printing debugging messages */
|
||||||
# if DEBUG >= 1
|
# if DEBUG >= 1
|
||||||
# ifndef DPRINTF
|
# ifndef DPRINTF
|
||||||
# define DPRINTF(x) do { if (debug_level >= 1) {__DEBUG(); real_dprintf x;} } while (0)
|
# define DPRINTF(x) do { __DEBUG(); real_dprintf x; } while (0)
|
||||||
# endif
|
# endif
|
||||||
# define DPRINTF1(x) do { if (debug_level >= 1) {__DEBUG(); real_dprintf x;} } while (0)
|
# define DPRINTF1(x) do { if (debug_level >= 1) {__DEBUG(); real_dprintf x;} } while (0)
|
||||||
# define DPRINTF2(x) do { if (debug_level >= 2) {__DEBUG(); real_dprintf x;} } while (0)
|
# define DPRINTF2(x) do { if (debug_level >= 2) {__DEBUG(); real_dprintf x;} } while (0)
|
||||||
|
|
185
src/menus.c
185
src/menus.c
|
@ -51,9 +51,13 @@ menulist_t *menu_list = NULL;
|
||||||
static GC topShadowGC, botShadowGC;
|
static GC topShadowGC, botShadowGC;
|
||||||
static Time button_press_time;
|
static Time button_press_time;
|
||||||
static menu_t *current_menu;
|
static menu_t *current_menu;
|
||||||
static menuitem_t *current_item;
|
|
||||||
|
|
||||||
inline void
|
static inline void grab_pointer(Window win);
|
||||||
|
static inline void ungrab_pointer(void);
|
||||||
|
static inline void draw_string(Drawable d, GC gc, int x, int y, char *str, size_t len);
|
||||||
|
static inline unsigned short center_coords(register unsigned short c1, register unsigned short c2);
|
||||||
|
|
||||||
|
static inline void
|
||||||
grab_pointer(Window win)
|
grab_pointer(Window win)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -84,7 +88,7 @@ grab_pointer(Window win)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
static inline void
|
||||||
ungrab_pointer(void)
|
ungrab_pointer(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -92,7 +96,7 @@ ungrab_pointer(void)
|
||||||
XUngrabPointer(Xdisplay, CurrentTime);
|
XUngrabPointer(Xdisplay, CurrentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
static inline void
|
||||||
draw_string(Drawable d, GC gc, int x, int y, char *str, size_t len)
|
draw_string(Drawable d, GC gc, int x, int y, char *str, size_t len)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -106,7 +110,7 @@ draw_string(Drawable d, GC gc, int x, int y, char *str, size_t len)
|
||||||
XDrawString(Xdisplay, d, gc, x, y, str, len);
|
XDrawString(Xdisplay, d, gc, x, y, str, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned short
|
static inline unsigned short
|
||||||
center_coords(register unsigned short c1, register unsigned short c2)
|
center_coords(register unsigned short c1, register unsigned short c2)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -248,6 +252,7 @@ menu_handle_button_press(event_t * ev)
|
||||||
unsigned char
|
unsigned char
|
||||||
menu_handle_button_release(event_t * ev)
|
menu_handle_button_release(event_t * ev)
|
||||||
{
|
{
|
||||||
|
menuitem_t *item;
|
||||||
|
|
||||||
D_EVENTS(("menu_handle_button_release(ev [0x%08x] on window 0x%08x)\n", ev, ev->xany.window));
|
D_EVENTS(("menu_handle_button_release(ev [0x%08x] on window 0x%08x)\n", ev, ev->xany.window));
|
||||||
|
|
||||||
|
@ -263,13 +268,14 @@ menu_handle_button_release(event_t * ev)
|
||||||
|
|
||||||
if (button_press_time && (ev->xbutton.time - button_press_time > MENU_CLICK_TIME)) {
|
if (button_press_time && (ev->xbutton.time - button_press_time > MENU_CLICK_TIME)) {
|
||||||
/* Take action here based on the current menu item */
|
/* Take action here based on the current menu item */
|
||||||
if (current_item) {
|
if (current_menu) {
|
||||||
if (current_item->type == MENUITEM_SUBMENU) {
|
if ((item = menuitem_get_current(current_menu)) != NULL) {
|
||||||
menu_display_submenu(current_menu, current_item);
|
if (item->type == MENUITEM_SUBMENU) {
|
||||||
current_item = NULL;
|
menu_display_submenu(current_menu, item);
|
||||||
} else {
|
} else {
|
||||||
menu_action(current_item);
|
menu_action(item);
|
||||||
menuitem_deselect(current_menu, current_item);
|
menuitem_deselect(current_menu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,14 +289,15 @@ menu_handle_button_release(event_t * ev)
|
||||||
D_MENU(("Single click mode, detected click.\n"));
|
D_MENU(("Single click mode, detected click.\n"));
|
||||||
if ((ev->xbutton.x >= 0) && (ev->xbutton.y >= 0) && (ev->xbutton.x < current_menu->w) && (ev->xbutton.y < current_menu->h)) {
|
if ((ev->xbutton.x >= 0) && (ev->xbutton.y >= 0) && (ev->xbutton.x < current_menu->w) && (ev->xbutton.y < current_menu->h)) {
|
||||||
/* Click inside the menu window. Activate the current item. */
|
/* Click inside the menu window. Activate the current item. */
|
||||||
if (current_item) {
|
if (current_menu) {
|
||||||
if (current_item->type == MENUITEM_SUBMENU) {
|
if ((item = menuitem_get_current(current_menu)) != NULL) {
|
||||||
menu_display_submenu(current_menu, current_item);
|
if (item->type == MENUITEM_SUBMENU) {
|
||||||
current_item = NULL;
|
menu_display_submenu(current_menu, item);
|
||||||
} else {
|
} else {
|
||||||
menu_action(current_item);
|
menu_action(item);
|
||||||
menuitem_deselect(current_menu, current_item);
|
menuitem_deselect(current_menu);
|
||||||
menu_reset_all(menu_list);
|
menu_reset_all(menu_list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -319,19 +326,6 @@ menu_handle_motion_notify(event_t * ev)
|
||||||
if (!current_menu) {
|
if (!current_menu) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
if ((current_menu->win != ev->xany.window)
|
|
||||||
&& !(current_item && current_item->type == MENUITEM_SUBMENU
|
|
||||||
&& current_item->action.submenu && current_item->action.submenu->win == ev->xany.window)) {
|
|
||||||
register menu_t *menu;
|
|
||||||
|
|
||||||
menu = find_menu_by_window(menu_list, ev->xany.window);
|
|
||||||
if (menu) {
|
|
||||||
menu_reset_tree(current_menu);
|
|
||||||
current_menu = menu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (button_press_time) {
|
if (button_press_time) {
|
||||||
current_menu->state |= MENU_STATE_IS_DRAGGING;
|
current_menu->state |= MENU_STATE_IS_DRAGGING;
|
||||||
|
@ -348,22 +342,22 @@ menu_handle_motion_notify(event_t * ev)
|
||||||
|
|
||||||
XTranslateCoordinates(Xdisplay, ev->xany.window, Xroot, ev->xbutton.x, ev->xbutton.y, &dest_x, &dest_y, &child);
|
XTranslateCoordinates(Xdisplay, ev->xany.window, Xroot, ev->xbutton.x, ev->xbutton.y, &dest_x, &dest_y, &child);
|
||||||
menu = find_menu_by_window(menu_list, child);
|
menu = find_menu_by_window(menu_list, child);
|
||||||
if (menu) {
|
if (menu && menu != current_menu) {
|
||||||
D_MENU(("Mouse is actually over window 0x%08x belonging to menu \"%s\"\n", child, menu->title));
|
D_MENU(("Mouse is actually over window 0x%08x belonging to menu \"%s\"\n", child, menu->title));
|
||||||
|
ungrab_pointer();
|
||||||
|
grab_pointer(menu->win);
|
||||||
|
current_menu->state &= ~(MENU_STATE_IS_FOCUSED);
|
||||||
|
menu->state |= MENU_STATE_IS_FOCUSED;
|
||||||
|
if (!menu_is_child(current_menu, menu)) {
|
||||||
|
menu_reset_tree(current_menu);
|
||||||
|
}
|
||||||
|
current_menu = menu;
|
||||||
XTranslateCoordinates(Xdisplay, ev->xany.window, child, ev->xbutton.x, ev->xbutton.y, &dest_x, &dest_y, &child);
|
XTranslateCoordinates(Xdisplay, ev->xany.window, child, ev->xbutton.x, ev->xbutton.y, &dest_x, &dest_y, &child);
|
||||||
item = find_item_by_coords(menu, dest_x, dest_y);
|
item = find_item_by_coords(menu, dest_x, dest_y);
|
||||||
if (item && item != current_item) {
|
if (!item || item != menuitem_get_current(current_menu)) {
|
||||||
ungrab_pointer();
|
menu_reset_submenus(current_menu);
|
||||||
grab_pointer(menu->win);
|
|
||||||
current_menu->state &= ~(MENU_STATE_IS_FOCUSED);
|
|
||||||
menu->state |= MENU_STATE_IS_FOCUSED;
|
|
||||||
if (!menu_is_child(current_menu, menu)) {
|
|
||||||
menu_reset_tree(current_menu);
|
|
||||||
}
|
|
||||||
current_menu = menu;
|
|
||||||
menu_reset_submenus(menu);
|
|
||||||
menuitem_change_current(item);
|
|
||||||
}
|
}
|
||||||
|
menuitem_change_current(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,6 +429,7 @@ menu_create(char *title)
|
||||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWBorderPixel | CWColormap, &xattr);
|
CWOverrideRedirect | CWSaveUnder | CWBackingStore | CWBorderPixel | CWColormap, &xattr);
|
||||||
|
|
||||||
menu->gc = XCreateGC(Xdisplay, menu->win, GCForeground, &gcvalue);
|
menu->gc = XCreateGC(Xdisplay, menu->win, GCForeground, &gcvalue);
|
||||||
|
menuitem_clear_current(menu);
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
@ -552,7 +547,6 @@ find_item_by_coords(menu_t * menu, int x, int y)
|
||||||
for (i = 0; i < menu->numitems; i++) {
|
for (i = 0; i < menu->numitems; i++) {
|
||||||
item = menu->items[i];
|
item = menu->items[i];
|
||||||
if ((x > item->x) && (y > item->y) && (x < item->x + item->w) && (y < item->y + item->h) && (item->type != MENUITEM_SEP)) {
|
if ((x > item->x) && (y > item->y) && (x < item->x + item->w) && (y < item->y + item->h) && (item->type != MENUITEM_SEP)) {
|
||||||
menu->curitem = i;
|
|
||||||
return (item);
|
return (item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -577,35 +571,41 @@ find_item_in_menu(menu_t * menu, menuitem_t * item)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
menuitem_change_current(menuitem_t * item)
|
menuitem_change_current(menuitem_t *item)
|
||||||
{
|
{
|
||||||
|
menuitem_t *current;
|
||||||
|
|
||||||
D_MENU(("menuitem_change_current(): Changing current_item from \"%s\" to \"%s\"\n", (current_item ? current_item->text : "(NULL)"),
|
ASSERT(current_menu != NULL);
|
||||||
(item ? item->text : "(NULL)")));
|
|
||||||
|
|
||||||
if (current_item != item) {
|
current = menuitem_get_current(current_menu);
|
||||||
if (current_item) {
|
if (current != item) {
|
||||||
|
D_MENU(("menuitem_change_current(): Changing current item in menu \"%s\" from \"%s\" to \"%s\"\n", current_menu->title, (current ? current->text : "(NULL)"), (item ? item->text : "(NULL)")));
|
||||||
|
if (current) {
|
||||||
/* Reset the current item */
|
/* Reset the current item */
|
||||||
menuitem_deselect(current_menu, current_item);
|
menuitem_deselect(current_menu);
|
||||||
/* If we're changing from one submenu to another and neither is a child of the other, or if we're changing from a submenu to
|
/* If we're changing from one submenu to another and neither is a child of the other, or if we're changing from a submenu to
|
||||||
no current item at all, reset the tree for the current submenu */
|
no current item at all, reset the tree for the current submenu */
|
||||||
if (current_item->type == MENUITEM_SUBMENU && current_item->action.submenu != NULL) {
|
if (current->type == MENUITEM_SUBMENU && current->action.submenu != NULL) {
|
||||||
if ((item && item->type == MENUITEM_SUBMENU && item->action.submenu != NULL
|
if ((item && item->type == MENUITEM_SUBMENU && item->action.submenu != NULL
|
||||||
&& !menu_is_child(current_item->action.submenu, item->action.submenu)
|
&& !menu_is_child(current->action.submenu, item->action.submenu)
|
||||||
&& !menu_is_child(item->action.submenu, current_item->action.submenu))
|
&& !menu_is_child(item->action.submenu, current->action.submenu))
|
||||||
|| (!item)) {
|
|| (!item)) {
|
||||||
menu_reset_tree(current_item->action.submenu);
|
menu_reset_tree(current->action.submenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
current_item = item;
|
if (item) {
|
||||||
if (current_item) {
|
menuitem_set_current(current_menu, find_item_in_menu(current_menu, item));
|
||||||
menuitem_select(current_menu, current_item);
|
menuitem_select(current_menu);
|
||||||
if (current_item->type == MENUITEM_SUBMENU) {
|
if (item->type == MENUITEM_SUBMENU) {
|
||||||
/* Display the submenu */
|
/* Display the submenu */
|
||||||
menu_display_submenu(current_menu, current_item);
|
menu_display_submenu(current_menu, item);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
menuitem_clear_current(current_menu);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
D_MENU(("menuitem_change_current(): Current item in menu \"%s\" does not require changing.\n", current_menu->title));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,12 +678,13 @@ menu_reset(menu_t * menu)
|
||||||
ASSERT(menu != NULL);
|
ASSERT(menu != NULL);
|
||||||
|
|
||||||
D_MENU(("menu_reset() called for menu \"%s\" (window 0x%08x)\n", menu->title, menu->win));
|
D_MENU(("menu_reset() called for menu \"%s\" (window 0x%08x)\n", menu->title, menu->win));
|
||||||
menu->state &= ~(MENU_STATE_IS_CURRENT | MENU_STATE_IS_DRAGGING);
|
if (!(menu->state & MENU_STATE_IS_MAPPED)) {
|
||||||
XUnmapWindow(Xdisplay, menu->swin);
|
return;
|
||||||
if (menu->state & MENU_STATE_IS_MAPPED) {
|
|
||||||
XUnmapWindow(Xdisplay, menu->win);
|
|
||||||
menu->state &= ~(MENU_STATE_IS_MAPPED);
|
|
||||||
}
|
}
|
||||||
|
menu->state &= ~(MENU_STATE_IS_CURRENT | MENU_STATE_IS_DRAGGING | MENU_STATE_IS_MAPPED);
|
||||||
|
XUnmapWindow(Xdisplay, menu->swin);
|
||||||
|
XUnmapWindow(Xdisplay, menu->win);
|
||||||
|
menuitem_clear_current(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -691,7 +692,6 @@ menu_reset_all(menulist_t * list)
|
||||||
{
|
{
|
||||||
|
|
||||||
register unsigned short i;
|
register unsigned short i;
|
||||||
register menu_t *menu;
|
|
||||||
|
|
||||||
ASSERT(list != NULL);
|
ASSERT(list != NULL);
|
||||||
|
|
||||||
|
@ -699,18 +699,11 @@ menu_reset_all(menulist_t * list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
D_MENU(("menu_reset_all() called\n"));
|
D_MENU(("menu_reset_all() called\n"));
|
||||||
if (current_item != NULL) {
|
if (menuitem_get_current(current_menu) != NULL) {
|
||||||
menuitem_deselect(current_menu, current_item);
|
menuitem_deselect(current_menu);
|
||||||
current_item = NULL;
|
|
||||||
}
|
}
|
||||||
for (i = 0; i < list->nummenus; i++) {
|
for (i = 0; i < list->nummenus; i++) {
|
||||||
menu = list->menus[i];
|
menu_reset(list->menus[i]);
|
||||||
menu->state &= ~(MENU_STATE_IS_CURRENT | MENU_STATE_IS_DRAGGING);
|
|
||||||
XUnmapWindow(Xdisplay, menu->swin);
|
|
||||||
if (menu->state & MENU_STATE_IS_MAPPED) {
|
|
||||||
XUnmapWindow(Xdisplay, menu->win);
|
|
||||||
menu->state &= ~(MENU_STATE_IS_MAPPED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
current_menu = NULL;
|
current_menu = NULL;
|
||||||
}
|
}
|
||||||
|
@ -725,18 +718,16 @@ menu_reset_tree(menu_t * menu)
|
||||||
ASSERT(menu != NULL);
|
ASSERT(menu != NULL);
|
||||||
|
|
||||||
D_MENU(("menu_reset_tree() called for menu \"%s\" (window 0x%08x)\n", menu->title, menu->win));
|
D_MENU(("menu_reset_tree() called for menu \"%s\" (window 0x%08x)\n", menu->title, menu->win));
|
||||||
|
if (!(menu->state & MENU_STATE_IS_MAPPED)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (i = 0; i < menu->numitems; i++) {
|
for (i = 0; i < menu->numitems; i++) {
|
||||||
item = menu->items[i];
|
item = menu->items[i];
|
||||||
if (item->type == MENUITEM_SUBMENU && item->action.submenu != NULL) {
|
if (item->type == MENUITEM_SUBMENU && item->action.submenu != NULL) {
|
||||||
menu_reset_tree(item->action.submenu);
|
menu_reset_tree(item->action.submenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
menu->state &= ~(MENU_STATE_IS_CURRENT | MENU_STATE_IS_DRAGGING);
|
menu_reset(menu);
|
||||||
XUnmapWindow(Xdisplay, menu->swin);
|
|
||||||
if (menu->state & MENU_STATE_IS_MAPPED) {
|
|
||||||
XUnmapWindow(Xdisplay, menu->win);
|
|
||||||
menu->state &= ~(MENU_STATE_IS_MAPPED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -758,12 +749,14 @@ menu_reset_submenus(menu_t * menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
menuitem_select(menu_t * menu, menuitem_t * item)
|
menuitem_select(menu_t * menu)
|
||||||
{
|
{
|
||||||
|
menuitem_t *item;
|
||||||
|
|
||||||
ASSERT(menu != NULL);
|
ASSERT(menu != NULL);
|
||||||
ASSERT(item != NULL);
|
|
||||||
|
|
||||||
|
item = menuitem_get_current(menu);
|
||||||
|
REQUIRE(item != NULL);
|
||||||
D_MENU(("menuitem_select(): Selecting new current item \"%s\" within menu \"%s\" (window 0x%08x, selection window 0x%08x)\n",
|
D_MENU(("menuitem_select(): Selecting new current item \"%s\" within menu \"%s\" (window 0x%08x, selection window 0x%08x)\n",
|
||||||
item->text, menu->title, menu->win, menu->swin));
|
item->text, menu->title, menu->win, menu->swin));
|
||||||
item->state |= MENU_STATE_IS_CURRENT;
|
item->state |= MENU_STATE_IS_CURRENT;
|
||||||
|
@ -784,24 +777,24 @@ menuitem_select(menu_t * menu, menuitem_t * item)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
menuitem_deselect(menu_t * menu, menuitem_t * item)
|
menuitem_deselect(menu_t * menu)
|
||||||
{
|
{
|
||||||
|
menuitem_t *item;
|
||||||
|
|
||||||
ASSERT(menu != NULL);
|
ASSERT(menu != NULL);
|
||||||
ASSERT(item != NULL);
|
|
||||||
|
|
||||||
|
item = menuitem_get_current(menu);
|
||||||
|
REQUIRE(item != NULL);
|
||||||
D_MENU(("menuitem_deselect(): Deselecting item \"%s\"\n", item->text));
|
D_MENU(("menuitem_deselect(): Deselecting item \"%s\"\n", item->text));
|
||||||
item->state &= ~(MENU_STATE_IS_CURRENT);
|
item->state &= ~(MENU_STATE_IS_CURRENT);
|
||||||
XUnmapWindow(Xdisplay, menu->swin);
|
XUnmapWindow(Xdisplay, menu->swin);
|
||||||
if (find_item_in_menu(menu, item) != (unsigned short) -1) {
|
if (item->type == MENUITEM_SUBMENU) {
|
||||||
if (item->type == MENUITEM_SUBMENU) {
|
paste_simage(images[image_submenu].norm, image_submenu, menu->win, item->x, item->y, item->w - MENU_VGAP, item->h);
|
||||||
paste_simage(images[image_submenu].norm, image_submenu, menu->win, item->x, item->y, item->w - MENU_VGAP, item->h);
|
}
|
||||||
}
|
draw_string(menu->win, menu->gc, 2 * MENU_HGAP, item->y + item->h - MENU_VGAP, item->text, item->len);
|
||||||
draw_string(menu->win, menu->gc, 2 * MENU_HGAP, item->y + item->h - MENU_VGAP, item->text, item->len);
|
if (item->rtext) {
|
||||||
if (item->rtext) {
|
draw_string(menu->win, menu->gc, item->x + item->w - XTextWidth(menu->font, item->rtext, item->rlen) - 2 * MENU_HGAP, item->y + item->h - MENU_VGAP,
|
||||||
draw_string(menu->win, menu->gc, item->x + item->w - XTextWidth(menu->font, item->rtext, item->rlen) - 2 * MENU_HGAP, item->y + item->h - MENU_VGAP,
|
item->rtext, item->rlen);
|
||||||
item->rtext, item->rlen);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
12
src/menus.h
12
src/menus.h
|
@ -46,9 +46,13 @@
|
||||||
#define MENU_HGAP 4
|
#define MENU_HGAP 4
|
||||||
#define MENU_VGAP 4
|
#define MENU_VGAP 4
|
||||||
#define MENU_CLICK_TIME 20
|
#define MENU_CLICK_TIME 20
|
||||||
|
#define NO_CURRENT_ITEM ((unsigned short) -1)
|
||||||
|
|
||||||
#define menu_is_pixmapped() ((images[image_menu].current->iml->im) && (images[image_menu].mode & MODE_MASK))
|
#define menu_is_pixmapped() ((images[image_menu].current->iml->im) && (images[image_menu].mode & MODE_MASK))
|
||||||
#define menu_submenu_is_pixmapped() ((images[image_submenu].current->iml->im) && (images[image_submenu].mode & MODE_MASK))
|
#define menu_submenu_is_pixmapped() ((images[image_submenu].current->iml->im) && (images[image_submenu].mode & MODE_MASK))
|
||||||
|
#define menuitem_get_current(m) (((m)->curitem != NO_CURRENT_ITEM) ? ((m)->items[(m)->curitem]) : (NULL))
|
||||||
|
#define menuitem_set_current(m, i) ((m)->curitem = (i))
|
||||||
|
#define menuitem_clear_current(m) ((m)->curitem = NO_CURRENT_ITEM)
|
||||||
|
|
||||||
/************ Structures ************/
|
/************ Structures ************/
|
||||||
typedef struct menu_t_struct menu_t;
|
typedef struct menu_t_struct menu_t;
|
||||||
|
@ -121,8 +125,8 @@ extern void menu_reset(menu_t *);
|
||||||
extern void menu_reset_all(menulist_t *);
|
extern void menu_reset_all(menulist_t *);
|
||||||
extern void menu_reset_tree(menu_t *);
|
extern void menu_reset_tree(menu_t *);
|
||||||
extern void menu_reset_submenus(menu_t *);
|
extern void menu_reset_submenus(menu_t *);
|
||||||
extern void menuitem_select(menu_t *, menuitem_t *);
|
extern void menuitem_select(menu_t *);
|
||||||
extern void menuitem_deselect(menu_t *, menuitem_t *);
|
extern void menuitem_deselect(menu_t *);
|
||||||
extern void menu_display_submenu(menu_t *, menuitem_t *);
|
extern void menu_display_submenu(menu_t *, menuitem_t *);
|
||||||
extern void menu_draw(menu_t *);
|
extern void menu_draw(menu_t *);
|
||||||
extern void menu_display(int, int, menu_t *);
|
extern void menu_display(int, int, menu_t *);
|
||||||
|
|
|
@ -126,4 +126,9 @@ extern short bg_needs_update;
|
||||||
#endif
|
#endif
|
||||||
extern const char *display_name;
|
extern const char *display_name;
|
||||||
|
|
||||||
|
/************ Function Prototypes ************/
|
||||||
|
_XFUNCPROTOBEGIN
|
||||||
|
extern int eterm_bootstrap(int argc, char *argv[]);
|
||||||
|
_XFUNCPROTOEND
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue