| 2911 gtk_widget_set_sensitive(win->menu.show_icon, TRUE); |
2911 gtk_widget_set_sensitive(win->menu.show_icon, TRUE); |
| 2912 |
2912 |
| 2913 } |
2913 } |
| 2914 } |
2914 } |
| 2915 |
2915 |
| 2916 static void |
2916 /* Returns TRUE if some items were added to the menu, FALSE otherwise */ |
| 2917 regenerate_options_items(PidginWindow *win) |
2917 static gboolean |
| 2918 { |
2918 populate_menu_with_options(GtkWidget *menu, PidginConversation *gtkconv, gboolean all) |
| 2919 GtkWidget *menu; |
2919 { |
| 2920 GList *list; |
2920 GList *list; |
| 2921 PidginConversation *gtkconv; |
|
| 2922 PurpleConversation *conv; |
2921 PurpleConversation *conv; |
| 2923 PurpleBlistNode *node = NULL; |
2922 PurpleBlistNode *node = NULL; |
| 2924 PurpleChat *chat = NULL; |
2923 PurpleChat *chat = NULL; |
| 2925 PurpleBuddy *buddy = NULL; |
2924 PurpleBuddy *buddy = NULL; |
| 2926 |
2925 gboolean ret; |
| 2927 gtkconv = pidgin_conv_window_get_active_gtkconv(win); |
2926 |
| 2928 conv = gtkconv->active_conv; |
2927 conv = gtkconv->active_conv; |
| 2929 |
|
| 2930 menu = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Conversation/More")); |
|
| 2931 |
2928 |
| 2932 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
2929 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
| 2933 chat = purple_blist_find_chat(conv->account, conv->name); |
2930 chat = purple_blist_find_chat(conv->account, conv->name); |
| 2934 |
2931 |
| 2935 if ((chat == NULL) && (gtkconv->imhtml != NULL)) { |
2932 if ((chat == NULL) && (gtkconv->imhtml != NULL)) { |
| 2971 if (chat) |
2968 if (chat) |
| 2972 node = (PurpleBlistNode *)chat; |
2969 node = (PurpleBlistNode *)chat; |
| 2973 else if (buddy) |
2970 else if (buddy) |
| 2974 node = (PurpleBlistNode *)buddy; |
2971 node = (PurpleBlistNode *)buddy; |
| 2975 |
2972 |
| |
2973 /* Now add the stuff */ |
| |
2974 if (all && buddy) { |
| |
2975 pidgin_blist_make_buddy_menu(menu, buddy, TRUE); |
| |
2976 } else if (node) { |
| |
2977 if (purple_account_is_connected(conv->account)) |
| |
2978 pidgin_append_blist_node_proto_menu(menu, conv->account->gc, node); |
| |
2979 pidgin_append_blist_node_extended_menu(menu, node); |
| |
2980 } |
| |
2981 |
| |
2982 if ((list = gtk_container_get_children(GTK_CONTAINER(menu))) == NULL) { |
| |
2983 ret = FALSE; |
| |
2984 } else { |
| |
2985 g_list_free(list); |
| |
2986 ret = TRUE; |
| |
2987 } |
| |
2988 return ret; |
| |
2989 } |
| |
2990 |
| |
2991 static void |
| |
2992 regenerate_options_items(PidginWindow *win) |
| |
2993 { |
| |
2994 GtkWidget *menu; |
| |
2995 PidginConversation *gtkconv; |
| |
2996 GList *list; |
| |
2997 |
| |
2998 gtkconv = pidgin_conv_window_get_active_gtkconv(win); |
| |
2999 menu = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Conversation/More")); |
| |
3000 |
| 2976 /* Remove the previous entries */ |
3001 /* Remove the previous entries */ |
| 2977 for (list = gtk_container_get_children(GTK_CONTAINER(menu)); list; ) |
3002 for (list = gtk_container_get_children(GTK_CONTAINER(menu)); list; ) |
| 2978 { |
3003 { |
| 2979 GtkWidget *w = list->data; |
3004 GtkWidget *w = list->data; |
| 2980 list = g_list_delete_link(list, list); |
3005 list = g_list_delete_link(list, list); |
| 2981 gtk_widget_destroy(w); |
3006 gtk_widget_destroy(w); |
| 2982 } |
3007 } |
| 2983 |
3008 |
| 2984 /* Now add the stuff */ |
3009 if (!populate_menu_with_options(menu, gtkconv, FALSE)) |
| 2985 if (node) |
|
| 2986 { |
|
| 2987 if (purple_account_is_connected(conv->account)) |
|
| 2988 pidgin_append_blist_node_proto_menu(menu, conv->account->gc, node); |
|
| 2989 pidgin_append_blist_node_extended_menu(menu, node); |
|
| 2990 } |
|
| 2991 |
|
| 2992 if ((list = gtk_container_get_children(GTK_CONTAINER(menu))) == NULL) |
|
| 2993 { |
3010 { |
| 2994 GtkWidget *item = gtk_menu_item_new_with_label(_("No actions available")); |
3011 GtkWidget *item = gtk_menu_item_new_with_label(_("No actions available")); |
| 2995 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
3012 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
| 2996 gtk_widget_set_sensitive(item, FALSE); |
3013 gtk_widget_set_sensitive(item, FALSE); |
| 2997 } |
|
| 2998 else |
|
| 2999 { |
|
| 3000 g_list_free(list); |
|
| 3001 } |
3014 } |
| 3002 |
3015 |
| 3003 gtk_widget_show_all(menu); |
3016 gtk_widget_show_all(menu); |
| 3004 } |
3017 } |
| 3005 |
3018 |
| 3372 return FALSE; |
3385 return FALSE; |
| 3373 |
3386 |
| 3374 |
3387 |
| 3375 gtk_widget_show(win->menu.send_to); |
3388 gtk_widget_show(win->menu.send_to); |
| 3376 |
3389 |
| 3377 menu = gtk_menu_item_get_submenu( |
3390 menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(win->menu.send_to)); |
| 3378 GTK_MENU_ITEM(win->menu.send_to)); |
|
| 3379 |
3391 |
| 3380 for (child = gtk_container_get_children(GTK_CONTAINER(menu)); |
3392 for (child = gtk_container_get_children(GTK_CONTAINER(menu)); |
| 3381 child != NULL; |
3393 child != NULL; |
| 3382 child = g_list_delete_link(child, child)) { |
3394 child = g_list_delete_link(child, child)) { |
| 3383 |
3395 |
| 7653 if (e->type != GDK_BUTTON_PRESS) |
7665 if (e->type != GDK_BUTTON_PRESS) |
| 7654 return FALSE; |
7666 return FALSE; |
| 7655 |
7667 |
| 7656 if (e->button == 3) { |
7668 if (e->button == 3) { |
| 7657 /* Right click was pressed. Popup the Send To menu. */ |
7669 /* Right click was pressed. Popup the Send To menu. */ |
| 7658 GtkWidget *menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to)); |
7670 GtkWidget *menu = gtk_menu_new(), *sub; |
| 7659 if (menu) |
7671 sub = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to)); |
| 7660 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); |
7672 |
| 7661 else |
7673 if (populate_menu_with_options(menu, gtkconv, TRUE)) |
| |
7674 pidgin_separator(menu); |
| |
7675 else if (!sub || |
| |
7676 !GTK_WIDGET_IS_SENSITIVE(gtkconv->win->menu.send_to)) { |
| |
7677 gtk_widget_destroy(menu); |
| 7662 return FALSE; |
7678 return FALSE; |
| |
7679 } else { |
| |
7680 menu = sub; |
| |
7681 sub = NULL; |
| |
7682 } |
| |
7683 |
| |
7684 if (sub) { |
| |
7685 GtkWidget *item = gtk_menu_item_new_with_mnemonic(_("_Send To")); |
| |
7686 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
| |
7687 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub); |
| |
7688 gtk_widget_show(item); |
| |
7689 gtk_widget_show_all(sub); |
| |
7690 } |
| |
7691 |
| |
7692 gtk_widget_show_all(menu); |
| |
7693 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); |
| 7663 return TRUE; |
7694 return TRUE; |
| 7664 } else if (e->button != 1) { |
7695 } else if (e->button != 1) { |
| 7665 return FALSE; |
7696 return FALSE; |
| 7666 } |
7697 } |
| 7667 |
7698 |