LINUX.ORG.RU

Как устроен таскбар в линуксе?

 , , ,


1

2

Хочу сделать простейший таскбар для жну-линукс. Скорей всего, там три строчки, но откуда их получить?

Погуглил по словам «gnu linux how to create taskbar C++», ничего не нашлось

Тут же многие упарываются по фрическим UI в галлере, сидят на иксмонадах, может уже есть что-то подобное?

(Только не советуйте смотреть KDE или что-то подобное, пожалуйста. Открыл, ужаснулся, закрыл - это так же далеко от голого C++, как Гейц от Столлмана)

Есть также два основных вопроса по теме.

1) Очевидно, есть «окна приложений», и «окна вообще». По крайней мере, так в венде. На таскбаре должны быть только «полноценные окна», а не все подряд. Плюс, для каждого окна надо откуда-то выудить иконку. Для этого есть какие-нибудь сишные консольные утилиты, чтобы решить вопрос тру UNIX WAY? Типа вызвать FindWindow, получить массив HWND, и потом посылать им WM_SHOWWINDOW по клику, ну вы понели

2) Можно ли такое написать кроссплатформенно? Чтобы write once, run anywhere. Т.е. чтобы не было прибито костылями к X11, но запустилось такжэ на Mir, Wayland/Weston, итп (нет, я совершенно не понимаю, о чём говорю. Пока это всё темный лес). Чтобы работало и в KDE, и в Gnome

Зачем: хочу добавить таскбар в текстовый редактор. Не спрашивайте, зачем.

★★★★☆

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

хочу добавить таскбар в текстовый редактор.

Открой для себя имакс.

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

Не будем вскрывать эту тему!

Да, если оберну в либу, в емакс тоже можно будет воткнуть (наверное)

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)

Чтобы работало и в KDE, и в Gnome

Посмотри в сторону библиотек этих DE. Наверняка там есть какая обостракция вокруг X11 и Wayland. Пусть даже в приватном API, просто выдерни код из библиотеки. Ну сам знаешь понимаешь, ты не глупый.

Если нет, то придётся только раскуривать документацию X11 и Wayland.

(Только не советуйте смотреть KDE или что-то подобное, пожалуйста. Открыл, ужаснулся, закрыл - это так же далеко от голого C++, как Гейц от Столлмана)

А что там не от С++? O_o

Ну да ладно, не хочешь — как хочешь.

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

Стиви, а сколько завершённых программных продуктов ты успел создать за свою жизнь?

Harald ★★★★★
()

Только не советуйте смотреть KDE или что-то подобное, пожалуйста. Открыл, ужаснулся, закрыл - это так же далеко от голого C++, как Гейц от Столлмана

Ну так на голом C++ ты UI и не напишешь. Нужен какой-то тулкит, ну либо свой делать. В свете п. 2 очевидно лучше взять один из существующих.

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

мой тулкит - это Java и Swing. Всё уже написано. Но их тут не любят, поэтому я не хотел вскрывать эту тему.

задача то выглдяит очень простой. Шаг раз: в цикле получаем массив приложений и их главных окон, отображаем их. Шаг 2: пользователь так или иначе выбирает сначала приложение, потом окно из списка, и команду, которую хочет ввести. Шаг 3: мы посылаем окну с выбранным id нужное сообщение.

если бы функция получения списка приложений гуглилось за секунду (как большинство других вопросов в жизни), это не стоило бы даже написания топика на лор. Но оно не гуглится!

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

я с линкедина выпилился после его покупки майкрософтом

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

обостракция

Ой какое точное определение для некоторых «мета»-велосипедов!

вокруг X11 и Wayland

Ну насколько я понимаю, актуальные версии QtGui и GTK и являются такими «обостракциями». Я бы вообще взял недрожащей рукой Qt и не парился. Но я своё мнение не навязываю, это один из моих основных рабочих инструментов — возможно, ТС хочет что-то попроще, а я его плохому научу. :)

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

гуглилось за секунду (как большинство других вопросов в жизни)

Э... Может быть с жизнью что-то не так, если на большинство вопросов из нее ответ гуглится за секунду?

И, как следствие, такая вот херня в башке: то C++ не тот, то новая лицензия для кода...

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

расскажи, как это выглядит на Qt?

(просто я не хочу изучать Qt ради получения 1 простого системного вызова со списком окон, блин! Но если можно это накодить копипастингом, не понимая Qt, это подойдёт)

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)

Ты для этого проекта лицензию придумывал?

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

Половина задачи зделана.

Это гениально, спасибо!

Они зовут https://linux.die.net/man/3/xgetwindowproperty из Xlib с параметром _NET_CLIENT_LIST, и потом парсят

Правда, пока непонятно, как отличаются «полноценные» окна от «неполноценных». Это разделение вообще присутствует в популярных менеджерах? Шота я засомневался

Задача наполовину решена. Теперь ещё бы разобраться с Wayland.

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

на вейленде это заработает ли? в xwayland например есть функция xgetwindowproperty, а в просто wayland нет... наверное надо приходить к ним на форум (какой?) и мучить вопросами

stevejobs ★★★★☆
() автор топика
Ответ на: Половина задачи зделана. от stevejobs

Насчёт Wayland не уверен — там же всё добро должно быть встроено в композитор, ЕМНИП.

Ещё можно потыкать XCB — её часто рекомендуют использовать вместо Xlib.

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

мой тулкит - это Java и Swing. Всё уже написано. Но их тут не любят, поэтому я не хотел вскрывать эту тему.

Ну если ты хочешь сделать десктоп полностью из идеально подогнанных друг к другу программ на Java, то это - вполне рациональное решение. Но подозреваю, что в данном случае это не так.

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

Да нет, я Qt упоминал не в части получения списка окон, а в части того, как ты всё это выводить будешь. :)

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

Сейчас может и нет, но взялись за него крепко - значит будут. В Debian 10 вроде по дефолту пойдет

anonymous
()

Всё это очень сильно специфично для оконной системы. Обязательно писать отдельную реализацию для X11, для Wayland и для Mir. Правда, последний вроде как закопали, так что уже можно забить.

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

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

Без нативок не обойдёшься. Swing не умеет получать список окон - я тебе это гарантирую. Кстати, нынче ж модно JavaFX...

KivApple ★★★★★
()
Ответ на: Половина задачи зделана. от stevejobs

Там вроде как у окон есть разные классы (WM_CLASS или как-то так). Соответственно, у тех окон, что на панели задачать показывать не надо, класс отличается от тех, что надо. Наиболее примитивные WM могут наплевать на этот флаг, нормальные учитывают.

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

Я так-то этим не особо интересуюсь(одна бабка сказала, да), поэтому в деталях не силён. Имел ввиду что заложиться на перспективу стоит, чтобы костылей потом меньше было

anonymous
()

Типа вызвать FindWindow, получить массив HWND, и потом посылать им WM_SHOWWINDOW по

Выдыхай.

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

Правда, прибито к иксам.

Вознамерились поломать стандарт - надо страдать.

hobbit ★★★★★
()

Т.е. чтобы не было прибито костылями к X11, но запустилось такжэ на Mir, Wayland/Weston

Здрасьте, в любом случае к чему-то будет прибито. Т.е. тебе надо сделать три таскбара с общим оформлением, или заюзать какую-нить готовую либу (из КДЕ например, т.е. ожидай чего-то монструозного) где уже это за тебя таскбар сделали и осталось только сделать рбшечку и назвать своим

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

Ищи X11 клиент под йаву и перебирай окна. Про мир и вяленый забудь, так как тогда тибе придется на йаве написать еще и свой композитор :)

annulen ★★★★★
()

Зачем: хочу добавить таскбар в текстовый редактор. Не спрашивайте, зачем.

Это всё тот же редактор, в который ты то спелчекер, то атомный реактор прокручиваешь? Сейчас еще и таскбар.

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

Всё же намекну, что базовыми являются фундаментальные исследования MS&Apple(OSX) в районе Шин2000/7 & OSX10.5.

Не знаю что там у тебя за таскбар в голове созревает, но... смотри не навелосипедь очередной Док с огнём и анимациями. Был такой GLDock, пиктограммы горели, вертелись, а основное предназначение никак не выполнялось %-)

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

На самом деле основная часть программы будет в этих отдельных реализациях для каждой платформы, а общая доля будет очень мала.

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

Правда если самому менеджер окон писать, на самом деле это вызывает целую спецолимпиаду плясок с бубном.

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

Пока не прикручиваю, а раздумываю. Да, хотелось бы оформить его в виде DE: после логина открывается IntelliJ IDEA на весь экран эксклюзивно без возможности закрыть, и дальше совершенно вся работа с линуксом идёт через неё. Например, встроенный в IDEA терминал имеется, то есть даже мелкие бытовые функции можно будет делать там.

НО нужно будет перенести все функции минималистичного DE. Пока что надо просто оценить возможность такого решения, и если это возможно - все улучшения делать, держа это в уме.

Например, делаешь ты нотификации. Можно юзать стандартные средства DE, можно стандартными средствами Идеи тремя способами (панель messages, панель errors/warnings и кидать туда exception, всплывающие облачка). Можно зафигачить свои - вывести на любую панельку внутри Идеи. Если Идея запущена как DE, больше нельзя расчитывать на вывод нотификаций средствами DE, нужно придумывать как их вывести самостоятельно.

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

Ну я и имел в виду примерно это, только чтобы не пердолиться лучше все-таки готовую обертку взять

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

Хотя может и нативный х-клиент под йаву есть, было бы прикольно

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

так IntelliJ IDEA и есть современный имакс. Можно у неё ln -s /usr/bin/idea /usr/bin/emacs, и никто не заметит, инфа соточка

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

так IntelliJ IDEA и есть современный имакс.

Хороший тамада.

Можно у неё ln -s /usr/bin/idea /usr/bin/emacs, и никто не заметит, инфа соточка

И конкурсы интересные.

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

Хороший тамада.

Как массовик-затейник Стиви бесподобен. И статьи на Хабре про Java-конференции у него отличные получаются. Но вот как дело доходит до собственно программирования... Начинает казаться, что то, что он делает руками — все очень плохо :)

eao197 ★★★★★
()

http://glx-dock.org/
Стиви, я вообще по теме ссылку кидаю?
Там перечислены какие-то стандарты на десктопчик.

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