Mercurial > pidgin
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); |