Проблема в том, что не могу отследить событие выделения текста в Иксах.
Найденный пример (ниже) работает (отслеживает выделение) только в xterm и qt-приложениях. Сам работаю в Gnome и gtk-приложениях.
Требуется отслеживать выделение и содержимое выделеного фрагмента в любом окне, независимо ото всего.
Перерыл пол-инета, пока ничего не нашел. Может, кто подскажет по каким словам искать?
#include <X11/Xlib.h> 
#include <X11/Xatom.h>
#include <assert.h>   
#include <unistd.h>   
#include <stdio.h>
#include <stdlib.h>
main()
{
   Display *dpy = XOpenDisplay(NULL);
   assert(dpy);
   Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 
                 200, 100, 0, 0, 0);
   XSelectInput(dpy, w, StructureNotifyMask);
   XMapWindow(dpy, w);
   XEvent e;
   for(;;) {
      XNextEvent(dpy, &e);
      if (e.type == MapNotify) break;
   }
   XFlush(dpy);
   // Copy from application
   Atom a1, a2, type;
   XSelectInput(dpy, w, StructureNotifyMask+ExposureMask);
   int format, result;
   unsigned long len, bytes_left, dummy;
   unsigned char *data;
   Window Sown;
   for (int ii = 0; ii < 50; ii++) {
      Sown = XGetSelectionOwner (dpy, XA_PRIMARY);
      printf ("Selection owner%i\n", (int)Sown);
      if (Sown != None) {
         XConvertSelection (dpy, XA_PRIMARY, XA_STRING, None,
                   Sown, CurrentTime);
         XFlush (dpy);
         //
         // Do not get any data, see how much data is there
         //
         XGetWindowProperty (dpy, Sown, 
            XA_STRING,    // Tricky..
            0, 0,      // offset - len
            0,         // Delete 0==FALSE
            AnyPropertyType,  //flag
            &type,        // return type
            &format,   // return format
            &len, &bytes_left,  //that 
            &data);           
         printf ("type:%i len:%i format:%i byte_left:%i\n", 
            (int)type, len, format, bytes_left);
         // DATA is There
         if (bytes_left > 0)
         {
            result = XGetWindowProperty (dpy, Sown, 
               XA_STRING, 0,bytes_left,0,
               AnyPropertyType, &type,&format,
               &len, &dummy, &data);
            if (result == Success)
               printf ("DATA IS HERE!!```%s'''\n",
                   data);
            else printf ("FAIL\n");
            XFree (data);
         }
      }
      sleep(2);
   }
}

    
      Ответ на:
      
          комментарий
        от fghj 
  

    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум Я, X11 и select (2009)
- Форум Посылка даных окну (2007)
- Форум Достать выделенный текст с помощью X11 (2018)
- Форум X11 CLIPBOARD: Параметры XChangeProperty для ответа на SelectionRequest (2017)
- Форум g++ expects argument (2013)
- Форум Как в XLib Вывести русские буквы ( в окне ) (2006)
- Форум [X11]Не могу понять, где по-нормальному объявлена структура Display (2011)
- Форум Xlib EnterNotify/LeaveNotify - не работает (2023)
- Форум XFontSet и все что с ним связано (2017)
- Форум не получается в Xlib (2023)