寻求有关在 KDE 3 上的桌面之间移动 Qt 4 和 Java 应用程序的建议
我们遇到了一个(也许?)不寻常的情况,我们有很多基于 Qt 4 构建的应用程序和一些基于 Java (Swing) 构建的应用程序,但我们使用的是 KDE 3。我们使用的是 Red Hat Enterprise Linux 5,因为由于 KDE 4 没有官方版本,因此不可能升级到 KDE 4。
在我们的项目中,客户要求的一件事是能够在不同的桌面上打开某些应用程序。在筛选了 KDE 3 API 后,似乎使用 KWin::setOnDesktop 函数来完成此操作的主要方法。
不幸的是,使用该函数需要链接 KDE 的库 (libkdecore),并且您可以包含 KDE 3 头文件,其中包含一堆 Qt 3 内容。因此,我们实际上无法让任何 Qt 4 应用程序直接与 KDE 对话。
Java 应用程序的问题是获取 X11 窗口 id 是一件非常痛苦的事情,因为它需要通过 JNI 调用。 (有一个关于 Java 和 X11 交互的方便的 StackOverflow 页面 此处。)
是否有人对在这种情况下如何在桌面之间移动窗口有任何建议?感谢您的任何想法。
We've got a (perhaps?) unusual situation where we have a lot of applications built on Qt 4 and some applications built in Java (Swing) but we're using KDE 3. We're on Red Hat Enterprise Linux 5 and since there's no official version of KDE 4 for it, upgrading to KDE 4 is not a possible option.
One of the things on our project our customers require is the ability to have certain applications open up on different desktops. After sifting through the KDE 3 API, it seems that the main way to do this using the KWin::setOnDesktop function.
Unfortunately, using that function requires linking with KDE's libraries (libkdecore) and that you can include the KDE 3 header files, which include a bunch of Qt 3 stuff. Hence, we can't actually have any of the Qt 4 applications talk directly to KDE.
The problem for Java applications is that getting the X11 window id is a huge pain since it requires going through JNI calls. (There's a handy StackOverflow page about Java and X11 interaction here.)
Does anyone have any advice about how to move windows between desktops in this situation? Thanks for any ideas.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
KDE4 还有一个 setOnDesktop 方法,可以与 KDE3 的 KWin 窗口管理器(或任何其他正常的窗口管理器)对话。它位于 KWindowSystem 类。您可以在您的应用程序中使用它。
重点是 setOnDesktop 方法将使用底层 X11 协议来完成这项工作。应用程序是用一种技术编写的,而窗口管理器是用另一种技术编写的,这并不重要。
KDE4 also has a setOnDesktop method that will talk with KDE3's KWin window manager (or any other sane window manager). It's in KWindowSystem class. You can use that in your applications.
The point is that setOnDesktop method will use underlying X11 protocol to do the job. It doesn't matter that the application is written with one technology, and the window manager in another.