Legen Sie die Aktion für das Untermenü in AppIndicator fest

7

Ich versuche, einen einfachen Indikator in C zu erstellen. Dies ist mein Code:

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

Ich kann einem Untermenü keine Aktion hinzufügen. Ich füge das Untermenü als einfachen Menüpunkt hinzu, daher kann ich keine Aktionen an ihn anhängen, oder?

Ich erhalte keine Fehlermeldungen beim Kompilieren, aber zur Laufzeit erhalte ich:

(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

was ich verstehen kann, aber ich weiß nicht, wie ich es lösen soll.

Vielen Dank für alle Antworten.

Hytromo
quelle

Antworten:

3

Sie haben nur ein Element für das Untermenü erstellt, kein Untermenü. Dies kann folgendermaßen geschehen:

// Hinzufügen eines Untermenüs:
// Untermenü erstellen
GtkWidget * submenu1 = gtk_menu_new ();
GtkWidget * submenu1_item = gtk_menu_item_new_with_label ("SubMenu1");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (submenu1_item), submenu1);

// Untermenü zum Hauptmenü hinzufügen
gtk_menu_shell_append (GTK_MENU_SHELL (Indikatormenü), Untermenü1_item);

// Hinzufügen einer Option zum Untermenü    
GtkWidget * submenu1_option;
submenu1_option = gtk_menu_item_new_with_label ("Untermenüoption!");
gtk_menu_shell_append (GTK_MENU_SHELL (Untermenü1), Untermenü1_Option);
Damian
quelle