Mercurial > pidgin
changeset 8303:4eb4b2a6c604
[gaim-migrate @ 9027]
buddy_chat.c was nothing more than the Join Chat dialog now, and has been
since everything else was moved to gtkconv.c. So, move it to the only file
calling the functions and delete the file.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 20 Feb 2004 23:29:04 +0000 |
parents | 462ead6fc1a0 |
children | 42f1614783f0 |
files | src/Makefile.am src/buddy_chat.c src/gtkblist.c src/ui.h |
diffstat | 4 files changed, 274 insertions(+), 286 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Makefile.am Fri Feb 20 23:14:32 2004 +0000 +++ b/src/Makefile.am Fri Feb 20 23:29:04 2004 +0000 @@ -127,7 +127,6 @@ $(CORESOURCES) \ about.c \ away.c \ - buddy_chat.c \ dialogs.c \ dnd-hints.c \ dnd-hints.h \
--- a/src/buddy_chat.c Fri Feb 20 23:14:32 2004 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* - * gaim - * - * Gaim is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#include "gtkinternal.h" - -#include "debug.h" -#include "multi.h" -#include "notify.h" -#include "prpl.h" -#include "server.h" - -#include "gtkblist.h" -#include "gtkimhtml.h" -#include "gtkutils.h" -#include "stock.h" -#include "ui.h" - -typedef struct -{ - GaimAccount *account; - - GtkWidget *window; - GtkWidget *account_menu; - GtkWidget *entries_box; - GtkSizeGroup *sg; - - GList *entries; -} GaimGtkJoinChatData; - -static void -do_join_chat(GaimGtkJoinChatData *data) -{ - if (data) { - GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); - GList *tmp; - - for (tmp = data->entries; tmp != NULL; tmp = tmp->next) { - if (g_object_get_data(tmp->data, "is_spin")) { - g_hash_table_replace(components, - g_strdup(g_object_get_data(tmp->data, "identifier")), - g_strdup_printf("%d", - gtk_spin_button_get_value_as_int(tmp->data))); - } - else { - g_hash_table_replace(components, - g_strdup(g_object_get_data(tmp->data, "identifier")), - g_strdup(gtk_entry_get_text(tmp->data))); - } - } - - serv_join_chat(gaim_account_get_connection(data->account), components); - - g_hash_table_destroy(components); - } -} - -static void -rebuild_joinchat_entries(GaimGtkJoinChatData *data) -{ - GaimConnection *gc; - GList *list, *tmp; - struct proto_chat_entry *pce; - gboolean focus = TRUE; - - gc = gaim_account_get_connection(data->account); - - while (GTK_BOX(data->entries_box)->children) { - gtk_container_remove(GTK_CONTAINER(data->entries_box), - ((GtkBoxChild *)GTK_BOX(data->entries_box)->children->data)->widget); - } - - if (data->entries != NULL) - g_list_free(data->entries); - - data->entries = NULL; - - list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); - - for (tmp = list; tmp; tmp = tmp->next) - { - GtkWidget *label; - GtkWidget *rowbox; - - pce = tmp->data; - - rowbox = gtk_hbox_new(FALSE, 12); - gtk_box_pack_start(GTK_BOX(data->entries_box), rowbox, FALSE, FALSE, 0); - - label = gtk_label_new_with_mnemonic(pce->label); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_size_group_add_widget(data->sg, label); - gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); - - if (pce->is_int) { - GtkObject *adjust; - GtkWidget *spin; - adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, - 1, 10, 10); - spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - g_object_set_data(G_OBJECT(spin), "is_spin", GINT_TO_POINTER(TRUE)); - g_object_set_data(G_OBJECT(spin), "identifier", pce->identifier); - data->entries = g_list_append(data->entries, spin); - gtk_widget_set_size_request(spin, 50, -1); - gtk_box_pack_end(GTK_BOX(rowbox), spin, FALSE, FALSE, 0); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(spin)); - gaim_set_accessible_label (spin, label); - } else { - GtkWidget *entry = gtk_entry_new(); - - gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); - g_object_set_data(G_OBJECT(entry), "identifier", pce->identifier); - data->entries = g_list_append(data->entries, entry); - - if (pce->def) - gtk_entry_set_text(GTK_ENTRY(entry), pce->def); - - if (focus) { - gtk_widget_grab_focus(entry); - focus = FALSE; - } - - if (pce->secret) - gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); - - gtk_box_pack_end(GTK_BOX(rowbox), entry, TRUE, TRUE, 0); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(entry)); - gaim_set_accessible_label (entry, label); - } - - g_free(pce); - } - - g_list_free(list); - - gtk_widget_show_all(data->entries_box); -} - -static void -join_chat_select_account_cb(GObject *w, GaimAccount *account, GaimGtkJoinChatData *data) -{ - if (gaim_account_get_protocol(data->account) == - gaim_account_get_protocol(account)) { - data->account = account; - } else { - data->account = account; - rebuild_joinchat_entries(data); - } -} - -static gboolean -join_chat_check_account_func(GaimAccount *account) -{ - GaimConnection *gc = gaim_account_get_connection(account); - - return (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL); -} - -static void do_joinchat(GtkWidget *dialog, int id, GaimGtkJoinChatData *info) -{ - switch(id) { - case GTK_RESPONSE_OK: - do_join_chat(info); - - break; - } - - gtk_widget_destroy(GTK_WIDGET(dialog)); - g_list_free(info->entries); - g_free(info); -} - - -void -join_chat() -{ - GtkWidget *hbox, *vbox; - GtkWidget *rowbox; - GtkWidget *label; - GList *c; - GaimGtkBuddyList *gtkblist; - GtkWidget *img = NULL; - GaimConnection *gc = NULL; - GaimGtkJoinChatData *data = NULL; - int numaccounts = 0; - - /* Count how many protocols support chat */ - for (c = gaim_connections_get_all(); c != NULL; c = c->next) { - gc = c->data; - - if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat) - numaccounts++; - } - - if (numaccounts <= 0) { - gaim_notify_error(NULL, NULL, - _("You are not currently signed on with any " - "protocols that have the ability to chat."), - NULL); - - return; - } - - gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); - img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); - data = g_new0(GaimGtkJoinChatData, 1); - - data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), gtkblist->window ? GTK_WINDOW(gtkblist->window) : NULL, 0, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - _("_Join"), GTK_RESPONSE_OK, NULL); - gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); - gtk_container_set_border_width(GTK_CONTAINER(data->window), 6); - gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); - gtk_dialog_set_has_separator(GTK_DIALOG(data->window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), 12); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), 6); - - hbox = gtk_hbox_new(FALSE, 12); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); - gtk_container_add(GTK_CONTAINER(hbox), vbox); - - label = gtk_label_new(_("Please enter the appropriate information about the chat you would like to join.\n")); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - - rowbox = gtk_hbox_new(FALSE, 12); - gtk_box_pack_start(GTK_BOX(vbox), rowbox, TRUE, TRUE, 0); - - data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - - if (numaccounts > 1) { - label = gtk_label_new_with_mnemonic(_("_Account:")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); - gtk_size_group_add_widget(data->sg, label); - - data->account_menu = gaim_gtk_account_option_menu_new(NULL, FALSE, - G_CALLBACK(join_chat_select_account_cb), - join_chat_check_account_func, data); - gtk_box_pack_start(GTK_BOX(rowbox), data->account_menu, TRUE, TRUE, 0); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(data->account_menu)); - gaim_set_accessible_label (data->account_menu, label); - } - - data->entries_box = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(vbox), data->entries_box); - gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); - - - data->account = gaim_connection_get_account(gaim_connections_get_all()->data); - rebuild_joinchat_entries(data); - - - g_signal_connect(G_OBJECT(data->window), "response", G_CALLBACK(do_joinchat), data); - - g_object_unref(data->sg); - - gtk_widget_show_all(data->window); -}
--- a/src/gtkblist.c Fri Feb 20 23:14:32 2004 +0000 +++ b/src/gtkblist.c Fri Feb 20 23:29:04 2004 +0000 @@ -86,6 +86,18 @@ } GaimGtkAddChatData; +typedef struct +{ + GaimAccount *account; + + GtkWidget *window; + GtkWidget *account_menu; + GtkWidget *entries_box; + GtkSizeGroup *sg; + + GList *entries; +} GaimGtkJoinChatData; + static GtkWidget *protomenu = NULL; @@ -604,6 +616,268 @@ show_info_dialog(); } +static void +do_join_chat(GaimGtkJoinChatData *data) +{ + if (data) + { + GHashTable *components = + g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + GList *tmp; + + for (tmp = data->entries; tmp != NULL; tmp = tmp->next) + { + if (g_object_get_data(tmp->data, "is_spin")) + { + g_hash_table_replace(components, + g_strdup(g_object_get_data(tmp->data, "identifier")), + g_strdup_printf("%d", + gtk_spin_button_get_value_as_int(tmp->data))); + } + else + { + g_hash_table_replace(components, + g_strdup(g_object_get_data(tmp->data, "identifier")), + g_strdup(gtk_entry_get_text(tmp->data))); + } + } + + serv_join_chat(gaim_account_get_connection(data->account), components); + + g_hash_table_destroy(components); + } +} + +static void +rebuild_joinchat_entries(GaimGtkJoinChatData *data) +{ + GaimConnection *gc; + GList *list, *tmp; + struct proto_chat_entry *pce; + gboolean focus = TRUE; + + gc = gaim_account_get_connection(data->account); + + while (GTK_BOX(data->entries_box)->children) + { + gtk_container_remove(GTK_CONTAINER(data->entries_box), + ((GtkBoxChild *)GTK_BOX(data->entries_box)->children->data)->widget); + } + + if (data->entries != NULL) + g_list_free(data->entries); + + data->entries = NULL; + + list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); + + for (tmp = list; tmp; tmp = tmp->next) + { + GtkWidget *label; + GtkWidget *rowbox; + + pce = tmp->data; + + rowbox = gtk_hbox_new(FALSE, 12); + gtk_box_pack_start(GTK_BOX(data->entries_box), rowbox, FALSE, FALSE, 0); + + label = gtk_label_new_with_mnemonic(pce->label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_size_group_add_widget(data->sg, label); + gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); + + if (pce->is_int) + { + GtkObject *adjust; + GtkWidget *spin; + adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, + 1, 10, 10); + spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); + g_object_set_data(G_OBJECT(spin), "is_spin", + GINT_TO_POINTER(TRUE)); + g_object_set_data(G_OBJECT(spin), "identifier", pce->identifier); + data->entries = g_list_append(data->entries, spin); + gtk_widget_set_size_request(spin, 50, -1); + gtk_box_pack_end(GTK_BOX(rowbox), spin, FALSE, FALSE, 0); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(spin)); + gaim_set_accessible_label (spin, label); + } + else + { + GtkWidget *entry = gtk_entry_new(); + + gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); + g_object_set_data(G_OBJECT(entry), "identifier", pce->identifier); + data->entries = g_list_append(data->entries, entry); + + if (pce->def) + gtk_entry_set_text(GTK_ENTRY(entry), pce->def); + + if (focus) + { + gtk_widget_grab_focus(entry); + focus = FALSE; + } + + if (pce->secret) + gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); + + gtk_box_pack_end(GTK_BOX(rowbox), entry, TRUE, TRUE, 0); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(entry)); + gaim_set_accessible_label (entry, label); + } + + g_free(pce); + } + + g_list_free(list); + + gtk_widget_show_all(data->entries_box); +} + +static void +join_chat_select_account_cb(GObject *w, GaimAccount *account, + GaimGtkJoinChatData *data) +{ + if (gaim_account_get_protocol(data->account) == + gaim_account_get_protocol(account)) + { + data->account = account; + } + else + { + data->account = account; + rebuild_joinchat_entries(data); + } +} + +static gboolean +join_chat_check_account_func(GaimAccount *account) +{ + GaimConnection *gc = gaim_account_get_connection(account); + + return (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL); +} + +static void +do_joinchat(GtkWidget *dialog, int id, GaimGtkJoinChatData *info) +{ + switch(id) + { + case GTK_RESPONSE_OK: + do_join_chat(info); + + break; + } + + gtk_widget_destroy(GTK_WIDGET(dialog)); + g_list_free(info->entries); + g_free(info); +} + +static void +join_chat(void) +{ + GtkWidget *hbox, *vbox; + GtkWidget *rowbox; + GtkWidget *label; + GList *c; + GaimGtkBuddyList *gtkblist; + GtkWidget *img = NULL; + GaimConnection *gc = NULL; + GaimGtkJoinChatData *data = NULL; + int numaccounts = 0; + + /* Count how many protocols support chat */ + for (c = gaim_connections_get_all(); c != NULL; c = c->next) + { + gc = c->data; + + if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat) + numaccounts++; + } + + if (numaccounts <= 0) + { + gaim_notify_error(NULL, NULL, + _("You are not currently signed on with any " + "protocols that have the ability to chat."), + NULL); + + return; + } + + gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); + img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, + GTK_ICON_SIZE_DIALOG); + data = g_new0(GaimGtkJoinChatData, 1); + + data->window = gtk_dialog_new_with_buttons( + _("Join a Chat"), + gtkblist->window ? GTK_WINDOW(gtkblist->window) : NULL, 0, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + _("_Join"), GTK_RESPONSE_OK, NULL); + gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); + gtk_container_set_border_width(GTK_CONTAINER(data->window), 6); + gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); + gtk_dialog_set_has_separator(GTK_DIALOG(data->window), FALSE); + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), 12); + gtk_container_set_border_width( + GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), 6); + + hbox = gtk_hbox_new(FALSE, 12); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); + gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); + gtk_misc_set_alignment(GTK_MISC(img), 0, 0); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); + gtk_container_add(GTK_CONTAINER(hbox), vbox); + + label = gtk_label_new(_("Please enter the appropriate information " + "about the chat you would like to join.\n")); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + rowbox = gtk_hbox_new(FALSE, 12); + gtk_box_pack_start(GTK_BOX(vbox), rowbox, TRUE, TRUE, 0); + + data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + + if (numaccounts > 1) + { + label = gtk_label_new_with_mnemonic(_("_Account:")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); + gtk_size_group_add_widget(data->sg, label); + + data->account_menu = gaim_gtk_account_option_menu_new(NULL, FALSE, + G_CALLBACK(join_chat_select_account_cb), + join_chat_check_account_func, data); + gtk_box_pack_start(GTK_BOX(rowbox), data->account_menu, TRUE, TRUE, 0); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), + GTK_WIDGET(data->account_menu)); + gaim_set_accessible_label (data->account_menu, label); + } + + data->entries_box = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), data->entries_box); + gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); + + + data->account = + gaim_connection_get_account(gaim_connections_get_all()->data); + rebuild_joinchat_entries(data); + + g_signal_connect(G_OBJECT(data->window), "response", + G_CALLBACK(do_joinchat), data); + + g_object_unref(data->sg); + + gtk_widget_show_all(data->window); +} + static void gtk_blist_button_chat_cb(GtkWidget *w, GtkTreeView *tv) { GtkTreeIter iter;
--- a/src/ui.h Fri Feb 20 23:14:32 2004 +0000 +++ b/src/ui.h Fri Feb 20 23:29:04 2004 +0000 @@ -144,7 +144,6 @@ extern void cancel_font(GtkWidget *widget, GaimConversation *c); extern void apply_font(GtkWidget *widget, GtkFontSelection *fontsel); extern void destroy_fontsel(GtkWidget *w, gpointer d); -extern void join_chat(); /* Functions in server.c */ /* server.c is in desperate need need of a split */