Oбщее

Обработать завершение сессии в Linux

September 12th, 2011 Begemot

Пытаюсь тут портировать на линукс свой менеджер заметок написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит – logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то сделать можно – сохранить данные, корректно закрыть приложение, заповним положение\размеры окна и мелкие настройки. Под макосом не пробовал, но говорят работает. Под Линуксом нет – в инете полно вопросов, жалоб – но решения нет.

Пытался использовать средства gtk (или posix, или чье это там), типа

#include <stdio.h> // for File I/O #include <signal.h> // for signals #include <unistd.h> // for sleep() void handler(int sig) { /* Just print to stderr and redirect 2>> test.txt in the shell */ fprintf(stderr, "got %d\n", signal); signal(sig, handler); // let signal be caught again } int main() { signal(SIGTERM,handler); signal(SIGINT,handler); signal(SIGQUIT, handler); // Maybe we're getting QUIT first? signal(SIGHUP, handler); // If the terminal closes, we might get this signal(SIGPIPE, handler); // Don't know why we'd get this, but check anyway while(1) // loop forever with most signals trapped, impolitely waiting for a kill -9 ;)

// run }

Не фига, когда руками прибиваю приложение Ctrl+c в терминале или kill … срабатывает, когда вырубаю систему нет, сообщения не получаю. В инете все пишут тоже самое не работает.  Code::Blocks тоже не сохраняет данные, если что-то изменить и сделать logout.  

Получается линукс, или убунта, или гном не дает возможность приложению узнать что сессия завершается и корретно завершить работу, сохранив данные. Вот вам и Linux with a human face 🙁

Есть правда какой-то EggSMClient в виде сорцов, LGPL, его например использует GEdit и молодец, корректно обрабатывает все. Но что-то про EggSMClient ни упоминаний толком, ни документации – особенно ничего не находится, а так разобратся без бутылки не получается. Печально все это 🙁


Форматированный текст в контролах

March 7th, 2011 Begemot

Ура, приятная новость:  Markup in control labels. Меня эта возможность сильно порадовала в Qt когда я на нее перешел, теперь вот и в wxWidgets появляется что-то подобное, хотя конечно гораздо слабее чем в Qt, но все равно здорово. Правда не совсем понятно почему wxStaticText отстает от кнопки, но надеюсь сделают все хорошо в итоге:)


Qt vs wxWidgets личный опыт

February 28th, 2011 Begemot

Меня тут спросили, спросили – отвечаю. В кратце про Qt vs wxWidgets после некоторого опыта, очень в кратце.

 

Про Qt:

1. На Qt писать быстрее и проще (субьективно и смотря что)

2. Написанное под виндо в течении 3 месяцев запускается на макоси после часа работы.

3. Приложения не родные

4. Приложения здоровые.

 

Про wxWidgets:

1. Писать вполне нормально, хотя может и не так гладко как на Qt

2. Результат выглядит роднее

3. Бинарников по паре сотен килобайт не получается, но и не десятки метров как у Qt.

4. Запуск под макосом – требует гораздо большего количества нервов, времени и напильников.

 

Для этой программы я после 10 дней на вх, выбрал Qt (совсем его тогда не зная), и не пожалел. Для своих Clipdiary и Flashnote я все таки считаю что wx не плох, хотя следует признать что первая программа уже продается под МакОС, а вторая и третья только в далекой перспективе:)

В общем – как всегда для конкретной задачи, нужен конкретный инструмент.

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


Еще про локализацию

January 6th, 2011 Begemot

Сделали мне тут арабскую локализацию для двух программ. Понравилось как красиво wxWidgets все это обработала. Или это Винда?

Flashnote-ar

Flashnote-options-ar

clipdiary-ar

Ориганалы можно посмотреть тут и тут.

Правда прикольно?:)


wxLANGUAGE_ENGLISH != wxLANGUAGE_ENGLISH

September 3rd, 2010 Begemot

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

Прикрутил полгода назад локализацию, уже есть несколько языков – английский, русский, китайский и голландский. Выпускаю новую версию, получаю через день 5 писем. Мол “поставили новую версию, но интерфейс теперь на каком-то странном языке, наверное на голландском, чо делать?”.

Первым ответил что небось сами переключили случайно, потом понимаю что проблема есть, начинаю разбираться. Изучаю свой код ищу где мог ошибиться. Потом оказывается что идентификаторы языков в wxWidgets (wxLANGUAGE_ENGLISH etc) не константы, а просто enum. И недавно туда всунули новый Боснийский язык, причем не в конец, а середину как и положенно по алфовиту, в результате все что ниже его поплыло.

в результате wxLANGUAGE_ENGLISH, хранившиеся в конфиге, вместо 57го стал 58м, а 57м по стал голландский, который оказался у меня тоже. вот такая хрень.

Пока тупо написал workaround – читаю инфорамцию о языке по другому пути в конфиге, в результате у всех заново спросит какой язык они хотят. Но это лучше чем запустить и увидеть голландский.

Но это не решение проблемы, решения я пока особо не вижу, а вы? Как хранить в конфиге информацию о языке?


Как я изменил wxWidgets

April 13th, 2010 Begemot

Предложили мне тут портировать одну маленькую утилиту для автоматического выключения звука на Mac OS, я сказал что если возьмусь то только на c++\wxWidgets, зачем мне осваивать новый язык\библиотеку…

Лихо написал программу под винду и полез под макос, в надежде на быстрое портирование, обламался:)

Сначала долго пытался вообще заставить вх собираться и давать мне собрать примеры на маке, потом изучал cmake, потом перешел с carbon версии wxWidgets на более новую cocoa сборку…

В принципе, тут дело в том что у программы достаточно специфичные требования:

  1. Программа маленькая.
  2. Иконка в трее.
  3. Глобальная горячая клавиша.

Последнее вообще не поддерживается в вхВиджетс под маком, второе недавно появилось – но работает через 1 место, ну и размер…

В общем, потратив 4-5 дней, решил плюнуть и писать нативно. Небольшой проект – как раз можно потренироваться на нем. Подумалось что если я и дальше собираюсь писать для мака, даже на wxWidgets, знание родного языка\опыт работы с нативным фремворком будет только большим плюсом.

Objective-C имеет достаточно специфический синтаксис, но в принципе не сложен. Да и в целом писать под мак мне понравилось – такое впечатление что там это как-то гораздо больше продуманнее все.

В итоге написал, все работает, хотя подозреваю что не идеально. Вывод нативно писать под мак можно и это не страшно:)

Если кому интересно, посмотреть что получилось, можно тут.


Глава 15.4 Поддержка информации времени выполнения (Run-Time Type Information)

March 21st, 2010 Begemot

Как то эта глава далась мне особенно тяжко и во время перевода и во время вычитки, два раза я возвращался  к редактированию и все равно по моему все очень криво:( Единственное что глава вроде не сильно важная и не очень большая, так что думаю это не смертельно.

Read the rest of this entry »

Posted in Oбщее | Tags:
Comments Off on Глава 15.4 Поддержка информации времени выполнения (Run-Time Type Information)


маковское пессимистическое

March 19th, 2010 Begemot

чо-то я кажется сильно погорячился, когда думал о сроках портирования  на мак. Научился собирать и приступил непосредственно к написанию/портированию, и чем дальше тем меньше мне все это нравится…


wxDemo

February 22nd, 2010 Begemot

Если еще не видели  wxDemo, то есть смысл посмотреть, даже если wxWidgets знаете и используете, а если только присматриваетесь – то обязательно.  Для быстрого предварительного ознакомления самое- то.

В одном месте собраны не больше описания, скриншоты, сорцы, демки. Тут есть не очень очевидный фокус, что бы посмотреть демо, надо перейти на вкладку Source Code и посмотреть в верхний правый угол. В общем, если надо что-то быстро глянуть – то подходящая вещь, мне всегда в хелпе по вх не хватало скриншотов…

Вот только с версией не понятки, на сайте написано 2.8 поддерживает, а в самой программе в справке уже 2.9, но что-то я сумневаюсь..:)

Posted in Oбщее
Comments Off on wxDemo


Поддержи фреймворк!

February 9th, 2010 Begemot

Пишите шароварные или фриварные (но хорошие!) программы на wxWidgets, Qt или чем-нибудь еще? Тогда идите поддержите свой любимый фреймворк:)

Идти сюда

Posted in Oбщее
Comments Off on Поддержи фреймворк!