コード例 #1
0
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");
}
コード例 #2
0
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);
    }
}
コード例 #3
0
ファイル: hito-group-combo.c プロジェクト: shr-project/shr
/**
 * 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);
  }
}