Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Oct 19, 2019 3:31 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 127 28 29 30 31 Next
Author Message
PostPosted: Thu Mar 01, 2012 8:10 am 
А может это плеер не совсем правильно обрабатывает кнопки? Все остальные программы ведь закрываются. Ни у кого больше проблемы с закрытием нет. по крайне мере никто за прошедшее время не написал жалоб.


Top
   
PostPosted: Thu Mar 01, 2012 8:16 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Плеер как раз правильно обрабатывает кнопки. Только это не системные кнопки. И поскольку ты закомментировал код он теперь не получает сообщений при клике в области заголовка.
Запускаю KFM, кликаю на пиктограме в меню и не отпуская кнопки веду курсор вниз. Кликаю на зелёной кнопке "Help" и не отпуская кнопки ведут курсор вверх. И причем здесь заголовок ?


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


Top
   
PostPosted: Thu Mar 01, 2012 8:51 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Надо проверять область, где нажата кнопка и ставить флаг, если это список. И снимать флаг когда кнопка отпущена.


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


Top
   
PostPosted: Thu Mar 01, 2012 8:59 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Я сделаю окно со стилем 5. Специально для окон, которые всю работу по перемещению и изменению размеров делают сами.


Top
   
PostPosted: Thu Mar 01, 2012 9:03 am 
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

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


Top
   
PostPosted: Thu Mar 01, 2012 9:18 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Плеер сам изменят размер окна, без участия ядра. Но ядро обрабатывает все события в заголовке, причём положение заголовка определяется ядром. Я не могу разместить его сбоку. Если я в плеере кликаю на кнопке в заголовке и двигаю мышь, ядро перемещает окно. Хотя это не требуется. От ядра требуется только активация окна и правильная карта отсечения. Поэтому я хочу сделать новый тип. Чем меньше ядро обрабатывает оконные события тем больше у меня возможностей. Для ядра это стиль "не делать ничего с этим окном"


Last edited by Serge on Thu Mar 01, 2012 9:21 am, edited 1 time in total.

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


Top
   
PostPosted: Thu Mar 01, 2012 9:22 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario
Потом эту заплатку надо будет убрать.


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

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


Top
   
PostPosted: Thu Mar 01, 2012 9:31 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я пр исключение для 31 бита.


Top
   
PostPosted: Thu Mar 01, 2012 9:37 am 
Сейчас схема такая:
- если бит 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:


Top
   
PostPosted: Mon May 27, 2013 10:32 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Прежде, чем пускаться во все тяжкие с 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 клавиатура больше не эмулируется, да и сам рестарт работает не у всех ?


Last edited by Serge on Mon May 27, 2013 10:36 pm, edited 1 time in total.

Top
   
PostPosted: Mon May 27, 2013 10:36 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
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)

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 455 posts ]  Go to page Previous 127 28 29 30 31 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited