Mercurial > pidgin
comparison src/gtkblist.c @ 12133:8254bb99f929
[gaim-migrate @ 14433]
SF Patch #1358723 from charkins
"right-click menu of unseen conversations on blist menutray
Adds a right-click context menu of converations with
unseen messages to the menu tray icon on the buddy
list. Selecting the conversation presents that
conversation to the user."
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Fri, 18 Nov 2005 13:54:20 +0000 |
parents | 9c123e27e2f6 |
children | 370f9d7868f9 |
comparison
equal
deleted
inserted
replaced
12132:95bffda9b762 | 12133:8254bb99f929 |
---|---|
3121 plugin_changed_cb(GaimPlugin *p, gpointer *data) | 3121 plugin_changed_cb(GaimPlugin *p, gpointer *data) |
3122 { | 3122 { |
3123 gaim_gtk_blist_update_plugin_actions(); | 3123 gaim_gtk_blist_update_plugin_actions(); |
3124 } | 3124 } |
3125 | 3125 |
3126 static void | |
3127 unseen_conv_menu_cb(GtkMenuItem *item, GaimConversation *conv) | |
3128 { | |
3129 g_return_if_fail(conv != NULL); | |
3130 gaim_gtkconv_present_conversation(conv); | |
3131 } | |
3132 | |
3133 static void | |
3134 unseen_conv_menu() | |
3135 { | |
3136 static GtkWidget *menu = NULL; | |
3137 GList *convs; | |
3138 | |
3139 if (menu) | |
3140 gtk_widget_destroy(menu); | |
3141 | |
3142 if (!gaim_gtk_conversations_get_first_unseen(GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT)) | |
3143 return; | |
3144 | |
3145 menu = gtk_menu_new(); | |
3146 | |
3147 for (convs = gaim_get_ims(); convs != NULL ; convs = convs->next) { | |
3148 GaimConversation *conv = convs->data; | |
3149 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3150 | |
3151 if (gtkconv->unseen_state >= GAIM_UNSEEN_TEXT) { | |
3152 GtkWidget *icon = gtk_image_new(); | |
3153 GdkPixbuf *pbuf = gaim_gtkconv_get_tab_icon(conv, TRUE); | |
3154 GtkWidget *item; | |
3155 | |
3156 gtk_image_set_from_pixbuf(GTK_IMAGE(icon), pbuf); | |
3157 g_object_unref(pbuf); | |
3158 | |
3159 item = gtk_image_menu_item_new_with_label( | |
3160 gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); | |
3161 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), icon); | |
3162 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(unseen_conv_menu_cb), conv); | |
3163 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
3164 } | |
3165 } | |
3166 | |
3167 gtk_widget_show_all(menu); | |
3168 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, | |
3169 gtk_get_current_event_time()); | |
3170 } | |
3171 | |
3126 static gboolean | 3172 static gboolean |
3127 menutray_press_cb(GtkWidget *widget, GdkEventButton *event) | 3173 menutray_press_cb(GtkWidget *widget, GdkEventButton *event) |
3128 { | 3174 { |
3129 gaim_gtkconv_present_conversation(gaim_gtk_conversations_get_first_unseen( | 3175 switch (event->button) { |
3130 GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT)); | 3176 case 1: |
3177 gaim_gtkconv_present_conversation(gaim_gtk_conversations_get_first_unseen( | |
3178 GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT)); | |
3179 break; | |
3180 case 3: | |
3181 unseen_conv_menu(); | |
3182 break; | |
3183 } | |
3131 return TRUE; | 3184 return TRUE; |
3132 } | 3185 } |
3133 | 3186 |
3134 static void | 3187 static void |
3135 conversation_updated_cb(GaimConversation *conv, GaimConvUpdateType type, | 3188 conversation_updated_cb(GaimConversation *conv, GaimConvUpdateType type, |