Bonjour,

Dans la toolbar principale de mon application j'ai un certain nombre de CoolBar. Dans une CoolBar j'ai un CCombo que je souhaite pouvoir agrandir avec la souris (et aller plus loin que la taille initiale de la CoolBar).

J'ai bien un comportement correct sur le resize en utilisant un objet Sash et en modifiant la taille du composant parent (le code n'est pas forcément très beau pour le moment mais c'est fonctionnel).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
        sash.addListener(SWT.Selection, new Listener() {
            @Override
            public void handleEvent(Event e) {
                Rectangle sashRect = sash.getBounds();
                Rectangle shellRect = composite.getClientArea();
                int right = shellRect.width - sashRect.width - limit;
                e.x = Math.max(Math.min(e.x, right), limit);
                if (e.x != sashRect.x) {
                    // move sash
                    sashData.left = new FormAttachment(0, e.x);
 
                    @SuppressWarnings("restriction")
                    CoolBarManager manager = ((WorkbenchWindow) workbenchWindow)
                            .getCoolBarManager();
 
                    Point compositeSize = composite.getSize();
                    Point size = getSize();
                    Point sizeParent = getParent().getSize();
 
                    Point resizeComposite = composite.computeSize(e.x + 5, 0);
                    Point resize = computeSize(size.x + (resizeComposite.x - compositeSize.x), 0);
                    Point resizeParent = computeSize(sizeParent.x + (resize.x - size.x), 0);
 
                    ((FormData) ccombo.getLayoutData()).width = e.x;
 
                    getParent().setSize(resizeParent.x, sizeParent.y);
                    ((GridData) getParent().getLayoutData()).widthHint = resizeParent.x;
 
                    setSize(resize.x, size.y);
                    ((GridData) getLayoutData()).widthHint = resize.x;
 
                    manager.getControl().update();
                    manager.getControl().layout(true, true);
                    // manager.update(true);
                }
            }
        });
Le problème est sur l'appel du update en fin de traitement. Avec un trace je suis remonté dans cet appel et j'ai vu que l'on passe dans le computeSize de Control qui passe ensuite dans le computeNativeSize. Dans cette méthode on repasse la taille à celle déjà allouée au moment de la création de la CoolBar. Ce qui va générer des problèmes d'affichage si la nouvelle taille est plus grande.

Je cherche un moyen de contourner ce problème afin de pouvoir redimensionner dynamiquement chacune de mes CoolBar.

Quelqu'un saurait-il m'indiquer comment faire ?

Merci d'avance pour votre aide.