Linuxプログラミング 2at LINUXLinuxプログラミング 2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト403:login:Penguin 14/09/10 07:57:01.06 uDuiy6kX.net TCPソケットでサーバー書いてるんですが select(2)の仕様に心が折れそうです プロセスかスレッドに逃げてもいいすか? 404:390 14/09/11 02:27:57.31 Pq+DQ/be.net さっき気づいたが、Windowsにできて X11 での実現方法が分かりにくい Window関連の事柄は、WINE Emulatorのソースを見ればいいんじゃないかと 言う事。 サイズ変更のドラッギング中のメッセージ、Z-ORDERの変更を拒否または 独自仕様にする方法、OWNER WINDOW(OWNED WINDOW) の作り方、などは どれも X11 での実現方法を見出すのは難しいが、WINE では出来ている。 TOP LEVEL WINDOW の場合は、WINE も X11 の native Window を利用して いるはずで、独自にグラフィックで矩形を描画したりしているわけでは ないはず。 なので、WINEで方法を知れば、そうそう大きくないソースで自前でも実現 できるはず。 405:390 14/09/11 10:52:01.00 Pq+DQ/be.net Wineのソースを調べた。CreateWindowsExA() から沢山の関数呼び出しを辿って行った先に、 XCreateWindow() を呼び出している箇所を見つけた。 そして、XCreateWindow()の引数に設定するための attr や mask を計算する次のような関数を見つけた。 こんな感じで使われている: mask = get_window_attributes( data, &attr ); ・・・ data->whole_window = XCreateWindow( data->display, root_window, pos.y, pos.y, cx, cy, 0, data->vis.depth, InputOutput, data->vis.visual, mask, &attr ); なお、data->managed の値は、is_window_managed() の値に応じて切り替えられているらしい。 static int get_window_attributes( struct x11drv_win_data *data, XSetWindowAttributes *attr ) { attr->override_redirect = !data->managed; attr->colormap = data->colormap ? data->colormap : default_colormap; attr->save_under = ((GetClassLongW( data->hwnd, GCL_STYLE ) & CS_SAVEBITS) != 0); attr->bit_gravity = NorthWestGravity; attr->backing_store = NotUseful; attr->border_pixel = 0; attr->event_mask = (ExposureMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask | KeyPressMask | KeyReleaseMask | FocusChangeMask | KeymapStateMask | StructureNotifyMask); if (data->managed) attr->event_mask |= PropertyChangeMask; return (CWOverrideRedirect | CWSaveUnder | CWColormap | CWBorderPixel | CWEventMask | CWBitGravity | CWBackingStore); } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch