# HG changeset patch # User Richard Laager # Date 1178748279 0 # Node ID 87e6707b512f552c14c99b03343a61d6b458e290 # Parent e7d59fa4faaf66b68754d44df45f87c406532fd5# Parent 9c4c7f28b005d2db2629dc1e4778c180509b0d86 merge of '4c166ec2780777ec3a8a3f5ad6774ec0a47c35e2' and 'a7fe56508258038ba8b2ff7bb614d603136301ba' diff -r e7d59fa4faaf -r 87e6707b512f finch/gntconv.c --- a/finch/gntconv.c Wed May 09 21:50:29 2007 +0000 +++ b/finch/gntconv.c Wed May 09 22:04:39 2007 +0000 @@ -303,6 +303,11 @@ get_info_cb(GntMenuItem *item, gpointer ggconv) { FinchConv *ggc = ggconv; + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(ggc->active_conv->account->gc, purple_conversation_get_name(ggc->active_conv), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(purple_conversation_get_gc(ggc->active_conv), purple_conversation_get_name(ggc->active_conv)); } diff -r e7d59fa4faaf -r 87e6707b512f pidgin/gtkblist.c --- a/pidgin/gtkblist.c Wed May 09 21:50:29 2007 +0000 +++ b/pidgin/gtkblist.c Wed May 09 22:04:39 2007 +0000 @@ -274,6 +274,11 @@ static void gtk_blist_menu_info_cb(GtkWidget *w, PurpleBuddy *b) { + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(b->account->gc, purple_buddy_get_name(b), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(b->account->gc, b->name); } diff -r e7d59fa4faaf -r 87e6707b512f pidgin/gtkconv.c --- a/pidgin/gtkconv.c Wed May 09 21:50:29 2007 +0000 +++ b/pidgin/gtkconv.c Wed May 09 22:04:39 2007 +0000 @@ -672,6 +672,11 @@ PurpleConversation *conv = gtkconv->active_conv; if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(conv->account->gc, purple_conversation_get_name(conv), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(purple_conversation_get_gc(conv), purple_conversation_get_name(conv)); diff -r e7d59fa4faaf -r 87e6707b512f pidgin/gtknotify.c --- a/pidgin/gtknotify.c Wed May 09 21:50:29 2007 +0000 +++ b/pidgin/gtknotify.c Wed May 09 22:04:39 2007 +0000 @@ -549,6 +549,21 @@ return FALSE; } +static GtkIMHtmlOptions +notify_imhtml_options() +{ + GtkIMHtmlOptions options = 0; + + if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting")) + options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; + + options |= GTK_IMHTML_NO_COMMENTS; + options |= GTK_IMHTML_NO_TITLE; + options |= GTK_IMHTML_NO_NEWLINE; + options |= GTK_IMHTML_NO_SCROLL; + return options; +} + static void * pidgin_notify_formatted(const char *title, const char *primary, const char *secondary, const char *text) @@ -559,7 +574,6 @@ GtkWidget *button; GtkWidget *imhtml; GtkWidget *frame; - int options = 0; char label_text[2048]; char *linked_text, *primary_esc, *secondary_esc; @@ -614,20 +628,13 @@ g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(formatted_input_cb), NULL); - /* Add the text to the gtkimhtml */ - if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting")) - options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; - - options |= GTK_IMHTML_NO_COMMENTS; - options |= GTK_IMHTML_NO_TITLE; - options |= GTK_IMHTML_NO_NEWLINE; - options |= GTK_IMHTML_NO_SCROLL; - /* Make sure URLs are clickable */ linked_text = purple_markup_linkify(text); - gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, options); + gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, notify_imhtml_options()); g_free(linked_text); + g_object_set_data(G_OBJECT(window), "info-widget", imhtml); + /* Show the window */ gtk_widget_show(window); @@ -856,18 +863,53 @@ return data; } +/** Xerox'ed from Finch! How the tables have turned!! ;) **/ +/** User information. **/ +static GHashTable *userinfo; + +static char * +userinfo_hash(PurpleAccount *account, const char *who) +{ + char key[256]; + snprintf(key, sizeof(key), "%s - %s", purple_account_get_username(account), purple_normalize(account, who)); + return g_utf8_strup(key, -1); +} + +static void +remove_userinfo(GtkWidget *widget, gpointer key) +{ + g_hash_table_remove(userinfo, key); +} + static void * pidgin_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) { - char *primary, *info; + char *info; void *ui_handle; + char *key = userinfo_hash(purple_connection_get_account(gc), who); + + if (!userinfo) { + userinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + } - primary = g_strdup_printf(_("Info for %s"), who); info = purple_notify_user_info_get_text_with_newline(user_info, "
"); - ui_handle = pidgin_notify_formatted(_("Buddy Information"), primary, NULL, info); + ui_handle = g_hash_table_lookup(userinfo, key); + if (ui_handle != NULL) { + GtkIMHtml *imhtml = g_object_get_data(G_OBJECT(ui_handle), "info-widget"); + char *linked_text = purple_markup_linkify(info); + gtk_imhtml_clear(imhtml); + gtk_imhtml_append_text(imhtml, linked_text, notify_imhtml_options()); + g_free(linked_text); + g_free(key); + } else { + char *primary = g_strdup_printf(_("Info for %s"), who); + ui_handle = pidgin_notify_formatted(_("Buddy Information"), primary, NULL, info); + g_hash_table_insert(userinfo, key, ui_handle); + g_signal_connect(G_OBJECT(ui_handle), "destroy", G_CALLBACK(remove_userinfo), key); + g_free(primary); + } g_free(info); - g_free(primary); return ui_handle; } diff -r e7d59fa4faaf -r 87e6707b512f pidgin/gtkutils.c --- a/pidgin/gtkutils.c Wed May 09 21:50:29 2007 +0000 +++ b/pidgin/gtkutils.c Wed May 09 22:04:39 2007 +0000 @@ -103,17 +103,17 @@ if (purple_running_gnome()) { char *path, *font; PangoFontDescription *desc = NULL; - + if ((path = g_find_program_in_path("gconftool-2"))) { g_free(path); if (!g_spawn_command_line_sync( - "gconftool-2 -g /desktop/gnome/interface/document_font_name", + "gconftool-2 -g /desktop/gnome/interface/document_font_name", &font, NULL, NULL, NULL)) return; } desc = pango_font_description_from_string(font); g_free(font); - + if (desc) { gtk_widget_modify_font(imhtml, desc); pango_font_description_free(desc); @@ -2325,6 +2325,10 @@ if (!filename || g_stat(filename, &st)) { +#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ + gtk_file_chooser_set_preview_widget_active( + GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE); +#endif /* FILECHOOSER */ g_free(filename); return; } diff -r e7d59fa4faaf -r 87e6707b512f pidgin/plugins/extplacement.c --- a/pidgin/plugins/extplacement.c Wed May 09 21:50:29 2007 +0000 +++ b/pidgin/plugins/extplacement.c Wed May 09 22:04:39 2007 +0000 @@ -101,6 +101,11 @@ ppref = purple_plugin_pref_new_with_label(_("Conversation Placement")); purple_plugin_pref_frame_add(frame, ppref); + /* Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above */ + ppref = purple_plugin_pref_new_with_label(_("Note: The preference for \"New conversations\" must be set to \"By conversation count\".")); + purple_plugin_pref_set_type(ppref, PURPLE_PLUGIN_PREF_INFO); + purple_plugin_pref_frame_add(frame, ppref); + ppref = purple_plugin_pref_new_with_name_and_label( "/plugins/gtk/extplacement/placement_number", _("Number of conversations per window"));