2015-03-24 2 views
1

Я относительно новичок в программировании на gtk в C. Я использую Mac OS 10.9 с XQuartz, с gtk3 (3.14.9_0 + x11, установленным через macports). Я пытаюсь заставить родительское окно отображать значок в строке заголовка. Я нашел следующий пример из http://zetcode.com/tutorials/gtktutorial/firstprograms/Отображение значка в Gtk 3

#include <gtk/gtk.h> 

GdkPixbuf *create_pixbuf(const gchar * filename) 
{ 
    GdkPixbuf *pixbuf; 
    GError *error = NULL; 
    pixbuf = gdk_pixbuf_new_from_file(filename, &error); 
    if(!pixbuf) { 
     fprintf(stderr, "%s\n", error->message); 
     g_error_free(error); 
    } 

    return pixbuf; 
} 

int main(int argc, char *argv[]) 
{ 
    GtkWidget *window; 

    gtk_init(&argc, &argv); 

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window), "icon"); 
    gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); 
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 
    gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png")); 
    gtk_widget_show(window); 

    g_signal_connect_swapped(G_OBJECT(window), "destroy", 
     G_CALLBACK(gtk_main_quit), NULL); 

    gtk_main(); 

    return 0; 
} 

Программа компилируется без ошибок и предупреждений, а также витрины, когда я запускаю его без ошибок, сообщенных, за исключение того, что нет иконок, кроме обычного значка Х11 в заголовка. Я убедился, что у меня есть файл web.png в моем рабочем каталоге, и у меня закончились представления о том, что может быть неправильным. Существуют ли особые требования к файлу PNG, который преобразуется в GdkPixbuf? И если да, то почему я не получаю сообщение в stderr? Большое спасибо за любую помощь, которую вы можете предоставить.

ответ

0

Из-за среды, в которой вы работаете, у вас могут возникнуть проблемы с кодировкой имени файла. Pixbuf ожидает кодированное имя GLib. Вы можете найти дополнительную информацию об этом here.

Попробуйте использовать функцию g_filename_from_utf8() и передать полученную строку с кодировкой GLib в gdk_pixbuf_new_from_file().

Смежные вопросы