
Mein Ziel ist es, eine Desktop-GUI-Anwendung zu schreiben, die diese Befehle verwendet, die inhttps://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%)
Dann verfügt die Anwendung über ein Tray-Symbol, das eine Liste von Soundgeräten anzeigt, auf die Sie klicken können, um das Soundgerät zu diesem Gerät zu wechseln. Wenn Sie darauf klicken, wird die Lautstärke von 0 auf die aktuelle Systemlautstärke reduziert (daher muss ich auch auf die Systemlautstärke zugreifen können).
Unbekannte:
- So fügen Sie programmgesteuert ein Tray-Symbol in C++ hinzu
- Wie erstelle ich eine Dropdown-Anzeige, wenn ich auf dieses Tray-Symbol klicke, und lasse darin Elemente anzeigen, die auch anklickbar sind (ähnlich wie das Mail-Symbol Thunderbird anzeigt)
- So binden Sie die Klickereignisse an eine C++-Funktion, die ausgeführt wird (um zu diesem Soundgerät zu wechseln, muss ich eine C++-Funktion bereithalten.)
Ich brauche lediglich einige Hinweise zum Identifizieren der Desktopkomponente, die ich manipulieren möchte, und wo ich die API-Dokumentation dafür finde.
Anmerkungen:
- Verwenden von Ubuntu 14.04 LTS amd64
- Ich werde dies als Open-Source-Node.js-Erweiterung in C++ schreiben.
- Das ist einBeispiel für Benachrichtigungen, die als Node.js C++-Erweiterung geschrieben sind
Antwort1
Kasselibappindicator
. Es ist dafür verantwortlich, das Symbol in der Taskleiste zu platzieren. Das vom Indikator angezeigte Dropdown-Menü ist einGtkMenu
. Der Rest sollte Ihnen bekannt vorkommen, wenn Sie mit GTK+ gearbeitet haben. Hier ist ein Minimalbeispiel.
#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();
}
Sie kompilieren es mit Folgendem. Sie benötigen libgtk2.0-dev
und libappindicator-dev
Pakete.
$ gcc test.c `pkg-config --cflags --libs gtk+-2.0 appindicator-0.1`
Den Rest werden Sie selbst herausfinden. Am einfachsten ist es, sich andere einfache Indikatoranwendungen anzuschauen. Sehen Sie sich beispielsweise den Indikator vondiese Antwort.