Comment append un élément au menu Pidgin

Je veux append un élément arbitraire au menu Pidgin. Qu’il s’agisse d’ amis → Afficher → Groupes . Je veux que ce soit un bouton à cocher (comme Amis → Afficher → Groupes vides ) avec une fonction personnalisée associée. Comment puis-je faire ceci?

  • Dans Pidgin 2.10.9
  • Dans Pidgin 3.0.0 (twig de développement)

    L’exemple suivant concerne Pidgin version 2.10.9. Je pense qu’il n’ya pas beaucoup de changements dans la version 3.0.0 (twig de développement actuelle), elle sera donc applicable là aussi avec des modifications minimales.

    Tout d’abord, téléchargez les sources Pidgin. Dans Ubuntu, cela se fait simplement en exécutant

    apt-get source pidgin 

    Ce qui ira chercher les sources libpurple, pidgin et finch. Ensuite, allez dans pidgin-2.10.9/pidgin/gtkblist.c et trouvez la ligne

     static GtkItemFactoryEntry blist_menu[] = 

    Là, vous verrez le menu Gtk en texte. Ajoutez la ligne suivante:

     { N_("/Buddies/Show/_Groups"), NULL, pidgin_blist_show_groups_cb, 1, "", NULL }, 

    après

     { N_("/Buddies/Show/_Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "", NULL }, 

    Vous pouvez voir que la ligne ajoutée est simplement l’analogue après lequel elle a été ajoutée. Le 3ème membre du groupe est la fonction responsable de la mise à jour du statut des éléments de menu.

    Ensuite, ajoutez la fonction que vous venez de spécifier, pidgin_blist_show_groups_cb . Vous pouvez le faire en recherchant pidgin_blist_show_empty_groups_cb et en copiant son contenu.

     static void pidgin_blist_show_groups_cb(gpointer data, guint action, GtkWidget *item) { pidgin_set_cursor(gtkblist->window, GDK_WATCH); purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/show_groups", gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))); pidgin_clear_cursor(gtkblist->window); } 

    En outre, vous devez définir l’état de l’élément au démarrage. Trouver la fonction

     static void pidgin_blist_show(PurpleBuddyList *list) 

    et append

     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Groups"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_groups")); 

    après

     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Empty Groups"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")); 

    L’ajout de la préférence "/blist/show_groups" ainsi que l’ajout d’un rappel à celle-ci sont expliqués dans Comment puis-je append une préférence personnalisée à Pidgin? . Pour tester vos modifications, comstackz et installez pidgin:

     sudo apt-get build-dep pidgin cd pidgin-2.10.9/ fakeroot debian/rules binary sudo dpkg -i ../pidgin_2.10.9-0ubuntu3.deb 

    Pidgin-3.0.0

    Il y a quelques changements dans la façon dont Pidgin génère le menu dans la version 3.0.0. Tout d’abord, il y a le nouveau tableau GtkToggleActionEntry blist_menu_toggle_ensortinges[] . Vous devez append ici

     { "ShowGroups", NULL, N_("_Groups"), NULL, NULL, G_CALLBACK(pidgin_blist_show_groups_cb), FALSE }, 

    après

     { "ShowEmptyGroups", NULL, N_("_Empty Groups"), NULL, NULL, G_CALLBACK(pidgin_blist_show_empty_groups_cb), FALSE }, 

    Et, il y a static const char *blist_menu . Vous devez append

     "" 

    après

     "" 

    Suivez ensuite les instructions de cette réponse en sautant la première.