web-dev-qa-db-ja.com

AppIndicatorのサブメニューのアクションを設定する

私はCで単純なインジケーターを構築しようとしています。これは私のコードです。

void make_indicator(){
    //Making the indicator
    appindicator = app_indicator_new("My Indicator", "/home/alex/Qt/normal_tray_icon/a.png", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);

    //the construction of the main menu
    GtkWidget* indicatormenu = gtk_menu_new();
    //adding a submenu
    GtkWidget* submenu1 = gtk_menu_item_new_with_label("SubMenu1");
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenu1), indicatormenu);

    /* HERE */
    //here comes the error! Adding an option to the submenu    
    GtkWidget* submenu1_option;
    submenu1_option = gtk_menu_item_new_with_label("Submenu option!");
    gtk_menu_Shell_append(GTK_MENU_Shell(submenu1), submenu1_option);

    //adding an option to the main menu and connecting it to a slot
    GtkWidget* showapp_option;

    showapp_option = gtk_menu_item_new_with_label("Show App!");
    g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), this);
    gtk_menu_Shell_append(GTK_MENU_Shell(indicatormenu), showapp_option);

    //showing the indicator
    gtk_widget_show_all(indicatormenu);
    app_indicator_set_status(appindicator, APP_INDICATOR_STATUS_ACTIVE);
    app_indicator_set_attention_icon(appindicator, "dialog-warning");

    app_indicator_set_menu(appindicator, GTK_MENU (indicatormenu));
}

サブメニューにアクションを追加できません。サブメニューを単純なメニュー項目として追加したので、それにアクションを追加できませんか、それともできますか?

コンパイル時にエラーメッセージは表示されませんが、実行時に次のメッセージが表示されます。

(normal_tray_icon:9203): GLib-GObject-WARNING **: invalid cast from `GtkMenuItem' to `GtkMenuShell'

(normal_tray_icon:9203): Gtk-CRITICAL **: IA__gtk_menu_Shell_insert: assertion `GTK_IS_MENU_Shell (menu_Shell)' failed

私には理解できますが、解決方法がわかりません。

回答ありがとうございます。

7
hytromo

サブメニューではなく、サブメニューのアイテムのみを作成しました。これは次の方法で行うことができます:

//サブメニューを追加:
 // creating submenu 
 GtkWidget * submenu1 = gtk_menu_new(); 
 GtkWidget * submenu1_item = gtk_menu_item_new_with_label( "SubMenu1"); 
 gtk_menu_item_set_sub_set_sub (GTK_MENU_ITEM(submenu1_item)、submenu1); 
 
 //サブメニューをメインメニューに追加
 gtk_menu_Shell_append(GTK_MENU_Shell(indicatormenu)、submenu1_item); 
 
 //オプションをサブメニューに追加する
 GtkWidget * submenu1_option; 
 submenu1_option = gtk_menu_item_new_with_label( "Submenu option!"); 
 gtk_menu_Shell_append(GTK_MENU_Shell(submenu1)、submenu1_);
3
Damian