LINUX.ORG.RU

Re: изменение размера окна из другого приложения.

Первое, что приходит на ум - man XResizeWindow.

Laz ★★★★★ ()

Re: изменение размера окна из другого приложения.

Froglogic Squish :)

BreadFan ★★ ()

Re: изменение размера окна из другого приложения.

>> Читай ICCCM

> qt на него кладёт.


Именно поэтому некоторая часть программ с его использованием неюзабельна под некоторыми wm'ами.

naryl ★★★★★ ()

Re: изменение размера окна из другого приложения.

Единственное что известно о той проге у к торой надо менять размер окна так это ее pid (идентификатор процесса) а XResizeWindow требует xid который не известен.

anonymous ()

Re: изменение размера окна из другого приложения.

Этого недостаточно. Еще надо знать DISPLAY c которым прога установила соединение.

если знаеш то тебе может помочь NET_WM.

cvv ★★★★★ ()

Re: изменение размера окна из другого приложения.

pid напрямую тут не поможет. Нужно получить список всех окон (_NET_CLIENT_LIST),
как-то отделить нужное (по WM_CLASS например, или _NET_WM_PID) и уже работать с ним.

Функция для вынимания NETWM свойств:

void* property(Window win, Atom prop, Atom type, int *nitems)
{
    Atom type_ret;
    int format_ret;
    unsigned long items_ret;
    unsigned long after_ret;
    unsigned char *prop_data = 0;

    if(XGetWindowProperty(QX11Info::display(), win, prop, 0, 0x7fffffff, False,
                            type, &type_ret, &format_ret, &items_ret,
                            &after_ret, &prop_data) != Success)
        return 0;

    if(nitems)
        *nitems = items_ret;

    return prop_data;
}

Список окон:

int num;

Window *win = reinterpret_cast<Window *>(property(QX11Info::appRootWindow(), NET_CLIENT_LIST, XA_WINDOW, &num));

if(!win)
    return;

// win - массив идентификаторов Window длиной num,
// сканируем его, определяем pidы каждого окна
// ...

XFree(win);

---

Pid можно получить из атома _NET_WM_PID, который может не поддерживаться WM-ом (KWin поддерживает):

long *pid = reinterpret_cast<long *>(property(window, NET_WM_PID, XA_CARDINAL, 0));

// где window - идентификатор окна

qDebug("PID %ld", *pid);

XFree(pid);

---

свойства можно ещё посмотреть через xprop.
Спек: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html

alex_custov ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.