Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 21/10/2017, à 22:18

Tangram

[RÉSOLU] Redimensionnement étrange d'un GtkEntry (GTK3)

Un petit problème sous GTK3. Mon programme de test :

Le makefile :

CC=gcc
CFLAGS+= -Wall `pkg-config gtk+-3.0 --cflags`
LDLIBS+=`pkg-config gtk+-3.0 --libs`

all: entry

Le fichier "entry.c" :

#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>

static GtkWidget *window;


static gboolean
delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
    gtk_main_quit ();
    return FALSE;
    (void)widget;
    (void)event;
    (void)user_data;
}


int main(int argc, char *argv[])
{
    GtkWidget *main_box;
    GtkWidget *left_box;
    GtkWidget *right_box;
    GtkWidget *entry;
    GtkWidget *label;

    gtk_init(&argc, &argv);

    /* Création de la fenêtre */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_resizable (GTK_WINDOW(window), TRUE);
    g_signal_connect (G_OBJECT (window), "delete-event",
                      G_CALLBACK(delete_event), NULL);

    main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
    gtk_container_add (GTK_CONTAINER (window), main_box);
    gtk_container_set_border_width (GTK_CONTAINER (window), 4);

    /* Création de la boîte gauche */
    left_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
    gtk_box_pack_start (GTK_BOX(main_box), left_box, FALSE, FALSE, 4);

    /* Création de l'entry */
    entry = gtk_entry_new ();
    gtk_widget_set_hexpand (entry, FALSE);
    gtk_widget_set_vexpand (entry, FALSE);
    gtk_entry_set_max_length (GTK_ENTRY (entry), 4);
    gtk_entry_set_width_chars (GTK_ENTRY (entry), 4);
    gtk_box_pack_start (GTK_BOX(left_box), entry, FALSE, FALSE, 4);

    /* Création de la boîte droite */
    right_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
    gtk_box_pack_start (GTK_BOX(main_box), right_box, TRUE, TRUE, 4);

    /* Création du label */
    label = gtk_label_new ("label");
    gtk_widget_set_hexpand (label, FALSE);
    gtk_widget_set_vexpand (label, FALSE);
    gtk_box_pack_start (GTK_BOX(right_box), label, TRUE, TRUE, 4);

    gtk_widget_show_all(window);

    gtk_main();

    return EXIT_SUCCESS;
}

Dans ce programme, la fenêtre est redimensionnable. Le but est d'observer le comportement d'un GtkEntry lors d'un redimensionnement. Le GtkEntry est contenu dans une boîte non redimensionnable, le GtkLabel est contenu dans une boîte redimensionnable. La définition de la largeur du GtkEntry et du GtkLabel est laissée à la discrétion de GTK.

On remarque que :

  • quand on tire au lancement le bord gauche de la fenêtre vers la gauche, le GtkLabel s'agrandit alors que le GtkEntry ne change pas de dimension, ce qui est l'effet escompté

  • quand on tire au lancement le bord gauche de la fenêtre vers la droite, le GtkLabel ne change pas de dimension, ce qui est aussi l'effet escompté, mais le GtkEntry réduit sa largeur jusqu'au moment où il atteint sa largeur minimale, auquel cas la fenêtre ne peut plus être réduite en largeur

Ma question est donc : comment faire pour que le GtkEntry ait toujours sa largeur minimale quelque soit le redimensionnement ?

Dernière modification par Tangram (Le 27/10/2017, à 18:59)

Hors ligne

#2 Le 26/10/2017, à 12:07

Tangram

Re : [RÉSOLU] Redimensionnement étrange d'un GtkEntry (GTK3)

Bon, visiblement, il s'agit d'un bug qui a été corrigé sur la version 3.22 de GTK. En attendant, il va falloir que je m'en contente pour la version 3.18 hmm

Hors ligne