Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: Alex Custov от Октябрь 04, 2010, 19:03



Название: библиотека NETWM для X11 систем
Отправлено: Alex Custov от Октябрь 04, 2010, 19:03
Клиентская библиотека для работы с NETWM-совместимым оконным приказчиком менеджером. Содержит большинство популярных атомов, которые могут использоваться при работе с NETWM. Также содержит некоторые методы для быстрого доступа к оным. Лицензия - GPL3+.

Для чего нужно: поговорить по душам с современным NETWM-совместимым оконным менеджером и другими открытыми окнами. Например, можно получить количество сконфигурированных рабочих столов, их имена, можно активировать или закрыть какое-либо окно, переключиться на другой рабочий стол, и т.д.

Библиотека использует Qt, но в принципе может быть легко переписана на что-то другое (Glib, STL).

Пример:

Код
C++ (Qt)
#include <QApplication>
 
#if defined(Q_WS_X11)
#include "netwm.h"
#else
#error This program will work only in X11
#endif
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   NETWM::init();
 
   QList<Window> list = NETWM::netwmWindowList();
   uint desktops = NETWM::netwmDesktopsNumber();
 
   qDebug("Window manager uses composite extension: %s", NETWM::isComposite() ? "yes" : "no");
 
   qDebug("Window ids currently available:");
 
   foreach(Window w, list)
   {
       qDebug("%ld", w);
   }
 
   qDebug("Number of desktops: %u", desktops);
 
   return 0;
}
 

Цитировать
$ ./example                                                                                                                                                                   
Window manager uses composite extension: no                                                                                                                                                         
Window ids currently available:                                                                                                                                                                     
27263207                                                                                                                                                                                             
27263265                                                                                                                                                                                             
8388647                                                                                                                                                                                             
35652075                                                                                                                                                                                             
41943043                                                                                                                                                                                             
46137582
25165828
Number of desktops: 2

Обновления, если будут, то будут появляться на http://code.google.com/p/libqnetwm

P.S. В Qt работа с NETWM до сих пор почему-то не выделена в общедоступный класс, приходится дублировать код  >:(


Название: Re: библиотека NETWM для X11 систем
Отправлено: navrocky от Октябрь 05, 2010, 09:44
Отлично!

Цитировать
В Qt работа с NETWM до сих пор почему-то не выделена в общедоступный класс
NETWM - не кроссплатформенно.

Можешь кстати пойти дальше и сделать кроссплатформенно. В винде можно тоже много что узнать об окружающих окнах и если все это свести под один интерфейс то будет вообще хорошо.


Название: Re: библиотека NETWM для X11 систем
Отправлено: Alex Custov от Октябрь 05, 2010, 17:27
NETWM - не кроссплатформенно.

В Qt есть некроссплатформенные классы, например QX11EmbedContainer, можно же аналогично сделать.