#c #linux #x11 #copy-paste #pasteboard
Вопрос:
Я пишу компонент, который должен отслеживать изменения в буфере обмена для окна X11.
auto display = XOpenDisplay(NULL);
auto screen = DefaultScreen(mdisplay);
auto root_window = RootWindow(display, screen);
clipboard = XInternAtom(display, "CLIPBOARD", 0);
window = XCreateSimpleWindow(mdisplay, root_window, 0, 0, 1, 1, 0, 0, 0);
while(true) {
XEvent event = {0};
XNextEvent(display, amp;event);
switch(event.type) {
case SelectionNotify: {
// do something
}
break;
case SelectionRequest: { // triggered after performing copy
auto target_name = XGetAtomName(display, event.xselectionrequest.target);
auto selection_name = XGetAtomName(display, event.xselectionrequest.selection);
auto property_name = XGetAtomName(display, event.xselectionrequest.property);
Log("Event SelectionRequest: owner: %ld, requestor: %ld, selection: %s, target: %s(%d), property: %s",
event.xselectionrequest.owner,
event.xselectionrequest.requestor,
selection_name,
target_name,
event.xselectionrequest.target,
property_name);
if(x_event.xselectionrequest.selection != clipboard) {
Log("%s: Warning: event selection not matchingn", __func__);
break;
}
}
break;
}
}
Проблема в том, что когда я пытаюсь проверить событие SelectionRequest
, все, что я вижу, это
Event SelectionRequest: owner: 33554433, requestor: 18874649, selection: CLIPBOARD, target: TARGETS(344), property: GDK_SELECTION
Действие, которое я выполняю, — это копирование некоторого текста из браузера Chrome. Кто-нибудь может сказать мне, почему я вижу не этот текст, юникод, строковые типы, а скорее GDK_SELECTION
?
PS: Так получилось, что я видел эти форматы только один раз (текст, юникод, строковые типы), но больше никогда.