comparison gtk/gtkconv.c @ 14583:ac6120e2e27c

[gaim-migrate @ 17307] SF Patch #1481843 from Sadrul It sounds like the GTK+ folks won't be fixing bug #355214: http://bugzilla.gnome.org/show_bug.cgi?id=355214 This fixes the bolding of buddies in chat rooms. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 18 Sep 2006 04:35:10 +0000
parents 333989477bcd
children 1f7581a5d2b8
comparison
equal deleted inserted replaced
14582:5775e770838c 14583:ac6120e2e27c
3335 { 3335 {
3336 GdkColor send_color; 3336 GdkColor send_color;
3337 gdk_color_parse(SEND_COLOR, &send_color); 3337 gdk_color_parse(SEND_COLOR, &send_color);
3338 3338
3339 #if GTK_CHECK_VERSION(2,6,0) 3339 #if GTK_CHECK_VERSION(2,6,0)
3340 gtk_list_store_insert_with_values 3340 gtk_list_store_insert_with_values(ls, &iter,
3341 (ls,
3342 &iter,
3343 /* 3341 /*
3344 * The GTK docs are mute about the effects of the "row" value for performance. 3342 * The GTK docs are mute about the effects of the "row" value for performance.
3345 * X-Chat hardcodes their value to 0 (prepend) and -1 (append), so we will too. 3343 * X-Chat hardcodes their value to 0 (prepend) and -1 (append), so we will too.
3346 * It *might* be faster to search the gtk_list_store and set row accurately, 3344 * It *might* be faster to search the gtk_list_store and set row accurately,
3347 * but no one in #gtk+ seems to know anything about it either. 3345 * but no one in #gtk+ seems to know anything about it either.
3348 * Inserting in the "wrong" location has no visible ill effects. - F.P. 3346 * Inserting in the "wrong" location has no visible ill effects. - F.P.
3349 */ 3347 */
3350 -1, /* "row" */ 3348 -1, /* "row" */
3351 CHAT_USERS_ICON_COLUMN, pixbuf, 3349 CHAT_USERS_ICON_COLUMN, pixbuf,
3352 CHAT_USERS_ALIAS_COLUMN, alias, 3350 CHAT_USERS_ALIAS_COLUMN, alias,
3353 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, 3351 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key,
3354 CHAT_USERS_NAME_COLUMN, name, 3352 CHAT_USERS_NAME_COLUMN, name,
3355 CHAT_USERS_FLAGS_COLUMN, flags, 3353 CHAT_USERS_FLAGS_COLUMN, flags,
3356 CHAT_USERS_COLOR_COLUMN, &send_color, 3354 CHAT_USERS_COLOR_COLUMN, &send_color,
3357 CHAT_USERS_BUDDY_COLUMN, is_buddy, 3355 CHAT_USERS_WEIGHT_COLUMN ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, is_buddy,
3358 -1); 3356 -1);
3359 } 3357 }
3360 else { 3358 else
3361 gtk_list_store_insert_with_values 3359 {
3362 (ls, 3360 gtk_list_store_insert_with_values(ls, &iter,
3363 &iter, 3361 -1, /* "row" */
3364 -1, /* "row" */ 3362 CHAT_USERS_ICON_COLUMN, pixbuf,
3365 CHAT_USERS_ICON_COLUMN, pixbuf, 3363 CHAT_USERS_ALIAS_COLUMN, alias,
3366 CHAT_USERS_ALIAS_COLUMN, alias, 3364 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key,
3367 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, 3365 CHAT_USERS_NAME_COLUMN, name,
3368 CHAT_USERS_NAME_COLUMN, name, 3366 CHAT_USERS_FLAGS_COLUMN, flags,
3369 CHAT_USERS_FLAGS_COLUMN, flags, 3367 CHAT_USERS_COLOR_COLUMN, get_nick_color(gtkconv, name),
3370 CHAT_USERS_COLOR_COLUMN, get_nick_color(gtkconv, name), 3368 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
3371 CHAT_USERS_BUDDY_COLUMN, is_buddy, 3369 -1);
3372 -1);
3373
3374 #else 3370 #else
3375 gtk_list_store_append(ls, &iter); 3371 gtk_list_store_append(ls, &iter);
3376 gtk_list_store_set(ls, &iter, 3372 gtk_list_store_set(ls, &iter,
3377 CHAT_USERS_ICON_COLUMN, pixbuf, 3373 CHAT_USERS_ICON_COLUMN, pixbuf,
3378 CHAT_USERS_ALIAS_COLUMN, alias, 3374 CHAT_USERS_ALIAS_COLUMN, alias,
3379 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, 3375 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key,
3380 CHAT_USERS_NAME_COLUMN, name, 3376 CHAT_USERS_NAME_COLUMN, name,
3381 CHAT_USERS_FLAGS_COLUMN, flags, 3377 CHAT_USERS_FLAGS_COLUMN, flags,
3382 CHAT_USERS_COLOR_COLUMN, &send_color, 3378 CHAT_USERS_COLOR_COLUMN, &send_color,
3383 CHAT_USERS_BUDDY_COLUMN, is_buddy, 3379 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
3384 -1); 3380 -1);
3385 } 3381 }
3386 3382 else
3387 else { 3383 {
3388
3389 gtk_list_store_append(ls, &iter); 3384 gtk_list_store_append(ls, &iter);
3390 gtk_list_store_set(ls, &iter, 3385 gtk_list_store_set(ls, &iter,
3391 CHAT_USERS_ICON_COLUMN, pixbuf, 3386 CHAT_USERS_ICON_COLUMN, pixbuf,
3392 CHAT_USERS_ALIAS_COLUMN, alias, 3387 CHAT_USERS_ALIAS_COLUMN, alias,
3393 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, 3388 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key,
3394 CHAT_USERS_NAME_COLUMN, name, 3389 CHAT_USERS_NAME_COLUMN, name,
3395 CHAT_USERS_FLAGS_COLUMN, flags, 3390 CHAT_USERS_FLAGS_COLUMN, flags,
3396 CHAT_USERS_COLOR_COLUMN, get_nick_color(gtkconv, name), 3391 CHAT_USERS_COLOR_COLUMN, get_nick_color(gtkconv, name),
3397 CHAT_USERS_BUDDY_COLUMN, is_buddy, 3392 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
3398 -1); 3393 -1);
3399 #endif 3394 #endif
3400 } 3395 }
3401 3396
3402 if (pixbuf) 3397 if (pixbuf)
3403 g_object_unref(pixbuf); 3398 g_object_unref(pixbuf);
3653 char *user1 = NULL, *user2 = NULL; 3648 char *user1 = NULL, *user2 = NULL;
3654 gboolean buddy1 = FALSE, buddy2 = FALSE; 3649 gboolean buddy1 = FALSE, buddy2 = FALSE;
3655 gint ret = 0; 3650 gint ret = 0;
3656 3651
3657 gtk_tree_model_get(model, a, 3652 gtk_tree_model_get(model, a,
3658 CHAT_USERS_ALIAS_KEY_COLUMN, &user1, 3653 CHAT_USERS_ALIAS_KEY_COLUMN, &user1,
3659 CHAT_USERS_FLAGS_COLUMN, &f1, 3654 CHAT_USERS_FLAGS_COLUMN, &f1,
3660 CHAT_USERS_BUDDY_COLUMN, &buddy1, 3655 CHAT_USERS_WEIGHT_COLUMN, &buddy1,
3661 -1); 3656 -1);
3662 gtk_tree_model_get(model, b, 3657 gtk_tree_model_get(model, b,
3663 CHAT_USERS_ALIAS_KEY_COLUMN, &user2, 3658 CHAT_USERS_ALIAS_KEY_COLUMN, &user2,
3664 CHAT_USERS_FLAGS_COLUMN, &f2, 3659 CHAT_USERS_FLAGS_COLUMN, &f2,
3665 CHAT_USERS_BUDDY_COLUMN, &buddy2, 3660 CHAT_USERS_WEIGHT_COLUMN, &buddy2,
3666 -1); 3661 -1);
3667 3662
3668 if (user1 == NULL || user2 == NULL) { 3663 if (user1 == NULL || user2 == NULL) {
3669 if (!(user1 == NULL && user2 == NULL)) 3664 if (!(user1 == NULL && user2 == NULL))
3670 ret = (user1 == NULL) ? -1: 1; 3665 ret = (user1 == NULL) ? -1: 1;
3671 } else if (f1 != f2) { 3666 } else if (f1 != f2) {
3672 /* sort more important users first */ 3667 /* sort more important users first */
3673 ret = (f1 > f2) ? -1 : 1; 3668 ret = (f1 > f2) ? -1 : 1;
3674 } else if (buddy1 != buddy2) { 3669 } else if (buddy1 != buddy2) {
3675 ret = buddy1 ? -1 : 1; 3670 ret = (buddy1 > buddy2) ? -1 : 1;
3676 } else { 3671 } else {
3677 ret = strcasecmp(user1, user2); 3672 ret = strcasecmp(user1, user2);
3678 } 3673 }
3679 3674
3680 g_free(user1); 3675 g_free(user1);
3801 char *name; 3796 char *name;
3802 3797
3803 gtk_tree_model_get(model, &iter, CHAT_USERS_NAME_COLUMN, &name, -1); 3798 gtk_tree_model_get(model, &iter, CHAT_USERS_NAME_COLUMN, &name, -1);
3804 3799
3805 if (!strcmp(normalized_name, gaim_normalize(conv->account, name))) { 3800 if (!strcmp(normalized_name, gaim_normalize(conv->account, name))) {
3806 gtk_list_store_set(GTK_LIST_STORE(model), &iter, CHAT_USERS_BUDDY_COLUMN, is_buddy, -1); 3801 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
3802 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, -1);
3807 g_free(name); 3803 g_free(name);
3808 break; 3804 break;
3809 } 3805 }
3810 3806
3811 f = gtk_tree_model_iter_next(model, &iter); 3807 f = gtk_tree_model_iter_next(model, &iter);
3966 gtk_box_pack_start(GTK_BOX(lbox), sw, TRUE, TRUE, 0); 3962 gtk_box_pack_start(GTK_BOX(lbox), sw, TRUE, TRUE, 0);
3967 gtk_widget_show(sw); 3963 gtk_widget_show(sw);
3968 3964
3969 ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, 3965 ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING,
3970 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, 3966 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
3971 GDK_TYPE_COLOR, G_TYPE_BOOLEAN); 3967 GDK_TYPE_COLOR, G_TYPE_INT);
3972 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_KEY_COLUMN, 3968 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_KEY_COLUMN,
3973 sort_chat_users, NULL, NULL); 3969 sort_chat_users, NULL, NULL);
3974 3970
3975 list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); 3971 list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls));
3976 3972
3988 3984
3989 rend = gtk_cell_renderer_text_new(); 3985 rend = gtk_cell_renderer_text_new();
3990 3986
3991 g_object_set(rend, 3987 g_object_set(rend,
3992 "foreground-set", TRUE, 3988 "foreground-set", TRUE,
3993 "weight", PANGO_WEIGHT_BOLD, 3989 "weight-set", TRUE,
3994 NULL); 3990 NULL);
3995 col = gtk_tree_view_column_new_with_attributes(NULL, rend, 3991 col = gtk_tree_view_column_new_with_attributes(NULL, rend,
3996 "text", CHAT_USERS_ALIAS_COLUMN, 3992 "text", CHAT_USERS_ALIAS_COLUMN,
3997 "foreground-gdk", CHAT_USERS_COLOR_COLUMN, 3993 "foreground-gdk", CHAT_USERS_COLOR_COLUMN,
3998 "weight-set", CHAT_USERS_BUDDY_COLUMN, 3994 "weight", CHAT_USERS_WEIGHT_COLUMN,
3999 NULL); 3995 NULL);
4000 3996
4001 gaim_signal_connect(blist_handle, "buddy-added", 3997 gaim_signal_connect(blist_handle, "buddy-added",
4002 gtkchat, GAIM_CALLBACK(buddy_added_cb), conv); 3998 gtkchat, GAIM_CALLBACK(buddy_added_cb), conv);
4003 gaim_signal_connect(blist_handle, "buddy-removed", 3999 gaim_signal_connect(blist_handle, "buddy-removed",
4004 gtkchat, GAIM_CALLBACK(buddy_removed_cb), conv); 4000 gtkchat, GAIM_CALLBACK(buddy_removed_cb), conv);