void purple_request_field_account_set_show_all(PurpleRequestField *field, gboolean show_all) { g_return_if_fail(field != NULL); g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_ACCOUNT); if (field->u.account.show_all == show_all) return; field->u.account.show_all = show_all; if (!show_all) { if (purple_account_is_connected(field->u.account.default_account)) { purple_request_field_account_set_default_value(field, (PurpleAccount *)purple_connections_get_all()->data); } if (purple_account_is_connected(field->u.account.account)) { purple_request_field_account_set_value(field, (PurpleAccount *)purple_connections_get_all()->data); } } }
/* Try to read some data and push it to the WhatsApp API */ void waprpl_ssl_input_cb(gpointer data, gint source, PurpleInputCondition cond) { PurpleConnection *gc = data; whatsapp_connection *wconn = purple_connection_get_protocol_data(gc); /* End point closed the connection */ if (!g_list_find(purple_connections_get_all(), gc)) { waprpl_ssl_cerr_cb(0, 0, gc); return; } char tempbuff[1024]; int ret; do { ret = purple_ssl_read(wconn->gsc, tempbuff, sizeof(tempbuff)); if (ret > 0) { waAPI_sslinput(wconn->waAPI, tempbuff, ret); } else if (ret < 0 && errno == EAGAIN) break; else if (ret < 0) { waprpl_ssl_cerr_cb(0, 0, gc); break; } else { waprpl_ssl_cerr_cb(0, 0, gc); } } while (ret > 0); /*waprpl_process_ssl_events(gc); */ waprpl_check_ssl_output(gc); /* The input data may generate responses! */ }
static void irc_input_cb_ssl(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond) { PurpleConnection *gc = data; struct irc_conn *irc = gc->proto_data; int len; if(!g_list_find(purple_connections_get_all(), gc)) { purple_ssl_close(gsc); return; } if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { irc->inbuflen += IRC_INITIAL_BUFSIZE; irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); } len = purple_ssl_read(gsc, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1); if (len < 0 && errno == EAGAIN) { /* Try again later */ return; } else if (len < 0) { purple_connection_error(gc, _("Read error")); return; } else if (len == 0) { purple_connection_error(gc, _("Server has disconnected")); return; } read_input(irc, len); }
static void foreach_gc_in_chat(ChatFunc fn, PurpleConnection *from, int id, gpointer userdata) { PurpleChatConversation *chat = purple_conversations_find_chat(from, id); ChatFuncData cfdata = { fn, chat, userdata }; g_list_foreach(purple_connections_get_all(), call_chat_func, &cfdata); }
void purple_connections_disconnect_all(void) { GList *l; PurpleConnection *gc; while ((l = purple_connections_get_all()) != NULL) { gc = l->data; gc->wants_to_die = TRUE; purple_account_disconnect(gc->account); } }
/************************************************************************** * Plugin stuff **************************************************************************/ static gboolean plugin_load(PurplePlugin *plugin) { purple_signal_connect(purple_connections_get_handle(), "signed-on", plugin, PURPLE_CALLBACK(signed_on_cb), NULL); /* we don't check if we're offline */ if(purple_connections_get_all()) do_check(); return TRUE; }
static gboolean plugin_load(PurplePlugin *plugin, GError **error) { GtkWidget *hbox; GtkWidget *entry; GtkWidget *dropdown; my_plugin = plugin; /* Setup the window. */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 6); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(window_closed_cb), NULL); /* Main hbox */ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_container_add(GTK_CONTAINER(window), hbox); /* Account drop-down menu. */ dropdown = pidgin_account_option_menu_new(NULL, FALSE, G_CALLBACK(account_changed_cb), NULL, NULL); if (purple_connections_get_all()) account = (PurpleAccount *)purple_connections_get_all()->data; gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0); /* Entry box */ entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(text_sent_cb), NULL); gtk_widget_show_all(window); return TRUE; }
PurpleRequestField * purple_request_field_account_new(const char *id, const char *text, PurpleAccount *account) { PurpleRequestField *field; g_return_val_if_fail(id != NULL, NULL); g_return_val_if_fail(text != NULL, NULL); field = purple_request_field_new(id, text, PURPLE_REQUEST_FIELD_ACCOUNT); if (account == NULL && purple_connections_get_all() != NULL) { account = purple_connection_get_account( (PurpleConnection *)purple_connections_get_all()->data); } purple_request_field_account_set_default_value(field, account); purple_request_field_account_set_value(field, account); return field; }
static void pidgin_connection_disconnected(PurpleConnection *gc) { PidginBuddyList *gtkblist = pidgin_blist_get_default_gtk_blist(); if (!gtkblist) return; pidgin_status_box_set_connecting(PIDGIN_STATUS_BOX(gtkblist->statusbox), (purple_connections_get_connecting() != NULL)); if (purple_connections_get_all() != NULL) return; pidgin_dialogs_destroy_all(); }
static void irc_input_cb_ssl(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond) { PurpleConnection *gc = data; struct irc_conn *irc = gc->proto_data; int len; if(!g_list_find(purple_connections_get_all(), gc)) { purple_ssl_close(gsc); return; } do { // resize buffer upwards so we have at least IRC_BUFSIZE_INCREMENT // bytes free in inbuf if (irc->inbuflen < irc->inbufused + IRC_BUFSIZE_INCREMENT) { if (irc->inbuflen + IRC_BUFSIZE_INCREMENT <= IRC_MAX_BUFSIZE) { irc->inbuflen += IRC_BUFSIZE_INCREMENT; irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); } else { // discard unparseable data from the buffer irc->inbufused = 0; } } len = purple_ssl_read(gsc, irc->inbuf + irc->inbufused, irc->inbuflen - irc->inbufused - 1); if (len > 0) { read_input(irc, len); } } while (len > 0); if (len < 0 && errno != EAGAIN) { gchar *tmp = g_strdup_printf(_("Lost connection with server: %s"), g_strerror(errno)); purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); g_free(tmp); } else if (len == 0) { purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Server closed the connection")); } /* else: len < 0 && errno == EAGAIN; this is fine, try again later */ }
static gboolean plugin_load(PurplePlugin *plugin) { void *blist_handle = purple_blist_get_handle(); purple_signal_connect(purple_connections_get_handle(), "signed-off", plugin, PURPLE_CALLBACK(signoff_cb), NULL); purple_signal_connect(blist_handle, "buddy-signed-on", plugin, PURPLE_CALLBACK(buddy_signon_cb), NULL); purple_signal_connect(blist_handle, "buddy-signed-off", plugin, PURPLE_CALLBACK(buddy_signoff_cb), NULL); purple_signal_connect(blist_handle, "buddy-status-changed", plugin, PURPLE_CALLBACK(status_changed_cb), NULL); if (purple_connections_get_all()) buddy_ticker_show(); return TRUE; }
void purple_idle_set(time_t time_idle) { if (time_idle) { GList *l; for (l = purple_connections_get_all(); l != NULL; l = l->next) { PurpleConnection *gc = l->data; set_account_idle(purple_connection_get_account(gc), time_idle); } } else { while (idled_accts != NULL) set_account_unidle(idled_accts->data); } global_time_idle = time_idle; }
static void reset_account_list(PurpleAccount *account) { GList *list; GntComboBox *accounts = GNT_COMBO_BOX(froomlist.accounts); gnt_combo_box_remove_all(accounts); for (list = purple_connections_get_all(); list; list = list->next) { PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = list->data; prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); if (PURPLE_CONNECTION_IS_CONNECTED(gc) && prpl_info->roomlist_get_list != NULL) { PurpleAccount *account = purple_connection_get_account(gc); char *text = g_strdup_printf("%s (%s)", purple_account_get_username(account), purple_account_get_protocol_name(account)); gnt_combo_box_add_data(accounts, account, text); g_free(text); } } }
static GntWidget* create_account_field(PurpleRequestField *field) { gboolean all; PurpleAccount *def; GList *list; GntWidget *combo = gnt_combo_box_new(); all = purple_request_field_account_get_show_all(field); def = purple_request_field_account_get_value(field); if (!def) def = purple_request_field_account_get_default_value(field); if (all) list = purple_accounts_get_all(); else list = purple_connections_get_all(); for (; list; list = list->next) { PurpleAccount *account; char *text; if (all) account = list->data; else account = purple_connection_get_account(list->data); text = g_strdup_printf("%s (%s)", purple_account_get_username(account), purple_account_get_protocol_name(account)); gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); g_free(text); if (account == def) gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), account); } gnt_widget_set_size(combo, 20, 3); /* ew */ return combo; }
static void signoff_cb(PurpleConnection *gc) { TickerData *td; if (!purple_connections_get_all()) { while (tickerbuds) { td = tickerbuds->data; tickerbuds = g_list_delete_link(tickerbuds, tickerbuds); if (td->timeout != 0) g_source_remove(td->timeout); g_free(td); } gtk_widget_destroy(tickerwindow); tickerwindow = NULL; ticker = NULL; } else { GList *t = tickerbuds; while (t) { td = t->data; t = t->next; buddy_ticker_update_contact(td->contact); } } }
/* 002 - MSG_CLIENT_LOGIN */ static void nap_login_connect(gpointer data, gint source, const gchar *error_message) { PurpleConnection *gc = data; struct nap_data *ndata = (struct nap_data *)gc->proto_data; gchar *buf; if (!g_list_find(purple_connections_get_all(), gc)) { close(source); return; } if (source < 0) { purple_connection_error(gc, _("Unable to connect.")); return; } /* Clear the nonblocking flag This protocol should be updated to support nonblocking I/O if anyone is going to actually use it */ fcntl(source, F_SETFL, 0); ndata->fd = source; /* Update the login progress status display */ buf = g_strdup_printf("Logging in: %s", purple_account_get_username(gc->account)); purple_connection_update_progress(gc, buf, 1, NAPSTER_CONNECT_STEPS); g_free(buf); /* Write our signon data */ nap_write_packet(gc, 2, "%s %s 0 \"purple %s\" 0", purple_account_get_username(gc->account), purple_connection_get_password(gc), PP_VERSION); /* And set up the input watcher */ gc->inpa = purple_input_add(ndata->fd, PURPLE_INPUT_READ, nap_callback, gc); }
static void notify_test_jabber_send_cb(PurplePluginAction *action) { xmlnode* message; xmlnode* body; message = xmlnode_new("message"); xmlnode_set_attrib(message, "from", "xuewen@localhost/develop"); xmlnode_set_attrib(message, "to", "test@localhost"); xmlnode_set_attrib(message, "type", "chat"); body = xmlnode_new_child(message, "body"); const char* body_data = "this is a test stanza"; body->data = (char*)body_data; body->data_sz = strlen(body_data); // get a connection and emit it GList* connections = purple_connections_get_all(); GList* connection = g_list_first(connections); PurpleConnection * gc_xuewen = 0; while(connection) { PurpleConnection * gc = (PurpleConnection*) connection->data; if (strcmp(gc->display_name, "test@localhost/QAS") == 0) gc_xuewen = gc; connection = g_list_next(connection); } /* const gchar* id = purple_plugin_get_id(gc_xuewen->prpl); if (strcmp(id, prpl-jabber) == 0) { } */ PurplePlugin* plugin = purple_connection_get_prpl(gc_xuewen); PurplePluginProtocolInfo* info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); info->send_raw(gc_xuewen, msg, strlen(msg)); //serv_send_im(gc_xuewen, "test@localhost", "this is a test", PURPLE_MESSAGE_SEND); }
static void create_console(PurplePluginAction *action) { GtkWidget *vbox = gtk_vbox_new(FALSE, 6); GtkWidget *label; GtkTextBuffer *buffer; GtkWidget *toolbar; GList *connections; GtkToolItem *button; if (console) { gtk_window_present(GTK_WINDOW(console->window)); return; } console = g_new0(XmppConsole, 1); console->window = pidgin_create_window(_("XMPP Console"), PIDGIN_HIG_BORDER, NULL, TRUE); g_signal_connect(G_OBJECT(console->window), "destroy", G_CALLBACK(console_destroy), NULL); gtk_window_set_default_size(GTK_WINDOW(console->window), 580, 400); gtk_container_add(GTK_CONTAINER(console->window), vbox); console->hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), console->hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Account: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(console->hbox), label, FALSE, FALSE, 0); console->dropdown = gtk_combo_box_new_text(); for (connections = purple_connections_get_all(); connections; connections = connections->next) { PurpleConnection *gc = connections->data; if (!strcmp(purple_account_get_protocol_id(purple_connection_get_account(gc)), "prpl-jabber")) { console->count++; console->accounts = g_list_append(console->accounts, gc); gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(purple_connection_get_account(gc))); if (!console->gc) console->gc = gc; } } gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown),0); gtk_box_pack_start(GTK_BOX(console->hbox), console->dropdown, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(console->dropdown), "changed", G_CALLBACK(dropdown_changed_cb), NULL); console->imhtml = gtk_imhtml_new(NULL, NULL); if (console->count == 0) gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), _("<font color='#c8c8c8'>Not connected to XMPP</font>"), 0); gtk_box_pack_start(GTK_BOX(vbox), pidgin_make_scrollable(console->imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1), TRUE, TRUE, 0); toolbar = gtk_toolbar_new(); button = gtk_tool_button_new(NULL, "<iq/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(iq_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); button = gtk_tool_button_new(NULL, "<presence/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(presence_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); button = gtk_tool_button_new(NULL, "<message/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(message_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); console->entry = gtk_imhtml_new(NULL, NULL); gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(console->entry), TRUE); g_signal_connect(G_OBJECT(console->entry),"message_send", G_CALLBACK(message_send_cb), console); console->sw = pidgin_make_scrollable(console->entry, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1); gtk_box_pack_start(GTK_BOX(vbox), console->sw, FALSE, FALSE, 0); gtk_imhtml_set_editable(GTK_IMHTML(console->entry), TRUE); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(entry_changed_cb), NULL); entry_changed_cb(buffer, NULL); gtk_widget_show_all(console->window); if (console->count < 2) gtk_widget_hide(console->hbox); }
void finch_pounce_editor_show(PurpleAccount *account, const char *name, PurplePounce *cur_pounce) { PurpleGntPounceDialog *dialog; GntWidget *window; GntWidget *bbox; GntWidget *hbox, *vbox; GntWidget *button; GntWidget *combo; GList *list; g_return_if_fail((cur_pounce != NULL) || (account != NULL) || (purple_accounts_get_all() != NULL)); dialog = g_new0(PurpleGntPounceDialog, 1); if (cur_pounce != NULL) { dialog->pounce = cur_pounce; dialog->account = purple_pounce_get_pouncer(cur_pounce); } else if (account != NULL) { dialog->pounce = NULL; dialog->account = account; } else { GList *connections = purple_connections_get_all(); PurpleConnection *gc; if (connections != NULL) { gc = (PurpleConnection *)connections->data; dialog->account = purple_connection_get_account(gc); } else dialog->account = purple_accounts_get_all()->data; dialog->pounce = NULL; } /* Create the window. */ dialog->window = window = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(window), 0); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_LEFT); gnt_box_set_title(GNT_BOX(window), (cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce"))); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(delete_win_cb), dialog); gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce on Whom"), GNT_TEXT_FLAG_BOLD)); /* Account: */ gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Account:"))); dialog->account_menu = combo = gnt_combo_box_new(); list = purple_accounts_get_all(); for (; list; list = list->next) { PurpleAccount *account; char *text; account = list->data; text = g_strdup_printf("%s (%s)", purple_account_get_username(account), purple_account_get_protocol_name(account)); gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); g_free(text); } if (dialog->account) gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), dialog->account); gnt_box_add_widget(GNT_BOX(window), combo); /* Buddy: */ hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Buddy name:"))); dialog->buddy_entry = gnt_entry_new(NULL); gnt_box_add_widget(GNT_BOX(hbox), dialog->buddy_entry); setup_buddy_list_suggestion(GNT_ENTRY(dialog->buddy_entry), TRUE); gnt_box_add_widget(GNT_BOX(window), hbox); if (cur_pounce != NULL) { gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), purple_pounce_get_pouncee(cur_pounce)); } else if (name != NULL) { gnt_entry_set_text(GNT_ENTRY(dialog->buddy_entry), name); } /* Create the event frame */ gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce When Buddy..."), GNT_TEXT_FLAG_BOLD)); dialog->signon = gnt_check_box_new(_("Signs on")); dialog->signoff = gnt_check_box_new(_("Signs off")); dialog->away = gnt_check_box_new(_("Goes away")); dialog->away_return = gnt_check_box_new(_("Returns from away")); dialog->idle = gnt_check_box_new(_("Becomes idle")); dialog->idle_return = gnt_check_box_new(_("Is no longer idle")); dialog->typing = gnt_check_box_new(_("Starts typing")); dialog->typed = gnt_check_box_new(_("Pauses while typing")); dialog->stop_typing = gnt_check_box_new(_("Stops typing")); dialog->message_recv = gnt_check_box_new(_("Sends a message")); hbox = gnt_hbox_new(TRUE); gnt_box_set_pad(GNT_BOX(hbox), 2); vbox = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(vbox), 0); gnt_box_add_widget(GNT_BOX(hbox), vbox); gnt_box_add_widget(GNT_BOX(vbox), dialog->signon); gnt_box_add_widget(GNT_BOX(vbox), dialog->away); gnt_box_add_widget(GNT_BOX(vbox), dialog->idle); gnt_box_add_widget(GNT_BOX(vbox), dialog->typing); gnt_box_add_widget(GNT_BOX(vbox), dialog->stop_typing); vbox = gnt_vbox_new(FALSE); gnt_box_set_pad(GNT_BOX(vbox), 0); gnt_box_add_widget(GNT_BOX(hbox), vbox); gnt_box_add_widget(GNT_BOX(vbox), dialog->signoff); gnt_box_add_widget(GNT_BOX(vbox), dialog->away_return); gnt_box_add_widget(GNT_BOX(vbox), dialog->idle_return); gnt_box_add_widget(GNT_BOX(vbox), dialog->typed); gnt_box_add_widget(GNT_BOX(vbox), dialog->message_recv); gnt_box_add_widget(GNT_BOX(window), hbox); /* Create the "Action" frame. */ gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Action"), GNT_TEXT_FLAG_BOLD)); dialog->open_win = gnt_check_box_new(_("Open an IM window")); dialog->popup = gnt_check_box_new(_("Pop up a notification")); dialog->send_msg = gnt_check_box_new(_("Send a message")); dialog->exec_cmd = gnt_check_box_new(_("Execute a command")); dialog->play_sound = gnt_check_box_new(_("Play a sound")); dialog->send_msg_entry = gnt_entry_new(NULL); dialog->exec_cmd_entry = gnt_entry_new(NULL); dialog->popup_entry = gnt_entry_new(NULL); dialog->exec_cmd_entry = gnt_entry_new(NULL); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), dialog->open_win); gnt_box_add_widget(GNT_BOX(window), hbox); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), dialog->popup); gnt_box_add_widget(GNT_BOX(hbox), dialog->popup_entry); gnt_box_add_widget(GNT_BOX(window), hbox); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg); gnt_box_add_widget(GNT_BOX(hbox), dialog->send_msg_entry); gnt_box_add_widget(GNT_BOX(window), hbox); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd); gnt_box_add_widget(GNT_BOX(hbox), dialog->exec_cmd_entry); gnt_box_add_widget(GNT_BOX(window), hbox); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(hbox), dialog->play_sound); gnt_box_add_widget(GNT_BOX(window), hbox); gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Options"), GNT_TEXT_FLAG_BOLD)); dialog->on_away = gnt_check_box_new(_("Pounce only when my status is not Available")); gnt_box_add_widget(GNT_BOX(window), dialog->on_away); dialog->save_pounce = gnt_check_box_new(_("Recurring")); gnt_box_add_widget(GNT_BOX(window), dialog->save_pounce); gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); /* Now the button box! */ bbox = gnt_hbox_new(FALSE); /* Cancel button */ button = gnt_button_new(_("Cancel")); gnt_box_add_widget(GNT_BOX(bbox), button); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(cancel_cb), dialog); /* Save button */ dialog->save_button = button = gnt_button_new(_("Save")); gnt_box_add_widget(GNT_BOX(bbox), button); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_pounce_cb), dialog); gnt_box_add_widget(GNT_BOX(window), bbox); /* Set the values of stuff. */ if (cur_pounce != NULL) { PurplePounceEvent events = purple_pounce_get_events(cur_pounce); PurplePounceOption options = purple_pounce_get_options(cur_pounce); const char *value; /* Options */ gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->on_away), (options & PURPLE_POUNCE_OPTION_AWAY)); /* Events */ gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signon), (events & PURPLE_POUNCE_SIGNON)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->signoff), (events & PURPLE_POUNCE_SIGNOFF)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away), (events & PURPLE_POUNCE_AWAY)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->away_return), (events & PURPLE_POUNCE_AWAY_RETURN)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle), (events & PURPLE_POUNCE_IDLE)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->idle_return), (events & PURPLE_POUNCE_IDLE_RETURN)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typing), (events & PURPLE_POUNCE_TYPING)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->typed), (events & PURPLE_POUNCE_TYPED)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->stop_typing), (events & PURPLE_POUNCE_TYPING_STOPPED)); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->message_recv), (events & PURPLE_POUNCE_MESSAGE_RECEIVED)); /* Actions */ gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), purple_pounce_action_is_enabled(cur_pounce, "open-window")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), purple_pounce_action_is_enabled(cur_pounce, "popup-notify")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), purple_pounce_action_is_enabled(cur_pounce, "send-message")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), purple_pounce_action_is_enabled(cur_pounce, "execute-command")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), purple_pounce_action_is_enabled(cur_pounce, "play-beep")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->save_pounce), purple_pounce_get_save(cur_pounce)); if ((value = purple_pounce_action_get_attribute(cur_pounce, "send-message", "message")) != NULL) { gnt_entry_set_text(GNT_ENTRY(dialog->send_msg_entry), value); } if ((value = purple_pounce_action_get_attribute(cur_pounce, "popup-notify", "reason")) != NULL) { gnt_entry_set_text(GNT_ENTRY(dialog->popup_entry), value); } if ((value = purple_pounce_action_get_attribute(cur_pounce, "execute-command", "command")) != NULL) { gnt_entry_set_text(GNT_ENTRY(dialog->exec_cmd_entry), value); } } else { PurpleBuddy *buddy = NULL; if (name != NULL) buddy = purple_find_buddy(account, name); /* Set some defaults */ if (buddy == NULL) { gnt_check_box_set_checked( GNT_CHECK_BOX(dialog->signon), TRUE); } else { if (!PURPLE_BUDDY_IS_ONLINE(buddy)) { gnt_check_box_set_checked( GNT_CHECK_BOX(dialog->signon), TRUE); } else { gboolean default_set = FALSE; PurplePresence *presence = purple_buddy_get_presence(buddy); if (purple_presence_is_idle(presence)) { gnt_check_box_set_checked( GNT_CHECK_BOX(dialog->idle_return), TRUE); default_set = TRUE; } if (!purple_presence_is_available(presence)) { gnt_check_box_set_checked( GNT_CHECK_BOX(dialog->away_return), TRUE); default_set = TRUE; } if (!default_set) { gnt_check_box_set_checked( GNT_CHECK_BOX(dialog->signon), TRUE); } } } gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), purple_prefs_get_bool("/finch/pounces/default_actions/open-window")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), purple_prefs_get_bool("/finch/pounces/default_actions/popup-notify")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), purple_prefs_get_bool("/finch/pounces/default_actions/send-message")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), purple_prefs_get_bool("/finch/pounces/default_actions/execute-command")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), purple_prefs_get_bool("/finch/pounces/default_actions/play-beep")); } gnt_widget_show(window); }
void gevo_add_buddy_dialog_show(PurpleAccount *account, const char *username, const char *group, const char *alias) { GevoAddBuddyDialog *dialog; GtkWidget *button; GtkWidget *sw; GtkWidget *label; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; GtkWidget *sep; GtkTreeSelection *selection; GtkCellRenderer *cell; dialog = g_new0(GevoAddBuddyDialog, 1); dialog->account = (account != NULL ? account : purple_connection_get_account(purple_connections_get_all()->data)); if (username != NULL) dialog->username = g_strdup(username); dialog->win = pidgin_create_window(_("Add Buddy"), PIDGIN_HIG_BORDER, "add_buddy", TRUE); gtk_widget_set_size_request(dialog->win, -1, 400); g_signal_connect(G_OBJECT(dialog->win), "delete_event", G_CALLBACK(delete_win_cb), dialog); /* Setup the vbox */ vbox = gtk_vbox_new(FALSE, 12); gtk_container_add(GTK_CONTAINER(dialog->win), vbox); gtk_widget_show(vbox); /* Add the label. */ label = gtk_label_new(_("Select a person from your address book below, " "or add a new person.")); 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, TRUE, 0); gtk_widget_show(label); /* Add the search hbox */ hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); /* "Search" */ label = gtk_label_new(_("Search")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); /* Addressbooks */ dialog->addrbooks = gevo_addrbooks_model_new(); dialog->addrbooks_combo = gtk_combo_box_new_with_model( dialog->addrbooks); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo), cell, "text", ADDRBOOK_COLUMN_NAME, NULL); gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, FALSE, 0); gtk_widget_show(dialog->addrbooks_combo); /* Search field */ dialog->search_field = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0); gtk_widget_show(dialog->search_field); g_signal_connect(G_OBJECT(dialog->search_field), "changed", G_CALLBACK(search_changed_cb), dialog); /* Clear button */ button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(clear_cb), dialog); /* Scrolled Window */ sw = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_widget_show(sw); /* Create the list model for the treeview. */ dialog->model = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); /* Now for the treeview */ dialog->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->model)); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE); gtk_container_add(GTK_CONTAINER(sw), dialog->treeview); gtk_widget_show(dialog->treeview); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selected_cb), dialog); add_columns(dialog); /* * Catch addressbook selection and populate treeview with the first * addressbook */ gevo_addrbooks_model_populate(dialog->addrbooks); g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed", G_CALLBACK(addrbook_change_cb), dialog); gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0); /* Group box */ dialog->group_combo = pidgin_text_combo_box_entry_new(group, gevo_get_groups()); pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("Group:"), NULL, dialog->group_combo, TRUE, NULL); gtk_widget_show_all(dialog->group_combo); /* Cool. Now we only have a little left... */ /* Separator. */ sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); gtk_widget_show(sep); /* Button box */ bbox = gtk_hbutton_box_new(); gtk_box_set_spacing(GTK_BOX(bbox), 6); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); gtk_widget_show(bbox); /* "New Person" button */ button = pidgin_pixbuf_button_from_stock(_("New Person"), GTK_STOCK_NEW, PIDGIN_BUTTON_HORIZONTAL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(new_person_cb), dialog); /* "Cancel" button */ button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cancel_cb), dialog); /* "Select Buddy" button */ button = pidgin_pixbuf_button_from_stock(_("Select Buddy"), GTK_STOCK_APPLY, PIDGIN_BUTTON_HORIZONTAL); dialog->select_button = button; gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_set_sensitive(button, FALSE); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_buddy_cb), dialog); /* Show it. */ gtk_widget_show(dialog->win); }
static void add_ims(GevoAddBuddyDialog *dialog, EContact *contact, const char *name, GList *list, const char *id) { PurpleAccount *account = NULL; GList *l; GtkTreeIter iter; GdkPixbuf *pixbuf; if (list == NULL) return; for (l = purple_connections_get_all(); l != NULL; l = l->next) { PurpleConnection *gc = (PurpleConnection *)l->data; account = purple_connection_get_account(gc); if (!strcmp(purple_account_get_protocol_id(account), id)) break; account = NULL; } if (account == NULL) return; pixbuf = pidgin_create_prpl_icon(account, 0.5); for (l = list; l != NULL; l = l->next) { char *account_name = (char *)l->data; if (account_name == NULL) continue; if (purple_find_buddy(dialog->account, account_name) != NULL) continue; gtk_list_store_append(dialog->model, &iter); gtk_list_store_set(dialog->model, &iter, COLUMN_NAME, name, COLUMN_PRPL_ICON, pixbuf, COLUMN_USERNAME, account_name, COLUMN_DATA, contact, -1); if (!strcmp(purple_account_get_protocol_id(account), purple_account_get_protocol_id(dialog->account)) && dialog->username != NULL && !strcmp(account_name, dialog->username)) { GtkTreeSelection *selection; /* This is it. Select it. */ selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(dialog->treeview)); gtk_tree_selection_select_iter(selection, &iter); } } if (pixbuf != NULL) g_object_unref(G_OBJECT(pixbuf)); g_list_foreach(list, (GFunc)g_free, NULL); g_list_free(list); }
static void foreach_nullprpl_gc(GcFunc fn, PurpleConnection *from, gpointer userdata) { GcFuncData gcfdata = { fn, from, userdata }; g_list_foreach(purple_connections_get_all(), call_if_nullprpl, &gcfdata); }
void BuddyList::request_add_chat(PurpleAccount *account, PurpleGroup *group, const char *alias, const char *name) { if (!CheckAnyAccountConnected()) return; if (account) { PurpleConnection *gc = purple_account_get_connection(account); if (!PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat) { LOG->Message(_("This protocol does not support chat rooms.")); return; } } else { // find an account with chat capabilities for (GList *l = purple_connections_get_all(); l; l = l->next) { PurpleConnection *gc = reinterpret_cast<PurpleConnection*>(l->data); if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat) { account = purple_connection_get_account(gc); break; } } if (!account) { LOG->Message(_("You are not currently signed on with any " "protocols that have the ability to chat.")); return; } } PurpleRequestFields *fields = purple_request_fields_new(); PurpleRequestFieldGroup *g = purple_request_field_group_new(NULL); purple_request_fields_add_group(fields, g); PurpleRequestField *f; f = purple_request_field_account_new("account", _("Account"), account); purple_request_field_group_add_field(g, f); f = purple_request_field_string_new("name", _("Chat name"), NULL, FALSE); purple_request_field_group_add_field(g, f); f = purple_request_field_string_new("alias", _("Alias"), NULL, FALSE); purple_request_field_group_add_field(g, f); f = purple_request_field_choice_new("group", _("Group"), 0); bool add_default_group = true; int dval = 0; bool dval_set = false; for (PurpleBlistNode *i = purple_blist_get_root(); i; i = i->next) if (PURPLE_BLIST_NODE_IS_GROUP(i)) { PurpleGroup *cur_group = reinterpret_cast<PurpleGroup*>(i); const char *cur_name = purple_group_get_name(cur_group); purple_request_field_choice_add(f, cur_name); if (!dval_set) { if (group == cur_group) { purple_request_field_choice_set_default_value(f, dval); dval_set = true; } dval++; } add_default_group = false; } if (add_default_group) purple_request_field_choice_add(f, _("Chats")); purple_request_field_group_add_field(g, f); f = purple_request_field_bool_new("autojoin", _("Auto-join"), FALSE); purple_request_field_group_add_field(g, f); purple_request_fields(NULL, _("Add chat"), NULL, NULL, fields, _("Add"), G_CALLBACK(add_chat_ok_cb_), CANCEL_BUTTON_TEXT, NULL, NULL, NULL, NULL, this); }