Usage: razor-poweror: razor-power --check ACTIONor: razor-power ACTIONThe first variant starts the GUI interface.The second variant checks is the action can be performed.The third variant executes the ACTION without the GUI.Actions:logout Close the current user session.hibernate Hibernate the computerreboot Reboot the computershutdown, halt Shutdown the computersuspend Suspend the computer
2) если программы будут регистрироваться в едином пространстве dbus разора для хоткеев, то можно просто передавать в виде ${program_name}.${action} (через точку). А отдельный метод будет преобразовывать это в валидный вызов.1) нормальнохм, не думал что все так печально. В принципе, мне нравится твоя идея для реализации.по поводу интерфейса и передаваемых параметров:
Не думаю что это сложно (хоть я и не программировал никогда с использованием dbus)
3) а в чем проблема с переводами? может я чего не понимаю?
Прошу прощения за долгое молчание, праздники, я в интернете набегами.
Это не стандартно, я сейчас подумал, что надо сделать синтаксис похожим на dbus-send.
Либо программа при регистрации записывает только один перевод для текущего языка, но тогда нельзя будет запустить "LANG=fr_FR hotkey-manager". Или программа должна передавать полный список переводов для всех языков, но это как-то бредов.
Прошу прощения за долгое молчание, праздники, я в интернете набегами.
Да все ок, та же картина :)
Это не стандартно, я сейчас подумал, что надо сделать синтаксис похожим на dbus-send.Ну да, нестандартно, но когда сообщение писал - тоже смотрел на dbus-sendВ принципе там то же самое что я сказал, но с тройным дублированием ветки куда слать событие, а так как она у нас одна, то я просто хотел упростить начальный синтаксис и генерить заключительный запрос отдельно.
Хотя да, тут лучше работать со стандартной схемой вызова dbus-send и не городить razor-specified костыли.
Либо программа при регистрации записывает только один перевод для текущего языка, но тогда нельзя будет запустить "LANG=fr_FR hotkey-manager". Или программа должна передавать полный список переводов для всех языков, но это как-то бредов.Да, бредово. Так что я за первый вариант реализации. Конечно, может быть несколько неудобно, но это скорее частный случай, чем постоянная практика. А как известно, на каждый частный случай воркэраунд не напишешь ;)
Итак мысли вслух (в общем-то почти всё это уже здесь звучало):Программа, которая желает использовать глобальные клавиши линкуется с библиотекой, которая есть суть прослойка на dbus. Кроме этого либа запускает демона, если тот еще не запущен (избавляет от необходимости запускать через сессию разора и не привязываемся к DE).
Демон регистрирует на себя горячие клавиши и при нажатии дергает метод интерфейса либы. Т.е. на каждую функцию (типа плэй или стоп для плэера) есть свой интерфейс на dbus`е.При регистрации хоткея прога передаёт демону: string hotkey, string callback_interface_name, string localised_description
При регистрации возможен вариант конфликта, когда хоткей уже используется. В этом случае демон запоминает этот запрос, но не будет его дергать (хотя как альтернатива - можно выполнять несколько действий параллельно по одному хоткею).
Кроме того демон даёт специальный интерфейс для просмотра и редактирования зарегистрированных хоткеев. Будет специальная UI прога для сего. Через неё можно будет:- посмотреть какие хоткеи к чему привязаны- поменять(!) хоткеи (в этом случае демон должен через dbus и либу известить зареганную прогу о смене хоткея, чтоб, например, та у себя в UI его отобразила и в настройках сохранила)- отменить хоткеи - по сути назначить <null>
- добавить кастомные хоткеи - которые будут просто делать запуск приложений (через эту плюшку можно также вызывать внешнюю dbus-send, а можно конечно вызов dbus методов оформить в демоне внутренне чтоб быстрее было).Пока вижу две проблемы:1. Есть клиент этой системы неожиданно падает - демон должен об этом узнать. Насколько я помню, для этого клиент должен зарегать dbus сервис, тогда dbus пошлет всем (и демону тоже) сигнал disconnected.
2. Возможен конфликт с другими программами, которые не пользуются этой системой.P.S. писать dbus интерфейс на чистом C или C++ дело, увы, муторное и запутанное. Qt в качестве прослойки рулит.
В целом правильно, но есть несколько замечаний.
вторник, 8 января 2013 г., 12:02:43 UTC+4 пользователь Kuzma Shapran написал:Итак мысли вслух (в общем-то почти всё это уже здесь звучало):Программа, которая желает использовать глобальные клавиши линкуется с библиотекой, которая есть суть прослойка на dbus. Кроме этого либа запускает демона, если тот еще не запущен (избавляет от необходимости запускать через сессию разора и не привязываемся к DE).Нет, отдельный сервер нужен, и придется запускать его при старте. Ведь кроме биндинга dbus есть еще "хоткеи - которые будут просто делать запуск приложений", возможна ситуация что я настроил хоткей на запуск калькулятора, других хоткеев нет. Тогда после рестарта, сервер не будет запущен, и мой хоткей не обработается.
Демон регистрирует на себя горячие клавиши и при нажатии дергает метод интерфейса либы. Т.е. на каждую функцию (типа плэй или стоп для плэера) есть свой интерфейс на dbus`е.При регистрации хоткея прога передаёт демону: string hotkey, string callback_interface_name, string localised_descriptionДва описания, одно на инглише, второе локализованное. Причем первое поле обязательное, второе может быть пустым. Это некоторая защита от криворуких программистов, которые тупо забьют текст на своем языке.
При регистрации возможен вариант конфликта, когда хоткей уже используется. В этом случае демон запоминает этот запрос, но не будет его дергать (хотя как альтернатива - можно выполнять несколько действий параллельно по одному хоткею).Надо подумать, есть несколько вариантов (во всех примерах программа А уже зарегистрировала хоткей, теперь программа Б пытается его перерегистрировать)
- Хоткей вешается на Б, после закрытия Б, восстанавливается привязка к А. Так сейчас работают хоткеи в Х-ах. Наверное это предпочтительный вариант, по крайней мере поведение привычное.
- Хоткей остается на А, после закрытия А, устанавливается привязка к Б.
- Тупо возвращаем false, и пусть программа сама разбирается. Мне этот вариант не нравиться - возникает куча вопросов:
- А если приложению, вот по зарез, нужно перерегистрировать хоткей. Что добавлять параметр "force"?
- Как приложение Б узнает, что А закрылось и можно по новой регистрировать хоткей?
- Параллельная работа, IMHO это странное поведение, и вызовет кучу не очевидных вопросов.
В общем мне нравиться первый вариант - он наиболее логичен.
Кроме того демон даёт специальный интерфейс для просмотра и редактирования зарегистрированных хоткеев. Будет специальная UI прога для сего. Через неё можно будет:- посмотреть какие хоткеи к чему привязаны- поменять(!) хоткеи (в этом случае демон должен через dbus и либу известить зареганную прогу о смене хоткея, чтоб, например, та у себя в UI его отобразила и в настройках сохранила)- отменить хоткеи - по сути назначить <null>Для отмены лучше сделать отдельные функции.
- добавить кастомные хоткеи - которые будут просто делать запуск приложений (через эту плюшку можно также вызывать внешнюю dbus-send, а можно конечно вызов dbus методов оформить в демоне внутренне чтоб быстрее было).Пока вижу две проблемы:1. Есть клиент этой системы неожиданно падает - демон должен об этом узнать. Насколько я помню, для этого клиент должен зарегать dbus сервис, тогда dbus пошлет всем (и демону тоже) сигнал disconnected.Если клиент " неожиданно падает", то он не может ничего послать. Я думаю можно проверять наличие ветки которую зарегистрировали
- При нажатии клавиши
- При запросе "а зарегистрирована ли такая клавиша"
- При запросе списка всех хоткеев.
2. Возможен конфликт с другими программами, которые не пользуются этой системой.P.S. писать dbus интерфейс на чистом C или C++ дело, увы, муторное и запутанное. Qt в качестве прослойки рулит.На Qt конечно удобнее, но судя по этому -http://www.matthew.ath.cx/misc/dbus и на сях не безумно сложно. Как ты думаешь, куда нас пошлют гномовцы если мы им предложим использовать сервер на Qt? А вся фишка от этого будет если сделать это стандартом.В качестве прототипа Qt подходит, но потом придется переписывать без тулкита.
On Wednesday, 9 January 2013 22:19:43 UTC+13, Александр Соколов wrote:В целом правильно, но есть несколько замечаний.
вторник, 8 января 2013 г., 12:02:43 UTC+4 пользователь Kuzma Shapran написал:Итак мысли вслух (в общем-то почти всё это уже здесь звучало):Программа, которая желает использовать глобальные клавиши линкуется с библиотекой, которая есть суть прослойка на dbus. Кроме этого либа запускает демона, если тот еще не запущен (избавляет от необходимости запускать через сессию разора и не привязываемся к DE).Нет, отдельный сервер нужен, и придется запускать его при старте. Ведь кроме биндинга dbus есть еще "хоткеи - которые будут просто делать запуск приложений", возможна ситуация что я настроил хоткей на запуск калькулятора, других хоткеев нет. Тогда после рестарта, сервер не будет запущен, и мой хоткей не обработается.Точно! Как-то упустил такой сценарий.Демон регистрирует на себя горячие клавиши и при нажатии дергает метод интерфейса либы. Т.е. на каждую функцию (типа плэй или стоп для плэера) есть свой интерфейс на dbus`е.При регистрации хоткея прога передаёт демону: string hotkey, string callback_interface_name, string localised_descriptionДва описания, одно на инглише, второе локализованное. Причем первое поле обязательное, второе может быть пустым. Это некоторая защита от криворуких программистов, которые тупо забьют текст на своем языке.Я всё же это вижу как registerHotkey(playback_hotkey, playback_hotkey_interface, tr("playback")); Т.е. требования такие же как к локализации интерфейса.А от паталогической криворукости абсолютной защиты, увы, не бывает.
При регистрации возможен вариант конфликта, когда хоткей уже используется. В этом случае демон запоминает этот запрос, но не будет его дергать (хотя как альтернатива - можно выполнять несколько действий параллельно по одному хоткею).
Надо подумать, есть несколько вариантов (во всех примерах программа А уже зарегистрировала хоткей, теперь программа Б пытается его перерегистрировать)Так как это центраизовано через демон - то он просто дернёт несколько клиентов - в моём экспериментальном прототипе вызов нескольких клиентов через dBus уже работает.
- Хоткей вешается на Б, после закрытия Б, восстанавливается привязка к А. Так сейчас работают хоткеи в Х-ах. Наверное это предпочтительный вариант, по крайней мере поведение привычное.
- Хоткей остается на А, после закрытия А, устанавливается привязка к Б.
- Тупо возвращаем false, и пусть программа сама разбирается. Мне этот вариант не нравиться - возникает куча вопросов:
- А если приложению, вот по зарез, нужно перерегистрировать хоткей. Что добавлять параметр "force"?
- Как приложение Б узнает, что А закрылось и можно по новой регистрировать хоткей?
- Параллельная работа, IMHO это странное поведение, и вызовет кучу не очевидных вопросов.
В общем мне нравиться первый вариант - он наиболее логичен.М-да... тут возможен разброд и шатания. Ибо я пока склонен к варианту 4.
Кроме того демон даёт специальный интерфейс для просмотра и редактирования зарегистрированных хоткеев. Будет специальная UI прога для сего. Через неё можно будет:- посмотреть какие хоткеи к чему привязаны- поменять(!) хоткеи (в этом случае демон должен через dbus и либу известить зареганную прогу о смене хоткея, чтоб, например, та у себя в UI его отобразила и в настройках сохранила)- отменить хоткеи - по сути назначить <null>Для отмены лучше сделать отдельные функции.Не проблема.- добавить кастомные хоткеи - которые будут просто делать запуск приложений (через эту плюшку можно также вызывать внешнюю dbus-send, а можно конечно вызов dbus методов оформить в демоне внутренне чтоб быстрее было).Пока вижу две проблемы:1. Есть клиент этой системы неожиданно падает - демон должен об этом узнать. Насколько я помню, для этого клиент должен зарегать dbus сервис, тогда dbus пошлет всем (и демону тоже) сигнал disconnected.Если клиент " неожиданно падает", то он не может ничего послать. Я думаю можно проверять наличие ветки которую зарегистрировалиОбнаружение падения клиента уже тоже работает.
- При нажатии клавиши
- При запросе "а зарегистрирована ли такая клавиша"
- При запросе списка всех хоткеев.
2. Возможен конфликт с другими программами, которые не пользуются этой системой.P.S. писать dbus интерфейс на чистом C или C++ дело, увы, муторное и запутанное. Qt в качестве прослойки рулит.На Qt конечно удобнее, но судя по этому -http://www.matthew.ath.cx/misc/dbus и на сях не безумно сложно. Как ты думаешь, куда нас пошлют гномовцы если мы им предложим использовать сервер на Qt? А вся фишка от этого будет если сделать это стандартом.В качестве прототипа Qt подходит, но потом придется переписывать без тулкита.Согласен. Отработать алгоритм на Qt, потом портировать на чистый C (не С++) - чтоб и гномовцы радовались.
9 января 2013 г., 14:31 пользователь Kuzma Shapran <leaf.o...@gmail.com> написал:
On Wednesday, 9 January 2013 22:19:43 UTC+13, Александр Соколов wrote:В целом правильно, но есть несколько замечаний.
вторник, 8 января 2013 г., 12:02:43 UTC+4 пользователь Kuzma Shapran написал:Итак мысли вслух (в общем-то почти всё это уже здесь звучало):Программа, которая желает использовать глобальные клавиши линкуется с библиотекой, которая есть суть прослойка на dbus. Кроме этого либа запускает демона, если тот еще не запущен (избавляет от необходимости запускать через сессию разора и не привязываемся к DE).Нет, отдельный сервер нужен, и придется запускать его при старте. Ведь кроме биндинга dbus есть еще "хоткеи - которые будут просто делать запуск приложений", возможна ситуация что я настроил хоткей на запуск калькулятора, других хоткеев нет. Тогда после рестарта, сервер не будет запущен, и мой хоткей не обработается.Точно! Как-то упустил такой сценарий.Демон регистрирует на себя горячие клавиши и при нажатии дергает метод интерфейса либы. Т.е. на каждую функцию (типа плэй или стоп для плэера) есть свой интерфейс на dbus`е.При регистрации хоткея прога передаёт демону: string hotkey, string callback_interface_name, string localised_descriptionДва описания, одно на инглише, второе локализованное. Причем первое поле обязательное, второе может быть пустым. Это некоторая защита от криворуких программистов, которые тупо забьют текст на своем языке.Я всё же это вижу как registerHotkey(playback_hotkey, playback_hotkey_interface, tr("playback")); Т.е. требования такие же как к локализации интерфейса.А от паталогической криворукости абсолютной защиты, увы, не бывает.Я плясал от desktop файла там пары Name и Name[ru], Description и Description[ru]. Там правда переводов может быть множество. Ладно, это не самое главное, добавить еще один параметр, и хранить его принципиально ничего не меняет. Вот с логикой перекрытия другое дело (см следующий пункт).
При регистрации возможен вариант конфликта, когда хоткей уже используется. В этом случае демон запоминает этот запрос, но не будет его дергать (хотя как альтернатива - можно выполнять несколько действий параллельно по одному хоткею).
Надо подумать, есть несколько вариантов (во всех примерах программа А уже зарегистрировала хоткей, теперь программа Б пытается его перерегистрировать)Так как это центраизовано через демон - то он просто дернёт несколько клиентов - в моём экспериментальном прототипе вызов нескольких клиентов через dBus уже работает.
- Хоткей вешается на Б, после закрытия Б, восстанавливается привязка к А. Так сейчас работают хоткеи в Х-ах. Наверное это предпочтительный вариант, по крайней мере поведение привычное.
- Хоткей остается на А, после закрытия А, устанавливается привязка к Б.
- Тупо возвращаем false, и пусть программа сама разбирается. Мне этот вариант не нравиться - возникает куча вопросов:
- А если приложению, вот по зарез, нужно перерегистрировать хоткей. Что добавлять параметр "force"?
- Как приложение Б узнает, что А закрылось и можно по новой регистрировать хоткей?
- Параллельная работа, IMHO это странное поведение, и вызовет кучу не очевидных вопросов.
В общем мне нравиться первый вариант - он наиболее логичен.М-да... тут возможен разброд и шатания. Ибо я пока склонен к варианту 4.Не знаю, не знаю. А если не нужно параллельное выполнение? Как будет это выглядеть, программа Б будет разрегистрировать А, а потом прописывать себя? А обратно кто будет вешать? И как это будет выглядеть в менеджере?С другой стороны и в 1-ом варианте есть проблемы. Вот я ручками настроил хоткей, и запустил программу Б, а у нее по дефолту используется этот хоткей, и что мои настройки по боку? А во 2-ом обратная проблема, если работает Б, то как мне перерегистрировать хоткей из менеджера?
Возможно нужны 2 уровня настроек, ручные и автоматические. Давай подумаем.Кроме того демон даёт специальный интерфейс для просмотра и редактирования зарегистрированных хоткеев. Будет специальная UI прога для сего. Через неё можно будет:- посмотреть какие хоткеи к чему привязаны- поменять(!) хоткеи (в этом случае демон должен через dbus и либу известить зареганную прогу о смене хоткея, чтоб, например, та у себя в UI его отобразила и в настройках сохранила)- отменить хоткеи - по сути назначить <null>Для отмены лучше сделать отдельные функции.Не проблема.- добавить кастомные хоткеи - которые будут просто делать запуск приложений (через эту плюшку можно также вызывать внешнюю dbus-send, а можно конечно вызов dbus методов оформить в демоне внутренне чтоб быстрее было).Пока вижу две проблемы:1. Есть клиент этой системы неожиданно падает - демон должен об этом узнать. Насколько я помню, для этого клиент должен зарегать dbus сервис, тогда dbus пошлет всем (и демону тоже) сигнал disconnected.Если клиент " неожиданно падает", то он не может ничего послать. Я думаю можно проверять наличие ветки которую зарегистрировалиОбнаружение падения клиента уже тоже работает.
- При нажатии клавиши
- При запросе "а зарегистрирована ли такая клавиша"
- При запросе списка всех хоткеев.
2. Возможен конфликт с другими программами, которые не пользуются этой системой.P.S. писать dbus интерфейс на чистом C или C++ дело, увы, муторное и запутанное. Qt в качестве прослойки рулит.На Qt конечно удобнее, но судя по этому -http://www.matthew.ath.cx/misc/dbus и на сях не безумно сложно. Как ты думаешь, куда нас пошлют гномовцы если мы им предложим использовать сервер на Qt? А вся фишка от этого будет если сделать это стандартом.В качестве прототипа Qt подходит, но потом придется переписывать без тулкита.Согласен. Отработать алгоритм на Qt, потом портировать на чистый C (не С++) - чтоб и гномовцы радовались.Гномовцам в принцепе по барабану, по сути для клиентов АПИ это dbus интерфейс. А если и писать биндинг для клиента, то это так, фишка для удобства не более.Т.е. в идеале есть стандарт на dbus интерфейс и эталонный сервер, без привязки к тулкитам и клиент дергающий dbus. Нно при желании можно использовать любой сервер, и приложение на любом тулките, главное чтоб их поведение совпадало со стандартом.
--
Best regards,
Alexander.
> ...
>
> продолжение >>
Что-то как-то сильно хиитро...
И вот это вот "пользователь офигевает" не нравится.
Не надо пользователю офигевать
On 10 янв, 14:51, Александр Соколов <sokolof...@gmail.com> wrote:
> Я то же считаю, что алгоритм работы должен быть прзрачным и очевидным.
> Ты какой алгоритм предлагаешь?
>
> 10 января 2013 г., 7:47 пользователь TI_Eugene <ti.eug...@gmail.com>написал:
Если речь о _глобальных_ хоткеях - то надо просто запрещать приложению
назначать занятый хоткей.
Ну и видеть список занятых хоткеев.
Дальше юзверь пусть сам разруливает - или в текущем прилоожении
(которое заняло откей) - или в новом.
--
Вы получили это сообщение, поскольку подписаны на группу Razor-qt ru.
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес razor-qt-ru...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.