HCoop
/
bpt
/
emacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
[bpt/emacs.git]
/
lwlib
/
xlwmenu.c
diff --git
a/lwlib/xlwmenu.c
b/lwlib/xlwmenu.c
index
b01569c
..
8eb6c75
100644
(file)
--- a/
lwlib/xlwmenu.c
+++ b/
lwlib/xlwmenu.c
@@
-1,6
+1,7
@@
/* Implements a lightweight menubar widget.
/* Implements a lightweight menubar widget.
- Copyright (C) 1992 Lucid, Inc.
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 1992 Lucid, Inc.
+Copyright (C) 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of the Lucid Widget Library.
This file is part of the Lucid Widget Library.
@@
-25,6
+26,7
@@
Boston, MA 02110-1301, USA. */
#include <config.h>
#endif
#include <config.h>
#endif
+#include <setjmp.h>
#include "lisp.h"
#include <stdio.h>
#include "lisp.h"
#include <stdio.h>
@@
-161,6
+163,10
@@
xlwMenuResources[] =
offset(menu.select), XtRCallback, (XtPointer)NULL},
{XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
offset(menu.highlight), XtRCallback, (XtPointer)NULL},
offset(menu.select), XtRCallback, (XtPointer)NULL},
{XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
offset(menu.highlight), XtRCallback, (XtPointer)NULL},
+ {XtNenterCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
+ offset(menu.enter), XtRCallback, (XtPointer)NULL},
+ {XtNleaveCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
+ offset(menu.leave), XtRCallback, (XtPointer)NULL},
{XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
offset(menu.contents), XtRImmediate, (XtPointer)NULL},
{XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
{XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
offset(menu.contents), XtRImmediate, (XtPointer)NULL},
{XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
@@
-1186,8
+1192,17
@@
display_menu (mw, level, just_compute_p, highlighted_pos, hit, hit_return,
{
if (val->enabled)
*hit_return = val;
{
if (val->enabled)
*hit_return = val;
- else
- no_return = 1;
+ else
+ no_return = 1;
+ if (mw->menu.inside_entry != val)
+ {
+ if (mw->menu.inside_entry)
+ XtCallCallbackList ((Widget)mw, mw->menu.leave,
+ (XtPointer) mw->menu.inside_entry);
+ mw->menu.inside_entry = val;
+ XtCallCallbackList ((Widget)mw, mw->menu.enter,
+ (XtPointer) mw->menu.inside_entry);
+ }
}
if (horizontal_p)
}
if (horizontal_p)
@@
-1452,7
+1467,7
@@
motion_event_is_in_menu (mw, ev, level, relative_pos)
relative_pos->x = ev->x_root - x;
relative_pos->y = ev->y_root - y;
return (x - shadow < ev->x_root && ev->x_root < x + ws->width
relative_pos->x = ev->x_root - x;
relative_pos->y = ev->y_root - y;
return (x - shadow < ev->x_root && ev->x_root < x + ws->width
- && y - shadow < ev->y_root && ev->y_root < y + ws->height);
+
&& y - shadow < ev->y_root && ev->y_root < y + ws->height);
}
static Boolean
}
static Boolean
@@
-1465,6
+1480,7
@@
map_event_to_widget_value (mw, ev, val, level)
int i;
XPoint relative_pos;
window_state* ws;
int i;
XPoint relative_pos;
window_state* ws;
+ int inside = 0;
*val = NULL;
*val = NULL;
@@
-1474,6
+1490,7
@@
map_event_to_widget_value (mw, ev, val, level)
ws = &mw->menu.windows [i];
if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
{
ws = &mw->menu.windows [i];
if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
{
+ inside = 1;
display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
if (*val)
display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
if (*val)
@@
-1483,6
+1500,15
@@
map_event_to_widget_value (mw, ev, val, level)
}
}
}
}
}
}
+
+ if (!inside)
+ {
+ if (mw->menu.inside_entry != NULL)
+ XtCallCallbackList ((Widget)mw, mw->menu.leave,
+ (XtPointer) mw->menu.inside_entry);
+ mw->menu.inside_entry = NULL;
+ }
+
return False;
}
return False;
}
@@
-1812,7
+1838,6
@@
XlwMenuRealize (w, valueMask, attributes)
XlwMenuWidget mw = (XlwMenuWidget)w;
XSetWindowAttributes xswa;
int mask;
XlwMenuWidget mw = (XlwMenuWidget)w;
XSetWindowAttributes xswa;
int mask;
- int count;
(*xlwMenuWidgetClass->core_class.superclass->core_class.realize)
(w, valueMask, attributes);
(*xlwMenuWidgetClass->core_class.superclass->core_class.realize)
(w, valueMask, attributes);
@@
-2426,6
+2451,7
@@
pop_up_menu (mw, event)
next_release_must_exit = 0;
next_release_must_exit = 0;
+ mw->menu.inside_entry = NULL;
XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
if (XtIsShell (XtParent ((Widget)mw)))
XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
if (XtIsShell (XtParent ((Widget)mw)))