トレイを担当するコンポーネントは何ですか? また、C++ を使用してそれをどのように操作しますか?

トレイを担当するコンポーネントは何ですか? また、C++ を使用してそれをどのように操作しますか?

私の目標は、これらのコマンドを利用するデスクトップ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 ドキュメントがどこにあるかについてのガイダンスが必要です。

ノート:

答え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`

残りは自分で理解するでしょう。最も簡単な方法は、他のシンプルなインジケーターアプリケーションを確認することです。たとえば、この答え

関連情報