Новая модель ядра

Kernel architecture questions
  • Я восстановил код закомментированный в r. 2414. Этот код вводился еще в ревизиях 1466 и 1513. Без него приложения активно обрабатывающие мышь при перетаскивании окна или изменении размеров окна могут менять положение собственного курсора многократно. Как пример можно посмотреть на реакцию KFM и OpenDialog с этим кодом и без него. Если координаты курсора мыши попадают в "активную зону" приложения, то начинаются чудесатые чудеса. Это именно обработка предотвращающая некорректное поведение активного окна. Не нужно убирать этот код!
  • Mario
    А теперь запусти плеер попробуй закрыть окно.
    Если KFM неправильно мышь обрабатывает, чем другие программы виноваты ?
  • А может это плеер не совсем правильно обрабатывает кнопки? Все остальные программы ведь закрываются. Ни у кого больше проблемы с закрытием нет. по крайне мере никто за прошедшее время не написал жалоб.
  • Mario
    Плеер как раз правильно обрабатывает кнопки. Только это не системные кнопки. И поскольку ты закомментировал код он теперь не получает сообщений при клике в области заголовка.
    Запускаю KFM, кликаю на пиктограме в меню и не отпуская кнопки веду курсор вниз. Кликаю на зелёной кнопке "Help" и не отпуская кнопки ведут курсор вверх. И причем здесь заголовок ?
  • Вообще то он не получает события мыши если удерживать кнопку. А когда отпускается кнопка то события продолжают поступать. Ситуация неоднозначная. Если бы проблема была только в KFM, то я бы не парился. Однако код компонента FileBrowser унаследовал код KFM.
  • Mario
    Надо проверять область, где нажата кнопка и ставить флаг, если это список. И снимать флаг когда кнопка отпущена.
  • У меня есть мысль. Если новый флаг маски событий, который ты ввел недавно, используется для плеера, то можно учитывать его наличие и игнорировать мою коррекцию.
  • Mario
    Я сделаю окно со стилем 5. Специально для окон, которые всю работу по перемещению и изменению размеров делают сами.
  • get_event_for_app работает для всех окон. Я не понимаю как ты собираешься это обходить? В моей идее все просто - проверяю установлен ли бит 31, если да то код:

    Code: Select all

            push    eax
    ; If the window is captured and moved by the user, then no mouse events!!!
            mov     al, [mouse.active_sys_window.action]
            and     al, WINDOW_MOVE_AND_RESIZE_FLAGS
            test    al, al
            pop     eax
            jnz     .loop
    не будет выполнятся. Всего то делов! Зачем городить огород с новым типом?
  • Mario
    Плеер сам изменят размер окна, без участия ядра. Но ядро обрабатывает все события в заголовке, причём положение заголовка определяется ядром. Я не могу разместить его сбоку. Если я в плеере кликаю на кнопке в заголовке и двигаю мышь, ядро перемещает окно. Хотя это не требуется. От ядра требуется только активация окна и правильная карта отсечения. Поэтому я хочу сделать новый тип. Чем меньше ядро обрабатывает оконные события тем больше у меня возможностей. Для ядра это стиль "не делать ничего с этим окном"
    Last edited by Serge on Thu Mar 01, 2012 9:21 am, edited 1 time in total.
  • Ладно делай как знаешь, но для 31 бита я добавляю исключение в существующую схему. Код уже сделал и сейчас залью в SVN.
  • Mario
    Потом эту заплатку надо будет убрать.
  • Не раньше чем исправлю box_lib и kfm.

    З.Ы. Залил SVN r. 2426.
  • Я пр исключение для 31 бита.
  • Who is online

    Users browsing this forum: No registered users and 1 guest