Programowanie > C/C++ - GNOME/Gtk

Program uruchamiany na pasku zadań. GTK, C

(1/1)

:
Cześć,
Chciałem się dowiedzieć jaki jest mechanizm wyświetlania się programu jako aktywnej ikonki (z własnym menu).
Czy to są polecenia środowisk graficznych, czy są wspólne dla różnych?
Chciałem osiągnąć efekt podobny jak ma program cryptkeeper. Po uruchomieniu pojawia się jako ikonka na pasku i ma pod prawym i lewym klawiszem myszy dwa własne menu.

Piszę aplikację w C pod GTK.
Jeśli ktoś się zetknął z tą tematyką to proszę o jakieś naprowadzenie.

Pozdrawiam

Paweł Kraszewski:
Obecnie chyba najbardzie międzysystemowym (międzyokienkowym) rozwiazaniem jest libappindicator.


--- Kod: ---
#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;
}


--- Koniec kodu ---

Sprawdzałem na Xubuntu Artful, działa. Wymaga libappindicator-dev.

1709:

--- Cytuj ---Czy to są polecenia środowisk graficznych, czy są wspólne dla różnych?
--- Koniec cytatu ---
Programistą nie jestem ( nie pomogę profesjonalnie )
ale mogę pokazać jak ja używam tego na potrzeby własnej aplikacji w bashu.

 w trayu  https://github.com/tele1/Mur/blob/master/data/system_tray/sit.c
skrypt do skompilowania tego  https://github.com/tele1/Mur/blob/master/data/system_tray/sit.build
skrypt wyswietlający ikonkę w trayu i który uruchomi skrypt po kliknięciu lewym  lub drugi skrypt po kliknięciu prawym klawiszem ( czyli w tym przypadku okienko )
https://github.com/tele1/Mur/blob/master/mur

i jeszcze to znalazłem
https://www.codeproject.com/Articles/27142/Minimize-to-tray-with-GTK
https://github.com/zserge/tray
http://blog.sacaluta.com/2007/08/gtk-system-tray-icon-example.html
https://developer.gnome.org/gtk3/stable/GtkStatusIcon.html

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej