crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Приоритет событий GTK
Гость_Гость_raptor_*_*
сообщение 19.2.2014, 10:18
Сообщение #1





Гости








    


Пишу свой виджет, hex-редактор, в нем обрабатываются нажатия клавиатуры, например стрелок, при нажатии двигается каретка и перерисовывается виджет функцией gtk_widget_queue_draw, если нажать кнопку и не отпускать, то получается одно событие expose, при отпускании кнопки, а хотелось бы чтобы оно возникало после каждого события нажатия кнопки. Как это сделать? Тое есть имеем:
key_press
key_press
key_press
key_press
key_press
expose

а хотелось бы
key_press
expose
key_press
expose
key_press
expose
key_press
expose

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Raptor_*_*
сообщение 23.2.2014, 18:10
Сообщение #2





Гости








    


Что то специалистов по GTK негусто, отвечаю сам себе:
при создании виджета надо вместо инициализации функции обработки клавиатуры
widget_class->key_press_event
добавить тот же самый обработчик с помощью
g_signal_connect при создании виджета (я по быстрому сделал это в expose с помощью статической переменной в роли флага)
после этого можно блокировать событие нажатия клавиши функцией g_signal_handlers_block_by_func прямо внутри этого события,
обработать все остальные события чем то вроде

    static void ProcessGTKEvent(DWORD dwMaxEvent=-1)
    {
        while (gtk_events_pending())
        {
            gtk_main_iteration();
            if(dwMaxEvent!=-1)
            {
                dwMaxEvent--;
                if(dwMaxEvent==0)
                break;
            }
        }
    }


и разблокировать события от клавиатуры функцией
g_signal_handlers_unblock_by_func
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.10.2019, 23:21