From: <sa...@us...> - 2006-06-26 19:55:06
|
Revision: 16354 Author: sadrul Date: 2006-06-26 12:54:53 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16354&view=rev Log Message: ----------- Paco-Paco spake unto me the following wisdom: sadrul: your console UI looks for gaim/*.h, but uses pkg-config --cflags gaim, which returns include/gaim I have fixed it by changing the #include-s. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-06-26 19:38:29 UTC (rev 16353) +++ trunk/console/gntblist.c 2006-06-26 19:54:53 UTC (rev 16354) @@ -1,8 +1,8 @@ -#include <gaim/account.h> -#include <gaim/blist.h> +#include <account.h> +#include <blist.h> +#include <server.h> #include <signal.h> -#include <gaim/util.h> -#include <gaim/server.h> +#include <util.h> #include "gntgaim.h" #include "gntbox.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-07-17 21:23:45
|
Revision: 16510 Author: sadrul Date: 2006-07-17 14:23:38 -0700 (Mon, 17 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16510&view=rev Log Message: ----------- Add a context menu for the buddy-list. Most of the menus don't do anything yet, because the request-ui is not done. But the others, eg. 'Get Info', 'Join In Chat' etc.) work. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-07-17 17:12:07 UTC (rev 16509) +++ trunk/console/gntblist.c 2006-07-17 21:23:38 UTC (rev 16510) @@ -1,5 +1,6 @@ #include <account.h> #include <blist.h> +#include <request.h> #include <server.h> #include <signal.h> #include <util.h> @@ -19,6 +20,9 @@ GntWidget *tooltip; GaimBlistNode *tnode; /* Who is the tooltip being displayed for? */ + + GntWidget *context; + GaimBlistNode *cnode; } GGBlist; GGBlist *ggblist; @@ -28,6 +32,7 @@ static void add_chat(GaimChat *chat, GGBlist *ggblist); static void add_node(GaimBlistNode *node, GGBlist *ggblist); static void draw_tooltip(GGBlist *ggblist); +static void remove_peripherals(GGBlist *ggblist); static void new_node(GaimBlistNode *node) @@ -252,6 +257,231 @@ } static void +remove_context_menu(GGBlist *ggblist) +{ + if (ggblist->context) + gnt_widget_destroy(ggblist->context->parent); + ggblist->context = NULL; + ggblist->cnode = NULL; +} + +static void +gnt_append_menu_action(GntTree *tree, GaimMenuAction *action, gpointer parent) +{ + GList *list; + + gnt_tree_add_row_after(tree, action, action->label, parent, NULL); + for (list = action->children; list; list = list->next) + gnt_append_menu_action(tree, list->data, action); +} + +static void +append_proto_menu(GntTree *tree, GaimConnection *gc, GaimBlistNode *node) +{ + GList *list; + GaimPluginProtocolInfo *prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if(!prpl_info || !prpl_info->blist_node_menu) + return; + + for(list = prpl_info->blist_node_menu(node); list; + list = g_list_delete_link(list, list)) + { + GaimMenuAction *act = (GaimMenuAction *) list->data; + gnt_append_menu_action(tree, act, NULL); + } +} + +static void +add_custom_action(GntTree *tree, const char *label, GaimCallback callback, + gpointer data) +{ + GaimMenuAction *action = gaim_menu_action_new(label, callback, data, NULL); + gnt_append_menu_action(tree, action, NULL); + g_signal_connect_swapped(G_OBJECT(tree), "destroy", + G_CALLBACK(gaim_menu_action_free), action); +} + +static void +create_chat_menu(GntTree *tree, GaimChat *chat) +{ +} + +static void +create_group_menu(GntTree *tree, GaimGroup *group) +{ +} + +static void +gg_blist_get_buddy_info_cb(GaimBuddy *buddy, GaimBlistNode *null) +{ + serv_get_info(buddy->account->gc, gaim_buddy_get_name(buddy)); +} + +static void +create_buddy_menu(GntTree *tree, GaimBuddy *buddy) +{ + GaimPluginProtocolInfo *prpl_info; + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl); + if (prpl_info && prpl_info->get_info) + { + add_custom_action(tree, _("Get Info"), + GAIM_CALLBACK(gg_blist_get_buddy_info_cb), buddy); + } + +#if 0 + add_custom_action(tree, _("Add Buddy Pounce"), + GAIM_CALLBACK(gg_blist_add_buddy_pounce_cb)), buddy); + + if (prpl_info && prpl_info->send_file) + { + if (!prpl_info->can_receive_file || + prpl_info->can_receive_file(buddy->account->gc, buddy->name)) + add_custom_action(tree, _("Send File"), + GAIM_CALLBACK(gg_blist_show_file_cb)), buddy); + } + + add_custom_action(tree, _("View Log"), + GAIM_CALLBACK(gg_blist_view_log_cb)), buddy); +#endif + + /* Protocol actions */ + append_proto_menu(tree, + gaim_account_get_connection(gaim_buddy_get_account(buddy)), + (GaimBlistNode*)buddy); +} + +static void +append_extended_menu(GntTree *tree, GaimBlistNode *node) +{ + GList *iter; + + for (iter = gaim_blist_node_get_extended_menu(node); + iter; iter = g_list_delete_link(iter, iter)) + { + gnt_append_menu_action(tree, iter->data, NULL); + } +} + +static void +context_menu_callback(GntTree *tree, GGBlist *ggblist) +{ + GaimMenuAction *action = gnt_tree_get_selection_data(tree); + GaimBlistNode *node = ggblist->cnode; + + if (action) + { + void (*callback)(GaimBlistNode *, gpointer); + callback = (void (*)(GaimBlistNode *, gpointer))action->callback; + callback(node, action->data); + } + + remove_context_menu(ggblist); +} + +static void +gg_blist_rename_node_cb(GaimBlistNode *node, GaimBlistNode *null) +{ +} + +/* XXX: This still doesn't do anything, because request doesn't have a ui yet */ +static void +gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *null) +{ + void (*callback)(gpointer); + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + callback = (void(*)(gpointer))gaim_blist_remove_buddy; + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + callback = (void(*)(gpointer))gaim_blist_remove_chat; + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + callback = (void(*)(gpointer))gaim_blist_remove_group; + + /* XXX: anything to do with the returned ui-handle? */ + gaim_request_action(node, _("Confirm Remove"), + _("Are you sure you want to remove ..."), NULL, /* XXX: tidy up */ + 1, node, 2, + _("Remove"), callback, + _("No"), NULL); + +} + +static void +draw_context_menu(GGBlist *ggblist) +{ + GaimBlistNode *node = NULL; + GntWidget *context = NULL, *window = NULL; + GntTree *tree = NULL; + int x, y, top, width; + char *title = NULL; + + tree = GNT_TREE(ggblist->tree); + + if (ggblist->context) + { + remove_context_menu(ggblist); + } + + node = gnt_tree_get_selection_data(tree); + + if (node == NULL) + return; + if (ggblist->tooltip) + remove_tooltip(ggblist); + + ggblist->cnode = node; + ggblist->context = context = gnt_tree_new(); + GNT_WIDGET_SET_FLAGS(context, GNT_WIDGET_NO_BORDER); + gnt_widget_set_name(context, "context menu"); + g_signal_connect(G_OBJECT(context), "activate", G_CALLBACK(context_menu_callback), ggblist); + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + { + GaimBuddy *buddy = (GaimBuddy *)node; + create_buddy_menu(GNT_TREE(context), buddy); + title = g_strdup(gaim_buddy_get_name(buddy)); + } + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + { + GaimChat *chat = (GaimChat*)node; + create_chat_menu(GNT_TREE(context), chat); + title = g_strdup(gaim_chat_get_name(chat)); + } + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + { + GaimGroup *group = (GaimGroup *)node; + create_group_menu(GNT_TREE(context), group); + title = g_strdup(group->name); + } + + append_extended_menu(GNT_TREE(context), node); + + /* These are common for everything */ + add_custom_action(GNT_TREE(context), _("Rename"), + GAIM_CALLBACK(gg_blist_rename_node_cb), node); + add_custom_action(GNT_TREE(context), _("Remove"), + GAIM_CALLBACK(gg_blist_remove_node_cb), node); + + window = gnt_vbox_new(FALSE); + gnt_box_set_toplevel(GNT_BOX(window), TRUE); + gnt_box_set_title(GNT_BOX(window), title); + + gnt_box_add_widget(GNT_BOX(window), context); + + /* Set the position for the popup */ + gnt_widget_get_position(GNT_WIDGET(tree), &x, &y); + gnt_widget_get_size(GNT_WIDGET(tree), &width, NULL); + top = gnt_tree_get_selection_visible_line(tree); + + x += width; + y += top - 1; + + gnt_widget_set_position(window, x, y); + gnt_widget_draw(window); +} + +static void draw_tooltip(GGBlist *ggblist) { GaimBlistNode *node; @@ -270,6 +500,9 @@ if (!gnt_widget_has_focus(ggblist->tree)) return; + if (ggblist->context) + return; + if (ggblist->tooltip) { /* XXX: Once we can properly redraw on expose events, this can be removed at the end @@ -372,18 +605,35 @@ static gboolean key_pressed(GntWidget *widget, const char *text, GGBlist *ggblist) { + gboolean stop = FALSE, ret = FALSE; if (text[0] == 27 && text[1] == 0) { /* Escape was pressed */ - if (ggblist->tooltip) + remove_peripherals(ggblist); + stop = TRUE; + ret = TRUE; + } + + if (ggblist->context) + { + ret = gnt_widget_key_pressed(ggblist->context, text); + stop = TRUE; + } + + if (text[0] == 27) + { + if (strcmp(text + 1, GNT_KEY_POPUP) == 0) { - gnt_widget_destroy(ggblist->tooltip); - ggblist->tooltip = NULL; - return TRUE; + draw_context_menu(ggblist); + stop = TRUE; + ret = TRUE; } } - return FALSE; + if (stop) + g_signal_stop_emission_by_name(G_OBJECT(widget), "key_pressed"); + + return ret; } static void @@ -411,6 +661,15 @@ update_buddy_display(buddy, ggblist); } +static void +remove_peripherals(GGBlist *ggblist) +{ + if (ggblist->tooltip) + remove_tooltip(ggblist); + else if (ggblist->context) + remove_context_menu(ggblist); +} + void gg_blist_init() { ggblist = g_new0(GGBlist, 1); @@ -456,7 +715,7 @@ g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); g_signal_connect_data(G_OBJECT(ggblist->tree), "gained-focus", G_CALLBACK(draw_tooltip), ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); - g_signal_connect_data(G_OBJECT(ggblist->tree), "lost-focus", G_CALLBACK(remove_tooltip), + g_signal_connect_data(G_OBJECT(ggblist->tree), "lost-focus", G_CALLBACK(remove_peripherals), ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-07-17 21:33:55
|
Revision: 16511 Author: sadrul Date: 2006-07-17 14:33:50 -0700 (Mon, 17 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16511&view=rev Log Message: ----------- Fix a leak from last commit. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-07-17 21:23:38 UTC (rev 16510) +++ trunk/console/gntblist.c 2006-07-17 21:33:50 UTC (rev 16511) @@ -479,6 +479,7 @@ gnt_widget_set_position(window, x, y); gnt_widget_draw(window); + g_free(title); } static void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-02 06:22:41
|
Revision: 16614 Author: sadrul Date: 2006-08-01 23:22:33 -0700 (Tue, 01 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16614&view=rev Log Message: ----------- Allow setting aliases for buddies/chats/groups. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-02 05:44:42 UTC (rev 16613) +++ trunk/console/gntblist.c 2006-08-02 06:22:33 UTC (rev 16614) @@ -35,6 +35,7 @@ static void add_node(GaimBlistNode *node, GGBlist *ggblist); static void draw_tooltip(GGBlist *ggblist); static void remove_peripherals(GGBlist *ggblist); +static const char * get_display_name(GaimBlistNode *node); static void new_node(GaimBlistNode *node) @@ -84,6 +85,12 @@ static void node_update(GaimBuddyList *list, GaimBlistNode *node) { + if (node->ui_data != NULL) + { + gnt_tree_change_text(GNT_TREE(ggblist->tree), node, + 0, get_display_name(node)); + } + if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *buddy = (GaimBuddy*)node; @@ -133,7 +140,7 @@ return; gnt_tree_remove(GNT_TREE(ggblist->tree), group); node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, - gnt_tree_create_row(GNT_TREE(ggblist->tree), group->name), NULL, NULL); + gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), NULL, NULL); } static const char * @@ -177,6 +184,8 @@ strncpy(status, "~", sizeof(status) - 1); } + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + return ((GaimGroup*)node)->name; snprintf(text, sizeof(text) - 1, "%s %s", status, name); @@ -391,8 +400,44 @@ } static void +rename_blist_node(GaimBlistNode *node, const char *newname) +{ + const char *name = newname; + if (name && !*name) + name = NULL; + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + gaim_blist_alias_buddy((GaimBuddy*)node, name); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + gaim_blist_alias_chat((GaimChat*)node, name); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + gaim_blist_rename_group((GaimGroup*)node, name); + else + g_return_if_reached(); +} + +static void gg_blist_rename_node_cb(GaimBlistNode *node, GaimBlistNode *null) { + const char *name = NULL; + char *prompt; + + if (GAIM_BLIST_NODE_IS_BUDDY(node)) + name = gaim_buddy_get_contact_alias((GaimBuddy*)node); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + name = gaim_chat_get_name((GaimChat*)node); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + name = ((GaimGroup*)node)->name; + else + g_return_if_reached(); + + prompt = g_strdup_printf(_("Please enter the new name for %s"), name); + + gaim_request_input(node, _("Rename"), prompt, _("Enter empty string to reset the name."), + name, FALSE, FALSE, NULL, _("Rename"), G_CALLBACK(rename_blist_node), + _("Cancel"), NULL, node); + + g_free(prompt); } /* XXX: This still doesn't do anything, because request doesn't have a ui yet */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-02 13:37:16
|
Revision: 16617 Author: sadrul Date: 2006-08-02 06:37:13 -0700 (Wed, 02 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16617&view=rev Log Message: ----------- Minor tweaks to the context-menu in the buddylist. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-02 08:12:04 UTC (rev 16616) +++ trunk/console/gntblist.c 2006-08-02 13:37:13 UTC (rev 16617) @@ -393,7 +393,10 @@ { void (*callback)(GaimBlistNode *, gpointer); callback = (void (*)(GaimBlistNode *, gpointer))action->callback; - callback(node, action->data); + if (callback) + callback(node, action->data); + else + return; } remove_context_menu(ggblist); @@ -521,7 +524,8 @@ window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), title); - + + gnt_widget_set_size(context, 0, g_list_length(GNT_TREE(context)->list)); gnt_box_add_widget(GNT_BOX(window), context); /* Set the position for the popup */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ebl...@us...> - 2006-08-20 02:13:13
|
Revision: 16895 Author: eblanton Date: 2006-08-19 19:13:05 -0700 (Sat, 19 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16895&view=rev Log Message: ----------- Make the gntgaim blist a touch more friendly for 80x24 terminals, by reducing its default height to 18 and removing a hrule. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-19 23:51:43 UTC (rev 16894) +++ trunk/console/gntblist.c 2006-08-20 02:13:05 UTC (rev 16895) @@ -1092,7 +1092,7 @@ gaim_prefs_add_none(PREF_ROOT); gaim_prefs_add_none(PREF_ROOT "/size"); gaim_prefs_add_int(PREF_ROOT "/size/width", 20); - gaim_prefs_add_int(PREF_ROOT "/size/height", 20); + gaim_prefs_add_int(PREF_ROOT "/size/height", 18); gaim_prefs_add_none(PREF_ROOT "/position"); gaim_prefs_add_int(PREF_ROOT "/position/x", 0); gaim_prefs_add_int(PREF_ROOT "/position/y", 0); @@ -1295,8 +1295,6 @@ gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); - gnt_box_add_widget(GNT_BOX(ggblist->window), gnt_hline_new()); - ggblist->status = gnt_combo_box_new(); gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->status); ggblist->statustext = gnt_entry_new(NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ebl...@us...> - 2006-08-20 14:02:49
|
Revision: 16899 Author: eblanton Date: 2006-08-20 07:02:43 -0700 (Sun, 20 Aug 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16899&view=rev Log Message: ----------- I miscalculated the default 80x24 height of the blist by the window list. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-20 07:13:35 UTC (rev 16898) +++ trunk/console/gntblist.c 2006-08-20 14:02:43 UTC (rev 16899) @@ -1092,7 +1092,7 @@ gaim_prefs_add_none(PREF_ROOT); gaim_prefs_add_none(PREF_ROOT "/size"); gaim_prefs_add_int(PREF_ROOT "/size/width", 20); - gaim_prefs_add_int(PREF_ROOT "/size/height", 18); + gaim_prefs_add_int(PREF_ROOT "/size/height", 17); gaim_prefs_add_none(PREF_ROOT "/position"); gaim_prefs_add_int(PREF_ROOT "/position/x", 0); gaim_prefs_add_int(PREF_ROOT "/position/y", 0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-08-31 03:00:07
|
Revision: 17091 http://svn.sourceforge.net/gaim/?rev=17091&view=rev Author: sadrul Date: 2006-08-30 19:59:59 -0700 (Wed, 30 Aug 2006) Log Message: ----------- Update the contact when the status of the priority buddy changes. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-31 00:58:50 UTC (rev 17090) +++ trunk/console/gntblist.c 2006-08-31 02:59:59 UTC (rev 17091) @@ -123,22 +123,20 @@ if (list->ui_data == NULL) return; - if (node->ui_data != NULL) - { + if (node->ui_data != NULL) { gnt_tree_change_text(GNT_TREE(ggblist->tree), node, 0, get_display_name(node)); } - if (GAIM_BLIST_NODE_IS_BUDDY(node)) - { + if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *buddy = (GaimBuddy*)node; if (gaim_presence_is_online(gaim_buddy_get_presence(buddy))) add_node((GaimBlistNode*)buddy, list->ui_data); else node_remove(gaim_get_blist(), node); - } - else if (GAIM_BLIST_NODE_IS_CHAT(node)) - { + + node_update(list, node->parent); + } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { add_chat((GaimChat *)node, list->ui_data); } } @@ -316,7 +314,7 @@ new_list, new_node, NULL, - node_update, /* This doesn't do crap */ + node_update, node_remove, NULL, NULL, @@ -426,7 +424,6 @@ { GaimGroup *group; GaimBlistNode *node = (GaimBlistNode*)contact; - GaimBuddy *buddy; if (node->ui_data) return; @@ -439,12 +436,6 @@ group, NULL); gnt_tree_set_expanded(GNT_TREE(ggblist->tree), contact, FALSE); - - buddy = gaim_contact_get_priority_buddy(contact); - if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) - gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, GNT_TEXT_FLAG_DIM); - else - gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, 0); } static void @@ -462,10 +453,13 @@ node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), contact, NULL); - if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) + if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) { gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, GNT_TEXT_FLAG_DIM); - else + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, GNT_TEXT_FLAG_DIM); + } else { gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, 0); + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, 0); + } } #if 0 @@ -529,8 +523,8 @@ if (action == NULL) return; - gnt_tree_add_row_after(tree, action, - gnt_tree_create_row(tree, action->label), parent, NULL); + gnt_tree_add_row_last(tree, action, + gnt_tree_create_row(tree, action->label), parent); for (list = action->children; list; list = list->next) gnt_append_menu_action(tree, list->data, action); } @@ -905,24 +899,19 @@ gnt_widget_set_name(context, "context menu"); g_signal_connect(G_OBJECT(context), "activate", G_CALLBACK(context_menu_callback), ggblist); - /* XXX: For now, for a contact, the context menu for the priority buddy will popup */ - if (GAIM_BLIST_NODE_IS_CONTACT(node)) - node = (GaimBlistNode*)gaim_contact_get_priority_buddy((GaimContact*)node); - - if (GAIM_BLIST_NODE_IS_BUDDY(node)) - { + if (GAIM_BLIST_NODE_IS_CONTACT(node)) { + create_buddy_menu(GNT_TREE(context), + gaim_contact_get_priority_buddy((GaimContact*)node)); + title = g_strdup(gaim_contact_get_alias((GaimContact*)node)); + } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *buddy = (GaimBuddy *)node; create_buddy_menu(GNT_TREE(context), buddy); title = g_strdup(gaim_buddy_get_name(buddy)); - } - else if (GAIM_BLIST_NODE_IS_CHAT(node)) - { + } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { GaimChat *chat = (GaimChat*)node; create_chat_menu(GNT_TREE(context), chat); title = g_strdup(gaim_chat_get_name(chat)); - } - else if (GAIM_BLIST_NODE_IS_GROUP(node)) - { + } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { GaimGroup *group = (GaimGroup *)node; create_group_menu(GNT_TREE(context), group); title = g_strdup(group->name); @@ -1038,6 +1027,7 @@ if (node == (GaimBlistNode*)pr || !GAIM_BUDDY_IS_ONLINE((GaimBuddy*)node)) continue; str = g_string_append(str, "\n----------\n"); + g_string_append_printf(str, _("Nickname: %s\n"), gaim_buddy_get_name((GaimBuddy*)node)); tooltip_for_buddy((GaimBuddy*)node, str); } } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) { @@ -1136,14 +1126,23 @@ static void update_buddy_display(GaimBuddy *buddy, GGBlist *ggblist) { + GaimContact *contact; + + contact = gaim_buddy_get_contact(buddy); + gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((GaimBlistNode*)buddy)); + gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((GaimBlistNode*)contact)); + if (ggblist->tnode == (GaimBlistNode*)buddy) draw_tooltip(ggblist); - if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) + if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) { gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, GNT_TEXT_FLAG_DIM); - else + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, GNT_TEXT_FLAG_DIM); + } else { gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, 0); + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, 0); + } } static void @@ -1444,9 +1443,14 @@ s2 = gaim_chat_get_name((GaimChat*)n2); break; case GAIM_BLIST_BUDDY_NODE: - s1 = gaim_buddy_get_alias((GaimBuddy*)n1); - s2 = gaim_buddy_get_alias((GaimBuddy*)n2); + /* XXX: reordering existing rows don't do well in GntTree */ + return gaim_presence_compare(gaim_buddy_get_presence((GaimBuddy*)n1), + gaim_buddy_get_presence((GaimBuddy*)n2)); break; + case GAIM_BLIST_CONTACT_NODE: + s1 = gaim_contact_get_alias((GaimContact*)n1); + s2 = gaim_contact_get_alias((GaimContact*)n2); + break; default: return -1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ebl...@us...> - 2006-08-31 21:51:06
|
Revision: 17101 http://svn.sourceforge.net/gaim/?rev=17101&view=rev Author: eblanton Date: 2006-08-31 14:50:55 -0700 (Thu, 31 Aug 2006) Log Message: ----------- This shouldn't be necessary, but I don't see how it's happening just yet Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-08-31 12:38:50 UTC (rev 17100) +++ trunk/console/gntblist.c 2006-08-31 21:50:55 UTC (rev 17101) @@ -121,6 +121,11 @@ static void node_update(GaimBuddyList *list, GaimBlistNode *node) { + /* It really looks like this should never happen ... but it does. + This will at least emit a warning to the log when it + happens, so maybe someone will figure it out. */ + g_return_if_fail(node != NULL); + if (list->ui_data == NULL) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-01 18:29:56
|
Revision: 17115 http://svn.sourceforge.net/gaim/?rev=17115&view=rev Author: sadrul Date: 2006-09-01 11:29:50 -0700 (Fri, 01 Sep 2006) Log Message: ----------- This should fix the problem. I am not sure why this is necessary though. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-01 18:18:04 UTC (rev 17114) +++ trunk/console/gntblist.c 2006-09-01 18:29:50 UTC (rev 17115) @@ -72,6 +72,30 @@ static const char * get_display_name(GaimBlistNode *node); static void savedstatus_changed(GaimSavedStatus *now, GaimSavedStatus *old); +static gboolean +is_contact_online(GaimContact *contact) +{ + GaimBlistNode *node; + for (node = ((GaimBlistNode*)contact)->child; node; node = node->next) { + if (GAIM_BUDDY_IS_ONLINE((GaimBuddy*)node)) + return TRUE; + } + return FALSE; +} + +static gboolean +is_group_online(GaimGroup *group) +{ + GaimBlistNode *node; + for (node = ((GaimBlistNode*)group)->child; node; node = node->next) { + if (GAIM_BLIST_NODE_IS_CHAT(node)) + return TRUE; + else if (is_contact_online((GaimContact*)node)) + return TRUE; + } + return FALSE; +} + static void new_node(GaimBlistNode *node) { @@ -111,11 +135,12 @@ if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimContact *contact = (GaimContact*)node->parent; - if (contact->online < 1) + if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_contact_online(contact)) || + contact->currentsize < 1) node_remove(list, (GaimBlistNode*)contact); } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { GaimGroup *group = (GaimGroup*)node->parent; - if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && group->online < 1) || + if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_group_online(group)) || group->currentsize < 1) node_remove(list, node->parent); } @@ -149,6 +174,16 @@ node_update(list, node->parent); } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { add_chat((GaimChat *)node, list->ui_data); + } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { + GaimContact *contact = (GaimContact*)node; + if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_contact_online(contact)) || + contact->currentsize < 1) + node_remove(gaim_get_blist(), node); + } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { + GaimGroup *group = (GaimGroup*)node; + if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_group_online(group)) || + group->currentsize < 1) + node_remove(list, node); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-03 08:01:18
|
Revision: 17137 http://svn.sourceforge.net/gaim/?rev=17137&view=rev Author: sadrul Date: 2006-09-03 01:01:12 -0700 (Sun, 03 Sep 2006) Log Message: ----------- Patch from wabz (Richard Nelson) to show 'Last Seen' for offline buddies. I have also added a fix to show offline buddies in the tooltip for a contact if 'show offline buddies' is turned on. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-03 07:40:11 UTC (rev 17136) +++ trunk/console/gntblist.c 2006-09-03 08:01:12 UTC (rev 17137) @@ -1045,6 +1045,7 @@ GntTree *tree; GntWidget *widget, *box; char *title = NULL; + int lastseen = 0; widget = ggblist->tree; tree = GNT_TREE(widget); @@ -1070,11 +1071,21 @@ if (GAIM_BLIST_NODE_IS_CONTACT(node)) { GaimBuddy *pr = gaim_contact_get_priority_buddy((GaimContact*)node); + gboolean offline = !GAIM_BUDDY_IS_ONLINE(pr); + gboolean showoffline = gaim_prefs_get_bool(PREF_ROOT "/showoffline"); + title = g_strdup(gaim_contact_get_alias((GaimContact*)node)); tooltip_for_buddy(pr, str); for (node = node->child; node; node = node->next) { - if (node == (GaimBlistNode*)pr || !GAIM_BUDDY_IS_ONLINE((GaimBuddy*)node)) + if (offline) { + int value = gaim_blist_node_get_int(node, "last_seen"); + if (value > lastseen) + lastseen = value; + } + if (node == (GaimBlistNode*)pr) continue; + if (!showoffline && !GAIM_BUDDY_IS_ONLINE((GaimBuddy*)node)) + continue; str = g_string_append(str, "\n----------\n"); g_string_append_printf(str, _("Nickname: %s\n"), gaim_buddy_get_name((GaimBuddy*)node)); tooltip_for_buddy((GaimBuddy*)node, str); @@ -1083,6 +1094,8 @@ GaimBuddy *buddy = (GaimBuddy *)node; tooltip_for_buddy(buddy, str); title = g_strdup(gaim_buddy_get_name(buddy)); + if (!GAIM_BUDDY_IS_ONLINE((GaimBuddy*)node)) + lastseen = gaim_blist_node_get_int(node, "last_seen"); } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { GaimGroup *group = (GaimGroup *)node; @@ -1105,6 +1118,12 @@ return; } + if (lastseen > 0) { + char *tmp = gaim_str_seconds_to_string(time(NULL) - lastseen); + g_string_append_printf(str, _("\nLast Seen: %s ago"), tmp); + g_free(tmp); + } + gnt_widget_get_position(widget, &x, &y); gnt_widget_get_size(widget, &width, NULL); top = gnt_tree_get_selection_visible_line(tree); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-07 22:58:01
|
Revision: 17185 http://svn.sourceforge.net/gaim/?rev=17185&view=rev Author: sadrul Date: 2006-09-07 15:57:52 -0700 (Thu, 07 Sep 2006) Log Message: ----------- wabz reported this bug. It should be fixed now. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-07 22:18:54 UTC (rev 17184) +++ trunk/console/gntblist.c 2006-09-07 22:57:52 UTC (rev 17185) @@ -636,7 +636,7 @@ } static void -chat_components_edit(GaimChat *chat, GaimBlistNode *null) +chat_components_edit(GaimChat *chat, GaimBlistNode *selected) { GaimRequestFields *fields = gaim_request_fields_new(); GaimRequestFieldGroup *group = gaim_request_field_group_new(NULL); @@ -688,19 +688,19 @@ } static void -gg_add_buddy(GaimGroup *grp, GaimBlistNode *node) +gg_add_buddy(GaimGroup *grp, GaimBlistNode *selected) { gaim_blist_request_add_buddy(NULL, NULL, grp->name, NULL); } static void -gg_add_group(GaimGroup *grp, GaimBlistNode *node) +gg_add_group(GaimGroup *grp, GaimBlistNode *selected) { gaim_blist_request_add_group(); } static void -gg_add_chat(GaimGroup *grp, GaimBlistNode *node) +gg_add_chat(GaimGroup *grp, GaimBlistNode *selected) { gaim_blist_request_add_chat(NULL, grp, NULL, NULL); } @@ -717,7 +717,7 @@ } static void -gg_blist_get_buddy_info_cb(GaimBuddy *buddy, GaimBlistNode *null) +gg_blist_get_buddy_info_cb(GaimBuddy *buddy, GaimBlistNode *selected) { serv_get_info(buddy->account->gc, gaim_buddy_get_name(buddy)); } @@ -779,7 +779,7 @@ void (*callback)(GaimBlistNode *, gpointer); callback = (void (*)(GaimBlistNode *, gpointer))action->callback; if (callback) - callback(node, action->data); + callback(action->data, node); else return; } @@ -807,7 +807,7 @@ } static void -gg_blist_rename_node_cb(GaimBlistNode *node, GaimBlistNode *null) +gg_blist_rename_node_cb(GaimBlistNode *node, GaimBlistNode *selected) { const char *name = NULL; char *prompt; @@ -888,7 +888,7 @@ } static void -gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *null) +gg_blist_remove_node_cb(GaimBlistNode *node, GaimBlistNode *selected) { char *primary; const char *name, *sec = NULL; @@ -1354,15 +1354,18 @@ static void redraw_blist(const char *name, GaimPrefType type, gconstpointer val, gpointer data) { - GaimBlistNode *node; + GaimBlistNode *node, *sel; if (ggblist == NULL) return; + sel = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)); gnt_tree_remove_all(GNT_TREE(ggblist->tree)); node = gaim_blist_get_root(); for (; node; node = gaim_blist_node_next(node, TRUE)) node->ui_data = NULL; populate_buddylist(); + gnt_tree_set_selected(GNT_TREE(ggblist->tree), sel); + draw_tooltip(ggblist); } void gg_blist_init() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-07 23:26:59
|
Revision: 17186 http://svn.sourceforge.net/gaim/?rev=17186&view=rev Author: sadrul Date: 2006-09-07 16:26:55 -0700 (Thu, 07 Sep 2006) Log Message: ----------- This is required after the last commit. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-07 22:57:52 UTC (rev 17185) +++ trunk/console/gntblist.c 2006-09-07 23:26:55 UTC (rev 17186) @@ -591,6 +591,7 @@ list = g_list_delete_link(list, list)) { GaimMenuAction *act = (GaimMenuAction *) list->data; + act->data = node; gnt_append_menu_action(tree, act, NULL); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-08 14:43:43
|
Revision: 17191 http://svn.sourceforge.net/gaim/?rev=17191&view=rev Author: sadrul Date: 2006-09-08 07:43:34 -0700 (Fri, 08 Sep 2006) Log Message: ----------- Renaming the buddies (contacts) was not working. Err (Joshua Blanton) reported the bug. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-08 06:17:59 UTC (rev 17190) +++ trunk/console/gntblist.c 2006-09-08 14:43:34 UTC (rev 17191) @@ -795,11 +795,16 @@ if (name && !*name) name = NULL; - if (GAIM_BLIST_NODE_IS_CONTACT(node)) - gaim_blist_alias_contact((GaimContact*)node, name); - else if (GAIM_BLIST_NODE_IS_BUDDY(node)) + if (GAIM_BLIST_NODE_IS_CONTACT(node)) { + GaimContact *contact = (GaimContact*)node; + GaimBuddy *buddy = gaim_contact_get_priority_buddy(contact); + gaim_blist_alias_contact(contact, name); + gaim_blist_alias_buddy(buddy, name); + serv_alias_buddy(buddy); + } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) { gaim_blist_alias_buddy((GaimBuddy*)node, name); - else if (GAIM_BLIST_NODE_IS_CHAT(node)) + serv_alias_buddy((GaimBuddy*)node); + } else if (GAIM_BLIST_NODE_IS_CHAT(node)) gaim_blist_alias_chat((GaimChat*)node, name); else if (GAIM_BLIST_NODE_IS_GROUP(node)) gaim_blist_rename_group((GaimGroup*)node, name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-09-26 23:02:44
|
Revision: 17376 http://svn.sourceforge.net/gaim/?rev=17376&view=rev Author: sadrul Date: 2006-09-26 16:02:40 -0700 (Tue, 26 Sep 2006) Log Message: ----------- Patch from Richard Nelson (wabz) to fix a crash. This is probably what Luke is getting. I had it fixed in my local tree, not sure why I hadn't committed. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-09-26 22:54:24 UTC (rev 17375) +++ trunk/console/gntblist.c 2006-09-26 23:02:40 UTC (rev 17376) @@ -1647,7 +1647,7 @@ GaimConnection *gc = gaim_account_get_connection(account); GaimPlugin *prpl; - if (!GAIM_CONNECTION_IS_CONNECTED(gc)) + if (!gc || !GAIM_CONNECTION_IS_CONNECTED(gc)) continue; prpl = gc->prpl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nos...@us...> - 2006-10-07 17:25:28
|
Revision: 17443 http://svn.sourceforge.net/gaim/?rev=17443&view=rev Author: nosnilmot Date: 2006-10-07 10:25:21 -0700 (Sat, 07 Oct 2006) Log Message: ----------- Fix Coverity CID 279 - Variable "name" tracked as NULL was passed to a function that dereferences it. Groups can't be renamed to NULL anyway. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-10-07 17:21:31 UTC (rev 17442) +++ trunk/console/gntblist.c 2006-10-07 17:25:21 UTC (rev 17443) @@ -315,6 +315,7 @@ gaim_blist_add_group(grp, NULL); } gaim_blist_add_chat(chat, grp, NULL); + gaim_blist_alias_chat(chat, alias); } } @@ -833,7 +834,7 @@ serv_alias_buddy((GaimBuddy*)node); } else if (GAIM_BLIST_NODE_IS_CHAT(node)) gaim_blist_alias_chat((GaimChat*)node, name); - else if (GAIM_BLIST_NODE_IS_GROUP(node)) + else if (GAIM_BLIST_NODE_IS_GROUP(node) && (name != NULL)) gaim_blist_rename_group((GaimGroup*)node, name); else g_return_if_reached(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-10-08 04:21:24
|
Revision: 17446 http://svn.sourceforge.net/gaim/?rev=17446&view=rev Author: sadrul Date: 2006-10-07 21:21:20 -0700 (Sat, 07 Oct 2006) Log Message: ----------- Patch #1571853 from Richard Nelson (wabz): "This patch removes the contact and all buddies when removing a contact, rather than just removing it from the blist (and having all the buddies show up next time gaim-text is opened)" Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-10-08 03:56:06 UTC (rev 17445) +++ trunk/console/gntblist.c 2006-10-08 04:21:20 UTC (rev 17446) @@ -31,6 +31,7 @@ #include <signal.h> #include <status.h> #include <util.h> +#include "debug.h" #include "gntgaim.h" #include "gntbox.h" @@ -56,6 +57,7 @@ GntWidget *tooltip; GaimBlistNode *tnode; /* Who is the tooltip being displayed for? */ + GaimBuddy *tagged; GntWidget *context; GaimBlistNode *cnode; @@ -340,7 +342,7 @@ field = gaim_request_field_string_new("alias", _("Alias"), alias, FALSE); gaim_request_field_group_add_field(group, field); - field = gaim_request_field_string_new("group", _("Group"), grp->name, FALSE); + field = gaim_request_field_string_new("group", _("Group"), grp ? grp->name : NULL, FALSE); gaim_request_field_group_add_field(group, field); gaim_request_fields(NULL, _("Add Chat"), NULL, @@ -719,7 +721,7 @@ static void gg_add_buddy(GaimGroup *grp, GaimBlistNode *selected) { - gaim_blist_request_add_buddy(NULL, NULL, grp->name, NULL); + gaim_blist_request_add_buddy(NULL, NULL, grp ? grp->name : NULL, NULL); } static void @@ -816,7 +818,24 @@ remove_context_menu(ggblist); } +/* Xerox'd from gtkdialogs.c:gaim_gtkdialogs_remove_contact_cb */ static void +remove_contact(GaimContact *contact) +{ + GaimBlistNode *bnode, *cnode; + GaimGroup *group; + + cnode = (GaimBlistNode *)contact; + group = (GaimGroup*)cnode->parent; + for (bnode = cnode->child; bnode; bnode = bnode->next) { + GaimBuddy *buddy = (GaimBuddy*)bnode; + if (gaim_account_is_connected(buddy->account)) + gaim_account_remove_buddy(buddy->account, buddy, group); + } + gaim_blist_remove_contact(contact); +} + +static void rename_blist_node(GaimBlistNode *node, const char *newname) { const char *name = newname; @@ -908,7 +927,7 @@ gg_blist_remove_node(GaimBlistNode *node) { if (GAIM_BLIST_NODE_IS_CONTACT(node)) { - gaim_blist_remove_contact((GaimContact*)node); + remove_contact((GaimContact*)node); } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *buddy = (GaimBuddy*)node; GaimGroup *group = gaim_buddy_get_group(buddy); @@ -928,9 +947,12 @@ const char *name, *sec = NULL; /* XXX: could be a contact */ - if (GAIM_BLIST_NODE_IS_CONTACT(node)) - name = gaim_contact_get_alias((GaimContact*)node); - else if (GAIM_BLIST_NODE_IS_BUDDY(node)) + if (GAIM_BLIST_NODE_IS_CONTACT(node)) { + GaimContact *c = (GaimContact*)node; + name = gaim_contact_get_alias(c); + if (c->totalsize > 1) + sec = _("Removing this contact will also remove all the buddies in the contact"); + } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) name = gaim_buddy_get_name((GaimBuddy*)node); else if (GAIM_BLIST_NODE_IS_CHAT(node)) name = gaim_chat_get_name((GaimChat*)node); @@ -954,6 +976,27 @@ } static void +gg_blist_tag_buddy(GaimBlistNode *node) +{ + ggblist->tagged = (GaimBuddy *)node; + gaim_debug_info("blist", "Tagged buddy\n"); +} + +static void +gg_blist_place_tagged(GaimBlistNode *node) +{ + if (GAIM_BLIST_NODE_IS_GROUP(node)) { + gaim_blist_add_buddy(ggblist->tagged, NULL, (GaimGroup *)node, NULL); + } else { + GaimContact *contact = (GaimContact *)node; + gaim_blist_add_buddy(ggblist->tagged, contact, + gaim_buddy_get_group(gaim_contact_get_priority_buddy(contact)), NULL); + } + ggblist->tagged = NULL; + gaim_debug_info("blist", "Placed buddy\n"); +} + +static void draw_context_menu(GGBlist *ggblist) { GaimBlistNode *node = NULL; @@ -971,8 +1014,6 @@ node = gnt_tree_get_selection_data(tree); - if (node == NULL) - return; if (ggblist->tooltip) remove_tooltip(ggblist); @@ -982,7 +1023,10 @@ gnt_widget_set_name(context, "context menu"); g_signal_connect(G_OBJECT(context), "activate", G_CALLBACK(context_menu_callback), ggblist); - if (GAIM_BLIST_NODE_IS_CONTACT(node)) { + if (!node) { + create_group_menu(GNT_TREE(context), NULL); + title = g_strdup(_("Buddy List")); + } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { create_buddy_menu(GNT_TREE(context), gaim_contact_get_priority_buddy((GaimContact*)node)); title = g_strdup(gaim_contact_get_alias((GaimContact*)node)); @@ -1003,10 +1047,20 @@ append_extended_menu(GNT_TREE(context), node); /* These are common for everything */ - add_custom_action(GNT_TREE(context), _("Rename"), - GAIM_CALLBACK(gg_blist_rename_node_cb), node); - add_custom_action(GNT_TREE(context), _("Remove"), - GAIM_CALLBACK(gg_blist_remove_node_cb), node); + if (node) { + add_custom_action(GNT_TREE(context), _("Rename"), + GAIM_CALLBACK(gg_blist_rename_node_cb), node); + add_custom_action(GNT_TREE(context), _("Remove"), + GAIM_CALLBACK(gg_blist_remove_node_cb), node); + if (ggblist->tagged && (GAIM_BLIST_NODE_IS_CONTACT(node) + || GAIM_BLIST_NODE_IS_GROUP(node))) { + add_custom_action(GNT_TREE(context), _("Place tagged"), + GAIM_CALLBACK(gg_blist_place_tagged), node); + } else if (GAIM_BLIST_NODE_IS_BUDDY(node)) { + add_custom_action(GNT_TREE(context), _("Tag"), + GAIM_CALLBACK(gg_blist_tag_buddy), node); + } + } window = gnt_vbox_new(FALSE); GNT_WIDGET_SET_FLAGS(window, GNT_WIDGET_TRANSIENT); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-10-12 01:02:11
|
Revision: 17462 http://svn.sourceforge.net/gaim/?rev=17462&view=rev Author: sadrul Date: 2006-10-11 18:02:07 -0700 (Wed, 11 Oct 2006) Log Message: ----------- Patch #1574229 from Richard Nelson (wabz) to fix a crash when adding a buddy and show-offline is set to true. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-10-11 08:59:01 UTC (rev 17461) +++ trunk/console/gntblist.c 2006-10-12 01:02:07 UTC (rev 17462) @@ -206,6 +206,8 @@ if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_contact_online(contact)) || contact->currentsize < 1) node_remove(gaim_get_blist(), node); + else + add_node(node, list->ui_data); } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { GaimGroup *group = (GaimGroup*)node; if ((!gaim_prefs_get_bool(PREF_ROOT "/showoffline") && !is_group_online(group)) || @@ -526,6 +528,8 @@ return; contact = (GaimContact*)node->parent; + if (!contact) /* When a new buddy is added and show-offline is set */ + return; add_node((GaimBlistNode*)contact, ggblist); node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-10-29 07:09:56
|
Revision: 17617 http://svn.sourceforge.net/gaim/?rev=17617&view=rev Author: sadrul Date: 2006-10-29 00:09:49 -0700 (Sun, 29 Oct 2006) Log Message: ----------- Patch from Richard 'wabz' Nelson to fix a crash during startup if show-offline is enabled. I also noticed another crash during shutdown. Fix that one too. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-10-29 03:43:15 UTC (rev 17616) +++ trunk/console/gntblist.c 2006-10-29 07:09:49 UTC (rev 17617) @@ -158,6 +158,13 @@ ggblist->tnode = NULL; } +static gboolean +_draw_tooltip(gpointer data) +{ + draw_tooltip(data); + return FALSE; +} + static void node_remove(GaimBuddyList *list, GaimBlistNode *node) { @@ -180,7 +187,13 @@ group->currentsize < 1) node_remove(list, node->parent); } - draw_tooltip(ggblist); + + /* When an account has signed off, it removes one buddy at a time. + * Drawing the tooltip after removing each buddy is expensive. On + * top of that, if the selected buddy belongs to the disconnected + * account, then retreiving the tooltip for that causes crash. So + * let's make sure we wait for all the buddies to be removed first.*/ + g_timeout_add(0, _draw_tooltip, ggblist); } static void @@ -1450,7 +1463,7 @@ redraw_blist(const char *name, GaimPrefType type, gconstpointer val, gpointer data) { GaimBlistNode *node, *sel; - if (ggblist == NULL) + if (ggblist == NULL || ggblist->window == NULL) return; sel = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-10-29 16:01:58
|
Revision: 17619 http://svn.sourceforge.net/gaim/?rev=17619&view=rev Author: sadrul Date: 2006-10-29 07:59:05 -0800 (Sun, 29 Oct 2006) Log Message: ----------- Add submenus in the context-menu when necessary. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-10-29 14:51:20 UTC (rev 17618) +++ trunk/console/gntblist.c 2006-10-29 15:59:05 UTC (rev 17619) @@ -643,11 +643,16 @@ return; item = gnt_menuitem_new(action->label); - gnt_menuitem_set_callback(GNT_MENUITEM(item), context_menu_callback, action); + if (action->callback) + gnt_menuitem_set_callback(GNT_MENUITEM(item), context_menu_callback, action); gnt_menu_add_item(menu, GNT_MENUITEM(item)); - for (list = action->children; list; list = list->next) - gnt_append_menu_action(menu, list->data, action); + if (action->children) { + GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP); + gnt_menuitem_set_submenu(item, GNT_MENU(sub)); + for (list = action->children; list; list = list->next) + gnt_append_menu_action(GNT_MENU(sub), list->data, action); + } } static void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-11-03 04:42:10
|
Revision: 17661 http://svn.sourceforge.net/gaim/?rev=17661&view=rev Author: sadrul Date: 2006-11-02 20:41:50 -0800 (Thu, 02 Nov 2006) Log Message: ----------- 'Send IM...' in the buddylist menu to be able to send IM to people not in the buddylist. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-11-03 03:13:26 UTC (rev 17660) +++ trunk/console/gntblist.c 2006-11-03 04:41:50 UTC (rev 17661) @@ -1873,7 +1873,55 @@ gaim_prefs_set_string(PREF_ROOT "/sort_type", n); } +/* XXX: send_im_select* -- Xerox */ static void +send_im_select_cb(gpointer data, GaimRequestFields *fields) +{ + GaimAccount *account; + const char *username; + + account = gaim_request_fields_get_account(fields, "account"); + username = gaim_request_fields_get_string(fields, "screenname"); + + gaim_conversation_new(GAIM_CONV_TYPE_IM, account, username); +} + +static void +send_im_select(void) +{ + GaimRequestFields *fields; + GaimRequestFieldGroup *group; + GaimRequestField *field; + + fields = gaim_request_fields_new(); + + group = gaim_request_field_group_new(NULL); + gaim_request_fields_add_group(fields, group); + + field = gaim_request_field_string_new("screenname", _("_Name"), NULL, FALSE); + gaim_request_field_set_type_hint(field, "screenname"); + gaim_request_field_set_required(field, TRUE); + gaim_request_field_group_add_field(group, field); + + field = gaim_request_field_account_new("account", _("_Account"), NULL); + gaim_request_field_set_type_hint(field, "account"); + gaim_request_field_set_visible(field, + (gaim_connections_get_all() != NULL && + gaim_connections_get_all()->next != NULL)); + gaim_request_field_set_required(field, TRUE); + gaim_request_field_group_add_field(group, field); + + gaim_request_fields(gaim_get_blist(), _("New Instant Message"), + NULL, + _("Please enter the screen name or alias of the person " + "you would like to IM."), + fields, + _("OK"), G_CALLBACK(send_im_select_cb), + _("Cancel"), NULL, + NULL); +} + +static void create_menu() { GntWidget *menu, *sub; @@ -1893,6 +1941,10 @@ sub = gnt_menu_new(GNT_MENU_POPUP); gnt_menuitem_set_submenu(item, GNT_MENU(sub)); + item = gnt_menuitem_new(_("Send IM...")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(GNT_MENUITEM(item), send_im_select, NULL); + item = gnt_menuitem_new(_("Toggle offline buddies")); gnt_menu_add_item(GNT_MENU(sub), item); gnt_menuitem_set_callback(GNT_MENUITEM(item), show_offline_cb, NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-11-17 02:15:33
|
Revision: 17763 http://svn.sourceforge.net/gaim/?rev=17763&view=rev Author: sadrul Date: 2006-11-16 18:15:28 -0800 (Thu, 16 Nov 2006) Log Message: ----------- Fix a crash, plug a leak. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-11-17 01:11:18 UTC (rev 17762) +++ trunk/console/gntblist.c 2006-11-17 02:15:28 UTC (rev 17763) @@ -1006,6 +1006,8 @@ gg_blist_toggle_tag_buddy(GaimBlistNode *node) { GList *iter; + if (GAIM_BLIST_NODE_IS_CHAT(node) || GAIM_BLIST_NODE_IS_GROUP(node)) + return; if (ggblist->tagged && (iter = g_list_find(ggblist->tagged, node)) != NULL) { ggblist->tagged = g_list_delete_link(ggblist->tagged, iter); } else { @@ -1444,6 +1446,8 @@ if (ggblist->typing) g_source_remove(ggblist->typing); remove_peripherals(ggblist); + if (ggblist->tagged) + g_list_free(ggblist->tagged); g_free(ggblist); ggblist = NULL; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ebl...@us...> - 2006-11-21 16:35:57
|
Revision: 17803 http://svn.sourceforge.net/gaim/?rev=17803&view=rev Author: eblanton Date: 2006-11-21 08:35:51 -0800 (Tue, 21 Nov 2006) Log Message: ----------- Prevent dropping a buddy on another buddy from crashing. There should probably be some smarter logic here. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-11-21 15:15:20 UTC (rev 17802) +++ trunk/console/gntblist.c 2006-11-21 16:35:51 UTC (rev 17803) @@ -1025,10 +1025,18 @@ GaimGroup *tg = NULL; GaimContact *tc = NULL; + /* This target resolution probably needs more clarification; for + * example, if I tag a buddy in a contact, then place on + * another buddy in the same contact, I probably intend to + * place the tagged buddy immediately after (before?) the + * target buddy -- this will simply move the tagged buddy + * within the same contact without reference to position. */ if (GAIM_BLIST_NODE_IS_GROUP(target)) tg = (GaimGroup*)target; - else + else if (GAIM_BLIST_NODE_IS_CONTACT(target)) tc = (GaimContact*)target; + else /* Buddy or Chat */ + tc = (GaimContact*)target->parent; if (ggblist->tagged) { GList *list = ggblist->tagged; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-12-11 00:34:00
|
Revision: 17952 http://svn.sourceforge.net/gaim/?rev=17952&view=rev Author: sadrul Date: 2006-12-10 16:33:57 -0800 (Sun, 10 Dec 2006) Log Message: ----------- Fix the buddylist. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-12-10 23:33:03 UTC (rev 17951) +++ trunk/console/gntblist.c 2006-12-11 00:33:57 UTC (rev 17952) @@ -1368,7 +1368,8 @@ gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "move-down"); } else if (strcmp(text, "a") == 0) { gg_blist_place_tagged(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree))); - } + } else + return FALSE; } else return FALSE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sa...@us...> - 2006-12-12 01:06:44
|
Revision: 17966 http://svn.sourceforge.net/gaim/?rev=17966&view=rev Author: sadrul Date: 2006-12-11 17:06:42 -0800 (Mon, 11 Dec 2006) Log Message: ----------- Fix the tooltip. Modified Paths: -------------- trunk/console/gntblist.c Modified: trunk/console/gntblist.c =================================================================== --- trunk/console/gntblist.c 2006-12-11 23:41:34 UTC (rev 17965) +++ trunk/console/gntblist.c 2006-12-12 01:06:42 UTC (rev 17966) @@ -1183,7 +1183,7 @@ } } - tmp = gaim_notify_user_info_get_text_with_newline(user_info, "\n"); + tmp = gaim_notify_user_info_get_text_with_newline(user_info, "<BR>"); gaim_notify_user_info_destroy(user_info); strip = gaim_markup_strip_html(tmp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |