pidgin/gtkconv.c

branch
cpw.qulogic.gtk3
changeset 32358
2d2e5d960297
parent 32347
169ee59389a1
child 32359
ce65a3b059ac
equal deleted inserted replaced
32357:d9c2ab53f77a 32358:2d2e5d960297
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,4,0)
163 static const char *item_factory_translate_func (const char *path, gpointer func_data); 164 static const char *item_factory_translate_func (const char *path, gpointer func_data);
165 #endif
164 gboolean pidgin_conv_has_focus(PurpleConversation *conv); 166 gboolean pidgin_conv_has_focus(PurpleConversation *conv);
165 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background); 167 static GdkColor* generate_nick_colors(guint *numcolors, GdkColor background);
166 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast); 168 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast);
167 static GtkTextTag *get_buddy_tag(PurpleConversation *conv, const char *who, PurpleMessageFlags flag, gboolean create); 169 static GtkTextTag *get_buddy_tag(PurpleConversation *conv, const char *who, PurpleMessageFlags flag, gboolean create);
168 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields); 170 static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields);
951 if (info != NULL) 953 if (info != NULL)
952 gtk_widget_grab_focus(info->entry); 954 gtk_widget_grab_focus(info->entry);
953 } 955 }
954 956
955 static void 957 static void
958 #if GTK_CHECK_VERSION(2,4,0)
959 menu_new_conv_cb(GtkAction *action, gpointer data)
960 #else
956 menu_new_conv_cb(gpointer data, guint action, GtkWidget *widget) 961 menu_new_conv_cb(gpointer data, guint action, GtkWidget *widget)
962 #endif
957 { 963 {
958 pidgin_dialogs_im(); 964 pidgin_dialogs_im();
959 } 965 }
960 966
961 static void 967 static void
992 /* 998 /*
993 * It would be kinda cool if this gave the option of saving a 999 * It would be kinda cool if this gave the option of saving a
994 * plaintext v. HTML file. 1000 * plaintext v. HTML file.
995 */ 1001 */
996 static void 1002 static void
1003 #if GTK_CHECK_VERSION(2,4,0)
1004 menu_save_as_cb(GtkAction *action, gpointer data)
1005 #else
997 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget) 1006 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget)
1007 #endif
998 { 1008 {
999 PidginWindow *win = data; 1009 PidginWindow *win = data;
1000 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1010 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1001 PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); 1011 PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name);
1002 const char *name; 1012 const char *name;
1022 1032
1023 g_free(buf); 1033 g_free(buf);
1024 } 1034 }
1025 1035
1026 static void 1036 static void
1037 #if GTK_CHECK_VERSION(2,4,0)
1038 menu_view_log_cb(GtkAction *action, gpointer data)
1039 #else
1027 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget) 1040 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget)
1041 #endif
1028 { 1042 {
1029 PidginWindow *win = data; 1043 PidginWindow *win = data;
1030 PurpleConversation *conv; 1044 PurpleConversation *conv;
1031 PurpleLogType type; 1045 PurpleLogType type;
1032 PidginBuddyList *gtkblist; 1046 PidginBuddyList *gtkblist;
1050 cursor = gdk_cursor_new(GDK_WATCH); 1064 cursor = gdk_cursor_new(GDK_WATCH);
1051 gdk_window_set_cursor(gtkblist->window->window, cursor); 1065 gdk_window_set_cursor(gtkblist->window->window, cursor);
1052 gdk_window_set_cursor(win->window->window, cursor); 1066 gdk_window_set_cursor(win->window->window, cursor);
1053 gdk_cursor_unref(cursor); 1067 gdk_cursor_unref(cursor);
1054 #if GTK_CHECK_VERSION(2,4,0) 1068 #if GTK_CHECK_VERSION(2,4,0)
1055 gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window))); 1069 //FIXME: gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window)));
1056 #else 1070 #else
1057 gdk_flush(); 1071 gdk_flush();
1058 #endif 1072 #endif
1059 1073
1060 name = purple_conversation_get_name(conv); 1074 name = purple_conversation_get_name(conv);
1080 gdk_window_set_cursor(gtkblist->window->window, NULL); 1094 gdk_window_set_cursor(gtkblist->window->window, NULL);
1081 gdk_window_set_cursor(win->window->window, NULL); 1095 gdk_window_set_cursor(win->window->window, NULL);
1082 } 1096 }
1083 1097
1084 static void 1098 static void
1099 #if GTK_CHECK_VERSION(2,4,0)
1100 menu_clear_cb(GtkAction *action, gpointer data)
1101 #else
1085 menu_clear_cb(gpointer data, guint action, GtkWidget *widget) 1102 menu_clear_cb(gpointer data, guint action, GtkWidget *widget)
1103 #endif
1086 { 1104 {
1087 PidginWindow *win = data; 1105 PidginWindow *win = data;
1088 PurpleConversation *conv; 1106 PurpleConversation *conv;
1089 1107
1090 conv = pidgin_conv_window_get_active_conversation(win); 1108 conv = pidgin_conv_window_get_active_conversation(win);
1141 break; 1159 break;
1142 } 1160 }
1143 } 1161 }
1144 1162
1145 static void 1163 static void
1164 #if GTK_CHECK_VERSION(2,4,0)
1165 menu_find_cb(GtkAction *action, gpointer data)
1166 #else
1146 menu_find_cb(gpointer data, guint action, GtkWidget *widget) 1167 menu_find_cb(gpointer data, guint action, GtkWidget *widget)
1168 #endif
1147 { 1169 {
1148 PidginWindow *gtkwin = data; 1170 PidginWindow *gtkwin = data;
1149 GtkWidget *hbox; 1171 GtkWidget *hbox;
1150 GtkWidget *img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, 1172 GtkWidget *img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION,
1151 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); 1173 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
1201 gtk_widget_grab_focus(s->entry); 1223 gtk_widget_grab_focus(s->entry);
1202 } 1224 }
1203 1225
1204 #ifdef USE_VV 1226 #ifdef USE_VV
1205 static void 1227 static void
1228 #if GTK_CHECK_VERSION(2,4,0)
1229 menu_initiate_media_call_cb(GtkAction *action, gpointer data)
1230 #else
1206 menu_initiate_media_call_cb(gpointer data, guint action, GtkWidget *widget) 1231 menu_initiate_media_call_cb(gpointer data, guint action, GtkWidget *widget)
1232 #endif
1207 { 1233 {
1208 PidginWindow *win = (PidginWindow *)data; 1234 PidginWindow *win = (PidginWindow *)data;
1209 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1235 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1210 PurpleAccount *account = purple_conversation_get_account(conv); 1236 PurpleAccount *account = purple_conversation_get_account(conv);
1211 1237
1238 /* FIXME: action is not an int... */
1212 purple_prpl_initiate_media(account, 1239 purple_prpl_initiate_media(account,
1213 purple_conversation_get_name(conv), 1240 purple_conversation_get_name(conv),
1214 action == 0 ? PURPLE_MEDIA_AUDIO : 1241 action == 0 ? PURPLE_MEDIA_AUDIO :
1215 action == 1 ? PURPLE_MEDIA_VIDEO : 1242 action == 1 ? PURPLE_MEDIA_VIDEO :
1216 action == 2 ? PURPLE_MEDIA_AUDIO | 1243 action == 2 ? PURPLE_MEDIA_AUDIO |
1217 PURPLE_MEDIA_VIDEO : PURPLE_MEDIA_NONE); 1244 PURPLE_MEDIA_VIDEO : PURPLE_MEDIA_NONE);
1218 } 1245 }
1219 #endif 1246 #endif
1220 1247
1221 static void 1248 static void
1249 #if GTK_CHECK_VERSION(2,4,0)
1250 menu_send_file_cb(GtkAction *action, gpointer data)
1251 #else
1222 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget) 1252 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget)
1253 #endif
1223 { 1254 {
1224 PidginWindow *win = data; 1255 PidginWindow *win = data;
1225 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 1256 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
1226 1257
1227 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 1258 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
1229 } 1260 }
1230 1261
1231 } 1262 }
1232 1263
1233 static void 1264 static void
1265 #if GTK_CHECK_VERSION(2,4,0)
1266 menu_add_pounce_cb(GtkAction *action, gpointer data)
1267 #else
1234 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) 1268 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget)
1269 #endif
1235 { 1270 {
1236 PidginWindow *win = data; 1271 PidginWindow *win = data;
1237 PurpleConversation *conv; 1272 PurpleConversation *conv;
1238 1273
1239 conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv; 1274 conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv;
1241 pidgin_pounce_editor_show(purple_conversation_get_account(conv), 1276 pidgin_pounce_editor_show(purple_conversation_get_account(conv),
1242 purple_conversation_get_name(conv), NULL); 1277 purple_conversation_get_name(conv), NULL);
1243 } 1278 }
1244 1279
1245 static void 1280 static void
1281 #if GTK_CHECK_VERSION(2,4,0)
1282 menu_insert_link_cb(GtkAction *action, gpointer data)
1283 #else
1246 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) 1284 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget)
1285 #endif
1247 { 1286 {
1248 PidginWindow *win = data; 1287 PidginWindow *win = data;
1249 PidginConversation *gtkconv; 1288 PidginConversation *gtkconv;
1250 GtkIMHtmlToolbar *toolbar; 1289 GtkIMHtmlToolbar *toolbar;
1251 1290
1255 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), 1294 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link),
1256 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))); 1295 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link)));
1257 } 1296 }
1258 1297
1259 static void 1298 static void
1299 #if GTK_CHECK_VERSION(2,4,0)
1300 menu_insert_image_cb(GtkAction *action, gpointer data)
1301 #else
1260 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) 1302 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget)
1303 #endif
1261 { 1304 {
1262 PidginWindow *win = data; 1305 PidginWindow *win = data;
1263 PurpleConversation *conv; 1306 PurpleConversation *conv;
1264 PidginConversation *gtkconv; 1307 PidginConversation *gtkconv;
1265 GtkIMHtmlToolbar *toolbar; 1308 GtkIMHtmlToolbar *toolbar;
1272 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))); 1315 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image)));
1273 } 1316 }
1274 1317
1275 1318
1276 static void 1319 static void
1320 #if GTK_CHECK_VERSION(2,4,0)
1321 menu_alias_cb(GtkAction *action, gpointer data)
1322 #else
1277 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) 1323 menu_alias_cb(gpointer data, guint action, GtkWidget *widget)
1324 #endif
1278 { 1325 {
1279 PidginWindow *win = data; 1326 PidginWindow *win = data;
1280 PurpleConversation *conv; 1327 PurpleConversation *conv;
1281 PurpleAccount *account; 1328 PurpleAccount *account;
1282 const char *name; 1329 const char *name;
1299 pidgin_dialogs_alias_chat(c); 1346 pidgin_dialogs_alias_chat(c);
1300 } 1347 }
1301 } 1348 }
1302 1349
1303 static void 1350 static void
1351 #if GTK_CHECK_VERSION(2,4,0)
1352 menu_get_info_cb(GtkAction *action, gpointer data)
1353 #else
1304 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget) 1354 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget)
1355 #endif
1305 { 1356 {
1306 PidginWindow *win = data; 1357 PidginWindow *win = data;
1307 PurpleConversation *conv; 1358 PurpleConversation *conv;
1308 1359
1309 conv = pidgin_conv_window_get_active_conversation(win); 1360 conv = pidgin_conv_window_get_active_conversation(win);
1310 1361
1311 info_cb(NULL, PIDGIN_CONVERSATION(conv)); 1362 info_cb(NULL, PIDGIN_CONVERSATION(conv));
1312 } 1363 }
1313 1364
1314 static void 1365 static void
1366 #if GTK_CHECK_VERSION(2,4,0)
1367 menu_invite_cb(GtkAction *action, gpointer data)
1368 #else
1315 menu_invite_cb(gpointer data, guint action, GtkWidget *widget) 1369 menu_invite_cb(gpointer data, guint action, GtkWidget *widget)
1370 #endif
1316 { 1371 {
1317 PidginWindow *win = data; 1372 PidginWindow *win = data;
1318 PurpleConversation *conv; 1373 PurpleConversation *conv;
1319 1374
1320 conv = pidgin_conv_window_get_active_conversation(win); 1375 conv = pidgin_conv_window_get_active_conversation(win);
1321 1376
1322 invite_cb(NULL, PIDGIN_CONVERSATION(conv)); 1377 invite_cb(NULL, PIDGIN_CONVERSATION(conv));
1323 } 1378 }
1324 1379
1325 static void 1380 static void
1381 #if GTK_CHECK_VERSION(2,4,0)
1382 menu_block_cb(GtkAction *action, gpointer data)
1383 #else
1326 menu_block_cb(gpointer data, guint action, GtkWidget *widget) 1384 menu_block_cb(gpointer data, guint action, GtkWidget *widget)
1385 #endif
1327 { 1386 {
1328 PidginWindow *win = data; 1387 PidginWindow *win = data;
1329 PurpleConversation *conv; 1388 PurpleConversation *conv;
1330 1389
1331 conv = pidgin_conv_window_get_active_conversation(win); 1390 conv = pidgin_conv_window_get_active_conversation(win);
1332 1391
1333 block_cb(NULL, PIDGIN_CONVERSATION(conv)); 1392 block_cb(NULL, PIDGIN_CONVERSATION(conv));
1334 } 1393 }
1335 1394
1336 static void 1395 static void
1396 #if GTK_CHECK_VERSION(2,4,0)
1397 menu_unblock_cb(GtkAction *action, gpointer data)
1398 #else
1337 menu_unblock_cb(gpointer data, guint action, GtkWidget *widget) 1399 menu_unblock_cb(gpointer data, guint action, GtkWidget *widget)
1400 #endif
1338 { 1401 {
1339 PidginWindow *win = data; 1402 PidginWindow *win = data;
1340 PurpleConversation *conv; 1403 PurpleConversation *conv;
1341 1404
1342 conv = pidgin_conv_window_get_active_conversation(win); 1405 conv = pidgin_conv_window_get_active_conversation(win);
1343 1406
1344 unblock_cb(NULL, PIDGIN_CONVERSATION(conv)); 1407 unblock_cb(NULL, PIDGIN_CONVERSATION(conv));
1345 } 1408 }
1346 1409
1347 static void 1410 static void
1411 #if GTK_CHECK_VERSION(2,4,0)
1412 menu_add_remove_cb(GtkAction *action, gpointer data)
1413 #else
1348 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget) 1414 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget)
1415 #endif
1349 { 1416 {
1350 PidginWindow *win = data; 1417 PidginWindow *win = data;
1351 PurpleConversation *conv; 1418 PurpleConversation *conv;
1352 1419
1353 conv = pidgin_conv_window_get_active_conversation(win); 1420 conv = pidgin_conv_window_get_active_conversation(win);
1388 #endif 1455 #endif
1389 } 1456 }
1390 } 1457 }
1391 1458
1392 static void 1459 static void
1460 #if GTK_CHECK_VERSION(2,4,0)
1461 menu_close_conv_cb(GtkAction *action, gpointer data)
1462 #else
1393 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) 1463 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
1464 #endif
1394 { 1465 {
1395 PidginWindow *win = data; 1466 PidginWindow *win = data;
1396 1467
1397 close_conv_cb(NULL, NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win))); 1468 close_conv_cb(NULL, NULL, PIDGIN_CONVERSATION(pidgin_conv_window_get_active_conversation(win)));
1398 } 1469 }
1399 1470
1400 static void 1471 static void
1472 #if GTK_CHECK_VERSION(2,4,0)
1473 menu_logging_cb(GtkAction *action, gpointer data)
1474 #else
1401 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) 1475 menu_logging_cb(gpointer data, guint action, GtkWidget *widget)
1476 #endif
1402 { 1477 {
1403 PidginWindow *win = data; 1478 PidginWindow *win = data;
1404 PurpleConversation *conv; 1479 PurpleConversation *conv;
1405 gboolean logging; 1480 gboolean logging;
1406 PurpleBlistNode *node; 1481 PurpleBlistNode *node;
1408 conv = pidgin_conv_window_get_active_conversation(win); 1483 conv = pidgin_conv_window_get_active_conversation(win);
1409 1484
1410 if (conv == NULL) 1485 if (conv == NULL)
1411 return; 1486 return;
1412 1487
1488 #if GTK_CHECK_VERSION(2,4,0)
1489 logging = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
1490 #else
1413 logging = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); 1491 logging = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
1492 #endif
1414 1493
1415 if (logging == purple_conversation_is_logging(conv)) 1494 if (logging == purple_conversation_is_logging(conv))
1416 return; 1495 return;
1417 1496
1418 node = get_conversation_blist_node(conv); 1497 node = get_conversation_blist_node(conv);
1461 break; 1540 break;
1462 } 1541 }
1463 } 1542 }
1464 1543
1465 static void 1544 static void
1545 #if GTK_CHECK_VERSION(2,4,0)
1546 menu_toolbar_cb(GtkAction *action, gpointer data)
1547 {
1548 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
1549 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
1550 }
1551 #else
1466 menu_toolbar_cb(gpointer data, guint action, GtkWidget *widget) 1552 menu_toolbar_cb(gpointer data, guint action, GtkWidget *widget)
1467 { 1553 {
1468 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar", 1554 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
1469 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); 1555 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
1470 } 1556 }
1471 1557 #endif
1472 static void 1558
1559 static void
1560 #if GTK_CHECK_VERSION(2,4,0)
1561 menu_sounds_cb(GtkAction *action, gpointer data)
1562 #else
1473 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) 1563 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget)
1564 #endif
1474 { 1565 {
1475 PidginWindow *win = data; 1566 PidginWindow *win = data;
1476 PurpleConversation *conv; 1567 PurpleConversation *conv;
1477 PidginConversation *gtkconv; 1568 PidginConversation *gtkconv;
1478 PurpleBlistNode *node; 1569 PurpleBlistNode *node;
1483 return; 1574 return;
1484 1575
1485 gtkconv = PIDGIN_CONVERSATION(conv); 1576 gtkconv = PIDGIN_CONVERSATION(conv);
1486 1577
1487 gtkconv->make_sound = 1578 gtkconv->make_sound =
1579 #if GTK_CHECK_VERSION(2,4,0)
1580 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
1581 #else
1488 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); 1582 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
1583 #endif
1489 node = get_conversation_blist_node(conv); 1584 node = get_conversation_blist_node(conv);
1490 if (node) 1585 if (node)
1491 purple_blist_node_set_bool(node, "gtk-mute-sound", !gtkconv->make_sound); 1586 purple_blist_node_set_bool(node, "gtk-mute-sound", !gtkconv->make_sound);
1492 } 1587 }
1493 1588
1494 static void 1589 static void
1590 #if GTK_CHECK_VERSION(2,4,0)
1591 menu_timestamps_cb(GtkAction *action, gpointer data)
1592 {
1593 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps",
1594 gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
1595 }
1596 #else
1495 menu_timestamps_cb(gpointer data, guint action, GtkWidget *widget) 1597 menu_timestamps_cb(gpointer data, guint action, GtkWidget *widget)
1496 { 1598 {
1497 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps", 1599 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/conversations/show_timestamps",
1498 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); 1600 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
1499 } 1601 }
1602 #endif
1500 1603
1501 static void 1604 static void
1502 chat_do_im(PidginConversation *gtkconv, const char *who) 1605 chat_do_im(PidginConversation *gtkconv, const char *who)
1503 { 1606 {
1504 PurpleConversation *conv = gtkconv->active_conv; 1607 PurpleConversation *conv = gtkconv->active_conv;
3124 { 3227 {
3125 g_return_val_if_fail(gtkconv != NULL, NULL); 3228 g_return_val_if_fail(gtkconv != NULL, NULL);
3126 return gtkconv->win; 3229 return gtkconv->win;
3127 } 3230 }
3128 3231
3232 #if GTK_CHECK_VERSION(2,4,0)
3233
3234 static GtkActionEntry menu_entries[] =
3235 /* TODO: fill out tooltips... */
3236 {
3237 /* Conversation menu */
3238 { "ConversationMenu", NULL, N_("_Conversation"), NULL, NULL, NULL },
3239 { "NewInstantMessage", PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, N_("New Instant _Message..."), "<control>M", NULL, menu_new_conv_cb },
3240 { "Find", GTK_STOCK_FIND, N_("_Find..."), NULL, NULL, menu_find_cb },
3241 { "ViewLog", NULL, N_("View _Log"), NULL, NULL, menu_view_log_cb },
3242 { "SaveAs", GTK_STOCK_SAVE_AS, N_("_Save As..."), NULL, NULL, menu_save_as_cb },
3243 { "ClearScrollback", GTK_STOCK_CLEAR, N_("Clea_r Scrollback"), "<control>L", NULL, menu_clear_cb },
3244
3245 #ifdef USE_VV
3246 { "MediaMenu", NULL, N_("M_edia"), NULL, NULL, NULL },
3247 { "AudioCall", PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, N_("_Audio Call"), NULL, NULL, menu_initiate_media_call_cb },
3248 { "VideoCall", PIDGIN_STOCK_TOOLBAR_VIDEO_CALL, N_("_Video Call"), NULL, NULL, menu_initiate_media_call_cb },
3249 { "AudioVideoCall", PIDGIN_STOCK_TOOLBAR_VIDEO_CALL, N_("Audio\\/Video _Call"), NULL, NULL, menu_initiate_media_call_cb },
3250 #endif
3251
3252 { "SendFile", PIDGIN_STOCK_TOOLBAR_SEND_FILE, N_("Se_nd File..."), NULL, NULL, menu_send_file_cb },
3253 { "AddBuddyPounce", NULL, N_("Add Buddy _Pounce..."), NULL, NULL, menu_add_pounce_cb },
3254 { "GetInfo", PIDGIN_STOCK_TOOLBAR_USER_INFO, N_("_Get Info"), "<control>O", NULL, menu_get_info_cb },
3255 { "Invite", NULL, N_("In_vite..."), NULL, NULL, menu_invite_cb },
3256 { "MoreMenu", NULL, N_("M_ore"), NULL, NULL, NULL },
3257 { "Alias", NULL, N_("Al_ias..."), NULL, NULL, menu_alias_cb },
3258 { "Block", PIDGIN_STOCK_TOOLBAR_BLOCK, N_("_Block..."), NULL, NULL, menu_block_cb },
3259 { "Unblock", PIDGIN_STOCK_TOOLBAR_UNBLOCK, N_("_Unblock..."), NULL, NULL, menu_unblock_cb },
3260 { "Add", GTK_STOCK_ADD, N_("_Add..."), NULL, NULL, menu_add_remove_cb },
3261 { "Remove", GTK_STOCK_REMOVE, N_("_Remove..."), NULL, NULL, menu_add_remove_cb },
3262 { "InsertLink", PIDGIN_STOCK_TOOLBAR_INSERT_LINK, N_("Insert Lin_k..."), NULL, NULL, menu_insert_link_cb },
3263 { "InsertImage", PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, N_("Insert Imag_e..."), NULL, NULL, menu_insert_image_cb },
3264 { "Close", GTK_STOCK_CLOSE, N_("_Close"), NULL, NULL, menu_close_conv_cb },
3265
3266 /* Options */
3267 { "OptionsMenu", NULL, N_("_Options"), NULL, NULL, NULL },
3268 };
3269
3270 /* Toggle items */
3271 static const GtkToggleActionEntry menu_toggle_entries[] = {
3272 { "EnableLogging", NULL, N_("Enable _Logging"), NULL, NULL, menu_logging_cb, FALSE },
3273 { "EnableSounds", NULL, N_("Enable _Sounds"), NULL, NULL, menu_sounds_cb, FALSE },
3274 { "ShowFormattingToolbars", NULL, N_("Show Formatting _Toolbars"), NULL, NULL, menu_toolbar_cb, FALSE },
3275 { "ShowTimestamps", NULL, N_("Show Ti_mestamps"), NULL, NULL, menu_timestamps_cb, FALSE },
3276 };
3277
3278 static const char *conversation_menu =
3279 "<ui>"
3280 "<menubar name='Conversation'>"
3281 "<menu action='ConversationMenu'>"
3282 "<menuitem action='NewInstantMessage'/>"
3283 "<separator/>"
3284 "<menuitem action='Find'/>"
3285 "<menuitem action='ViewLog'/>"
3286 "<menuitem action='SaveAs'/>"
3287 "<menuitem action='ClearScrollback'/>"
3288 "<separator/>"
3289 #ifdef USE_VV
3290 "<menu action='MediaMenu'>"
3291 "<menuitem action='AudioCall'/>"
3292 "<menuitem action='VideoCall'/>"
3293 "<menuitem action='AudioVideoCall'/>"
3294 "</menu>"
3295 #endif
3296 "<menuitem action='SendFile'/>"
3297 "<menuitem action='AddBuddyPounce'/>"
3298 "<menuitem action='GetInfo'/>"
3299 "<menuitem action='Invite'/>"
3300 "<menu action='MoreMenu'/>"
3301 "<separator/>"
3302 "<menuitem action='Alias'/>"
3303 "<menuitem action='Block'/>"
3304 "<menuitem action='Unblock'/>"
3305 "<menuitem action='Add'/>"
3306 "<menuitem action='Remove'/>"
3307 "<separator/>"
3308 "<menuitem action='InsertLink'/>"
3309 "<menuitem action='InsertImage'/>"
3310 "<separator/>"
3311 "<menuitem action='Close'/>"
3312 "</menu>"
3313 "<menu action='OptionsMenu'>"
3314 "<menuitem action='EnableLogging'/>"
3315 "<menuitem action='EnableSounds'/>"
3316 "<separator/>"
3317 "<menuitem action='ShowFormattingToolbars'/>"
3318 "<menuitem action='ShowTimestamps'/>"
3319 "</menu>"
3320 "</menubar>"
3321 "</ui>";
3322
3323 #else
3324
3129 static GtkItemFactoryEntry menu_items[] = 3325 static GtkItemFactoryEntry menu_items[] =
3130 { 3326 {
3131 /* Conversation menu */ 3327 /* Conversation menu */
3132 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>", NULL }, 3328 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>", NULL },
3133 3329
3206 static const char * 3402 static const char *
3207 item_factory_translate_func (const char *path, gpointer func_data) 3403 item_factory_translate_func (const char *path, gpointer func_data)
3208 { 3404 {
3209 return _(path); 3405 return _(path);
3210 } 3406 }
3407
3408 #endif
3211 3409
3212 static void 3410 static void
3213 sound_method_pref_changed_cb(const char *name, PurplePrefType type, 3411 sound_method_pref_changed_cb(const char *name, PurplePrefType type,
3214 gconstpointer value, gpointer data) 3412 gconstpointer value, gpointer data)
3215 { 3413 {
3326 } 3524 }
3327 3525
3328 static void 3526 static void
3329 regenerate_options_items(PidginWindow *win) 3527 regenerate_options_items(PidginWindow *win)
3330 { 3528 {
3529 #if GTK_CHECK_VERSION(2,4,0)
3530 #else
3331 GtkWidget *menu; 3531 GtkWidget *menu;
3332 PidginConversation *gtkconv; 3532 PidginConversation *gtkconv;
3333 GList *list; 3533 GList *list;
3334 3534
3335 gtkconv = pidgin_conv_window_get_active_gtkconv(win); 3535 gtkconv = pidgin_conv_window_get_active_gtkconv(win);
3349 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 3549 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
3350 gtk_widget_set_sensitive(item, FALSE); 3550 gtk_widget_set_sensitive(item, FALSE);
3351 } 3551 }
3352 3552
3353 gtk_widget_show_all(menu); 3553 gtk_widget_show_all(menu);
3554 #endif
3354 } 3555 }
3355 3556
3356 static void 3557 static void
3357 remove_from_list(GtkWidget *widget, PidginWindow *win) 3558 remove_from_list(GtkWidget *widget, PidginWindow *win)
3358 { 3559 {
3362 } 3563 }
3363 3564
3364 static void 3565 static void
3365 regenerate_plugins_items(PidginWindow *win) 3566 regenerate_plugins_items(PidginWindow *win)
3366 { 3567 {
3568 #if GTK_CHECK_VERSION(2,4,0)
3569 #else
3367 GList *action_items; 3570 GList *action_items;
3368 GtkWidget *menu; 3571 GtkWidget *menu;
3369 GList *list; 3572 GList *list;
3370 PidginConversation *gtkconv; 3573 PidginConversation *gtkconv;
3371 PurpleConversation *conv; 3574 PurpleConversation *conv;
3403 action_items = g_list_prepend(action_items, item); 3606 action_items = g_list_prepend(action_items, item);
3404 gtk_widget_show_all(item); 3607 gtk_widget_show_all(item);
3405 g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(remove_from_list), win); 3608 g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(remove_from_list), win);
3406 } 3609 }
3407 g_object_set_data(G_OBJECT(win->window), "plugin-actions", action_items); 3610 g_object_set_data(G_OBJECT(win->window), "plugin-actions", action_items);
3408 } 3611 #endif
3409 3612 }
3613
3614 #if !GTK_CHECK_VERSION(2,4,0)
3410 static void menubar_activated(GtkWidget *item, gpointer data) 3615 static void menubar_activated(GtkWidget *item, gpointer data)
3411 { 3616 {
3412 PidginWindow *win = data; 3617 PidginWindow *win = data;
3413 regenerate_options_items(win); 3618 regenerate_options_items(win);
3414 regenerate_plugins_items(win); 3619 regenerate_plugins_items(win);
3427 GtkWidget *menuitem = gtk_item_factory_get_item(win->menu.item_factory, N_("/Conversation")); 3632 GtkWidget *menuitem = gtk_item_factory_get_item(win->menu.item_factory, N_("/Conversation"));
3428 g_signal_handlers_unblock_by_func(G_OBJECT(menuitem), G_CALLBACK(menubar_activated), win); 3633 g_signal_handlers_unblock_by_func(G_OBJECT(menuitem), G_CALLBACK(menubar_activated), win);
3429 g_signal_handlers_disconnect_by_func(G_OBJECT(win->menu.menubar), 3634 g_signal_handlers_disconnect_by_func(G_OBJECT(win->menu.menubar),
3430 G_CALLBACK(focus_out_from_menubar), win); 3635 G_CALLBACK(focus_out_from_menubar), win);
3431 } 3636 }
3637 #endif
3432 3638
3433 static GtkWidget * 3639 static GtkWidget *
3434 setup_menubar(PidginWindow *win) 3640 setup_menubar(PidginWindow *win)
3435 { 3641 {
3436 GtkAccelGroup *accel_group; 3642 GtkAccelGroup *accel_group;
3437 const char *method; 3643 const char *method;
3644
3645 #if GTK_CHECK_VERSION(2,4,0)
3646 GtkActionGroup *action_group;
3647 GError *error;
3648
3649 action_group = gtk_action_group_new("ConversationActions");
3650 gtk_action_group_add_actions(action_group,
3651 menu_entries,
3652 G_N_ELEMENTS(menu_entries),
3653 win);
3654 gtk_action_group_add_toggle_actions(action_group,
3655 menu_toggle_entries,
3656 G_N_ELEMENTS(menu_toggle_entries),
3657 win);
3658 #ifdef ENABLE_NLS
3659 gtk_action_group_set_translation_domain(action_group,
3660 PACKAGE);
3661 #endif
3662
3663 win->menu.ui = gtk_ui_manager_new();
3664 gtk_ui_manager_insert_action_group(win->menu.ui, action_group, 0);
3665
3666 accel_group = gtk_ui_manager_get_accel_group(win->menu.ui);
3667 gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group);
3668 g_signal_connect(G_OBJECT(accel_group), "accel-changed",
3669 G_CALLBACK(pidgin_save_accels_cb), NULL);
3670
3671 error = NULL;
3672 if (!gtk_ui_manager_add_ui_from_string(win->menu.ui, conversation_menu, -1, &error))
3673 {
3674 g_message("building menus failed: %s", error->message);
3675 g_error_free(error);
3676 exit(EXIT_FAILURE);
3677 }
3678
3679 win->menu.menubar =
3680 gtk_ui_manager_get_widget(win->menu.ui, "/Conversation");
3681
3682 win->menu.view_log =
3683 gtk_ui_manager_get_widget(win->menu.ui,
3684 "/Conversation/ConversationMenu/ViewLog");
3685
3686 #ifdef USE_VV
3687 win->audio_call =
3688 gtk_ui_manager_get_widget(win->menu.ui,
3689 "/Conversation/ConversationMenu/MediaMenu/AudioCall");
3690 win->video_call =
3691 gtk_ui_manager_get_widget(win->menu.ui,
3692 "/Conversation/ConversationMenu/MediaMenu/VideoCall");
3693 win->audio_video_call =
3694 gtk_ui_manager_get_widget(win->menu.ui,
3695 "/Conversation/ConversationMenu/MediaMenu/AudioVideoCall");
3696 #endif
3697
3698 /* --- */
3699
3700 win->menu.send_file =
3701 gtk_ui_manager_get_widget(win->menu.ui,
3702 "/Conversation/ConversationMenu/SendFile");
3703
3704 win->menu.add_pounce =
3705 gtk_ui_manager_get_widget(win->menu.ui,
3706 "/Conversation/ConversationMenu/AddBuddyPounce");
3707
3708 /* --- */
3709
3710 win->menu.get_info =
3711 gtk_ui_manager_get_widget(win->menu.ui,
3712 "/Conversation/ConversationMenu/GetInfo");
3713
3714 win->menu.invite =
3715 gtk_ui_manager_get_widget(win->menu.ui,
3716 "/Conversation/ConversationMenu/Invite");
3717
3718 /* --- */
3719
3720 win->menu.alias =
3721 gtk_ui_manager_get_widget(win->menu.ui,
3722 "/Conversation/ConversationMenu/Alias");
3723
3724 win->menu.block =
3725 gtk_ui_manager_get_widget(win->menu.ui,
3726 "/Conversation/ConversationMenu/Block");
3727
3728 win->menu.unblock =
3729 gtk_ui_manager_get_widget(win->menu.ui,
3730 "/Conversation/ConversationMenu/Unblock");
3731
3732 win->menu.add =
3733 gtk_ui_manager_get_widget(win->menu.ui,
3734 "/Conversation/ConversationMenu/Add");
3735
3736 win->menu.remove =
3737 gtk_ui_manager_get_widget(win->menu.ui,
3738 "/Conversation/ConversationMenu/Remove");
3739
3740 /* --- */
3741
3742 win->menu.insert_link =
3743 gtk_ui_manager_get_widget(win->menu.ui,
3744 "/Conversation/ConversationMenu/InsertLink");
3745
3746 win->menu.insert_image =
3747 gtk_ui_manager_get_widget(win->menu.ui,
3748 "/Conversation/ConversationMenu/InsertImage");
3749
3750 /* --- */
3751
3752 win->menu.logging =
3753 gtk_ui_manager_get_widget(win->menu.ui,
3754 "/Conversation/OptionsMenu/EnableLogging");
3755 win->menu.sounds =
3756 gtk_ui_manager_get_widget(win->menu.ui,
3757 "/Conversation/OptionsMenu/EnableSounds");
3758 method = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method");
3759 if (method != NULL && !strcmp(method, "none"))
3760 {
3761 gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(win->menu.sounds),
3762 FALSE);
3763 gtk_widget_set_sensitive(win->menu.sounds, FALSE);
3764 }
3765 purple_prefs_connect_callback(win, PIDGIN_PREFS_ROOT "/sound/method",
3766 sound_method_pref_changed_cb, win);
3767
3768 win->menu.show_formatting_toolbar =
3769 gtk_ui_manager_get_widget(win->menu.ui,
3770 "/Conversation/OptionsMenu/ShowFormattingToolbars");
3771 win->menu.show_timestamps =
3772 gtk_ui_manager_get_widget(win->menu.ui,
3773 "/Conversation/OptionsMenu/ShowTimestamps");
3774 win->menu.show_icon = NULL;
3775
3776 #else
3438 GtkWidget *menuitem; 3777 GtkWidget *menuitem;
3439 3778
3440 accel_group = gtk_accel_group_new (); 3779 accel_group = gtk_accel_group_new ();
3441 gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group); 3780 gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group);
3442 g_object_unref(accel_group); 3781 g_object_unref(accel_group);
3553 N_("/Options/Show Formatting Toolbars")); 3892 N_("/Options/Show Formatting Toolbars"));
3554 win->menu.show_timestamps = 3893 win->menu.show_timestamps =
3555 gtk_item_factory_get_widget(win->menu.item_factory, 3894 gtk_item_factory_get_widget(win->menu.item_factory,
3556 N_("/Options/Show Timestamps")); 3895 N_("/Options/Show Timestamps"));
3557 win->menu.show_icon = NULL; 3896 win->menu.show_icon = NULL;
3897
3898 #endif
3558 3899
3559 win->menu.tray = pidgin_menu_tray_new(); 3900 win->menu.tray = pidgin_menu_tray_new();
3560 gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar), 3901 gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar),
3561 win->menu.tray); 3902 win->menu.tray);
3562 gtk_widget_show(win->menu.tray); 3903 gtk_widget_show(win->menu.tray);
3867 } 4208 }
3868 4209
3869 static void 4210 static void
3870 generate_send_to_items(PidginWindow *win) 4211 generate_send_to_items(PidginWindow *win)
3871 { 4212 {
4213 #if GTK_CHECK_VERSION(2,4,0)
4214 #else
3872 GtkWidget *menu; 4215 GtkWidget *menu;
3873 GSList *group = NULL; 4216 GSList *group = NULL;
3874 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 4217 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
3875 PidginConversation *gtkconv; 4218 PidginConversation *gtkconv;
3876 GSList *l, *buds; 4219 GSList *l, *buds;
3951 gtk_widget_show(win->menu.send_to); 4294 gtk_widget_show(win->menu.send_to);
3952 /* TODO: This should never be insensitive. Possibly hidden or not. */ 4295 /* TODO: This should never be insensitive. Possibly hidden or not. */
3953 if (!group) 4296 if (!group)
3954 gtk_widget_set_sensitive(win->menu.send_to, FALSE); 4297 gtk_widget_set_sensitive(win->menu.send_to, FALSE);
3955 update_send_to_selection(win); 4298 update_send_to_selection(win);
4299 #endif
3956 } 4300 }
3957 4301
3958 static const char * 4302 static const char *
3959 get_chat_buddy_status_icon(PurpleConvChat *chat, const char *name, PurpleConvChatBuddyFlags flags) 4303 get_chat_buddy_status_icon(PurpleConvChat *chat, const char *name, PurpleConvChatBuddyFlags flags)
3960 { 4304 {
9335 } 9679 }
9336 return; 9680 return;
9337 } 9681 }
9338 gtk_widget_destroy(win->window); 9682 gtk_widget_destroy(win->window);
9339 9683
9684 #if GTK_CHECK_VERSION(2,4,0)
9685 g_object_unref(G_OBJECT(win->menu.ui));
9686 #else
9340 g_object_unref(G_OBJECT(win->menu.item_factory)); 9687 g_object_unref(G_OBJECT(win->menu.item_factory));
9688 #endif
9341 9689
9342 purple_notify_close_with_handle(win); 9690 purple_notify_close_with_handle(win);
9343 purple_signals_disconnect_by_handle(win); 9691 purple_signals_disconnect_by_handle(win);
9344 9692
9345 g_free(win); 9693 g_free(win);

mercurial