crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Поместить иконку в tray.
Гость_Гость_*
сообщение 23.11.2007, 17:23
Сообщение #1





Гости








    


САБЖ.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ubuntu
  опции профиля:
сообщение 23.11.2007, 17:34
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 32
Регистрация: 10.10.2007
Пользователь №: 9

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ты имел ввиду как поместить иконку в трей? :)

Тогда попробуй использовать GtkStatusIcon.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 23.11.2007, 17:51
Сообщение #3





Гости








    


Угу, именно это я и имел ввиду. :)

Спасибо, попробую.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Andrew_*
сообщение 26.11.2007, 15:06
Сообщение #4





Гости








    


#include <gtk/gtk.h>

namespace gtk_test
{
    GtkWidget *window;
    GtkWidget *button;
    GtkStatusIcon *tray_icon;
    GtkWidget *menu;
    GtkWidget *submenu;
    
    bool current_state = false;
    
    bool opt_gdebug = false;
}

using namespace gtk_test;

static void tray_menu_new_item (GtkWidget *menu, char *label, void *callback, void *userdata);
static void tray_menu_destroy (GtkWidget *menu, gpointer userdata);  
static void destroy( GtkWidget *widget, gpointer   data );

static void set_state( )
{
    if (GTK_WIDGET_VISIBLE(window))
    {        
        if(current_state)
        {
            gtk_button_set_label((GtkButton*)button,"start");                         
        }
        else
        {
            gtk_button_set_label((GtkButton*)button,"stop");           
        }        
    }
    
    current_state = !current_state;
}

void tray_icon_on_click(GtkStatusIcon *status_icon,
                        gpointer user_data)
{
    if (window->window)
    {
        gtk_widget_show(window);
        if(!current_state)
        {
            gtk_button_set_label((GtkButton*)button,"start");                         
        }
        else
        {
            gtk_button_set_label((GtkButton*)button,"stop");           
        }
        gtk_window_present((GtkWindow *)window);
    }            
}

void tray_icon_on_menu(GtkStatusIcon *status_icon, guint menu_button,
                       guint activate_time, gpointer user_data)
{
    menu = gtk_menu_new();

    if (current_state)
    {
        tray_menu_new_item (menu, ("_Stop"), (void*)set_state, NULL);
    }
    else
    {
        tray_menu_new_item (menu, ("_Start"), (void*)set_state, NULL);
    }

    g_object_ref (menu);
    g_object_ref_sink (menu);
    g_object_unref (menu);
    g_signal_connect (G_OBJECT (menu), "selection-done", G_CALLBACK (tray_menu_destroy), NULL);
    
    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL,
                         user_data, menu_button, activate_time);    
    
    gtk_widget_show_all (GTK_WIDGET (menu));
    
}

static GtkStatusIcon *create_tray_icon() {

    tray_icon = gtk_status_icon_new();
    g_signal_connect(G_OBJECT(tray_icon), "activate", G_CALLBACK(tray_icon_on_click), NULL);
    g_signal_connect(G_OBJECT(tray_icon), "popup-menu", G_CALLBACK(tray_icon_on_menu), NULL);
    gtk_status_icon_set_from_icon_name(tray_icon, GTK_STOCK_MEDIA_STOP);
    gtk_status_icon_set_tooltip(tray_icon, "Example Tray Icon");
    gtk_status_icon_set_visible(tray_icon, TRUE);

    return tray_icon;
}

void tray_icon_cleanup()
{
    if (tray_icon)
    {
        g_object_unref ((GObject *)tray_icon);
        tray_icon = NULL;
    }    
}

static gboolean delete_event( GtkWidget *widget,
                              GdkEvent  *event,
                              gpointer   data )
{
    tray_icon_cleanup();
    return FALSE;
}

static void destroy( GtkWidget *widget, gpointer   data )
{
    gtk_main_quit ();
}

/* Another callback */
static void window_state( GtkWidget *widget, gpointer   data )
{
    if (widget->window)
    {
        if (gdk_window_get_state(widget->window) & GDK_WINDOW_STATE_ICONIFIED)
        {
            g_print ("iconified");
            gtk_window_deiconify((GtkWindow *)window);                
            gtk_widget_hide(widget);
        }            
    }    
}

static void tray_menu_new_item (GtkWidget *menu, char *label, void *callback, void *userdata)
{
    GtkWidget *item;

    if (label)
        item = gtk_menu_item_new_with_mnemonic (label);
    else
        item = gtk_menu_item_new ();
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
    g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (callback), userdata);
    gtk_widget_show (item);
}

static void tray_menu_destroy (GtkWidget *menu, gpointer userdata)
{    
    gtk_widget_destroy (menu);
    g_object_unref (menu);
}


int main( int   argc,
          char *argv[] )
{  
    gtk_init (&argc, &argv);
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL);  
    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);
    g_signal_connect (G_OBJECT (window), "window_state_event", G_CALLBACK (window_state), NULL);
    
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    
    button = gtk_button_new_with_label ("start");
    
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (set_state), NULL);

    GtkStatusIcon* tray_icon = create_tray_icon();
    
    gtk_container_add (GTK_CONTAINER (window), button);
    
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS);

    gtk_widget_show (button);
    gtk_widget_show (window);
    
    
    gtk_main ();
    
    return 0;
}
Причина редактирования: включил подсветку
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:41