Пытаюсь узнать имя текущего окна в фокусе пользователя. Когда запускаю программу в IDE, то в консоль выводится актуальное имя текущего окна, но когда переключаюсь на любое другое окно, в котором запущена другая программа, функция XFetchName() отрабатывает со статусом ошибки:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
int main(int argc, char** argv)
{
char* display_name = ":0";
Display* display = XOpenDisplay(display_name);
if (display == NULL) {
fprintf(stderr, "Unable to open display '%s'\n", XDisplayName(display_name));
}
Window* win;
int revert_to_return;
char* name = NULL;
while(1) {
XGetInputFocus(display, win, &revert_to_return);
if (XFetchName(display, *win, &name) > 0) {
printf("%s\n", name);
} else {
printf("bad status\n");
}
XFree(name);
}
XCloseDisplay(display);
return 0;
}
Почему так происходит? Возможно ли вообще получать имя окна в фокусе без сотен строчек кода?
P.S.: Вообще моя цель: достать текст, который выделяется двумя щелчками левой кнопки мышки, в произвольном текущем окне, где это возможно. Но я начал с освоения возможности поработать с текущим окном в фокусе.