LINUX.ORG.RU
Ответ на: комментарий от Laz

Я думая что это только для своих Окон. Хотя не вникал.

cvv ★★★★★
()
Ответ на: комментарий от anonymous

>> Читай ICCCM

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


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

naryl ★★★★★
()
Ответ на: комментарий от anonymous

я думаю ты что-то с чемто перепутал но спорить не готов.

cvv ★★★★★
()
Ответ на: комментарий от Laz

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

cvv ★★★★★
()
Ответ на: комментарий от cvv

и иметь возможность/разрешение установления соединения с этим дисплеем

cvv ★★★★★
()
Ответ на: комментарий от anonymous

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 ★★★★★
()
Ответ на: комментарий от anonymous

запускаешь xprop и щёлкаешь на любое окно при запущенном ICEWM. В KWin:

# xprop | grep _NET_WM_PID
_NET_WM_PID(CARDINAL) = 5416

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