Ответы пользователя по тегу C
  • Почему возникает эта ошибка?

    @xverizex Автор вопроса
    Чтобы виджет рисовался правильно, надо реализовать сигнал draw и написать следующее.
    static gboolean text_view_draw_cb ( GtkWidget *widget, cairo_t *cr, gpointer data ) {
            gtk_widget_queue_resize ( widget );
            return FALSE;
    }
    Ответ написан
    Комментировать
  • Как работать с этими стилями в gtk?

    @xverizex Автор вопроса
    Всё я решил проблему. Вот как надо было.
    const char *style = "* { background-color: #3c3c3c; } entry { color: #ffffff; } frame#frame_text * { background-color: #1c1c1c; border-radius: 6px; } textview text { color: #ffffff; } textview#text_view_w * { border-radius: 0px; }";
    
    static gboolean entry_input_text_cb ( GtkWidget *widget, GdkEvent *event, gpointer data ) {
            GdkEventKey *key = ( GdkEventKey * ) event;
            if ( key->keyval == GDK_KEY_Return ) {
                    const char *t = gtk_entry_get_text ( ( GtkEntry * ) entry_input_text );
                    if ( strlen ( t ) == 0 ) return FALSE;
    
                    GtkTextBuffer *buf = gtk_text_buffer_new ( NULL );
                    gtk_text_buffer_set_text ( buf, t, strlen ( t ) );
                    printf ( "t: %s\n", t );
    
                    GtkWidget *frame = g_object_new ( GTK_TYPE_FRAME, "shadow-type", GTK_SHADOW_NONE, "name", "frame_text", NULL );
    
                    GtkWidget *text_view = gtk_text_view_new_with_buffer ( buf );
                    gtk_widget_set_name ( text_view, "text_view_w" );
                    gtk_widget_set_margin_start ( frame, 10 );
                    gtk_widget_set_margin_end ( frame, 10 );
                    gtk_widget_set_margin_top ( frame, 10 );
    
                    gtk_widget_set_margin_top ( text_view, 10 );
                    gtk_widget_set_margin_bottom ( text_view, 10 );
                    gtk_widget_set_margin_start ( text_view, 10 );
                    gtk_widget_set_margin_end ( text_view, 10 );
    
                    g_signal_connect ( text_view, "draw", G_CALLBACK ( text_view_draw_cb ), NULL );
                    gtk_container_add ( ( GtkContainer * ) frame, text_view );
                    gtk_box_pack_start ( ( GtkBox * ) text_box, frame, FALSE, FALSE, 0 );
                    gtk_widget_show_all ( text_box );
    
            }
    
            return FALSE;
    }
    Ответ написан
    Комментировать
  • Epoll возвращает событие с файловым дескриптором 0, хотя раньше работало, что может быть не так?

    @xverizex Автор вопроса
    А, всё, понял в чём проблема. оказывается в events fd и ptr это union, и поэтому когда я указывал ptr = NULL, то занулял fd. теперь ясно. блин, а я на основе ptr делал код, думал что это дополнительное удобство. Ну ладно.
    Ответ написан
    2 комментария