2016-10-28 2 views
-2

Я просто хочу сделать пример приложения, когда единственное возможное действие близко. Возможно ли это с Unity (Ubuntu)? Я делаю ошибку?Xlib + Unity Только закрыть разрешенное действие

#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

Вы спрашиваете нас, если вы допустили ошибку, попытались ли вы скомпилировать код в первую очередь? Если да, то какая ошибка вы получаете? Пожалуйста, обратитесь к справке [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask). – Enfyve

+0

У меня на самом деле нет ошибки. Чтобы быть абсолютно явным, ничего не добавляйте. Разрешены все действия (изменение размера, минимизация, полный экран ...) – Preovaleo

+0

Требуется более подробная информация, какая ошибка? См. Первый комментарий –

ответ

0

Во-первых, вам нужно (unsigned char*)&close (адрес данных)

Во-вторых, вы устанавливаете свойство слишком рано, до WM имеет возможность управлять окно. A WM должен отказаться от старого значения этого свойства, когда он сначала управляет окном. Попробуйте выполнить первое событие экспонирования или сразу после задержки 1 секунду.

В-третьих, не гарантируется работа. На моей машине (не Unity) действия окна на панели задач действительно отключены, но в оконном фрейме все еще есть WM, который по-прежнему позволяет им. Я не знаю, является ли это ошибкой в ​​моем WM или нет.