桌面集成应用程序(类似桌面小部件)

5
我目前在考虑写一个桌面集成应用程序,类似于常见的桌面小部件引擎(如screenlets、gdesklets、google gadgets)。它应该能够为我提供关于我的系统、互联网上的各种信息的完整概述,并最终将它们可视化在我的桌面上。它应该集中所有我每天需要的信息。
最简单的方法肯定是为已知的桌面小部件引擎之一编写自己的小部件,但我更喜欢从头开始编写。因此,我目前正在寻找一些实现提示,如何构建一个全局视图,该视图没有由窗口管理器装饰的边框、标题栏或其他任何东西,并且没有背景颜色。不需要特殊的透明度X%效果,需要使用compiz。
这方面很好的例子是带有额外libcario支持的conky。我还会选择一个更大的GUI工具包,如GTK+或QT。直接使用更复杂的X11 API接口也是一种选择。首选语言是C和C++。
如果有人在这个领域已经有类似的经验,我会很高兴如果他能分享他的知识。
2个回答

2
有两种方法可以构建无边框窗口:(1)完全绕过窗口管理器,和(2)使用窗口管理器。
第一种方法很简单,但是有限制(例如,您必须自己管理窗口拖动和在虚拟桌面上的放置)。这是通过创建具有override-redirect标志的窗口来完成的。
第二种方法涉及设置窗口属性(如xprop中所述)称为WM提示。如果您想使用原始Xlib进行操作,则需要研究ICCCM。大多数工具包,如gtk +,都有用于设置WM提示的API。
对于简单的是或否“透明度”,有XShape API(这在技术上是一个扩展,即X11的可选部分,但几乎到处都存在)。或者您可以创建背景设置为“None”的窗口(但是此方法可能会在合成窗口管理器(即Compiz)中出现问题)。或者您可以完全避免应用程序窗口,并直接在(虚拟)根窗口上进行绘制。据推测,libcairo也可以让您做同样的事情,但我不熟悉它。
希望这有所帮助。

那非常有帮助,我会检查一下。使用libcairo接口在根窗口上绘制将是很棒的,因为我只需要一个窗口(我的绘画区域)。 - Ruun

1

您没有说明您的目标操作系统,但我假设是Linux发行版。

首先,您的窗口管理器必须支持无边框和无装饰窗口。

然后,您需要选择语言(C和C++完全不同)。如果选择C ++,那么Qt似乎是一个明显的选择。

对于Qt,很容易创建无边框窗口:使用Qt制作无边框窗口


X服务器从不关心边框和装饰。如果一个窗口有边框和/或装饰,那么窗口管理器会创建一个额外大小的带有边框和装饰的窗口,并将此窗口重新父级到被装饰客户端窗口的父级,并在客户端周围绘制装饰和边框。这就是所谓的重新父级化窗口管理器,客户端可以通过覆盖重定向标志来防止这种情况发生。 - datenwolf
是的,它是为Linux设计的,不需要处理可移植性问题。对我来说,使用哪种语言并不重要,我两种都熟悉。我更关注支持的API,所有不同的工具包或X-Server提供的内容。因此,这个链接也非常有前途。谢谢。 - Ruun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接