Mercurial > emacs
comparison lwlib/xlwmenu.c @ 9092:0033f98d2ffd
Clean up of temporary changes used to try to find a workaround for the
X11R4 Xt bug whereby motion events are not generated from submenus.
author | Paul Reilly <pmr@pajato.com> |
---|---|
date | Sun, 25 Sep 1994 23:30:51 +0000 |
parents | 7812d2641010 |
children | 968bb25ec1af |
comparison
equal
deleted
inserted
replaced
9091:557a04cd151b | 9092:0033f98d2ffd |
---|---|
27 #include <X11/ObjectP.h> | 27 #include <X11/ObjectP.h> |
28 #include <X11/StringDefs.h> | 28 #include <X11/StringDefs.h> |
29 #include <X11/cursorfont.h> | 29 #include <X11/cursorfont.h> |
30 #include <X11/bitmaps/gray> | 30 #include <X11/bitmaps/gray> |
31 #include "xlwmenuP.h" | 31 #include "xlwmenuP.h" |
32 | |
33 static int disable_add_grab, disable_grab_pointer; | |
34 | 32 |
35 static int pointer_grabbed; | 33 static int pointer_grabbed; |
36 static XEvent menu_post_event; | 34 static XEvent menu_post_event; |
37 | 35 |
38 static char | 36 static char |
1287 pop_new_stack_if_no_contents (mw); | 1285 pop_new_stack_if_no_contents (mw); |
1288 else | 1286 else |
1289 set_new_state (mw, val, level); | 1287 set_new_state (mw, val, level); |
1290 remap_menubar (mw); | 1288 remap_menubar (mw); |
1291 | 1289 |
1292 #if 1 | |
1293 /* Sync with the display. Makes it feel better on X terms. */ | 1290 /* Sync with the display. Makes it feel better on X terms. */ |
1294 XSync (XtDisplay (mw), False); | 1291 XSync (XtDisplay (mw), False); |
1295 #endif | |
1296 } | 1292 } |
1297 | 1293 |
1298 static void | 1294 static void |
1299 handle_motion_event (mw, ev) | 1295 handle_motion_event (mw, ev) |
1300 XlwMenuWidget mw; | 1296 XlwMenuWidget mw; |
1305 int state = ev->state; | 1301 int state = ev->state; |
1306 | 1302 |
1307 handle_single_motion_event (mw, ev); | 1303 handle_single_motion_event (mw, ev); |
1308 | 1304 |
1309 /* allow motion events to be generated again */ | 1305 /* allow motion events to be generated again */ |
1310 #if 0 | |
1311 if (ev->is_hint | 1306 if (ev->is_hint |
1312 && XQueryPointer (XtDisplay (mw), ev->window, | 1307 && XQueryPointer (XtDisplay (mw), ev->window, |
1313 &ev->root, &ev->subwindow, | 1308 &ev->root, &ev->subwindow, |
1314 &ev->x_root, &ev->y_root, | 1309 &ev->x_root, &ev->y_root, |
1315 &ev->x, &ev->y, | 1310 &ev->x, &ev->y, |
1316 &ev->state) | 1311 &ev->state) |
1317 && ev->state == state | 1312 && ev->state == state |
1318 && (ev->x_root != x || ev->y_root != y)) | 1313 && (ev->x_root != x || ev->y_root != y)) |
1319 handle_single_motion_event (mw, ev); | 1314 handle_single_motion_event (mw, ev); |
1320 #else | |
1321 XQueryPointer (XtDisplay (mw), ev->window, | |
1322 &ev->root, &ev->subwindow, | |
1323 &ev->x_root, &ev->y_root, | |
1324 &ev->x, &ev->y, | |
1325 &ev->state); | |
1326 handle_single_motion_event (mw, ev); | |
1327 #endif | |
1328 } | 1315 } |
1329 | 1316 |
1330 static void | 1317 static void |
1331 Start (w, ev, params, num_params) | 1318 Start (w, ev, params, num_params) |
1332 Widget w; | 1319 Widget w; |
1455 } | 1442 } |
1456 else | 1443 else |
1457 { | 1444 { |
1458 XEvent *ev = (XEvent *) event; | 1445 XEvent *ev = (XEvent *) event; |
1459 | 1446 |
1460 if (!disable_add_grab) | 1447 XtAddGrab ((Widget) mw, True, True); |
1461 XtAddGrab ((Widget) mw, True, True); | |
1462 | 1448 |
1463 /* notes the absolute position of the menubar window */ | 1449 /* notes the absolute position of the menubar window */ |
1464 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x; | 1450 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x; |
1465 mw->menu.windows [0].y = ev->xmotion.y_root - ev->xmotion.y; | 1451 mw->menu.windows [0].y = ev->xmotion.y_root - ev->xmotion.y; |
1466 } | 1452 } |
1467 | 1453 |
1468 #ifdef emacs | 1454 #ifdef emacs |
1469 x_catch_errors (); | 1455 x_catch_errors (); |
1470 #endif | 1456 #endif |
1471 if (!disable_grab_pointer) | 1457 XtGrabPointer ((Widget)mw, False, |
1472 { | 1458 (PointerMotionMask |
1473 XtGrabPointer ((Widget)mw, False, | 1459 | PointerMotionHintMask |
1474 (PointerMotionMask | 1460 | ButtonReleaseMask |
1475 | PointerMotionHintMask | 1461 | ButtonPressMask), |
1476 | ButtonReleaseMask | 1462 GrabModeAsync, GrabModeAsync, None, |
1477 | ButtonPressMask), | 1463 mw->menu.cursor_shape, |
1478 GrabModeAsync, GrabModeAsync, None, | 1464 event->time); |
1479 mw->menu.cursor_shape, | 1465 pointer_grabbed = 1; |
1480 event->time); | |
1481 pointer_grabbed = 1; | |
1482 } | |
1483 #ifdef emacs | 1466 #ifdef emacs |
1484 if (x_had_errors_p ()) | 1467 if (x_had_errors_p ()) |
1485 { | 1468 { |
1486 pointer_grabbed = 0; | 1469 pointer_grabbed = 0; |
1487 XtUngrabPointer ((Widget)mw, event->time); | 1470 XtUngrabPointer ((Widget)mw, event->time); |
1489 x_uncatch_errors (); | 1472 x_uncatch_errors (); |
1490 #endif | 1473 #endif |
1491 | 1474 |
1492 handle_motion_event (mw, (XMotionEvent*)event); | 1475 handle_motion_event (mw, (XMotionEvent*)event); |
1493 } | 1476 } |
1494 | |
1495 void GetWindowAttributes (w) | |
1496 Widget w; | |
1497 { | |
1498 XWindowAttributes attrs; | |
1499 | |
1500 XGetWindowAttributes (XtDisplay (w), | |
1501 XtWindow (w), | |
1502 &attrs); | |
1503 } |