LINUX.ORG.RU

Окно, требующее внимания

 , , ,


0

2

Здравствуйте! Я решил расширить функционал апплета Launcher на своей панели, чтобы это была не просто иконка, которая запускает то, что прописано в ключе Exec в Desktop Entry, а чтобы она была чуточку умнее и показывала, если приложение открыто (подобно Dock в Mac OS X). Но тут же возник вопрос, как понять, что окно попросило внимания? В Qt, например, есть такой метод QApplication::alert (да и во всех других тулкитах есть подобное). На Mac OS X программа, которая требует внимания, подпрыгивает в доке (но не как при открытии, а посильнее). на винде в таскбаре окно моргает желтым цветом. Собственно, вопрос - как получить этот сигнал, что окно попросило обратить на себя внимание? Никакого подобного сигнала в классах KWindowSystem и KX11Extras я не нашел. Заранее спасибо


Ну вот, ИИ развился окончательно. Я его спрашиваю «How to use QApplication::alert to informate user that application demands attention», а он мне отвечает «Review Documentation: Keep up with Qt documentation and community forums for any updates or known issues related to QApplication::alert».

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

ахахах +1 к тому, что все эти ‘ИИ заменят программистов’ - полный бред (уж даже не говоря о том, какой бред они выдают, если что-то начинают сами писать)

только вот дело тут в том, что QApplication::alert был просто как пример реализации обращения внимания со стороны приложения, а меня интересует вопрос со стороны панели

thm
() автор топика
Последнее исправление: thm (всего исправлений: 2)

по WID окна посмотреть его NET_WM_STATE_чтототут

если оно хочет внимания то должно иметь _NET_WM_STATE_MODAL например, почитай там описания, я забыл уже что к чему.

Но это не точно, может есть какой иной механизм.

Сделай так чтобы окно требовало внимание, запусти xprop и тыкни в него мышкой, будут показаны свойства окна и его ресурсы, сравни с обычным окном и выяви разницу. А затем детектить эту разницу и отображать мигалку на панели (ну или типа того) хотя может есть специальный сигнал какой именно для панелей, панели же кажется определены в иксах как самостоятельная сущность.

Я в этом не особо разбираюсь, лишь методом тыка кхм тыкал когда Свистопердулька для вашего ПеКа писал.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4)
Ответ на: комментарий от LINUX-ORG-RU

ну, собственно, попробовал. нашел. спасибо

< _NET_WM_STATE(ATOM) = 
---
> _NET_WM_STATE(ATOM) = _NET_WM_STATE_DEMANDS_ATTENTION
thm
() автор топика
Последнее исправление: thm (всего исправлений: 3)
Ответ на: комментарий от LINUX-ORG-RU

Так называемый «EWMH», на который ты дал ссылку, это фридесктопная нашлёпка от авторов не осиливших иксы.

А есть нативная иксовая штука для этого https://www.tronche.com/gui/x/icccm/sec-4.html Свойство окна WM_HINTS, в нём бит UrgencyHint в поле flags. По мне так предпочтительнее реализовывать именно её.

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

Суть не в EWMH, а в просто описании атомов которые можно установить окнам, дал первое попавшееся. Что-то можно делать через хинты, что-то через атомы окна. Опять же я глубоко не копал.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от firkax

от авторов не осиливших иксы

а чем EWMH плох-то? это стандарт, которого придерживаются все оконные менеджеры, значит можно просто рассчитывать на то, что это работает. Зачем морочить себе голову вырвиглазным кодом, где будет осуществляться работа напрямую с X Lib, если можно написать гораздо проще? Это и улучшает читаемость кода, и позволяет абстрагироваться от тонны ненужных строк кода, что, в свою очередь, помогает скоцентрироваться реально на том, чем надо и не наделать кучу ошибок

прочитать весь вот этот Xlib programming manual на 500+ страниц и работать напрямую с X - это, конечно, круто. Только вот зачем, когда есть способ гораздо проще и ничем не уступающий?

thm
() автор топика
Последнее исправление: thm (всего исправлений: 1)
Ответ на: комментарий от thm

EWMH тоже через Xlib делается. WM_HINTS такой же атом (читается/меняется ровно тем же кодом) как и эти _NET_WM, но более универсальный т.к. он почти часть иксовой спецификации.

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

Сам ты deprecated. Это единственный графический сервер для линукса который релизнулся и не идиотский (из тех что работают на современных системах).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)