Advertisement
Guest User

Untitled

a guest
May 15th, 2022
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. #include <X11/Xlib.h>
  2. #include <X11/Xatom.h>
  3. #include <assert.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. int main()
  9. {
  10. Display *dpy = XOpenDisplay(NULL);
  11. assert(dpy);
  12. Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0,
  13. 200, 100, 0, 0, 0);
  14. XSelectInput(dpy, w, StructureNotifyMask);
  15. XMapWindow(dpy, w);
  16. XSelectionRequestEvent *req;
  17. XEvent e, respond;
  18. for(;;) {
  19. XNextEvent(dpy, &e);
  20. if (e.type == MapNotify) break;
  21. }
  22. XFlush(dpy);
  23.  
  24. Atom TARGETS = XInternAtom(dpy, "TARGETS", True);
  25. Atom tgt_atoms[] = { TARGETS, XA_STRING };
  26.  
  27. //
  28. XSelectInput(dpy, w, StructureNotifyMask+ExposureMask);
  29. for (int ii = 0; ii < 50; ii++) {
  30. XSetSelectionOwner (dpy, XA_PRIMARY, w, CurrentTime);
  31. XFlush (dpy);
  32. XNextEvent (dpy, &e);
  33. if (e.type == SelectionRequest)
  34. //
  35. // Somebody wants our data
  36. //
  37. {
  38. req=&(e.xselectionrequest);
  39. printf ("Selection Request from Mr %i I am %i\n",
  40. (int)e.xselection.requestor, (int)w);
  41. printf ("prop:%ld tar:%ld sel:%ld\n", req->property,
  42. req->target, req->selection);
  43. if (req->target == XA_STRING)
  44. {
  45. XChangeProperty (dpy,
  46. req->requestor,
  47. req->property,
  48. XA_STRING,
  49. 8,
  50. PropModeReplace,
  51. (unsigned char*) "It Works\n",
  52. 9);
  53. respond.xselection.property=req->property;
  54. }
  55. else if (req->target == TARGETS)
  56. {
  57. printf("Providing \"TARGETS\" to %#lx\n", req->requestor);
  58. XChangeProperty(dpy,
  59. req->requestor,
  60. req->property,
  61. XA_ATOM,
  62. 32,
  63. PropModeReplace,
  64. (unsigned char *)&tgt_atoms,
  65. 2);
  66. }
  67. else // Strings only please
  68. {
  69. printf ("No String %i\n",
  70. (int)req->target);
  71. respond.xselection.property= None;
  72. }
  73. respond.xselection.type= SelectionNotify;
  74. respond.xselection.display= req->display;
  75. respond.xselection.requestor= req->requestor;
  76. respond.xselection.selection=req->selection;
  77. respond.xselection.target= req->target;
  78. respond.xselection.time = req->time;
  79. XSendEvent (dpy, req->requestor,0,0,&respond);
  80. XFlush (dpy);
  81. }
  82. }
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement