… | |
… | |
1401 | case ButtonRelease: |
1401 | case ButtonRelease: |
1402 | button_release (ev.xbutton); |
1402 | button_release (ev.xbutton); |
1403 | break; |
1403 | break; |
1404 | |
1404 | |
1405 | case ClientMessage: |
1405 | case ClientMessage: |
1406 | if (ev.xclient.format == 32 |
1406 | if (ev.xclient.format == 32) |
1407 | && ev.xclient.message_type == xa[XA_WM_PROTOCOLS]) |
|
|
1408 | { |
1407 | { |
|
|
1408 | if (ev.xclient.message_type == xa[XA_WM_PROTOCOLS]) |
|
|
1409 | { |
1409 | if (ev.xclient.data.l[0] == xa[XA_WM_DELETE_WINDOW]) |
1410 | if (ev.xclient.data.l[0] == xa[XA_WM_DELETE_WINDOW]) |
|
|
1411 | { |
|
|
1412 | if (!HOOK_INVOKE ((this, HOOK_WM_DELETE_WINDOW, DT_XEVENT, ev, DT_END))) |
1410 | destroy (); |
1413 | destroy (); |
|
|
1414 | } |
1411 | #if ENABLE_EWMH |
1415 | #if ENABLE_EWMH |
1412 | else if (ev.xclient.data.l[0] == xa[XA_NET_WM_PING]) |
1416 | else if (ev.xclient.data.l[0] == xa[XA_NET_WM_PING]) |
1413 | XSendEvent (disp, ev.xclient.window = display->root, |
1417 | XSendEvent (disp, ev.xclient.window = display->root, |
1414 | False, SubstructureRedirectMask | SubstructureNotifyMask, |
1418 | False, SubstructureRedirectMask | SubstructureNotifyMask, |
1415 | &ev); |
1419 | &ev); |
|
|
1420 | #endif |
|
|
1421 | } |
|
|
1422 | #if ENABLE_XEMBED |
|
|
1423 | else if (ev.xclient.format == 32 && ev.xclient.message_type == xa[XA_XEMBED]) |
|
|
1424 | { |
|
|
1425 | if (ev.xclient.data.l[1] == XEMBED_FOCUS_IN) |
|
|
1426 | focus_in (); |
|
|
1427 | else if (ev.xclient.data.l[1] == XEMBED_FOCUS_OUT) |
|
|
1428 | focus_out (); |
|
|
1429 | } |
1416 | #endif |
1430 | #endif |
1417 | } |
1431 | } |
1418 | #if ENABLE_XEMBED |
|
|
1419 | else if (ev.xclient.format == 32 && ev.xclient.message_type == xa[XA_XEMBED]) |
|
|
1420 | { |
|
|
1421 | if (ev.xclient.data.l[1] == XEMBED_FOCUS_IN) |
|
|
1422 | focus_in (); |
|
|
1423 | else if (ev.xclient.data.l[1] == XEMBED_FOCUS_OUT) |
|
|
1424 | focus_out (); |
|
|
1425 | } |
|
|
1426 | #endif |
|
|
1427 | #ifdef OFFIX_DND |
|
|
1428 | /* OffiX Dnd (drag 'n' drop) protocol */ |
|
|
1429 | else if (ev.xclient.message_type == xa[XA_DNDPROTOCOL] |
|
|
1430 | && (ev.xclient.data.l[0] == DndFile |
|
|
1431 | || ev.xclient.data.l[0] == DndDir |
|
|
1432 | || ev.xclient.data.l[0] == DndLink)) |
|
|
1433 | { |
|
|
1434 | /* Get Dnd data */ |
|
|
1435 | Atom ActualType; |
|
|
1436 | int ActualFormat; |
|
|
1437 | unsigned char *data; |
|
|
1438 | unsigned long Size, RemainingBytes; |
|
|
1439 | |
|
|
1440 | XGetWindowProperty (disp, display->root, |
|
|
1441 | xa[XA_DNDSELECTION], |
|
|
1442 | 0L, 1000000L, |
|
|
1443 | False, AnyPropertyType, |
|
|
1444 | &ActualType, &ActualFormat, |
|
|
1445 | &Size, &RemainingBytes, |
|
|
1446 | &data); |
|
|
1447 | set_string_property (XA_CUT_BUFFER0, data); |
|
|
1448 | XFree (data); |
|
|
1449 | selection_paste (display->root, XA_CUT_BUFFER0, true); |
|
|
1450 | XSetInputFocus (disp, display->root, RevertToNone, CurrentTime); |
|
|
1451 | } |
|
|
1452 | #endif /* OFFIX_DND */ |
|
|
1453 | break; |
1432 | break; |
1454 | |
1433 | |
1455 | case MappingNotify: |
1434 | case MappingNotify: |
1456 | XRefreshKeyboardMapping (&ev.xmapping); |
1435 | XRefreshKeyboardMapping (&ev.xmapping); |
1457 | break; |
1436 | break; |