Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ GTK+ _ Приоритет событий GTK

Автор: Гость_raptor_* 19.2.2014, 10:18

Пишу свой виджет, 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

Что то специалистов по 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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)