… | |
… | |
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); |
… | |
… | |
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; |
… | |
… | |
2154 | case Button3: |
2133 | case Button3: |
2155 | selection_make (ev.time); |
2134 | selection_make (ev.time); |
2156 | break; |
2135 | break; |
2157 | |
2136 | |
2158 | case Button2: |
2137 | case Button2: |
2159 | if (IN_RANGE_EXC (ev.x, 0, width) |
2138 | 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? |
2139 | 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; |
2140 | break; |
2168 | |
2141 | |
2169 | #ifdef MOUSE_WHEEL |
2142 | #ifdef MOUSE_WHEEL |
2170 | case Button4: |
2143 | case Button4: |
2171 | case Button5: |
2144 | case Button5: |