Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

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

arturromarr

  • Gość
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: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
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
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 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
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.