[Scim-imengine-dev 1450] Re: カーソル位置取得のサンプルコード

Back to archive index

Takashi Nakamoto blued****@bpost*****
2006年 12月 10日 (日) 20:19:02 JST


Takashi Nakamoto <blued****@bpost*****> wrote:

> 中本です。
> 
> Takuro Ashie <ashie****@homa*****> wrote:
> 
> > 足永です。
> > 
> > On Fri, 8 Dec 2006 10:35:47 +0900
> > Takuro Ashie <ashie****@homa*****> wrote:
> > 
> > > いずれにしても、SCIM側にも少し手を入れないと、根本的な解決は無理だと思い
> > > ます。
> > 
> > よく考えたら、裏技があるかもしれません。
> > 
> > ルートウィンドウから現在表示されているウィンドウのリストを取り出し
> > (Extended Window Manger Hintか何かを参照)、そこからSCIMのプリエディット
> > ウィンドウを捜し出して座標を取得するという方法です。
> > 
> > 実際できるかどうかは確認してません。
> 
> 確かにできそうですね。
> # でも後回し。

以下のようなプログラムを実行すると、scim-panel-gtkという名前のウィンド
ウの情報が出力されるのですが...6つ出てきました。
どれがどれか分からん orz

同士要(どうしよう)。

=== プログラム ===
#include <X11/Xlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    Display *d = XOpenDisplay(NULL);
    Window *top = RootWindow(d,0);
    Window *children, dummy;
    unsigned int num;
    int i;
    char *name = "scim-panel-gtk";
    char *window_name;
    
    if (!XQueryTree(d, top, &dummy, &dummy, &children, &num))
	return(0);
    
    for (i=0; i<num; i++)
    {
	if (XFetchName(d,children[i],&window_name) && !strcmp(window_name, name))
	{
	    XWindowAttributes attr;
	    XGetWindowAttributes(d, children[i], &attr);
	    printf("x = %d, y = %d\n", attr.x, attr.y);
	    printf("width = %d, height = %d\n", attr.width, attr.height);
	    printf("border_width = %d\n", attr.border_width);
	    printf("depth = %d\n", attr.depth);
	    printf("class = %d\n", attr.class);
	    printf("bit_gravity = %d\n", attr.bit_gravity);
	    printf("win_gravity = %d\n", attr.win_gravity);
	    printf("\n");
	}
    }

    if (children) XFree ((char *)children);
}

=== 出力 ===
x = 10, y = 10
width = 10, height = 10
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

x = 784, y = 730
width = 109, height = 31
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

x = 977, y = 28
width = 47, height = 25
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

x = 644, y = 626
width = 294, height = 111
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

x = 848, y = 582
width = 147, height = 165
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

x = 390, y = 459
width = 406, height = 25
border_width = 0
depth = 24
class = 1
bit_gravity = 1
win_gravity = 1

-- 
 中本 崇志 (Takashi Nakamoto)
 E-mail: blued****@bpost*****
 Blog: http://bd.tank.jp/diary/



Scim-imengine-dev メーリングリストの案内
Back to archive index