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 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| static void cb_status_icon_activate (GtkStatusIcon * p_status_icon, gpointer p_data)
{
GtkWidget *p_window = p_data;
g_return_if_fail (p_window != NULL);
g_return_if_fail (GTK_IS_WIDGET (p_window));
if (GTK_WIDGET_VISIBLE (p_window))
{
gtk_widget_hide (p_window);
}
else
{
gtk_widget_show (p_window);
}
}
void cb_new (GtkWidget *p_widget, gpointer user_data)
{
printf("blablabla\n");
}
static void menu_item_new (GtkMenu *p_menu, const gchar *title, const gchar *accel_path, GCallback callback, gpointer user_data)
{
GtkWidget *p_menu_item = NULL;
p_menu_item = gtk_menu_item_new_with_mnemonic (title);
gtk_menu_shell_append (GTK_MENU_SHELL (p_menu), p_menu_item);
g_signal_connect (G_OBJECT (p_menu_item), "activate", callback, user_data);
gtk_menu_item_set_accel_path (GTK_MENU_ITEM (p_menu_item), accel_path);
}
void popup_menu_function(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data)
{
// GtkWidget *p_menu = NULL;
// GtkWidget *p_menu_item = NULL;
//
// p_menu = gtk_menu_new ();
// //gtk_menu_set_accel_group (GTK_MENU (p_menu), accel_group_new (user_data));//
// p_menu_item = gtk_menu_item_new_with_mnemonic ("_Fichier");
// menu_item_new (GTK_MENU (p_menu), "_Nouveau", ACCEL_PATH_NEW, G_CALLBACK (cb_new), user_data);
// menu_item_new (GTK_MENU (p_menu), "_Ouvrir", ACCEL_PATH_NEW, G_CALLBACK (cb_new), user_data);
// gtk_menu_item_set_submenu (GTK_MENU_ITEM (p_menu_item), p_menu);
//
// gtk_menu_popup(p_menu,NULL,NULL,NULL ,user_data, button, activate_time);
GtkWidget *menu, *item;
menu = gtk_menu_new ();
// this opens the downloader window, or brings it to the foreground if already open
item = gtk_menu_item_new_with_mnemonic (("_Show Downloads"));
g_signal_connect_swapped (item, "activate",G_CALLBACK (cb_new), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show_all (menu);
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,gtk_status_icon_position_menu, status_icon,button, activate_time);
}
int main (int argc, char ** argv)
{
GtkWidget *p_window = NULL;
GtkStatusIcon *p_status_icon = NULL;
gtk_init (&argc, &argv);
p_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (p_window), "GTK+ in SysTray!");
g_signal_connect (G_OBJECT (p_window), "destroy", G_CALLBACK (gtk_main_quit),
NULL);
// Creation de l'icone et d'une info-bulle.
p_status_icon = gtk_status_icon_new_from_file (IMAGE);
gtk_status_icon_set_tooltip (GTK_STATUS_ICON (p_status_icon),
"GTK+ in SysTray!");
// On attache un callback sur le widget GtkStatusIcon.
g_signal_connect (G_OBJECT (p_status_icon), "activate",
G_CALLBACK (cb_status_icon_activate), p_window);
g_signal_connect (G_OBJECT (p_status_icon), "popup-menu",G_CALLBACK (popup_menu_function), p_window);
gtk_widget_show_all (p_window);
gtk_main ();
return 0;
} |
Partager