Маленькая доработка

Internal structure and you change requests/suggestions
  • Для реализации потребуется немного изменить функции sys_getbutton в 'kernel.asm' и checkbutton в 'button.inc'

    Изменения:

    1) В 'button.inc'

    строка 565, Фрагмент:

    Code: Select all

    ..........................
        pushad
    ; //// Добавить эти строки
        push  eax
        mov  al, byte [BTN_DOWN]
        mov  byte [btn_down_determ], al
        pop  eax
    ; /// окончание добавления
      cbwaitmouseup:
    ..........................
    ..........................
    ..........................
    iglobal
        mx dw 0x0 ; keeps the x mouse's position when it was clicked
        my dw 0x0 ; keeps the y mouse's position when it was clicked
        bPressedMouseXY_B db 0x0
        btn_down_determ     db 0x0        ; <<< Добавить эту строку
    endg
    ..........................
    
    2) В 'kernel.asm' строки 2505 - 2522:

    Фрагменты кода:

    Code: Select all

    sys_getbutton:
    
    	mov	ebx, [CURRENT_TASK]			    ; TOP OF WINDOW STACK
    	mov	[esp + 32], dword 1
    	movzx	ecx, word [WIN_STACK + ebx * 2]
    	mov	edx, [TASK_COUNT] ; less than 256 processes
    	cmp	ecx, edx
    	jne	.exit
    	movzx	eax, byte [BTN_COUNT]
    	test	eax, eax
    	jz	.exit
    	mov	eax, [BTN_BUFF]
    	shl	eax, 8
            mov      al, byte [btn_down_determ]                       ; <<< Добавить
            and       al,0xFE          ; убираем левую кнопку      ; <<< Добавить
    	mov	[BTN_COUNT], byte 0
    	mov	[esp + 32], eax
    .exit:
    	ret
    
    Заглянул на огонёк
  • Это изменение очень полезное :)

    Можете выложить модифицированное ядро?
  • какой-то неправильный, имхо, подход(как обычно, в духе - ещё один костыль)
    если для проверки вызвать функцию 37/2, она не покажет нужные флаги (не знаю, потому и спрашиваю :))?
  • Я, может, чего-то не понимаю, но зачем вообще позволять нажимать кнопки клавишами, отличными от левой? Как-то не совсем прозрачно с точки зрения пользовательского интерфейса.
    in code we trust
  • vectoroc wrote:какой-то неправильный, имхо, подход(как обычно, в духе - ещё один костыль)
    если для проверки вызвать функцию 37/2, она не покажет нужные флаги (не знаю, потому и спрашиваю :))?
    Покажет. Правда, лучше сделать так. Я что-то не сообразил.
    mike.dld wrote:Я, может, чего-то не понимаю, но зачем вообще позволять нажимать кнопки клавишами, отличными от левой? Как-то не совсем прозрачно с точки зрения пользовательского интерфейса.
    Панели задач, например, требуется реагировать на нажатие правой кнопки мыши на кнопках приложений, чтобы отобразить контекстное меню.
  • vectoroc
    какой-то неправильный, имхо, подход(как обычно, в духе - ещё один костыль)
    если для проверки вызвать функцию 37/2, она не покажет нужные флаги (не знаю, потому и спрашиваю :))?
    barsuk
    Покажет. Правда, лучше сделать так. Я что-то не сообразил.
    Нет не покажет, иначе и доработка то не нужна была бы.

    Все дело в том что событие нажатия кнопки формируется ядром не при нажатии а при отпускании кнопки мыши (это было сделано чтобы исключить двойные срабатывания).
    Естественно при опросе мыши после поступления события нажатия кнопки, кнопки мыши уже отпущены, и опрос не дает никакого эффекта.
    В панели для отлова нажатия правой кнопки держится второй процесс, который постоянно опрашивает мышь через малые промежутки времени, и практически дублирует обработчик кнопок, спрашивается нафига этот дубляж нужен?

    mike.dld
    Я, может, чего-то не понимаю, но зачем вообще позволять нажимать кнопки клавишами, отличными от левой? Как-то не совсем прозрачно с точки зрения пользовательского интерфейса
    Использование кнопок в колибри может быть более обширным чем просто кнопки, например может потребоваться контейнер с отловом нажатия мыши, без плясок с бубном и загрузкой проца на постоянный опрос мыши и пересчета координат. А прозрачность интерфейса и его удобство лежит на совести разработчика приложения. Кроме того вызовы контекстных меню правой кнопкой мыши, помоему стали достаточно стандартны и в ряде случаев могут быть использованы и на кнопках. Например нажатие кнопки левой клавишей - запускает действие, а правой - вызывает его настройку.
    Заглянул на огонёк
  • barsuk
    Можете выложить модифицированное ядро?
    Вот откомпиленное с доработкой и упакованное kerpackом ядро
    Attachments
    kernel.7z (80.28 KiB)
    Downloaded 309 times
    Заглянул на огонёк
  • Залил на SVN, заодно немного исправил баг с отрисовкой длинных заголовков на кнопки закрытия. Правда на приложения, выводящие заголовки не через 0 и 71 функцию не действует.
    Заглянул на огонёк
  • Who is online

    Users browsing this forum: No registered users and 7 guests