2014-12-21 1 views
0

Я конвертирую этот тест для заставки из кода linux в js-ctypes.Функции перечисления меню в X11?

Он сильно использует X11, но я не могу найти никаких функций меню.

Это код, который я пытаюсь конвертировать:

1012  XMenuList::GetInstance()->InsertMenuWindowXIDs(&windows); 
1013  // Enumerate the menus first. 
1014  for (iter = windows.begin(); iter != windows.end(); iter++) { 
1015  if (delegate->ShouldStopIterating(*iter)) 
1016   return true; 
1017  } 
1018  windows.clear(); 

этот код здесь: http://mxr.mozilla.org/chromium/source/src/ui/base/x/x11_util.cc#1012

В основном им пытаются перечислить через окно, но они проверяют меню тоже при поиске заставки.

Я наткнулся на эту записку:

X11, само по себе не делает меню. Вот почему были созданы инструментальные средства, такие как GTK, Qt, Motif и т. Д.

http://www.linuxquestions.org/questions/programming-9/x11-menus-how-to-839904/

ли это означает, что я должен ctypes.open другую библиотеку, другой тогда X11, кто-нибудь знает, какой из них? Я не могу найти.

Благодаря

Это мой код выполняется: https://github.com/Noitidart/_scratchpad/blob/master/ScreensaverWindowExists.js#L365

Это страница freedocs им с помощью для x11 функций: http://www.xfree86.org/4.4.0/manindex3.html

+1

Непонятно, какие меню вы имеете в виду. X11 не имеет понятия меню, как правильно говорится в примечании, которое вы цитируете. Инструментарий может помочь * вашей программе * реализовать меню, он не вводит меню на X-сервер, и не может помочь вам обнаруживать меню, реализованные другими программами. Что значит «перечислять меню в X11»? –

+1

ОК, если вы посмотрите [здесь] (http://mxr.mozilla.org/chromium/source/src/ui/base/x/x11_menu_list.h#39), вы можете увидеть, что меню для Mozilla - это просто которое имеет свойство '_NET_WM_WINDOW_TYPE', заданное' _NET_WM_WINDOW_TYPE_MENU'. Это меню «оторвано» от основного приложения и закреплено на рабочем столе. Вам не нужна специальная библиотека, чтобы обнаружить это, просто используйте обычные функции манипуляции свойствами. Я не совсем понимаю, почему это потребует скринсейвер. –

+0

Спасибо @ н.м. !! другие, если вы знаете, почему google chrome делает код выше «enum menus 1st» plz, дайте мне знать :) – Noitidart

ответ

2

Если вы посмотрите на исходный код here, вы можете увидеть, что меню, для Mozilla, это просто окно, которое имеет _NET_WM_WINDOW_TYPE свойство, установленное на _NET_WM_WINDOW_TYPE_MENU.

Стандарт рабочего стола гласит, что такие окна представляют собой меню, которые «оторваны» от главного окна приложения и прикреплены к рабочему столу. Вам не нужна специальная библиотека, чтобы обнаружить это, просто используйте обычные функции манипуляции свойствами.

Я не совсем понимаю, почему это потребует скринсейвер.

+0

Спасибо огромное! – Noitidart