Techniquement, vous ne pouvez rien empêcher, puisque les WM peuvent faire ce qu'ils veulent, mais la plupart des gestionnaires de fenêtres raisonnables vous permettent de contrôler cela.
La méthode moderne préférée pour le faire est de définir le type sémantique _NET_WM_WINDOW_TYPE si l'un de ceux-ci est applicable. Par exemple, dans de nombreux WM, un type de dialogue peut impliquer une non-maximisable. http://standards.freedesktop.org/wm-spec/1.3/
Il semblerait qu'aucun d'entre eux ne s'applique à votre application, probablement, vous devrez donc définir les indicateurs spécifiques.
Pour éviter la maximisation, vous souhaitez simplement rendre la fenêtre non redimensionnable. Comme vous l'avez découvert, "combattre" le redimensionnement en le redimensionnant est une mauvaise idée. Il a entre autres choses un potentiel de boucle infini.
XSetWMSizeHints() est la méthode correcte pour éviter la maximisation. Définissez la taille minimale = taille maximale. voila, pas redimensionnable.Pour éviter la minimisation, vous devez utiliser un peu de vieil héritage cruft appelé les conseils Mwm. Malheureusement, cela implique de couper et coller une définition de structure, puis de définir une propriété sur les bits de la structure.
Je viens de googlé pour MWM hints docs, et l'un des résultats est moi qui suggère de documenter eux, il y a 9 ans ;-) http://mail.gnome.org/archives/wm-spec-list/2001-December/msg00044.html Malheureusement, aucun des résultats sont réels docs.
Vous pouvez probablement le comprendre à partir http://git.gnome.org/browse/gtk+/tree/gdk/x11/MwmUtil.h et gdk_window_set_mwm_hints() http://git.gnome.org/browse/gtk+/tree/gdk/x11/gdkwindow-x11.c#n4389
MwmUtil.h est le struct qui est coupé et-collé partout (dans la plupart des boîtes à outils) et gestionnaires de fenêtres.
L'indice _NET_WM_ALLOWED_ACTIONS est défini dans votre fenêtre par le WM indiquant les fonctionnalités que le WM a décidé de placer sur la fenêtre. L'objectif principal de cette indication est que les pagers et les listes de tâches et autres composants de bureau peuvent alors proposer les actions correspondantes pour la fenêtre.
Les spécifications qui couvrent tout cela sont l'ICCCM (ancienne spécification, encore la plupart du temps valide) et l'EMWH (nouvelles extensions et clarifications, puisque ICCCM a laissé beaucoup de choses non traitées).
Pour plus de détails gores, essayez le code source ... par exemple recalc_window_features() dans le fichier window.c de metacity, actuellement en ligne 6185 http://git.gnome.org/browse/metacity/tree/src/core/window.c#n6185
Un ajustement philosophique lors du codage pour X: kilométrage varie avec le gestionnaire de fenêtre . Les gens «ordinaires» que beaucoup de gens utilisent généralement suivront les spécifications et travailleront comme prévu. Cependant, il y a toutes sortes de MM là-bas, certains brisés, d'autres délibérément excentriques. La pire chose que vous pouvez faire est d'essayer de "se battre" ou de contourner le WM, parce que, fondamentalement, toutes les façons de le faire finiront par casser l'application lorsque vous utilisez un WM sain. Votre meilleur pari est de faire suivre les spécifications, de travailler avec les WMs normaux, et si les utilisateurs sont contrariés qu'ils peuvent redimensionner votre fenêtre non-redimensionnable parce que leur WM le permet, il suffit de leur dire de se plaindre à quiconque fournit cette WM. . Tout le point de la conception WM enfichable est que le WM détermine certains de ce comportement, plutôt que l'application.
Bonne chance. Modern X est assez complexe et coder Xlib sans toolkit est une sorte de demander que les choses soient ... pas tout à fait raison. Mais vous pouvez probablement le faire assez bien. :-P
Je souhaite créer une fenêtre non redimensionnable. C'est sûrement possible, les gestionnaires de plus haut niveau y parviennent. Par exemple, dans Java, vous pouvez définir une fenêtre non redimensionnable et désactiver les boutons Agrandir/Réduire. –
@james Mais pourquoi voulez-vous une fenêtre non redimensionnable. Est-ce que quelque chose va se casser si la fenêtre est redimensionnée, ou êtes-vous simplement imposer vos idées sur votre utilisateur. Que faire si l'utilisateur change la taille de la police dans la fenêtre? Que faire s'il y a un message dans la fenêtre qui est plus long que prévu. À moins d'une bonne raison, ne prenez pas les capacités à l'écart de l'utilisateur. – KeithB
juste parce qu'il n'y a pas de "boutons" ne veut rien dire. alt + leftmouse dans la plupart des gestionnaires de fenêtres et c'est parti. vous pouvez définir des indications de taille (man XSizeHints) et un gestionnaire de fenêtres conforme respectera ces "astuces". – akira