pidgin/gtkconv.c

branch
cpw.qulogic.gtk3
changeset 32386
b6021cd613c5
parent 32383
f63e66bd0b02
child 32391
5f9f23a48f82
child 32900
9985c4a0e27b
equal deleted inserted replaced
32385:eef033bae51d 32386:b6021cd613c5
158 static void pidgin_conv_updated(PurpleConversation *conv, PurpleConvUpdateType type); 158 static void pidgin_conv_updated(PurpleConversation *conv, PurpleConvUpdateType type);
159 static void conv_set_unseen(PurpleConversation *gtkconv, PidginUnseenState state); 159 static void conv_set_unseen(PurpleConversation *gtkconv, PidginUnseenState state);
160 static void gtkconv_set_unseen(PidginConversation *gtkconv, PidginUnseenState state); 160 static void gtkconv_set_unseen(PidginConversation *gtkconv, PidginUnseenState state);
161 static void update_typing_icon(PidginConversation *gtkconv); 161 static void update_typing_icon(PidginConversation *gtkconv);
162 static void update_typing_message(PidginConversation *gtkconv, const char *message); 162 static void update_typing_message(PidginConversation *gtkconv, const char *message);
163 #if !GTK_CHECK_VERSION(2,6,0)
164 static const char *item_factory_translate_func (const char *path, gpointer func_data);
165 #endif
166 gboolean pidgin_conv_has_focus(PurpleConversation *conv); 163 gboolean pidgin_conv_has_focus(PurpleConversation *conv);
167 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background); 164 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background);
168 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast); 165 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast);
169 static GtkTextTag *get_buddy_tag(PurpleConversation *conv, const char *who, PurpleMessageFlags flag, gboolean create); 166 static GtkTextTag *get_buddy_tag(PurpleConversation *conv, const char *who, PurpleMessageFlags flag, gboolean create);
170 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields); 167 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields);
980 if (info != NULL) 977 if (info != NULL)
981 gtk_widget_grab_focus(info->entry); 978 gtk_widget_grab_focus(info->entry);
982 } 979 }
983 980
984 static void 981 static void
985 #if GTK_CHECK_VERSION(2,6,0)
986 menu_new_conv_cb(GtkAction *action, gpointer data) 982 menu_new_conv_cb(GtkAction *action, gpointer data)
987 #else
988 menu_new_conv_cb(gpointer data, guint action, GtkWidget *widget)
989 #endif
990 { 983 {
991 pidgin_dialogs_im(); 984 pidgin_dialogs_im();
992 } 985 }
993 986
994 static void 987 static void
1031 /* 1024 /*
1032 * It would be kinda cool if this gave the option of saving a 1025 * It would be kinda cool if this gave the option of saving a
1033 * plaintext v. HTML file. 1026 * plaintext v. HTML file.
1034 */ 1027 */
1035 static void 1028 static void
1036 #if GTK_CHECK_VERSION(2,6,0)
1037 menu_save_as_cb(GtkAction *action, gpointer data) 1029 menu_save_as_cb(GtkAction *action, gpointer data)
1038 #else
1039 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget)
1040 #endif
1041 { 1030 {
1042 PidginWindow *win = data; 1031 PidginWindow *win = data;
1043 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1032 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1044 PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); 1033 PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name);
1045 const char *name; 1034 const char *name;
1065 1054
1066 g_free(buf); 1055 g_free(buf);
1067 } 1056 }
1068 1057
1069 static void 1058 static void
1070 #if GTK_CHECK_VERSION(2,6,0)
1071 menu_view_log_cb(GtkAction *action, gpointer data) 1059 menu_view_log_cb(GtkAction *action, gpointer data)
1072 #else
1073 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget)
1074 #endif
1075 { 1060 {
1076 PidginWindow *win = data; 1061 PidginWindow *win = data;
1077 PurpleConversation *conv; 1062 PurpleConversation *conv;
1078 PurpleLogType type; 1063 PurpleLogType type;
1079 PidginBuddyList *gtkblist; 1064 PidginBuddyList *gtkblist;
1125 gdk_window_set_cursor(gtkblist->window->window, NULL); 1110 gdk_window_set_cursor(gtkblist->window->window, NULL);
1126 gdk_window_set_cursor(win->window->window, NULL); 1111 gdk_window_set_cursor(win->window->window, NULL);
1127 } 1112 }
1128 1113
1129 static void 1114 static void
1130 #if GTK_CHECK_VERSION(2,6,0)
1131 menu_clear_cb(GtkAction *action, gpointer data) 1115 menu_clear_cb(GtkAction *action, gpointer data)
1132 #else
1133 menu_clear_cb(gpointer data, guint action, GtkWidget *widget)
1134 #endif
1135 { 1116 {
1136 PidginWindow *win = data; 1117 PidginWindow *win = data;
1137 PurpleConversation *conv; 1118 PurpleConversation *conv;
1138 1119
1139 conv = pidgin_conv_window_get_active_conversation(win); 1120 conv = pidgin_conv_window_get_active_conversation(win);
1140 clear_conversation_scrollback(conv); 1121 clear_conversation_scrollback(conv);
1141 } 1122 }
1142 1123
1143 static void 1124 static void
1144 #if GTK_CHECK_VERSION(2,6,0)
1145 menu_find_cb(GtkAction *action, gpointer data) 1125 menu_find_cb(GtkAction *action, gpointer data)
1146 #else
1147 menu_find_cb(gpointer data, guint action, GtkWidget *widget)
1148 #endif
1149 { 1126 {
1150 PidginWindow *gtkwin = data; 1127 PidginWindow *gtkwin = data;
1151 PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(gtkwin); 1128 PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(gtkwin);
1152 gtk_widget_show_all(gtkconv->quickfind.container); 1129 gtk_widget_show_all(gtkconv->quickfind.container);
1153 gtk_widget_grab_focus(gtkconv->quickfind.entry); 1130 gtk_widget_grab_focus(gtkconv->quickfind.entry);
1154 } 1131 }
1155 1132
1156 #ifdef USE_VV 1133 #ifdef USE_VV
1157 static void 1134 static void
1158 #if GTK_CHECK_VERSION(2,6,0)
1159 menu_initiate_media_call_cb(GtkAction *action, gpointer data) 1135 menu_initiate_media_call_cb(GtkAction *action, gpointer data)
1160 { 1136 {
1161 PidginWindow *win = (PidginWindow *)data; 1137 PidginWindow *win = (PidginWindow *)data;
1162 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1138 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1163 PurpleAccount *account = purple_conversation_get_account(conv); 1139 PurpleAccount *account = purple_conversation_get_account(conv);
1167 action == win->audio_call ? PURPLE_MEDIA_AUDIO : 1143 action == win->audio_call ? PURPLE_MEDIA_AUDIO :
1168 action == win->video_call ? PURPLE_MEDIA_VIDEO : 1144 action == win->video_call ? PURPLE_MEDIA_VIDEO :
1169 action == win->audio_video_call ? PURPLE_MEDIA_AUDIO | 1145 action == win->audio_video_call ? PURPLE_MEDIA_AUDIO |
1170 PURPLE_MEDIA_VIDEO : PURPLE_MEDIA_NONE); 1146 PURPLE_MEDIA_VIDEO : PURPLE_MEDIA_NONE);
1171 } 1147 }
1172 #else
1173 menu_initiate_media_call_cb(gpointer data, guint action, GtkWidget *widget)
1174 {
1175 PidginWindow *win = (PidginWindow *)data;
1176 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1177 PurpleAccount *account = purple_conversation_get_account(conv);
1178
1179 purple_prpl_initiate_media(account,
1180 purple_conversation_get_name(conv),
1181 action == 0 ? PURPLE_MEDIA_AUDIO :
1182 action == 1 ? PURPLE_MEDIA_VIDEO :
1183 action == 2 ? PURPLE_MEDIA_AUDIO |
1184 PURPLE_MEDIA_VIDEO : PURPLE_MEDIA_NONE);
1185 }
1186 #endif 1148 #endif
1187 #endif 1149
1188 1150 static void
1189 static void
1190 #if GTK_CHECK_VERSION(2,6,0)
1191 menu_send_file_cb(GtkAction *action, gpointer data) 1151 menu_send_file_cb(GtkAction *action, gpointer data)
1192 #else
1193 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget)
1194 #endif
1195 { 1152 {
1196 PidginWindow *win = data; 1153 PidginWindow *win = data;
1197 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1154 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1198 1155
1199 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 1156 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
1201 } 1158 }
1202 1159
1203 } 1160 }
1204 1161
1205 static void 1162 static void
1206 #if GTK_CHECK_VERSION(2,6,0)
1207 menu_get_attention_cb(GtkAction *ation, gpointer data) 1163 menu_get_attention_cb(GtkAction *ation, gpointer data)
1208 #else
1209 menu_get_attention_cb(gpointer data, guint action, GtkWidget *widget)
1210 #endif
1211 { 1164 {
1212 PidginWindow *win = data; 1165 PidginWindow *win = data;
1213 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1166 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1214 1167
1215 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 1168 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
1217 purple_conversation_get_name(conv), 0); 1170 purple_conversation_get_name(conv), 0);
1218 } 1171 }
1219 } 1172 }
1220 1173
1221 static void 1174 static void
1222 #if GTK_CHECK_VERSION(2,6,0)
1223 menu_add_pounce_cb(GtkAction *action, gpointer data) 1175 menu_add_pounce_cb(GtkAction *action, gpointer data)
1224 #else
1225 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget)
1226 #endif
1227 { 1176 {
1228 PidginWindow *win = data; 1177 PidginWindow *win = data;
1229 PurpleConversation *conv; 1178 PurpleConversation *conv;
1230 1179
1231 conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv; 1180 conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv;
1233 pidgin_pounce_editor_show(purple_conversation_get_account(conv), 1182 pidgin_pounce_editor_show(purple_conversation_get_account(conv),
1234 purple_conversation_get_name(conv), NULL); 1183 purple_conversation_get_name(conv), NULL);
1235 } 1184 }
1236 1185
1237 static void 1186 static void
1238 #if GTK_CHECK_VERSION(2,6,0)
1239 menu_insert_link_cb(GtkAction *action, gpointer data) 1187 menu_insert_link_cb(GtkAction *action, gpointer data)
1240 #else
1241 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget)
1242 #endif
1243 { 1188 {
1244 PidginWindow *win = data; 1189 PidginWindow *win = data;
1245 PidginConversation *gtkconv; 1190 PidginConversation *gtkconv;
1246 GtkIMHtmlToolbar *toolbar; 1191 GtkIMHtmlToolbar *toolbar;
1247 1192
1251 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), 1196 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link),
1252 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))); 1197 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link)));
1253 } 1198 }
1254 1199
1255 static void 1200 static void
1256 #if GTK_CHECK_VERSION(2,6,0)
1257 menu_insert_image_cb(GtkAction *action, gpointer data) 1201 menu_insert_image_cb(GtkAction *action, gpointer data)
1258 #else
1259 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget)
1260 #endif
1261 { 1202 {
1262 PidginWindow *win = data; 1203 PidginWindow *win = data;
1263 PurpleConversation *conv; 1204 PurpleConversation *conv;
1264 PidginConversation *gtkconv; 1205 PidginConversation *gtkconv;
1265 GtkIMHtmlToolbar *toolbar; 1206 GtkIMHtmlToolbar *toolbar;
1272 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))); 1213 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image)));
1273 } 1214 }
1274 1215
1275 1216
1276 static void 1217 static void
1277 #if GTK_CHECK_VERSION(2,6,0)
1278 menu_alias_cb(GtkAction *action, gpointer data) 1218 menu_alias_cb(GtkAction *action, gpointer data)
1279 #else
1280 menu_alias_cb(gpointer data, guint action, GtkWidget *widget)
1281 #endif
1282 { 1219 {
1283 PidginWindow *win = data; 1220 PidginWindow *win = data;
1284 PurpleConversation *conv; 1221 PurpleConversation *conv;
1285 PurpleAccount *account; 1222 PurpleAccount *account;
1286 const char *name; 1223 const char *name;
1303 pidgin_dialogs_alias_chat(c); 1240 pidgin_dialogs_alias_chat(c);
1304 } 1241 }
1305 } 1242 }
1306 1243
1307 static void 1244 static void
1308 #if GTK_CHECK_VERSION(2,6,0)
1309 menu_get_info_cb(GtkAction *action, gpointer data) 1245 menu_get_info_cb(GtkAction *action, gpointer data)
1310 #else
1311 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget)
1312 #endif
1313 { 1246 {
1314 PidginWindow *win = data; 1247 PidginWindow *win = data;
1315 PurpleConversation *conv; 1248 PurpleConversation *conv;
1316 1249
1317 conv = pidgin_conv_window_get_active_conversation(win); 1250 conv = pidgin_conv_window_get_active_conversation(win);
1318 1251
1319 info_cb(NULL, PIDGIN_CONVERSATION(conv)); 1252 info_cb(NULL, PIDGIN_CONVERSATION(conv));
1320 } 1253 }
1321 1254
1322 static void 1255 static void
1323 #if GTK_CHECK_VERSION(2,6,0)
1324 menu_invite_cb(GtkAction *action, gpointer data) 1256 menu_invite_cb(GtkAction *action, gpointer data)
1325 #else
1326 menu_invite_cb(gpointer data, guint action, GtkWidget *widget)
1327 #endif
1328 { 1257 {
1329 PidginWindow *win = data; 1258 PidginWindow *win = data;
1330 PurpleConversation *conv; 1259 PurpleConversation *conv;
1331 1260
1332 conv = pidgin_conv_window_get_active_conversation(win); 1261 conv = pidgin_conv_window_get_active_conversation(win);
1333 1262
1334 invite_cb(NULL, PIDGIN_CONVERSATION(conv)); 1263 invite_cb(NULL, PIDGIN_CONVERSATION(conv));
1335 } 1264 }
1336 1265
1337 static void 1266 static void
1338 #if GTK_CHECK_VERSION(2,6,0)
1339 menu_block_cb(GtkAction *action, gpointer data) 1267 menu_block_cb(GtkAction *action, gpointer data)
1340 #else
1341 menu_block_cb(gpointer data, guint action, GtkWidget *widget)
1342 #endif
1343 { 1268 {
1344 PidginWindow *win = data; 1269 PidginWindow *win = data;
1345 PurpleConversation *conv; 1270 PurpleConversation *conv;
1346 1271
1347 conv = pidgin_conv_window_get_active_conversation(win); 1272 conv = pidgin_conv_window_get_active_conversation(win);
1348 1273
1349 block_cb(NULL, PIDGIN_CONVERSATION(conv)); 1274 block_cb(NULL, PIDGIN_CONVERSATION(conv));
1350 } 1275 }
1351 1276
1352 static void 1277 static void
1353 #if GTK_CHECK_VERSION(2,6,0)
1354 menu_unblock_cb(GtkAction *action, gpointer data) 1278 menu_unblock_cb(GtkAction *action, gpointer data)
1355 #else
1356 menu_unblock_cb(gpointer data, guint action, GtkWidget *widget)
1357 #endif
1358 { 1279 {
1359 PidginWindow *win = data; 1280 PidginWindow *win = data;
1360 PurpleConversation *conv; 1281 PurpleConversation *conv;
1361 1282
1362 conv = pidgin_conv_window_get_active_conversation(win); 1283 conv = pidgin_conv_window_get_active_conversation(win);
1363 1284
1364 unblock_cb(NULL, PIDGIN_CONVERSATION(conv)); 1285 unblock_cb(NULL, PIDGIN_CONVERSATION(conv));
1365 } 1286 }
1366 1287
1367 static void 1288 static void
1368 #if GTK_CHECK_VERSION(2,6,0)
1369 menu_add_remove_cb(GtkAction *action, gpointer data) 1289 menu_add_remove_cb(GtkAction *action, gpointer data)
1370 #else
1371 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget)
1372 #endif
1373 { 1290 {
1374 PidginWindow *win = data; 1291 PidginWindow *win = data;
1375 PurpleConversation *conv; 1292 PurpleConversation *conv;
1376 1293
1377 conv = pidgin_conv_window_get_active_conversation(win); 1294 conv = pidgin_conv_window_get_active_conversation(win);
1412 #endif 1329 #endif
1413 } 1330 }
1414 } 1331 }
1415 1332
1416 static void 1333 static void
1417 #if GTK_CHECK_VERSION(2,6,0)
1418 menu_close_conv_cb(GtkAction *action, gpointer data) 1334 menu_close_conv_cb(GtkAction *action, gpointer data)
1419 #else
1420 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
1421 #endif
1422 { 1335 {
1423 PidginWindow *win = data; 1336 PidginWindow *win = data;
1424 1337
1425 close_conv_cb(NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win))); 1338 close_conv_cb(NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win)));
1426 } 1339 }
1427 1340
1428 static void 1341 static void
1429 #if GTK_CHECK_VERSION(2,6,0)
1430 menu_logging_cb(GtkAction *action, gpointer data) 1342 menu_logging_cb(GtkAction *action, gpointer data)
1431 #else
1432 menu_logging_cb(gpointer data, guint action, GtkWidget *widget)
1433 #endif
1434 { 1343 {
1435 PidginWindow *win = data; 1344 PidginWindow *win = data;
1436 PurpleConversation *conv; 1345 PurpleConversation *conv;
1437 gboolean logging; 1346 gboolean logging;
1438 PurpleBlistNode *node; 1347 PurpleBlistNode *node;
1440 conv = pidgin_conv_window_get_active_conversation(win); 1349 conv = pidgin_conv_window_get_active_conversation(win);
1441 1350
1442 if (conv == NULL) 1351 if (conv == NULL)
1443 return; 1352 return;
1444 1353
1445 #if GTK_CHECK_VERSION(2,6,0)
1446 logging = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)); 1354 logging = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
1447 #else
1448 logging = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
1449 #endif
1450 1355
1451 if (logging == purple_conversation_is_logging(conv)) 1356 if (logging == purple_conversation_is_logging(conv))
1452 return; 1357 return;
1453 1358
1454 node = get_conversation_blist_node(conv); 1359 node = get_conversation_blist_node(conv);
1497 break; 1402 break;
1498 } 1403 }
1499 } 1404 }
1500 1405
1501 static void 1406 static void
1502 #if GTK_CHECK_VERSION(2,6,0)
1503 menu_toolbar_cb(GtkAction *action, gpointer data) 1407 menu_toolbar_cb(GtkAction *action, gpointer data)
1504 { 1408 {
1505 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar", 1409 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
1506 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action))); 1410 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
1507 } 1411 }
1508 #else 1412
1509 menu_toolbar_cb(gpointer data, guint action, GtkWidget *widget) 1413 static void
1510 {
1511 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
1512 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
1513 }
1514 #endif
1515
1516 static void
1517 #if GTK_CHECK_VERSION(2,6,0)
1518 menu_sounds_cb(GtkAction *action, gpointer data) 1414 menu_sounds_cb(GtkAction *action, gpointer data)
1519 #else
1520 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget)
1521 #endif
1522 { 1415 {
1523 PidginWindow *win = data; 1416 PidginWindow *win = data;
1524 PurpleConversation *conv; 1417 PurpleConversation *conv;
1525 PidginConversation *gtkconv; 1418 PidginConversation *gtkconv;
1526 PurpleBlistNode *node; 1419 PurpleBlistNode *node;
1531 return; 1424 return;
1532 1425
1533 gtkconv = PIDGIN_CONVERSATION(conv); 1426 gtkconv = PIDGIN_CONVERSATION(conv);
1534 1427
1535 gtkconv->make_sound = 1428 gtkconv->make_sound =
1536 #if GTK_CHECK_VERSION(2,6,0)
1537 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)); 1429 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
1538 #else
1539 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
1540 #endif
1541 node = get_conversation_blist_node(conv); 1430 node = get_conversation_blist_node(conv);
1542 if (node) 1431 if (node)
1543 purple_blist_node_set_bool(node, "gtk-mute-sound", !gtkconv->make_sound); 1432 purple_blist_node_set_bool(node, "gtk-mute-sound", !gtkconv->make_sound);
1544 } 1433 }
1545 1434
1546 static void 1435 static void
1547 #if GTK_CHECK_VERSION(2,6,0)
1548 menu_timestamps_cb(GtkAction *action, gpointer data) 1436 menu_timestamps_cb(GtkAction *action, gpointer data)
1549 { 1437 {
1550 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps", 1438 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps",
1551 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action))); 1439 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
1552 } 1440 }
1553 #else
1554 menu_timestamps_cb(gpointer data, guint action, GtkWidget *widget)
1555 {
1556 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps",
1557 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
1558 }
1559 #endif
1560 1441
1561 static void 1442 static void
1562 chat_do_im(PidginConversation *gtkconv, const char *who) 1443 chat_do_im(PidginConversation *gtkconv, const char *who)
1563 { 1444 {
1564 PurpleConversation *conv = gtkconv->active_conv; 1445 PurpleConversation *conv = gtkconv->active_conv;
2361 return; 2242 return;
2362 2243
2363 purple_conversation_close_logs(old_conv); 2244 purple_conversation_close_logs(old_conv);
2364 gtkconv->active_conv = conv; 2245 gtkconv->active_conv = conv;
2365 2246
2366 #if GTK_CHECK_VERSION(2,6,0)
2367 purple_conversation_set_logging(conv, 2247 purple_conversation_set_logging(conv,
2368 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(gtkconv->win->menu.logging))); 2248 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(gtkconv->win->menu.logging)));
2369 #else
2370 purple_conversation_set_logging(conv,
2371 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gtkconv->win->menu.logging)));
2372 #endif
2373 2249
2374 entry = GTK_IMHTML(gtkconv->entry); 2250 entry = GTK_IMHTML(gtkconv->entry);
2375 protocol_name = purple_account_get_protocol_name(conv->account); 2251 protocol_name = purple_account_get_protocol_name(conv->account);
2376 gtk_imhtml_set_protocol_name(entry, protocol_name); 2252 gtk_imhtml_set_protocol_name(entry, protocol_name);
2377 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol_name); 2253 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol_name);
3190 { 3066 {
3191 g_return_val_if_fail(gtkconv != NULL, NULL); 3067 g_return_val_if_fail(gtkconv != NULL, NULL);
3192 return gtkconv->win; 3068 return gtkconv->win;
3193 } 3069 }
3194 3070
3195 #if GTK_CHECK_VERSION(2,6,0) 3071 #if 1
3196 3072
3197 static GtkActionEntry menu_entries[] = 3073 static GtkActionEntry menu_entries[] =
3198 /* TODO: fill out tooltips... */ 3074 /* TODO: fill out tooltips... */
3199 { 3075 {
3200 /* Conversation menu */ 3076 /* Conversation menu */
3361 { N_("/Options/Enable _Sounds"), NULL, menu_sounds_cb, 0, "<CheckItem>", NULL }, 3237 { N_("/Options/Enable _Sounds"), NULL, menu_sounds_cb, 0, "<CheckItem>", NULL },
3362 { "/Options/sep0", NULL, NULL, 0, "<Separator>", NULL }, 3238 { "/Options/sep0", NULL, NULL, 0, "<Separator>", NULL },
3363 { N_("/Options/Show Formatting _Toolbars"), NULL, menu_toolbar_cb, 0, "<CheckItem>", NULL }, 3239 { N_("/Options/Show Formatting _Toolbars"), NULL, menu_toolbar_cb, 0, "<CheckItem>", NULL },
3364 { N_("/Options/Show Ti_mestamps"), NULL, menu_timestamps_cb, 0, "<CheckItem>", NULL }, 3240 { N_("/Options/Show Ti_mestamps"), NULL, menu_timestamps_cb, 0, "<CheckItem>", NULL },
3365 }; 3241 };
3366
3367 static const int menu_item_count =
3368 sizeof(menu_items) / sizeof(*menu_items);
3369
3370 static const char *
3371 item_factory_translate_func (const char *path, gpointer func_data)
3372 {
3373 return _(path);
3374 }
3375
3376 #endif 3242 #endif
3377 3243
3378 static void 3244 static void
3379 sound_method_pref_changed_cb(const char *name, PurplePrefType type, 3245 sound_method_pref_changed_cb(const char *name, PurplePrefType type,
3380 gconstpointer value, gpointer data) 3246 gconstpointer value, gpointer data)
3382 PidginWindow *win = data; 3248 PidginWindow *win = data;
3383 const char *method = value; 3249 const char *method = value;
3384 3250
3385 if (!strcmp(method, "none")) 3251 if (!strcmp(method, "none"))
3386 { 3252 {
3387 #if GTK_CHECK_VERSION(2,6,0)
3388 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds), 3253 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds),
3389 FALSE); 3254 FALSE);
3390 gtk_action_set_sensitive(win->menu.sounds, FALSE); 3255 gtk_action_set_sensitive(win->menu.sounds, FALSE);
3391 #else
3392 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds),
3393 FALSE);
3394 gtk_widget_set_sensitive(win->menu.sounds, FALSE);
3395 #endif
3396 } 3256 }
3397 else 3257 else
3398 { 3258 {
3399 PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(win); 3259 PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(win);
3400 3260
3401 #if GTK_CHECK_VERSION(2,6,0)
3402 if (gtkconv != NULL) 3261 if (gtkconv != NULL)
3403 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds), 3262 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds),
3404 gtkconv->make_sound); 3263 gtkconv->make_sound);
3405 gtk_action_set_sensitive(win->menu.sounds, TRUE); 3264 gtk_action_set_sensitive(win->menu.sounds, TRUE);
3406 #else
3407 if (gtkconv != NULL)
3408 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds),
3409 gtkconv->make_sound);
3410 gtk_widget_set_sensitive(win->menu.sounds, TRUE);
3411 #endif
3412 } 3265 }
3413 } 3266 }
3414 3267
3415 /* Returns TRUE if some items were added to the menu, FALSE otherwise */ 3268 /* Returns TRUE if some items were added to the menu, FALSE otherwise */
3416 static gboolean 3269 static gboolean
3534 == PURPLE_CONV_TYPE_IM) { 3387 == PURPLE_CONV_TYPE_IM) {
3535 PurpleMediaCaps caps = 3388 PurpleMediaCaps caps =
3536 purple_prpl_get_media_caps(account, 3389 purple_prpl_get_media_caps(account,
3537 purple_conversation_get_name(conv)); 3390 purple_conversation_get_name(conv));
3538 3391
3539 #if GTK_CHECK_VERSION(2,6,0)
3540 gtk_action_set_sensitive(win->audio_call, 3392 gtk_action_set_sensitive(win->audio_call,
3541 caps & PURPLE_MEDIA_CAPS_AUDIO 3393 caps & PURPLE_MEDIA_CAPS_AUDIO
3542 ? TRUE : FALSE); 3394 ? TRUE : FALSE);
3543 gtk_action_set_sensitive(win->video_call, 3395 gtk_action_set_sensitive(win->video_call,
3544 caps & PURPLE_MEDIA_CAPS_VIDEO 3396 caps & PURPLE_MEDIA_CAPS_VIDEO
3545 ? TRUE : FALSE); 3397 ? TRUE : FALSE);
3546 gtk_action_set_sensitive(win->audio_video_call, 3398 gtk_action_set_sensitive(win->audio_video_call,
3547 caps & PURPLE_MEDIA_CAPS_AUDIO_VIDEO 3399 caps & PURPLE_MEDIA_CAPS_AUDIO_VIDEO
3548 ? TRUE : FALSE); 3400 ? TRUE : FALSE);
3549 #else
3550 gtk_widget_set_sensitive(win->audio_call,
3551 caps & PURPLE_MEDIA_CAPS_AUDIO
3552 ? TRUE : FALSE);
3553 gtk_widget_set_sensitive(win->video_call,
3554 caps & PURPLE_MEDIA_CAPS_VIDEO
3555 ? TRUE : FALSE);
3556 gtk_widget_set_sensitive(win->audio_video_call,
3557 caps & PURPLE_MEDIA_CAPS_AUDIO_VIDEO
3558 ? TRUE : FALSE);
3559 #endif
3560 } else if (purple_conversation_get_type(conv) 3401 } else if (purple_conversation_get_type(conv)
3561 == PURPLE_CONV_TYPE_CHAT) { 3402 == PURPLE_CONV_TYPE_CHAT) {
3562 /* for now, don't care about chats... */ 3403 /* for now, don't care about chats... */
3563 #if GTK_CHECK_VERSION(2,6,0)
3564 gtk_action_set_sensitive(win->audio_call, FALSE); 3404 gtk_action_set_sensitive(win->audio_call, FALSE);
3565 gtk_action_set_sensitive(win->video_call, FALSE); 3405 gtk_action_set_sensitive(win->video_call, FALSE);
3566 gtk_action_set_sensitive(win->audio_video_call, FALSE); 3406 gtk_action_set_sensitive(win->audio_video_call, FALSE);
3567 #else
3568 gtk_widget_set_sensitive(win->audio_call, FALSE);
3569 gtk_widget_set_sensitive(win->video_call, FALSE);
3570 gtk_widget_set_sensitive(win->audio_video_call, FALSE);
3571 #endif
3572 } else { 3407 } else {
3573 #if GTK_CHECK_VERSION(2,6,0)
3574 gtk_action_set_sensitive(win->audio_call, FALSE); 3408 gtk_action_set_sensitive(win->audio_call, FALSE);
3575 gtk_action_set_sensitive(win->video_call, FALSE); 3409 gtk_action_set_sensitive(win->video_call, FALSE);
3576 gtk_action_set_sensitive(win->audio_video_call, FALSE); 3410 gtk_action_set_sensitive(win->audio_video_call, FALSE);
3577 #else
3578 gtk_widget_set_sensitive(win->audio_call, FALSE);
3579 gtk_widget_set_sensitive(win->video_call, FALSE);
3580 gtk_widget_set_sensitive(win->audio_video_call, FALSE);
3581 #endif
3582 } 3411 }
3583 #endif 3412 #endif
3584 } 3413 }
3585 3414
3586 static void 3415 static void
3669 } 3498 }
3670 g_object_set_data(G_OBJECT(win->window), "plugin-actions", action_items); 3499 g_object_set_data(G_OBJECT(win->window), "plugin-actions", action_items);
3671 #endif 3500 #endif
3672 } 3501 }
3673 3502
3674 #if !GTK_CHECK_VERSION(2,6,0) 3503 #if 0
3675 static void menubar_activated(GtkWidget *item, gpointer data) 3504 static void menubar_activated(GtkWidget *item, gpointer data)
3676 { 3505 {
3677 PidginWindow *win = data; 3506 PidginWindow *win = data;
3678 regenerate_media_items(win); 3507 regenerate_media_items(win);
3679 regenerate_options_items(win); 3508 regenerate_options_items(win);
3700 static GtkWidget * 3529 static GtkWidget *
3701 setup_menubar(PidginWindow *win) 3530 setup_menubar(PidginWindow *win)
3702 { 3531 {
3703 GtkAccelGroup *accel_group; 3532 GtkAccelGroup *accel_group;
3704 const char *method; 3533 const char *method;
3705
3706 #if GTK_CHECK_VERSION(2,6,0)
3707 GtkActionGroup *action_group; 3534 GtkActionGroup *action_group;
3708 GError *error; 3535 GError *error;
3709 3536
3710 action_group = gtk_action_group_new("ConversationActions"); 3537 action_group = gtk_action_group_new("ConversationActions");
3711 gtk_action_group_add_actions(action_group, 3538 gtk_action_group_add_actions(action_group,
3831 "/Conversation/OptionsMenu/ShowFormattingToolbars"); 3658 "/Conversation/OptionsMenu/ShowFormattingToolbars");
3832 win->menu.show_timestamps = 3659 win->menu.show_timestamps =
3833 gtk_ui_manager_get_action(win->menu.ui, 3660 gtk_ui_manager_get_action(win->menu.ui,
3834 "/Conversation/OptionsMenu/ShowTimestamps"); 3661 "/Conversation/OptionsMenu/ShowTimestamps");
3835 win->menu.show_icon = NULL; 3662 win->menu.show_icon = NULL;
3836
3837 #else
3838 GtkWidget *menuitem;
3839
3840 accel_group = gtk_accel_group_new ();
3841 gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group);
3842 g_object_unref(accel_group);
3843
3844 win->menu.item_factory =
3845 gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group);
3846
3847 gtk_item_factory_set_translate_func(win->menu.item_factory,
3848 (GtkTranslateFunc)item_factory_translate_func,
3849 NULL, NULL);
3850
3851 gtk_item_factory_create_items(win->menu.item_factory, menu_item_count,
3852 menu_items, win);
3853 g_signal_connect(G_OBJECT(accel_group), "accel-changed",
3854 G_CALLBACK(pidgin_save_accels_cb), NULL);
3855
3856 /* Make sure the 'Conversation -> More' menuitems are regenerated whenever
3857 * the 'Conversation' menu pops up because the entries can change after the
3858 * conversation is created. */
3859 menuitem = gtk_item_factory_get_item(win->menu.item_factory, N_("/Conversation"));
3860 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(menubar_activated), win);
3861
3862 win->menu.menubar =
3863 gtk_item_factory_get_widget(win->menu.item_factory, "<main>");
3864
3865 win->menu.view_log =
3866 gtk_item_factory_get_widget(win->menu.item_factory,
3867 N_("/Conversation/View Log"));
3868
3869 #ifdef USE_VV
3870 win->audio_call =
3871 gtk_item_factory_get_widget(win->menu.item_factory,
3872 N_("/Conversation/Media/Audio Call"));
3873 win->video_call =
3874 gtk_item_factory_get_widget(win->menu.item_factory,
3875 N_("/Conversation/Media/Video Call"));
3876 win->audio_video_call =
3877 gtk_item_factory_get_widget(win->menu.item_factory,
3878 N_("/Conversation/Media/Audio\\/Video Call"));
3879 #endif
3880
3881 /* --- */
3882
3883 win->menu.send_file =
3884 gtk_item_factory_get_widget(win->menu.item_factory,
3885 N_("/Conversation/Send File..."));
3886
3887 g_object_set_data(G_OBJECT(win->window), "get_attention",
3888 gtk_item_factory_get_widget(win->menu.item_factory,
3889 N_("/Conversation/Get Attention")));
3890 win->menu.add_pounce =
3891 gtk_item_factory_get_widget(win->menu.item_factory,
3892 N_("/Conversation/Add Buddy Pounce..."));
3893
3894 /* --- */
3895
3896 win->menu.get_info =
3897 gtk_item_factory_get_widget(win->menu.item_factory,
3898 N_("/Conversation/Get Info"));
3899
3900 win->menu.invite =
3901 gtk_item_factory_get_widget(win->menu.item_factory,
3902 N_("/Conversation/Invite..."));
3903
3904 /* --- */
3905
3906 win->menu.alias =
3907 gtk_item_factory_get_widget(win->menu.item_factory,
3908 N_("/Conversation/Alias..."));
3909
3910 win->menu.block =
3911 gtk_item_factory_get_widget(win->menu.item_factory,
3912 N_("/Conversation/Block..."));
3913
3914 win->menu.unblock =
3915 gtk_item_factory_get_widget(win->menu.item_factory,
3916 N_("/Conversation/Unblock..."));
3917
3918 win->menu.add =
3919 gtk_item_factory_get_widget(win->menu.item_factory,
3920 N_("/Conversation/Add..."));
3921
3922 win->menu.remove =
3923 gtk_item_factory_get_widget(win->menu.item_factory,
3924 N_("/Conversation/Remove..."));
3925
3926 /* --- */
3927
3928 win->menu.insert_link =
3929 gtk_item_factory_get_widget(win->menu.item_factory,
3930 N_("/Conversation/Insert Link..."));
3931
3932 win->menu.insert_image =
3933 gtk_item_factory_get_widget(win->menu.item_factory,
3934 N_("/Conversation/Insert Image..."));
3935
3936 /* --- */
3937
3938 win->menu.logging =
3939 gtk_item_factory_get_widget(win->menu.item_factory,
3940 N_("/Options/Enable Logging"));
3941 win->menu.sounds =
3942 gtk_item_factory_get_widget(win->menu.item_factory,
3943 N_("/Options/Enable Sounds"));
3944 method = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method");
3945 if (method != NULL && !strcmp(method, "none"))
3946 {
3947 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds),
3948 FALSE);
3949 gtk_widget_set_sensitive(win->menu.sounds, FALSE);
3950 }
3951 purple_prefs_connect_callback(win, PIDGIN_PREFS_ROOT "/sound/method",
3952 sound_method_pref_changed_cb, win);
3953
3954 win->menu.show_formatting_toolbar =
3955 gtk_item_factory_get_widget(win->menu.item_factory,
3956 N_("/Options/Show Formatting Toolbars"));
3957 win->menu.show_timestamps =
3958 gtk_item_factory_get_widget(win->menu.item_factory,
3959 N_("/Options/Show Timestamps"));
3960 win->menu.show_icon = NULL;
3961
3962 #endif
3963 3663
3964 win->menu.tray = pidgin_menu_tray_new(); 3664 win->menu.tray = pidgin_menu_tray_new();
3965 gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar), 3665 gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar),
3966 win->menu.tray); 3666 win->menu.tray);
3967 gtk_widget_show(win->menu.tray); 3667 gtk_widget_show(win->menu.tray);
4140 return FALSE; 3840 return FALSE;
4141 3841
4142 if (!(b = purple_find_buddy(account, conv->name))) 3842 if (!(b = purple_find_buddy(account, conv->name)))
4143 return FALSE; 3843 return FALSE;
4144 3844
4145 #if GTK_CHECK_VERSION(2,6,0) 3845 #if 0 /* TODO */
4146 #else
4147 gtk_widget_show(win->menu.send_to); 3846 gtk_widget_show(win->menu.send_to);
4148 3847
4149 menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(win->menu.send_to)); 3848 menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(win->menu.send_to));
4150 3849
4151 for (child = gtk_container_get_children(GTK_CONTAINER(menu)); 3850 for (child = gtk_container_get_children(GTK_CONTAINER(menu));
4273 } 3972 }
4274 3973
4275 static void 3974 static void
4276 generate_send_to_items(PidginWindow *win) 3975 generate_send_to_items(PidginWindow *win)
4277 { 3976 {
4278 #if GTK_CHECK_VERSION(2,6,0) 3977 #if 0 /* TODO */
4279 #else
4280 GtkWidget *menu; 3978 GtkWidget *menu;
4281 GSList *group = NULL; 3979 GSList *group = NULL;
4282 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 3980 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
4283 PidginConversation *gtkconv; 3981 PidginConversation *gtkconv;
4284 GSList *l, *buds; 3982 GSList *l, *buds;
6868 PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); 6566 PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
6869 6567
6870 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->entry), message, 0); 6568 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->entry), message, 0);
6871 } 6569 }
6872 6570
6873 /* Mask functions with ones from newer GTK+ */
6874 #if GTK_CHECK_VERSION(2,6,0)
6875 #define gtk_widget_set_sensitive_ gtk_widget_set_sensitive
6876 #define gtk_widget_show_ gtk_widget_show
6877 #define gtk_widget_hide_ gtk_widget_hide
6878 #define gtk_widget_set_sensitive gtk_action_set_sensitive
6879 #define gtk_widget_show(x) gtk_action_set_visible((x), TRUE)
6880 #define gtk_widget_hide(x) gtk_action_set_visible((x), FALSE)
6881 #endif
6882
6883 /* 6571 /*
6884 * Makes sure all the menu items and all the buttons are hidden/shown and 6572 * Makes sure all the menu items and all the buttons are hidden/shown and
6885 * sensitive/insensitive. This is called after changing tabs and when an 6573 * sensitive/insensitive. This is called after changing tabs and when an
6886 * account signs on or off. 6574 * account signs on or off.
6887 */ 6575 */
6916 */ 6604 */
6917 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 6605 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
6918 /* Show stuff that applies to IMs, hide stuff that applies to chats */ 6606 /* Show stuff that applies to IMs, hide stuff that applies to chats */
6919 6607
6920 /* Deal with menu items */ 6608 /* Deal with menu items */
6921 gtk_widget_show(win->menu.view_log); 6609 gtk_action_set_visible(win->menu.view_log, TRUE);
6922 gtk_widget_show(win->menu.send_file); 6610 gtk_action_set_visible(win->menu.send_file, TRUE);
6923 gtk_widget_show(g_object_get_data(G_OBJECT(win->window), "get_attention")); 6611 gtk_action_set_visible(g_object_get_data(G_OBJECT(win->window), "get_attention"), TRUE);
6924 gtk_widget_show(win->menu.add_pounce); 6612 gtk_action_set_visible(win->menu.add_pounce, TRUE);
6925 gtk_widget_show(win->menu.get_info); 6613 gtk_action_set_visible(win->menu.get_info, TRUE);
6926 gtk_widget_hide(win->menu.invite); 6614 gtk_action_set_visible(win->menu.invite, FALSE);
6927 gtk_widget_show(win->menu.alias); 6615 gtk_action_set_visible(win->menu.alias, TRUE);
6928 if (purple_privacy_check(account, purple_conversation_get_name(conv))) { 6616 if (purple_privacy_check(account, purple_conversation_get_name(conv))) {
6929 gtk_widget_hide(win->menu.unblock); 6617 gtk_action_set_visible(win->menu.unblock, FALSE);
6930 gtk_widget_show(win->menu.block); 6618 gtk_action_set_visible(win->menu.block, TRUE);
6931 } else { 6619 } else {
6932 gtk_widget_hide(win->menu.block); 6620 gtk_action_set_visible(win->menu.block, FALSE);
6933 gtk_widget_show(win->menu.unblock); 6621 gtk_action_set_visible(win->menu.unblock, TRUE);
6934 } 6622 }
6935 6623
6936 if ((account == NULL) || purple_find_buddy(account, purple_conversation_get_name(conv)) == NULL) { 6624 if ((account == NULL) || purple_find_buddy(account, purple_conversation_get_name(conv)) == NULL) {
6937 gtk_widget_show(win->menu.add); 6625 gtk_action_set_visible(win->menu.add, TRUE);
6938 gtk_widget_hide(win->menu.remove); 6626 gtk_action_set_visible(win->menu.remove, FALSE);
6939 } else { 6627 } else {
6940 gtk_widget_show(win->menu.remove); 6628 gtk_action_set_visible(win->menu.remove, TRUE);
6941 gtk_widget_hide(win->menu.add); 6629 gtk_action_set_visible(win->menu.add, FALSE);
6942 } 6630 }
6943 6631
6944 gtk_widget_show(win->menu.insert_link); 6632 gtk_action_set_visible(win->menu.insert_link, TRUE);
6945 gtk_widget_show(win->menu.insert_image); 6633 gtk_action_set_visible(win->menu.insert_image, TRUE);
6946 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { 6634 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) {
6947 /* Show stuff that applies to Chats, hide stuff that applies to IMs */ 6635 /* Show stuff that applies to Chats, hide stuff that applies to IMs */
6948 6636
6949 /* Deal with menu items */ 6637 /* Deal with menu items */
6950 gtk_widget_show(win->menu.view_log); 6638 gtk_action_set_visible(win->menu.view_log, TRUE);
6951 gtk_widget_hide(win->menu.send_file); 6639 gtk_action_set_visible(win->menu.send_file, FALSE);
6952 gtk_widget_hide(g_object_get_data(G_OBJECT(win->window), "get_attention")); 6640 gtk_action_set_visible(g_object_get_data(G_OBJECT(win->window), "get_attention"), FALSE);
6953 gtk_widget_hide(win->menu.add_pounce); 6641 gtk_action_set_visible(win->menu.add_pounce, FALSE);
6954 gtk_widget_hide(win->menu.get_info); 6642 gtk_action_set_visible(win->menu.get_info, FALSE);
6955 gtk_widget_show(win->menu.invite); 6643 gtk_action_set_visible(win->menu.invite, TRUE);
6956 gtk_widget_show(win->menu.alias); 6644 gtk_action_set_visible(win->menu.alias, TRUE);
6957 gtk_widget_hide(win->menu.block); 6645 gtk_action_set_visible(win->menu.block, FALSE);
6958 gtk_widget_hide(win->menu.unblock); 6646 gtk_action_set_visible(win->menu.unblock, FALSE);
6959 6647
6960 if ((account == NULL) || purple_blist_find_chat(account, purple_conversation_get_name(conv)) == NULL) { 6648 if ((account == NULL) || purple_blist_find_chat(account, purple_conversation_get_name(conv)) == NULL) {
6961 /* If the chat is NOT in the buddy list */ 6649 /* If the chat is NOT in the buddy list */
6962 gtk_widget_show(win->menu.add); 6650 gtk_action_set_visible(win->menu.add, TRUE);
6963 gtk_widget_hide(win->menu.remove); 6651 gtk_action_set_visible(win->menu.remove, FALSE);
6964 } else { 6652 } else {
6965 /* If the chat IS in the buddy list */ 6653 /* If the chat IS in the buddy list */
6966 gtk_widget_hide(win->menu.add); 6654 gtk_action_set_visible(win->menu.add, FALSE);
6967 gtk_widget_show(win->menu.remove); 6655 gtk_action_set_visible(win->menu.remove, TRUE);
6968 } 6656 }
6969 6657
6970 gtk_widget_show(win->menu.insert_link); 6658 gtk_action_set_visible(win->menu.insert_link, TRUE);
6971 gtk_widget_show(win->menu.insert_image); 6659 gtk_action_set_visible(win->menu.insert_image, TRUE);
6972 } 6660 }
6973 6661
6974 /* 6662 /*
6975 * Handle graying stuff out based on whether an account is connected 6663 * Handle graying stuff out based on whether an account is connected
6976 * and what features that account supports. 6664 * and what features that account supports.
7011 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); 6699 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons);
7012 if (account != NULL) 6700 if (account != NULL)
7013 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), purple_account_get_protocol_id(account)); 6701 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), purple_account_get_protocol_id(account));
7014 6702
7015 /* Deal with menu items */ 6703 /* Deal with menu items */
7016 gtk_widget_set_sensitive(win->menu.view_log, TRUE); 6704 gtk_action_set_sensitive(win->menu.view_log, TRUE);
7017 gtk_widget_set_sensitive(win->menu.add_pounce, TRUE); 6705 gtk_action_set_sensitive(win->menu.add_pounce, TRUE);
7018 gtk_widget_set_sensitive(win->menu.get_info, (prpl_info->get_info != NULL)); 6706 gtk_action_set_sensitive(win->menu.get_info, (prpl_info->get_info != NULL));
7019 gtk_widget_set_sensitive(win->menu.invite, (prpl_info->chat_invite != NULL)); 6707 gtk_action_set_sensitive(win->menu.invite, (prpl_info->chat_invite != NULL));
7020 gtk_widget_set_sensitive(win->menu.insert_link, (conv->features & PURPLE_CONNECTION_HTML)); 6708 gtk_action_set_sensitive(win->menu.insert_link, (conv->features & PURPLE_CONNECTION_HTML));
7021 gtk_widget_set_sensitive(win->menu.insert_image, !(conv->features & PURPLE_CONNECTION_NO_IMAGES)); 6709 gtk_action_set_sensitive(win->menu.insert_image, !(conv->features & PURPLE_CONNECTION_NO_IMAGES));
7022 6710
7023 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) 6711 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
7024 { 6712 {
7025 gtk_widget_set_sensitive(win->menu.add, (prpl_info->add_buddy != NULL)); 6713 gtk_action_set_sensitive(win->menu.add, (prpl_info->add_buddy != NULL));
7026 gtk_widget_set_sensitive(win->menu.remove, (prpl_info->remove_buddy != NULL)); 6714 gtk_action_set_sensitive(win->menu.remove, (prpl_info->remove_buddy != NULL));
7027 gtk_widget_set_sensitive(win->menu.send_file, 6715 gtk_action_set_sensitive(win->menu.send_file,
7028 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file || 6716 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file ||
7029 prpl_info->can_receive_file(gc, purple_conversation_get_name(conv))))); 6717 prpl_info->can_receive_file(gc, purple_conversation_get_name(conv)))));
7030 gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(win->window), "get_attention"), (prpl_info->send_attention != NULL)); 6718 gtk_action_set_sensitive(g_object_get_data(G_OBJECT(win->window), "get_attention"), (prpl_info->send_attention != NULL));
7031 gtk_widget_set_sensitive(win->menu.alias, 6719 gtk_action_set_sensitive(win->menu.alias,
7032 (account != NULL) && 6720 (account != NULL) &&
7033 (purple_find_buddy(account, purple_conversation_get_name(conv)) != NULL)); 6721 (purple_find_buddy(account, purple_conversation_get_name(conv)) != NULL));
7034 } 6722 }
7035 else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) 6723 else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
7036 { 6724 {
7037 gtk_widget_set_sensitive(win->menu.add, (prpl_info->join_chat != NULL)); 6725 gtk_action_set_sensitive(win->menu.add, (prpl_info->join_chat != NULL));
7038 gtk_widget_set_sensitive(win->menu.remove, (prpl_info->join_chat != NULL)); 6726 gtk_action_set_sensitive(win->menu.remove, (prpl_info->join_chat != NULL));
7039 gtk_widget_set_sensitive(win->menu.alias, 6727 gtk_action_set_sensitive(win->menu.alias,
7040 (account != NULL) && 6728 (account != NULL) &&
7041 (purple_blist_find_chat(account, purple_conversation_get_name(conv)) != NULL)); 6729 (purple_blist_find_chat(account, purple_conversation_get_name(conv)) != NULL));
7042 } 6730 }
7043 6731
7044 } else { 6732 } else {
7045 /* Account is offline */ 6733 /* Account is offline */
7046 /* Or it's a chat that we've left. */ 6734 /* Or it's a chat that we've left. */
7047 6735
7048 /* Then deal with menu items */ 6736 /* Then deal with menu items */
7049 gtk_widget_set_sensitive(win->menu.view_log, TRUE); 6737 gtk_action_set_sensitive(win->menu.view_log, TRUE);
7050 gtk_widget_set_sensitive(win->menu.send_file, FALSE); 6738 gtk_action_set_sensitive(win->menu.send_file, FALSE);
7051 gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(win->window), 6739 gtk_action_set_sensitive(g_object_get_data(G_OBJECT(win->window),
7052 "get_attention"), FALSE); 6740 "get_attention"), FALSE);
7053 gtk_widget_set_sensitive(win->menu.add_pounce, TRUE); 6741 gtk_action_set_sensitive(win->menu.add_pounce, TRUE);
7054 gtk_widget_set_sensitive(win->menu.get_info, FALSE); 6742 gtk_action_set_sensitive(win->menu.get_info, FALSE);
7055 gtk_widget_set_sensitive(win->menu.invite, FALSE); 6743 gtk_action_set_sensitive(win->menu.invite, FALSE);
7056 gtk_widget_set_sensitive(win->menu.alias, FALSE); 6744 gtk_action_set_sensitive(win->menu.alias, FALSE);
7057 gtk_widget_set_sensitive(win->menu.add, FALSE); 6745 gtk_action_set_sensitive(win->menu.add, FALSE);
7058 gtk_widget_set_sensitive(win->menu.remove, FALSE); 6746 gtk_action_set_sensitive(win->menu.remove, FALSE);
7059 gtk_widget_set_sensitive(win->menu.insert_link, TRUE); 6747 gtk_action_set_sensitive(win->menu.insert_link, TRUE);
7060 gtk_widget_set_sensitive(win->menu.insert_image, FALSE); 6748 gtk_action_set_sensitive(win->menu.insert_image, FALSE);
7061 } 6749 }
7062 6750
7063 /* 6751 /*
7064 * Update the window's icon 6752 * Update the window's icon
7065 */ 6753 */
7086 g_object_unref(G_OBJECT(window_icon)); 6774 g_object_unref(G_OBJECT(window_icon));
7087 g_list_free(l); 6775 g_list_free(l);
7088 } 6776 }
7089 } 6777 }
7090 } 6778 }
7091
7092 /* Restore the functions */
7093 #if GTK_CHECK_VERSION(2,6,0)
7094 #undef gtk_widget_set_sensitive
7095 #undef gtk_widget_show
7096 #undef gtk_widget_hide
7097
7098 #define gtk_widget_set_sensitive gtk_widget_set_sensitive_
7099 #define gtk_widget_show gtk_widget_show_
7100 #define gtk_widget_hide gtk_widget_hide_
7101 #endif
7102 6779
7103 static void 6780 static void
7104 pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields) 6781 pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields)
7105 { 6782 {
7106 PidginConversation *gtkconv; 6783 PidginConversation *gtkconv;
7754 continue; 7431 continue;
7755 7432
7756 gtkconv = PIDGIN_CONVERSATION(conv); 7433 gtkconv = PIDGIN_CONVERSATION(conv);
7757 win = gtkconv->win; 7434 win = gtkconv->win;
7758 7435
7759 #if GTK_CHECK_VERSION(2,6,0)
7760 gtk_toggle_action_set_active( 7436 gtk_toggle_action_set_active(
7761 GTK_TOGGLE_ACTION(win->menu.show_timestamps), 7437 GTK_TOGGLE_ACTION(win->menu.show_timestamps),
7762 (gboolean)GPOINTER_TO_INT(value)); 7438 (gboolean)GPOINTER_TO_INT(value));
7763 #else
7764 gtk_check_menu_item_set_active(
7765 GTK_CHECK_MENU_ITEM(win->menu.show_timestamps),
7766 (gboolean)GPOINTER_TO_INT(value));
7767 #endif
7768 7439
7769 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 7440 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
7770 (gboolean)GPOINTER_TO_INT(value)); 7441 (gboolean)GPOINTER_TO_INT(value));
7771 } 7442 }
7772 } 7443 }
7788 continue; 7459 continue;
7789 7460
7790 gtkconv = PIDGIN_CONVERSATION(conv); 7461 gtkconv = PIDGIN_CONVERSATION(conv);
7791 win = gtkconv->win; 7462 win = gtkconv->win;
7792 7463
7793 #if GTK_CHECK_VERSION(2,6,0)
7794 gtk_toggle_action_set_active( 7464 gtk_toggle_action_set_active(
7795 GTK_TOGGLE_ACTION(win->menu.show_formatting_toolbar), 7465 GTK_TOGGLE_ACTION(win->menu.show_formatting_toolbar),
7796 (gboolean)GPOINTER_TO_INT(value)); 7466 (gboolean)GPOINTER_TO_INT(value));
7797 #else
7798 gtk_check_menu_item_set_active(
7799 GTK_CHECK_MENU_ITEM(win->menu.show_formatting_toolbar),
7800 (gboolean)GPOINTER_TO_INT(value));
7801 #endif
7802 7467
7803 if ((gboolean)GPOINTER_TO_INT(value)) 7468 if ((gboolean)GPOINTER_TO_INT(value))
7804 gtk_widget_show(gtkconv->toolbar); 7469 gtk_widget_show(gtkconv->toolbar);
7805 else 7470 else
7806 gtk_widget_hide(gtkconv->toolbar); 7471 gtk_widget_hide(gtkconv->toolbar);
9052 8717
9053 if (e->button == 3) { 8718 if (e->button == 3) {
9054 /* Right click was pressed. Popup the context menu. */ 8719 /* Right click was pressed. Popup the context menu. */
9055 GtkWidget *menu = gtk_menu_new(), *sub; 8720 GtkWidget *menu = gtk_menu_new(), *sub;
9056 gboolean populated = populate_menu_with_options(menu, gtkconv, TRUE); 8721 gboolean populated = populate_menu_with_options(menu, gtkconv, TRUE);
9057 #if GTK_CHECK_VERSION(2,6,0) 8722 #if 0 /* TODO */
9058 #else
9059 sub = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to)); 8723 sub = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to));
9060 8724
9061 if (sub && GTK_WIDGET_IS_SENSITIVE(gtkconv->win->menu.send_to)) { 8725 if (sub && GTK_WIDGET_IS_SENSITIVE(gtkconv->win->menu.send_to)) {
9062 GtkWidget *item = gtk_menu_item_new_with_mnemonic(_("S_end To")); 8726 GtkWidget *item = gtk_menu_item_new_with_mnemonic(_("S_end To"));
9063 if (populated) 8727 if (populated)
9576 gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE); 9240 gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE);
9577 } 9241 }
9578 9242
9579 /* Update the menubar */ 9243 /* Update the menubar */
9580 9244
9581 #if GTK_CHECK_VERSION(2,6,0)
9582 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtkconv->win->menu.logging), 9245 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtkconv->win->menu.logging),
9583 purple_conversation_is_logging(conv)); 9246 purple_conversation_is_logging(conv));
9584 #else
9585 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->win->menu.logging),
9586 purple_conversation_is_logging(conv));
9587 #endif
9588 9247
9589 generate_send_to_items(win); 9248 generate_send_to_items(win);
9590 regenerate_options_items(win); 9249 regenerate_options_items(win);
9591 regenerate_plugins_items(win); 9250 regenerate_plugins_items(win);
9592 9251
9593 pidgin_conv_switch_active_conversation(conv); 9252 pidgin_conv_switch_active_conversation(conv);
9594 9253
9595 sound_method = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"); 9254 sound_method = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method");
9596 #if GTK_CHECK_VERSION(2,6,0)
9597 if (strcmp(sound_method, "none") != 0) 9255 if (strcmp(sound_method, "none") != 0)
9598 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds), 9256 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds),
9599 gtkconv->make_sound); 9257 gtkconv->make_sound);
9600 9258
9601 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.show_formatting_toolbar), 9259 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.show_formatting_toolbar),
9602 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar")); 9260 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar"));
9603 9261
9604 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.show_timestamps), 9262 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.show_timestamps),
9605 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps")); 9263 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps"));
9606 #else
9607 if (strcmp(sound_method, "none") != 0)
9608 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds),
9609 gtkconv->make_sound);
9610
9611 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_formatting_toolbar),
9612 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar"));
9613
9614 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_timestamps),
9615 purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps"));
9616 #endif
9617 9264
9618 /* 9265 /*
9619 * We pause icons when they are not visible. If this icon should 9266 * We pause icons when they are not visible. If this icon should
9620 * be animated then start it back up again. 9267 * be animated then start it back up again.
9621 */ 9268 */
9861 } 9508 }
9862 return; 9509 return;
9863 } 9510 }
9864 gtk_widget_destroy(win->window); 9511 gtk_widget_destroy(win->window);
9865 9512
9866 #if GTK_CHECK_VERSION(2,6,0)
9867 g_object_unref(G_OBJECT(win->menu.ui)); 9513 g_object_unref(G_OBJECT(win->menu.ui));
9868 #else
9869 g_object_unref(G_OBJECT(win->menu.item_factory));
9870 #endif
9871 9514
9872 purple_notify_close_with_handle(win); 9515 purple_notify_close_with_handle(win);
9873 purple_signals_disconnect_by_handle(win); 9516 purple_signals_disconnect_by_handle(win);
9874 9517
9875 g_free(win); 9518 g_free(win);

mercurial