What does g_signal_connect_swapped() do?

后端 未结 1 1599
花落未央
花落未央 2020-12-18 18:17

According to GObject reference

g_signal_connect_swapped(instance, detailed_signal, c_handler, data); connects a GCallback function to a signal for a

相关标签:
1条回答
  • 2020-12-18 18:48

    You understand correctly.

    This allows you to do tricks like the following: You have a button (let's call it button), that is supposed to hide another widget (let's call it textview) when pressed.

    You can then do

    g_signal_connect_swapped(button, 'clicked', G_CALLBACK(gtk_widget_hide), textview);
    

    to achieve that. When the button is pressed, it generates the 'clicked' signal, and the callback is called with textview as the first argument, and button as the second. In this case the callback is gtk_widget_hide() which only takes one argument, so the second argument is ignored, because that's the way the C calling convention works.

    It's the same as the following, but shorter.

    static void
    on_button_clicked(GtkButton *button, GtkWidget *textview)
    {
        gtk_widget_hide(textview);
    }
    
    ...elsewhere...
    
        g_signal_connect(button, 'clicked', G_CALLBACK(on_button_clicked), textview);
    

    Basically it saves you from having to write an extra function if you hand-code your interface. Of course, there may be some far more practical use that I've never understood.

    0 讨论(0)
提交回复
热议问题