¿Qué componente es responsable de la bandeja y cómo manipularla usando C++?

¿Qué componente es responsable de la bandeja y cómo manipularla usando C++?

Mi objetivo es escribir una aplicación GUI de escritorio que utilice estos comandos que se encuentran enhttps://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%)

Luego, la aplicación tendrá un icono de bandeja que muestra una lista de dispositivos de sonido en los que se podrá hacer clic para cambiar el dispositivo de sonido a ese. A medida que se hace clic en ellos, el volumen del sonido disminuirá desde 0 hasta el punto del volumen actual del sistema (por lo tanto, también necesito acceso al volumen del sistema).

Desconocidos:

  • Cómo agregar mediante programación un icono de bandeja en C++
  • Cómo hacer que se muestre un menú desplegable cuando se hace clic en el ícono de esa bandeja y hacer que muestre elementos en los que también se puede hacer clic (muy parecido a cómo el ícono de correo muestra Thunderbird)
  • Cómo vincular los eventos de clic a una función de C++ que se ejecutará (para cambiar a ese dispositivo de sonido, tendré una función de C++ lista).

Solo necesito orientación para identificar el componente de escritorio que estoy intentando manipular y dónde encontrar la documentación API correspondiente.

Notas:

Respuesta1

Verificarlibappindicator. Se encarga de poner el icono en la bandeja. El menú desplegable que muestra el indicador es unGtkMenu. El resto debería resultarte familiar si trabajaste con GTK+. He aquí un ejemplo mínimo.

#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();
}

Lo compilas con lo siguiente. Necesitarás libgtk2.0-devy libappindicator-devpaquetes.

$ gcc test.c `pkg-config --cflags --libs gtk+-2.0 appindicator-0.1`

Ya descubrirás el resto. La forma más sencilla es consultar otras aplicaciones de indicadores sencillas. Por ejemplo, vea el indicador deesta respuesta.

información relacionada