… | |
… | |
461 | { |
461 | { |
462 | switch (keysym) |
462 | switch (keysym) |
463 | { |
463 | { |
464 | /* normal XTerm key bindings */ |
464 | /* normal XTerm key bindings */ |
465 | case XK_Insert: /* Shift+Insert = paste mouse selection */ |
465 | case XK_Insert: /* Shift+Insert = paste mouse selection */ |
466 | selection_request (ev.time, Sel_Primary); |
466 | selection_request (ev.time); |
467 | return; |
467 | return; |
468 | #if TODO |
468 | #if TODO |
469 | /* rxvt extras */ |
469 | /* rxvt extras */ |
470 | case XK_KP_Add: /* Shift+KP_Add = bigger font */ |
470 | case XK_KP_Add: /* Shift+KP_Add = bigger font */ |
471 | change_font (FONT_UP); |
471 | change_font (FONT_UP); |
… | |
… | |
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]) |
1407 | && !HOOK_INVOKE ((this, HOOK_CLIENT_MESSAGE, DT_XEVENT, &ev, DT_END))) |
1408 | { |
1408 | { |
|
|
1409 | if (ev.xclient.message_type == xa[XA_WM_PROTOCOLS]) |
|
|
1410 | { |
|
|
1411 | if (!HOOK_INVOKE ((this, HOOK_WM_PROTOCOLS, DT_XEVENT, &ev, DT_END))) |
|
|
1412 | { |
1409 | if (ev.xclient.data.l[0] == xa[XA_WM_DELETE_WINDOW]) |
1413 | if (ev.xclient.data.l[0] == xa[XA_WM_DELETE_WINDOW]) |
|
|
1414 | { |
|
|
1415 | if (!HOOK_INVOKE ((this, HOOK_WM_DELETE_WINDOW, DT_XEVENT, &ev, DT_END))) |
1410 | destroy (); |
1416 | destroy (); |
|
|
1417 | } |
1411 | #if ENABLE_EWMH |
1418 | #if ENABLE_EWMH |
1412 | else if (ev.xclient.data.l[0] == xa[XA_NET_WM_PING]) |
1419 | else if (ev.xclient.data.l[0] == xa[XA_NET_WM_PING]) |
1413 | XSendEvent (disp, ev.xclient.window = display->root, |
1420 | XSendEvent (disp, ev.xclient.window = display->root, |
1414 | False, SubstructureRedirectMask | SubstructureNotifyMask, |
1421 | False, SubstructureRedirectMask | SubstructureNotifyMask, |
1415 | &ev); |
1422 | &ev); |
|
|
1423 | #endif |
|
|
1424 | } |
|
|
1425 | } |
|
|
1426 | #if ENABLE_XEMBED |
|
|
1427 | else if (ev.xclient.format == 32 && ev.xclient.message_type == xa[XA_XEMBED]) |
|
|
1428 | { |
|
|
1429 | if (ev.xclient.data.l[1] == XEMBED_FOCUS_IN) |
|
|
1430 | focus_in (); |
|
|
1431 | else if (ev.xclient.data.l[1] == XEMBED_FOCUS_OUT) |
|
|
1432 | focus_out (); |
|
|
1433 | } |
1416 | #endif |
1434 | #endif |
1417 | } |
1435 | } |
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; |
1436 | break; |
1454 | |
1437 | |
1455 | case MappingNotify: |
1438 | case MappingNotify: |
1456 | XRefreshKeyboardMapping (&ev.xmapping); |
1439 | XRefreshKeyboardMapping (&ev.xmapping); |
1457 | break; |
1440 | break; |
… | |
… | |
1509 | #endif |
1492 | #endif |
1510 | } |
1493 | } |
1511 | break; |
1494 | break; |
1512 | |
1495 | |
1513 | case PropertyNotify: |
1496 | case PropertyNotify: |
|
|
1497 | if (!HOOK_INVOKE ((this, HOOK_PROPERTY_NOTIFY, DT_XEVENT, &ev, DT_END))) |
1514 | if (ev.xproperty.atom == xa[XA_VT_SELECTION] |
1498 | if (ev.xproperty.atom == xa[XA_VT_SELECTION] |
1515 | && ev.xproperty.state == PropertyNewValue) |
1499 | && ev.xproperty.state == PropertyNewValue) |
1516 | selection_property (ev.xproperty.window, ev.xproperty.atom); |
1500 | selection_property (ev.xproperty.window, ev.xproperty.atom); |
1517 | |
1501 | |
1518 | break; |
1502 | break; |
1519 | |
1503 | |
1520 | case SelectionClear: |
1504 | case SelectionClear: |
1521 | selection_clear (); |
1505 | selection_clear (); |
… | |
… | |
2154 | case Button3: |
2138 | case Button3: |
2155 | selection_make (ev.time); |
2139 | selection_make (ev.time); |
2156 | break; |
2140 | break; |
2157 | |
2141 | |
2158 | case Button2: |
2142 | case Button2: |
2159 | if (IN_RANGE_EXC (ev.x, 0, width) |
2143 | if (IN_RANGE_EXC (ev.x, 0, width) && IN_RANGE_EXC (ev.y, 0, height)) // inside window? |
2160 | && IN_RANGE_EXC (ev.y, 0, height)) // inside window? |
2144 | selection_request (ev.time, ev.state & ShiftMask ? Sel_Clipboard : Sel_Primary); |
2161 | { |
|
|
2162 | if (ev.state & ShiftMask) |
|
|
2163 | selection_request (ev.time, Sel_Clipboard); |
|
|
2164 | else |
|
|
2165 | selection_request (ev.time, Sel_Primary); |
|
|
2166 | } |
|
|
2167 | break; |
2145 | break; |
2168 | |
2146 | |
2169 | #ifdef MOUSE_WHEEL |
2147 | #ifdef MOUSE_WHEEL |
2170 | case Button4: |
2148 | case Button4: |
2171 | case Button5: |
2149 | case Button5: |