Board.KolibriOS.org
http://board.kolibrios.org/

Новая модель ядра
http://board.kolibrios.org/viewtopic.php?f=35&t=509
Page 29 of 31

Author:  Mario [ Thu Mar 01, 2012 8:10 am ]
Post subject:  Re: Новая модель ядра

А может это плеер не совсем правильно обрабатывает кнопки? Все остальные программы ведь закрываются. Ни у кого больше проблемы с закрытием нет. по крайне мере никто за прошедшее время не написал жалоб.

Author:  Serge [ Thu Mar 01, 2012 8:16 am ]
Post subject:  Re: Новая модель ядра

Mario
Плеер как раз правильно обрабатывает кнопки. Только это не системные кнопки. И поскольку ты закомментировал код он теперь не получает сообщений при клике в области заголовка.
Запускаю KFM, кликаю на пиктограме в меню и не отпуская кнопки веду курсор вниз. Кликаю на зелёной кнопке "Help" и не отпуская кнопки ведут курсор вверх. И причем здесь заголовок ?

Author:  Mario [ Thu Mar 01, 2012 8:42 am ]
Post subject:  Re: Новая модель ядра

Вообще то он не получает события мыши если удерживать кнопку. А когда отпускается кнопка то события продолжают поступать. Ситуация неоднозначная. Если бы проблема была только в KFM, то я бы не парился. Однако код компонента FileBrowser унаследовал код KFM.

Author:  Serge [ Thu Mar 01, 2012 8:51 am ]
Post subject:  Re: Новая модель ядра

Mario
Надо проверять область, где нажата кнопка и ставить флаг, если это список. И снимать флаг когда кнопка отпущена.

Author:  Mario [ Thu Mar 01, 2012 8:54 am ]
Post subject:  Re: Новая модель ядра

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

Author:  Serge [ Thu Mar 01, 2012 8:59 am ]
Post subject:  Re: Новая модель ядра

Mario
Я сделаю окно со стилем 5. Специально для окон, которые всю работу по перемещению и изменению размеров делают сами.

Author:  Mario [ Thu Mar 01, 2012 9:03 am ]
Post subject:  Re: Новая модель ядра

get_event_for_app работает для всех окон. Я не понимаю как ты собираешься это обходить? В моей идее все просто - проверяю установлен ли бит 31, если да то код:
Code:
        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

не будет выполнятся. Всего то делов! Зачем городить огород с новым типом?

Author:  Serge [ Thu Mar 01, 2012 9:18 am ]
Post subject:  Re: Новая модель ядра

Mario
Плеер сам изменят размер окна, без участия ядра. Но ядро обрабатывает все события в заголовке, причём положение заголовка определяется ядром. Я не могу разместить его сбоку. Если я в плеере кликаю на кнопке в заголовке и двигаю мышь, ядро перемещает окно. Хотя это не требуется. От ядра требуется только активация окна и правильная карта отсечения. Поэтому я хочу сделать новый тип. Чем меньше ядро обрабатывает оконные события тем больше у меня возможностей. Для ядра это стиль "не делать ничего с этим окном"

Author:  Mario [ Thu Mar 01, 2012 9:20 am ]
Post subject:  Re: Новая модель ядра

Ладно делай как знаешь, но для 31 бита я добавляю исключение в существующую схему. Код уже сделал и сейчас залью в SVN.

Author:  Serge [ Thu Mar 01, 2012 9:22 am ]
Post subject:  Re: Новая модель ядра

Mario
Потом эту заплатку надо будет убрать.

Author:  Mario [ Thu Mar 01, 2012 9:24 am ]
Post subject:  Re: Новая модель ядра

Не раньше чем исправлю box_lib и kfm.

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

Author:  Serge [ Thu Mar 01, 2012 9:31 am ]
Post subject:  Re: Новая модель ядра

Я пр исключение для 31 бита.

Author:  Mario [ Thu Mar 01, 2012 9:37 am ]
Post subject:  Re: Новая модель ядра

Сейчас схема такая:
- если бит 31 не установлен и приложение само отлавливает что оно находится на вершине оконного стека (проверка на уровне приложения), то при захвате заголовка (для перемещения окна) или захвате нижнего-правого угла (при изменении размеров окна) события мыши для этого окна фильтруются.
- если бит 31 установлен, и события мыши посылаются только если окно находится на вершине оконного стека (проверка на уровне ядра), то при захвате заголовка (для перемещения окна) или захвате нижнего-правого угла (при изменении размеров окна) события мыши для этого окна не фильтруются.

Когда я исправлю box_lib и kfm, то уберу всю логику:
Spoiler: Show
Code:
        cmp     eax, 5; Mouse 5+1=6
        jne     .no_mouse_check
        push    eax
        mov     eax, [TASK_BASE]
        mov     eax, [eax + TASKDATA.event_mask]
        test    eax, 0x80000000 ; bit 31: active/inactive filter f.40
        jz      @f
        pop     eax
        jmp     .no_mouse_check
@@:
; 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
.no_mouse_check:

Хотя если честно, то с такой логикой можно уже ничего не исправлять. :lol:

Author:  Serge [ Mon May 27, 2013 10:32 pm ]
Post subject:  Re: Новая модель ядра

Прежде, чем пускаться во все тяжкие с long mode, я решил немного почистить ядро. Для начала перенесу все константные переменные вида
Code:
MOUSE_SCROLL_H      equ (OS_BASE+0x000FB08)
MOUSE_X             equ (OS_BASE+0x000FB0A)
MOUSE_Y             equ (OS_BASE+0x000FB0C)
MOUSE_SCROLL_V      equ (OS_BASE+0x000FB0E)

MOUSE_COLOR_MEM     equ (OS_BASE+0x000FB10)
COLOR_TEMP          equ (OS_BASE+0x000FB30)
BTN_DOWN            equ (OS_BASE+0x000FB40)
MOUSE_DOWN          equ (OS_BASE+0x000FB44)
X_UNDER             equ (OS_BASE+0x000FB4A)
Y_UNDER             equ (OS_BASE+0x000FB4C)
в data32.inc, чтобы одни выглядели так
Code:
MOUSE_PICTURE     rd 1

MOUSE_SCROLL_H    rw 1
MOUSE_X:          rw 1
MOUSE_Y:          rw 1
MOUSE_SCROLL_V    rw 1

X_UNDER           rw 1
Y_UNDER           rw 1
COLOR_TEMP        rd 1
MOUSE_COLOR_MEM   rd 1
а другие так
Code:
SLOT_BASE:      rb 64*1024
DRIVE_DATA:     rb 64*1024
RESERVED_PORTS: rb 64*1024
FLOPPY_BUFF:    rb 16*1024
BUTTON_INFO:    rb 16*1024
BgrAuxTable:    rb 32*1024
skin_data:      rb 32*1024
window_data:    rb 8192
CURRENT_TASK:   rb 8192
draw_data:      rb 4096
WIN_STACK:      rb 0x400
WIN_POS:        rb 0x800
и если у меня хватит терпения, сделаю краткое описание некоторых переменных ядра.

Изучение завалов поставило поставило несколько вопросов
Нужно ли массиву DRIVE_DATA 65536 байт ?
Нужно ли по 32768 байт для хранения скина и для BgrAuxTable ?
Сколько на самом деле памяти требуют
BTN_BUFF equ (OS_BASE+0x000F501)
BPSLine_calc_area equ (OS_BASE+0x02C4000) и
d_width_calc_area equ (OS_BASE+0x02CA000) ?

Нужен ли рестарт ядра, если usb клавиатура больше не эмулируется, да и сам рестарт работает не у всех ?

Author:  hidnplayr [ Mon May 27, 2013 10:36 pm ]
Post subject:  Re: Новая модель ядра

Good work serge, perhaps you can get some ideas from the work already done by mike.dld in ostin kernel (https://github.com/ostin-project/ostin-kernel)

Page 29 of 31 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/