Obecnie chyba najbardzie międzysystemowym (międzyokienkowym) rozwiazaniem jest libappindicator (https://launchpad.net/libappindicator).
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>
/*
FROM: https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators
gcc example.c `pkg-config --cflags gtk+-2.0` -I/usr/include/libappindicator-0.1/ -o example `pkg-config --libs gtk+-2.0` -L/usr/lib -lappindicator
*/
static void Quit_menu()
{
printf( "Leaving ..." );
gtk_main_quit();
}
static void gtkCallback( GtkWidget *action )
{
const gchar *name = gtk_widget_get_name( action );
GtkWidget *dialog;
dialog = gtk_message_dialog_new( NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
"You activated action: \"%s\"", name );
g_signal_connect( dialog, "response", G_CALLBACK( gtk_widget_destroy ),
NULL );
gtk_widget_show( dialog );
}
int main( int argc, char **argv )
{
GtkWidget *indicator_menu;
GtkWidget *menuItem1;
GtkWidget *menuItem2;
AppIndicator *indicator;
gtk_init( &argc, &argv );
/* Indicator */
indicator = app_indicator_new( "example-simple-client",
"/home/your/iconfullpath/icon.png",
APP_INDICATOR_CATEGORY_APPLICATION_STATUS );
app_indicator_set_status( indicator, APP_INDICATOR_STATUS_ACTIVE );
app_indicator_set_icon( indicator, "/home/your/iconfullpath/icon.png" );
indicator_menu = gtk_menu_new();
menuItem1 = gtk_image_menu_item_new_with_label( "message" );
g_signal_connect( menuItem1, "activate", G_CALLBACK( gtkCallback ), NULL );
gtk_menu_shell_insert( GTK_MENU_SHELL( indicator_menu ), menuItem1, 0 );
gtk_widget_show( menuItem1 );
menuItem2 = gtk_image_menu_item_new_with_label( "Quit" );
gtk_menu_shell_insert( GTK_MENU_SHELL( indicator_menu ), menuItem2, 1 );
gtk_widget_show( menuItem2 );
g_signal_connect( menuItem2, "activate", G_CALLBACK( Quit_menu ), NULL );
app_indicator_set_menu( indicator, GTK_MENU( indicator_menu ) );
gtk_main();
return 0;
}
Sprawdzałem na Xubuntu Artful, działa. Wymaga libappindicator-dev.