如何在长回调期间强制执行gtk事件

时间:2016-02-27 14:09:43

标签: gtk glade

我需要一个事件来处理我程序的工具栏按钮上的按下和释放。 我使用按钮按下事件但是当我点击我的按钮时没有任何事情发生。

我正在使用Glade Interface Designer设计我的GUI。当我在gtk +&中调用按钮按事件时,请解释一下。这是我需要的事件吗?

'button-press-event'应该按下鼠标按钮。我使用gtk_widget_add_device_events()将按钮按钮添加到按钮接收的事件列表中,但我认为它应该默认获取它们。

gboolean
on_skip_backward_toolbutton_pressed (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
    g_print ("pressed");
    timeout_id = g_timeout_add(500, (GSourceFunc) change_freq_timeout, (gpointer) FALSE);

    return FALSE;
}

gboolean
on_skip_forward_toolbutton_pressed(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
    g_print ("pressed");
    timeout_id = g_timeout_add(500, (GSourceFunc) change_freq_timeout, (gpointer) TRUE);

    return FALSE;
}

gboolean
on_skip_toolbutton_released(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
    g_print ("released");
    if (timeout_id) {
        g_source_remove(timeout_id);
        timeout_id = 0;
    }

    return FALSE;
}

change_freq_timeout回调只有一条指令需要很长时间才能处理。

在超时处理程序中运行mainiteration通常被认为是一个“坏主意”,因为它不能很好地工作。

是否存在可用于解决问题的其他秘密技术?

0 个答案:

没有答案