2016-10-28 4 views
-2

唯一の可能なアクションが近いときにサンプルアプリケーションを作成したい。 これはUnity(Ubuntu)で可能ですか? 私は間違いをしますか? WMは、ウィンドウを管理するための機会を得る前にまず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

詳細が必要ですが、何がエラーですか? Oliverが述べたように、最初のコメント –

答えて

0

は、あなたは、(unsigned char*)&close(データのアドレス)

第二に、あなたはあまりにも早くプロパティを設定しているが必要です。 WM は、最初にウィンドウを管理するときにこのプロパティの古い値を破棄する必要があります。最初の公開イベントの後、または1秒の遅延の直後に試してください。

第3に、動作保証されていません。私のマシン(ユニティではない)では、タスクバーのウィンドウアクションは実際には無効になっていますが、ウィンドウフレームには依然としてWMが許可されています。 WMのバグかどうかわかりません。

関連する問題