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 }