Quale componente è responsabile per tray e come manipolarlo usando C ++?

4

Il mio obiettivo è scrivere un'applicazione desktop gui che utilizzi questi comandi trovati in link

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 saranno selezionabili per passare a tale dispositivo audio. Appena cliccato, il volume del suono dissolve il volume 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 di vassoio in c ++
  • Come creare un display a discesa quando si fa clic su quell'icona nella barra delle applicazioni per visualizzare elementi che sono anche cliccabili (proprio come l'icona della posta mostra 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 una guida per identificare il componente desktop che sto cercando di manipolare e dove trovare la documentazione dell'API per questo.

Note:

  • Uso di Ubuntu 14.04 LTS amd64
  • Sto per scrivere questo come un'estensione Node.js open source scritta in C ++
  • Questo è un esempio di notifiche scritte come Node.js Estensione C ++
posta Logan 19.10.2014 - 22:50

1 risposta

1

Dai un'occhiata a libappindicator . È responsabile per l'inserimento dell'icona nel vassoio. Il menu a discesa visualizzato dall'indicatore è GtkMenu . Il resto dovrebbe essere familiare se hai lavorato con GTK +. Ecco un esempio minimale.

#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 di libgtk2.0-dev e libappindicator-dev pacchetti.

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

Vedrai il resto. Il modo più semplice è verificare altre semplici applicazioni di indicatori. Ad esempio, vedi l'indicatore questa risposta .

    
risposta data mkayaalp 09.02.2015 - 09:35

Leggi altre domande sui tag