2016-10-28 1 views
-2

Je veux juste faire un exemple d'application quand la seule action possible est proche. Est-ce possible avec Unity (Ubuntu)? Est-ce que je fais une erreur?Xlib + Unity Fermer uniquement l'action autorisée

#include <stdio.h> 
#include <X11/Xlib.h> 
#include <X11/Xos.h> 
#include <X11/Xatom.h> 
static void only_close(Display *display, Window window) 
{ 

    int retval; 
    Atom aa = XInternAtom(display, "_NET_WM_ALLOWED_ACTIONS", False); 
    Atom close = XInternAtom(display, " _NET_WM_ACTION_CLOSE", False); 

    retval = XChangeProperty(display, window, aa, XA_ATOM, 32, PropModeReplace, (unsigned char*)close, 1); 

    printf("###### XChangeProperty() reted %d\n", retval); 
} 

int main() 
{ 

    Display *dis; 
    Window win; 

    dis = XOpenDisplay(NULL); 
    win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 500, 500, \ 
           0, BlackPixel (dis, 0), BlackPixel(dis, 0)); 
    XMapWindow(dis, win); 
    printf("window %i\n", (int)win); 
    only_close(dis, win); 
    XFlush(dis); 
    sleep(10); 
    return(0); 
} 
+0

Vous nous demandez si vous avez fait une erreur, avez-vous essayé de compiler le code en premier lieu? Si oui, quelle erreur obtenez-vous? Veuillez vous reporter à l'aide sur [Comment poser une bonne question] (http://stackoverflow.com/help/how-to-ask). – Enfyve

+0

Je n'ai effectivement aucune erreur. Pour être totalement explicite rien ajouter. Toutes les actions (redimensionner, minimiser, plein écran ...) sont autorisées – Preovaleo

+0

Nécessite plus de détails, quelle est l'erreur? Voir le premier commentaire –

Répondre

0

Tout d'abord, vous devez (unsigned char*)&close (une adresse des données)

En second lieu, vous définissez la propriété trop tôt, avant que WM a une chance de gérer la fenêtre. Un fichier WM doit ignorer l'ancienne valeur de cette propriété lors de la première gestion de la fenêtre. Essayez après le premier événement d'exposition, ou juste après un délai de 1 seconde.

Troisièmement, le fonctionnement n'est pas garanti. Sur ma machine (pas sur Unity) les actions de la fenêtre dans la barre des tâches sont en effet désactivées, mais le cadre de la fenêtre a toujours le WM qui les autorise encore. Je ne sais pas si c'est un bug dans mon WM ou pas.