Nowe posty

xx Fatal error: cannot connect to database! LMS (0)
2018-09-17, 21:53:02
xx Z wielu dystrybucji linuxa działają tylko dwie. Proszę o wsparcie (17)
2018-09-13, 22:00:57
xx Szukasz pracy? (1)
2018-09-11, 20:56:19
xx Dzielenie sieci, nadawanie masek (11)
2018-09-10, 23:07:05
xx konfiguracja dhcp server na ubuntu (1)
2018-09-07, 13:05:48
xx Jak zainstalować GIMPa? (16)
2018-09-05, 08:50:05
xx Odpowiednik Windowsowego Notepad++ (2)
2018-09-03, 08:05:23
xx JS w gulpie (0)
2018-09-01, 21:02:49
xx Błąd przy uruchamianiu make menuconfig (6)
2018-09-01, 18:14:55
xx [ Gra Za Darmo przez okreslony czas ] Warhammer 40,000: Space Marine (0)
2018-08-31, 17:28:45

Autor Wątek: Program uruchamiany na pasku zadań. GTK, C  (Przeczytany 1740 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: 2394
  • 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: 1980
  • 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