Page 28 of 31

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

Posted: Mon Feb 27, 2012 8:35 am
by Serge
Изменения в функции 40:
Бит 31 регистра ebx управляет фильтрацией событий мыши.
Бит 31 = 0 - окно всегда получает события от мыши.
Бит 31 = 1 - окно получает события мыши только в активном состоянии.

Планируется:
Бит 30 = 0 - окно получает события от мыши если курсор находится за пределами окна
Бит 30 = 1 - окно не получает события от мыши если курсор находится за пределами окна

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

Posted: Thu Mar 01, 2012 2:34 am
by Mario
Я восстановил код закомментированный в r. 2414. Этот код вводился еще в ревизиях 1466 и 1513. Без него приложения активно обрабатывающие мышь при перетаскивании окна или изменении размеров окна могут менять положение собственного курсора многократно. Как пример можно посмотреть на реакцию KFM и OpenDialog с этим кодом и без него. Если координаты курсора мыши попадают в "активную зону" приложения, то начинаются чудесатые чудеса. Это именно обработка предотвращающая некорректное поведение активного окна. Не нужно убирать этот код!

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

Posted: Thu Mar 01, 2012 8:01 am
by Serge
Mario
А теперь запусти плеер попробуй закрыть окно.
Если KFM неправильно мышь обрабатывает, чем другие программы виноваты ?

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

Posted: Thu Mar 01, 2012 8:10 am
by Mario
А может это плеер не совсем правильно обрабатывает кнопки? Все остальные программы ведь закрываются. Ни у кого больше проблемы с закрытием нет. по крайне мере никто за прошедшее время не написал жалоб.

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

Posted: Thu Mar 01, 2012 8:16 am
by Serge
Mario
Плеер как раз правильно обрабатывает кнопки. Только это не системные кнопки. И поскольку ты закомментировал код он теперь не получает сообщений при клике в области заголовка.
Запускаю KFM, кликаю на пиктограме в меню и не отпуская кнопки веду курсор вниз. Кликаю на зелёной кнопке "Help" и не отпуская кнопки ведут курсор вверх. И причем здесь заголовок ?

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

Posted: Thu Mar 01, 2012 8:42 am
by Mario
Вообще то он не получает события мыши если удерживать кнопку. А когда отпускается кнопка то события продолжают поступать. Ситуация неоднозначная. Если бы проблема была только в KFM, то я бы не парился. Однако код компонента FileBrowser унаследовал код KFM.

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

Posted: Thu Mar 01, 2012 8:51 am
by Serge
Mario
Надо проверять область, где нажата кнопка и ставить флаг, если это список. И снимать флаг когда кнопка отпущена.

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

Posted: Thu Mar 01, 2012 8:54 am
by Mario
У меня есть мысль. Если новый флаг маски событий, который ты ввел недавно, используется для плеера, то можно учитывать его наличие и игнорировать мою коррекцию.

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

Posted: Thu Mar 01, 2012 8:59 am
by Serge
Mario
Я сделаю окно со стилем 5. Специально для окон, которые всю работу по перемещению и изменению размеров делают сами.

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

Posted: Thu Mar 01, 2012 9:03 am
by Mario
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
не будет выполнятся. Всего то делов! Зачем городить огород с новым типом?

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

Posted: Thu Mar 01, 2012 9:18 am
by Serge
Mario
Плеер сам изменят размер окна, без участия ядра. Но ядро обрабатывает все события в заголовке, причём положение заголовка определяется ядром. Я не могу разместить его сбоку. Если я в плеере кликаю на кнопке в заголовке и двигаю мышь, ядро перемещает окно. Хотя это не требуется. От ядра требуется только активация окна и правильная карта отсечения. Поэтому я хочу сделать новый тип. Чем меньше ядро обрабатывает оконные события тем больше у меня возможностей. Для ядра это стиль "не делать ничего с этим окном"

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

Posted: Thu Mar 01, 2012 9:20 am
by Mario
Ладно делай как знаешь, но для 31 бита я добавляю исключение в существующую схему. Код уже сделал и сейчас залью в SVN.

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

Posted: Thu Mar 01, 2012 9:22 am
by Serge
Mario
Потом эту заплатку надо будет убрать.

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

Posted: Thu Mar 01, 2012 9:24 am
by Mario
Не раньше чем исправлю box_lib и kfm.

З.Ы. Залил SVN r. 2426.

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

Posted: Thu Mar 01, 2012 9:31 am
by Serge
Я пр исключение для 31 бита.