Quale componente è responsabile del vassoio e come manipolarlo utilizzando C ++?


4

Il mio obiettivo è quello di scrivere un'applicazione gui desktop che utilizzerà questi comandi presenti in 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%)

Quindi l'applicazione avrà un'icona nella barra delle applicazioni che mostra un elenco di dispositivi audio che sarà possibile fare clic per passare il dispositivo audio a quello. Quando vengono cliccati, il volume del suono diminuirà da 0 al punto del volume del sistema corrente (quindi ho bisogno di accedere anche al volume del sistema).

incognite:

  • Come aggiungere a livello di codice un'icona della barra delle applicazioni in c ++
  • Come creare un menu a discesa quando si fa clic sull'icona di quella barra delle applicazioni e fare in modo che visualizzi elementi che sono anche selezionabili (proprio come il modo in cui l'icona della posta visualizza Thunderbird)
  • Come associare gli eventi click a una funzione c ++ che verrà eseguita (per passare a quel dispositivo audio avrò una funzione c ++ pronta).

Ho solo bisogno di alcune indicazioni per identificare il componente desktop che sto cercando di manipolare e dove trovare la documentazione API per esso.

Appunti:


3
Potresti voler guardare appindicator.
Muru,

1
Grazie, questa era l'informazione che stavo cercando. Si prega di scrivere una risposta con esempi per raccogliere la taglia.
Logan,

Risposte:


1

Partenza libappindicator. È responsabile di mettere l'icona nel vassoio. Il menu a discesa visualizzato dall'indicatore è a GtkMenu. Il resto dovrebbe essere familiare se hai lavorato con GTK +. Ecco un esempio minimo.

#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 compili con il seguente. Avrai bisogno libgtk2.0-deve libappindicator-devpacchetti.

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

Capirai il resto. Il modo più semplice è controllare altre semplici applicazioni di indicatori. Ad esempio, vedere l'indicatore da questa risposta .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.