1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
/* Comment rajouter une entrée dans le menu contextuel d'une GtkEntry
*
* Principe:
* on connecte le signal "populate-popup" à un callback menu_populate_CB()
* qui crée la nouvelle entrée avec gtk_menu_shell_append()
* et menu_populate_CB() connecte cette dernière à l'action souhaitée.
*
*/
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
/* Ce callback est appelé quand le nouvel item "essai"
* est selectionné dans le menu
*/
void essai_CB (GtkMenuItem *item ,gpointer p)
{
GtkEntry *entry = GTK_ENTRY (p);
gchar str[] = "texte en plus";
gint tmp_pos;
tmp_pos = entry->current_pos;
gtk_editable_insert_text (GTK_EDITABLE (entry), str, strlen (str), &tmp_pos);
gtk_editable_set_position (GTK_EDITABLE (entry), tmp_pos);
}
/* Ce callback rajoute une entrée "essai" dans le menu de "entry"
* et connecte essai_CB quand le nouvel item est sélectionné
*/
void menu_populate_CB (GtkEntry *entry ,GtkMenu *menu ,gpointer p)
{
gchar str[] = "essai";
GtkWidget *nouvel_item = gtk_menu_item_new_with_label (str);
gtk_menu_shell_append (GTK_MENU_SHELL (menu) ,nouvel_item);
gtk_widget_show (nouvel_item);
g_signal_connect (nouvel_item ,"activate" ,G_CALLBACK (essai_CB) ,entry);
}
int main( int argc, char *argv[] )
{
GtkWidget *window = NULL;
GtkWidget *w_entry;
/* Initialisation */
gtk_init (&argc, &argv);
/* Main window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* Creation de la GtkEntry */
w_entry = gtk_entry_new ();
gtk_entry_set_width_chars (GTK_ENTRY (w_entry) ,50);
gtk_container_add (GTK_CONTAINER (window), w_entry);
g_signal_connect (w_entry ,"populate-popup" ,G_CALLBACK (menu_populate_CB) ,NULL);
g_signal_connect (window ,"destroy" ,G_CALLBACK (gtk_main_quit) ,NULL);
/* Affichage et boucle principale */
gtk_widget_show_all (window);
gtk_main ();
return (EXIT_SUCCESS);
} |
Partager