aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Djärv2007-01-01 15:20:11 +0000
committerJan Djärv2007-01-01 15:20:11 +0000
commit1ecd508641172d55c3dbb5dbbd287316b858d7c5 (patch)
tree545e9dde62f83203bf69bd907bf2042471f46a94
parent36bce9a9b28620e630bdf011e9bcaf3bd265eca7 (diff)
downloademacs-1ecd508641172d55c3dbb5dbbd287316b858d7c5.tar.gz
emacs-1ecd508641172d55c3dbb5dbbd287316b858d7c5.zip
(xlwMenuResources): Add XtNleaveCallback, XtNenterCallback.
(display_menu, map_event_to_widget_value): Generate enter and leave callbacks. (pop_up_menu): Initialize mw->menu.inside_entry.
-rw-r--r--lwlib/xlwmenu.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index 77cc50e9d7a..fc73746dc86 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -161,6 +161,10 @@ xlwMenuResources[] =
161 offset(menu.select), XtRCallback, (XtPointer)NULL}, 161 offset(menu.select), XtRCallback, (XtPointer)NULL},
162 {XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer), 162 {XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
163 offset(menu.highlight), XtRCallback, (XtPointer)NULL}, 163 offset(menu.highlight), XtRCallback, (XtPointer)NULL},
164 {XtNenterCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
165 offset(menu.enter), XtRCallback, (XtPointer)NULL},
166 {XtNleaveCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
167 offset(menu.leave), XtRCallback, (XtPointer)NULL},
164 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer), 168 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
165 offset(menu.contents), XtRImmediate, (XtPointer)NULL}, 169 offset(menu.contents), XtRImmediate, (XtPointer)NULL},
166 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor), 170 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
@@ -1186,8 +1190,17 @@ display_menu (mw, level, just_compute_p, highlighted_pos, hit, hit_return,
1186 { 1190 {
1187 if (val->enabled) 1191 if (val->enabled)
1188 *hit_return = val; 1192 *hit_return = val;
1189 else 1193 else
1190 no_return = 1; 1194 no_return = 1;
1195 if (mw->menu.inside_entry != val)
1196 {
1197 if (mw->menu.inside_entry)
1198 XtCallCallbackList ((Widget)mw, mw->menu.leave,
1199 (XtPointer) mw->menu.inside_entry);
1200 mw->menu.inside_entry = val;
1201 XtCallCallbackList ((Widget)mw, mw->menu.enter,
1202 (XtPointer) mw->menu.inside_entry);
1203 }
1191 } 1204 }
1192 1205
1193 if (horizontal_p) 1206 if (horizontal_p)
@@ -1452,7 +1465,7 @@ motion_event_is_in_menu (mw, ev, level, relative_pos)
1452 relative_pos->x = ev->x_root - x; 1465 relative_pos->x = ev->x_root - x;
1453 relative_pos->y = ev->y_root - y; 1466 relative_pos->y = ev->y_root - y;
1454 return (x - shadow < ev->x_root && ev->x_root < x + ws->width 1467 return (x - shadow < ev->x_root && ev->x_root < x + ws->width
1455 && y - shadow < ev->y_root && ev->y_root < y + ws->height); 1468 && y - shadow < ev->y_root && ev->y_root < y + ws->height);
1456} 1469}
1457 1470
1458static Boolean 1471static Boolean
@@ -1465,6 +1478,7 @@ map_event_to_widget_value (mw, ev, val, level)
1465 int i; 1478 int i;
1466 XPoint relative_pos; 1479 XPoint relative_pos;
1467 window_state* ws; 1480 window_state* ws;
1481 int inside = 0;
1468 1482
1469 *val = NULL; 1483 *val = NULL;
1470 1484
@@ -1474,6 +1488,7 @@ map_event_to_widget_value (mw, ev, val, level)
1474 ws = &mw->menu.windows [i]; 1488 ws = &mw->menu.windows [i];
1475 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos)) 1489 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
1476 { 1490 {
1491 inside = 1;
1477 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL); 1492 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
1478 1493
1479 if (*val) 1494 if (*val)
@@ -1483,6 +1498,15 @@ map_event_to_widget_value (mw, ev, val, level)
1483 } 1498 }
1484 } 1499 }
1485 } 1500 }
1501
1502 if (!inside)
1503 {
1504 if (mw->menu.inside_entry != NULL)
1505 XtCallCallbackList ((Widget)mw, mw->menu.leave,
1506 (XtPointer) mw->menu.inside_entry);
1507 mw->menu.inside_entry = NULL;
1508 }
1509
1486 return False; 1510 return False;
1487} 1511}
1488 1512
@@ -2416,6 +2440,7 @@ pop_up_menu (mw, event)
2416 2440
2417 next_release_must_exit = 0; 2441 next_release_must_exit = 0;
2418 2442
2443 mw->menu.inside_entry = NULL;
2419 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL); 2444 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
2420 2445
2421 if (XtIsShell (XtParent ((Widget)mw))) 2446 if (XtIsShell (XtParent ((Widget)mw)))