static void set_group(HippoBlockGroupRevision *block_group_revision, HippoGroup *group) { if (group == block_group_revision->group) return; if (block_group_revision->group) { g_signal_handlers_disconnect_by_func(block_group_revision->group, (gpointer)on_group_changed, block_group_revision); g_object_unref(block_group_revision->group); block_group_revision->group = NULL; } if (group) { g_object_ref(group); block_group_revision->group = group; g_signal_connect(group, "changed", G_CALLBACK(on_group_changed), block_group_revision); } on_group_changed(group, block_group_revision); g_object_notify(G_OBJECT(block_group_revision), "group"); }
static void hippo_canvas_block_group_chat_set_block(HippoCanvasBlock *canvas_block, HippoBlock *block) { /* g_debug("canvas-block-group-chat set block %p", block); */ if (block == canvas_block->block) return; if (canvas_block->block != NULL) { g_signal_handlers_disconnect_by_func(G_OBJECT(canvas_block->block), G_CALLBACK(on_recent_messages_changed), canvas_block); g_signal_handlers_disconnect_by_func(G_OBJECT(canvas_block->block), G_CALLBACK(on_group_changed), canvas_block); } /* Chain up to get the block really changed */ HIPPO_CANVAS_BLOCK_CLASS(hippo_canvas_block_group_chat_parent_class)->set_block(canvas_block, block); if (canvas_block->block != NULL) { g_signal_connect(G_OBJECT(canvas_block->block), "notify::recent-messages", G_CALLBACK(on_recent_messages_changed), canvas_block); g_signal_connect(G_OBJECT(canvas_block->block), "notify::group", G_CALLBACK(on_group_changed), canvas_block); on_group_changed(canvas_block->block, NULL, canvas_block); on_recent_messages_changed(canvas_block->block, NULL, canvas_block); } }
/** * hito_group_combo_connect_filter: * @combo: A #HitoGroupCombo * @filter: A #HitoContactModelFilter, or #NULL. * * Hook the selected group in the combo box to the filter model. If @filter is * #NULL, remove an existing connection. */ void hito_group_combo_connect_filter (HitoGroupCombo *combo, HitoContactModelFilter *filter) { HitoGroupComboPrivate *priv; g_return_if_fail (HITO_IS_GROUP_COMBO (combo)); priv = GET_PRIVATE (combo); if (priv->changed_id) { g_signal_handler_disconnect (combo, priv->changed_id); g_object_unref (priv->filter); priv->changed_id = 0; priv->filter = NULL; } if (filter) { priv->changed_id = g_signal_connect (combo, "changed", G_CALLBACK (on_group_changed), NULL); priv->filter = g_object_ref (filter); on_group_changed (combo); } }