问题标签 [xcb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
473 浏览

c++ - 需要 Qt QPA 和 X11 说明

我试图了解 Qts 平台处理几个小时,但我不明白。对于我的热键处理,我目前混合使用 X11extras 来获取显示,xlib 用于键转换,xcb 用于 Qt 本机事件处理。三个要链接的库。无证的 QPA 在哪里发挥作用?现在我想知道这是否有必要。我需要在这里澄清一下。我正在使用 qt 5.4。未来的路在何方?

0 投票
3 回答
1715 浏览

c - XCB – 未在所有窗口上接收运动通知事件

我正在尝试收到有关任何指针运动的通知。由于我不想作为窗口管理器运行,因此我需要XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_POINTER_MOTION在启动时和收到创建通知事件时都设置所有窗口。

一般来说,这似乎工作正常,我在所有窗口上都收到运动通知事件。但是,不知何故,这不适用于 Google Chrome 窗口。我之后通过显式查询来检查事件掩码,并且设置正确。我也没有在传播掩码中看到任何异常。

什么可能导致 Google Chrome 不报告动作通知事件?AFAIK,除了 Chrome 肯定没有的主动指针抓取之外,X 协议不允许这样做。

这是我在所有现有窗口上注册自己的方式。我调用register_events根窗口,每当我收到创建通知事件时:

0 投票
0 回答
1745 浏览

c++ - (XGetImage + XPutImage) VS XCopyArea VS (XShmGetImage + XShmPutImage) VS GTK+ 的性能

我不仅是 Xlib 的新手,也是 Linux 接口编程的新手。

我正在尝试解决将一个窗口的内容绘制到另一个窗口的常见任务(这似乎并不常见,因为我找不到任何可靠的示例)。

但是,我遇到了严重的性能问题,我正在寻找可用于使程序更快、更可靠的解决方案。

现在我将提供一些有关程序流程的信息,因为我不确定选择的程序设计是否正确,也许我使用 Xlib 的方式存在一些错误。

程序以适当的方式获取活动窗口(从现在开始称为SrcWin)的 ID(Xlib“Window”类型)(不是某些程序的小部件的 ID,而是绘制所有内容的真实可见窗口),首先它XGetInputFocus用于获得焦点窗口,然后XQueryTree在找到根窗口的子窗口时使用迭代窗口,然后它使用XmuClientWindow函数来获取命名窗口(如果它不是已经找到的窗口)。

然后使用它获取SrcWinXGetWindowAttributes的宽度和高度,这两个函数都用于创建相同大小的新窗口(称为TrgWin)。XCreateSimpleWindow

使用函数为新窗口 TrgWin 注册了一些事件,例如KeyPressExposeXSelectInput

图形上下文以这种方式创建:

现在开始无限循环,在这个循环select中调用函数来等待 X 连接上的某个事件或超时(struct timeval)。

在该程序尝试使用以下方法从SrcWin获取图像后:

如果成功获取图像,则将其放入TrgWin

然后处理未决事件,如果它们是:

如上所述,程序几乎按预期工作。但是当我试图让这个程序每 40 毫秒将 SrcWin 的内容绘制TrgWin时,我遇到了严重的性能问题(这是时间值,它可能会更快),在核心 i5-3337U 上,它需要 21% 的 cpu 时间程序和近 20% 的 Xorg 进程将一个 683*752 窗口绘制到另一个相同大小的窗口中。

从我的角度来看,如果我能够将带有 SrcWin 像素的内存区域映射到 TrgWin 的相应内存区域,那就太好了,但是我在 Xlib 编程方面不太擅长,我怀疑这是否可能标准 Xlib 函数。

1)但是我已经启动了 KDE 环境来检查它的窗口切换器,并且所有窗口缩略图都实时绘制到窗口切换器的窗口,而没有任何严重的 CPU 负载。它是如何完成的?

2) 在某处提到了 XShmGetImage + XShmPutImage 机制 - 它对我的程序来说是否比 XGetImage+XPutImage 更好?

3) 我还看到 QT 和 GTK 中存在诸如“窗口损坏”事件之类的事情,它是特定于工具包的事件,还是具有 Xlib 等价物?

4) 我将 QT 和 GTK 中的“窗口损坏”事件理解为在窗口的图像缓冲区发生任何变化后发送的信号,所以导致窗口中至少一个像素发生变化的所有事情也会产生这样的事件?在 Xlib 中有这样的东西会很棒,因为即使 SrcWin 没有变化,我也可以摆脱每 40 毫秒不断变化的 TrgWin 内容。

5) 我应该使用 GTK+ 来让事情变得更简单吗?

在此先感谢您的回复,并为大量文字感到抱歉。

0 投票
3 回答
601 浏览

qt - 如何唤醒 XCB 中的 GUI 线程?

我的应用程序正在等待线程完成。当线程完成它的事情时,我想更新 GUI。GUI 线程在 xcb_wait_for_event() 中被阻塞。

XCB可以做到这一点吗?Qt、GTK、FLTK 等如何根据 XCB API 实现这个基本的 GUI 问题?

0 投票
2 回答
1789 浏览

c++ - 如何中断 xcb_wait_for_event?

在一个单独的线程 ( std::thread) 中,我有一个等待的事件循环xcb_wait_for_event。当程序退出时,我想通过中断很好地关闭事情(我有一个设置线程局部变量的解决方案,循环中的检查点抛出异常),然后将我的事件线程加入主线程。问题是xcb_wait_for_event;我需要一种方法来提早返回,或者我需要一个替代函数。

任何人都可以提出解决方案吗?谢谢你的帮助!

0 投票
2 回答
1919 浏览

python - python应用程序-xcb插件失败

我的设置:Python 2.7 with anaconda

最近我安装了 OpenCV 3.0,当我尝试做简单的图像显示或者我想运行 OpenCV 附带的 python 示例时,会出现错误消息:

此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“xcb”。

我已经阅读了许多需要将 .so 文件附加到我的项目的评论,但我认为这不是最佳解决方案,因为对于大多数人来说,它是开箱即用的。

我不知道该怎么做。我没有经验。我想到的只是重新安装所有东西。

0 投票
1 回答
1016 浏览

qt - 集成 XCB 和 libX11 事件循环 - 挂在 Xt 内的 select/poll 上

我正在尝试将两个代码主体集成到同一个进程中,每个先前都有各自的 GUI 工具包的独立事件循环——其中一个使用 Xt,另一个使用 Qt5。目的只是为了能够显示 Qt 子窗口,而不是像现在已经失效的 Qt/Motif 集成扩展那样实现完全集成。

我已经能够构建一个使用标准 Qt 事件循环运行的粗略原型,该原型具有将 XCB 事件转换为 XEvents 的本机事件过滤器(使用 XESetWireToEvent + 它的处理程序从 xEvents / X11 有线格式转换)。然后它使用 XtDispatchEvent() 将这些 XEvent 直接分派给 Xt。此时,我可以运行程序,在同一个程序中创建 Xt/Motif 小部件和 Qt 小部件,使用菜单,绘制 2D 图形,并同时使用 Qt 和 Motif 小部件。

我遇到的问题是,在创建新的 Motif 对话框时会有很长的延迟。我已将其追溯到 libXt 中的 _XtWaitForSomething(),最终归结为 X 服务器连接套接字上的 select() 或 poll()。对 _XtWaitForSomething() 的调用是在 XtManageChild() 中发生的窗口布局管理的结果。_XtWaitForSomething() 似乎正在检查事件队列中是否有待处理的事件。

我有几个问题:

  1. 当在同一个程序中同时使用 XCB 和 libX11 调用时(将 XCB 作为事件队列主控),我可以期望来自经典 Xlib 的调用也能正常工作 - 例如通过 libX11 调用将事件发布到 XCB 事件队列,或确定是否有通过旧的 libX11 调用在 XCB 事件队列中挂起的任何事件?

  2. 为什么 XtManageChild() 最终会阻塞 libXt 中的 _XtWaitForSomething()?看起来它可能正在等待几何更改事件。有趣的是,Qt 的平台层在单独的线程中读取 XCB 事件,然后在主线程中调度它们。我现在想知道在 Xt 有机会检查事件队列是否包含 _XtWaitForSomething() 中的任何内容之前,Qt 的 XCB 读取器线程是否正在吃事件,从而导致死锁。当我调用 Xt 时,有什么方法可以导致 Qt 的 XCB 事件循环 [或一般的 XCB 事件循环] 阻塞?我不能只修改 Qt 以在 XCB 层中有一个条件变量,因为更改 Qt 不是一种选择。

 

  1. XCB 中的事件队列“所有者”状态究竟意味着什么 [XSetEventQueueOwner(..., XCBOwnsEventQueue)]。这是否意味着收集事件的 XLib 调用实际上不会从事件队列的头部“获取”任何事件?

  2. 所描述的方法是否存在明显的阻塞问题?我已经知道我可能必须整理计时器(不再调用在事件循环中处理这些的 Xt 函数),Qt 子窗口到主题小部件的窗口父级,...

谢谢。

0 投票
1 回答
1551 浏览

xlib - 如何使用 Xlib/XCB 获取内部和外部窗口尺寸?

有没有一种可靠的方法可以使用 XCB/Xlib 获取顶级窗口的内部和外部矩形?(IOW 框架和客户矩形)。

这是我尝试过的:

  • xcb_get_geometry 始终返回初始尺寸,即使在窗口调整大小后(给出了什么?)

  • 我想我会反复调用 xcb_query_tree 直到找到窗口的框架窗口 - 这是这样做的方法吗?我认为 ICCCM/EWMH 应该提供这个但找不到任何东西。还有其他标准/非标准吗?无论如何,这不适用于 compiz/ubuntu10,因为 xcb_query_tree 报告客户端窗口具有 root = parent(在正常的 ubuntu wm 下,窗口得到正确的重新父级)。

  • xcb_translate_coordinates() 似乎是 2007 年获得基于根的坐标 [1] 的唯一可靠方法——现在仍然如此吗?即 XCB_CONFIGURE_NOTIFY 是非标准的 WM 吗?

[1] http://fixunix.com/xwindows/91652-finding-position-top-level-windows.html

0 投票
2 回答
1005 浏览

x11 - X11 非裁剪子窗口

X 是否有非裁剪子窗口的概念?这些在 Windows 和 OSX 中的行为是:

  1. 父母总是留在孩子身后
  2. 当父级关闭时,子级会自动关闭
  3. 孩子们在移动时跟随父母

如果答案是否定的,那么我可以模拟 2 和 3,但是 1 呢?

谢谢,
科斯敏。

0 投票
1 回答
1489 浏览

c - 在 XCB 中将鼠标光标更改为标准手形光标

使用 XCB,我需要将窗口的鼠标指针更改为标准手形光标(无论这在 Linux 中意味着什么,我都需要一个独立于工具包的解决方案)。

注意:加载“光标”字体并将窗口属性 XCB_CW_CURSOR 更改为 XC_hand2 不是解决方案。这会加载 X11 丑陋且不熟悉的手形光标,而不是悬停链接时在 Chrome 中看到的默认 Ubuntu 手形光标。

谢谢。