![哪个组件负责托盘以及如何使用 C++ 操作它?](https://linux22.com/image/1083762/%E5%93%AA%E4%B8%AA%E7%BB%84%E4%BB%B6%E8%B4%9F%E8%B4%A3%E6%89%98%E7%9B%98%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20C%2B%2B%20%E6%93%8D%E4%BD%9C%E5%AE%83%EF%BC%9F.png)
我的目标是编写一个桌面 GUI 应用程序,利用以下命令https://askubuntu.com/a/14083/18330
pacmd list-sinks to list name or index number of possible sinks
pacmd set-default-sink "SINKNAME" to set the default output sink
pacmd set-default-source "SOURCENAME" to set the default input
pacmd set-sink-volume index volume
pacmd set-source-volume index volume for volume control (0 = Mute, 65536 = 100%)
然后应用程序将有一个托盘图标,其中显示声音设备列表,单击该图标即可将声音设备切换到该设备。单击它们时,音量将从 0 逐渐减小到当前系统音量(因此我也需要访问系统音量)。
未知数:
- 如何用 C++ 以编程方式添加托盘图标
- 如何在单击托盘图标时显示下拉列表并让其显示可单击的项目(非常类似于邮件图标显示 Thunderbird 的方式)
- 如何将点击事件绑定到将要运行的 c++ 函数(为了切换到该声音设备,我将准备好一个 c++ 函数。)
我只需要一些指导来识别我尝试操作的桌面组件以及在哪里找到它的 API 文档。
笔记:
- 使用 Ubuntu 14.04 LTS amd64
- 准备用 C++ 编写一个开源 Node.js 扩展
- 这是一作为 Node.js C++ 扩展编写的通知示例
答案1
查看libappindicator
。它负责将图标放入托盘中。指示器显示的下拉菜单是GtkMenu
。如果您使用过 GTK+,那么其余部分应该很熟悉。这是一个最小示例。
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>
static void do_something(GtkWidget *widget, gpointer data) {
//...
}
int main (int argc, char **argv) {
gtk_init(&argc, &argv);
GtkWidget *menu = gtk_menu_new();
GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic("_This is a menu item");
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
g_signal_connect(menuitem, "activate", G_CALLBACK(do_something), NULL);
/* the second parameter is the icon displayed */
AppIndicator* ind = app_indicator_new("test", "indicator-messages-new",
APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
app_indicator_set_menu(ind, GTK_MENU(menu));
gtk_main();
}
使用下列命令进行编译。您需要libgtk2.0-dev
和libappindicator-dev
软件包。
$ gcc test.c `pkg-config --cflags --libs gtk+-2.0 appindicator-0.1`
剩下的事情你都会搞清楚的。最简单的方法是查看其他简单的指标应用程序。例如,查看来自这个答案。