Nowe posty

Autor Wątek: Program uruchamiany na pasku zadań. GTK, C  (Przeczytany 1495 razy)

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 12
    • Zobacz profil
Program uruchamiany na pasku zadań. GTK, C
« dnia: 2018-01-29, 09:28:10 »
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

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2382
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Program uruchamiany na pasku zadań. GTK, C
« Odpowiedź #1 dnia: 2018-01-29, 10:51:18 »
Obecnie chyba najbardzie międzysystemowym (międzyokienkowym) rozwiazaniem jest 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.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 1953
  • 1709
    • Zobacz profil
Odp: Program uruchamiany na pasku zadań. GTK, C
« Odpowiedź #2 dnia: 2018-01-29, 11:32:13 »
Cytuj
Czy to są polecenia środowisk graficznych, czy są wspólne dla różnych?
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
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122