--- a/libpurple/plugins/tcl/tcl_cmds.c Wed Sep 19 03:28:52 2007 +0000
+++ b/libpurple/plugins/tcl/tcl_cmds.c Wed Sep 19 03:30:40 2007 +0000
@@ -55,7 +55,7 @@
- Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid account", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid account", -1)); @@ -74,7 +74,7 @@
- Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid conversation", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid conversation", -1)); @@ -97,7 +97,7 @@
int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
+ Tcl_Obj *result, *list, *elem; const char *cmds[] = { "alias", "connect", "connection", "disconnect",
"enabled", "find", "handle", "isconnected",
"list", "presence", "protocol", "status",
@@ -139,7 +139,7 @@
if ((account = tcl_validate_account(objv[2], interp)) == NULL)
alias = purple_account_get_alias(account);
- Tcl_SetStringObj(result, alias ? (char *)alias : "", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(alias ? (char *)alias : "", -1)); case CMD_ACCOUNT_CONNECT:
@@ -164,7 +164,7 @@
purple_tcl_ref_new(PurpleTclRefConnection,
- purple_account_get_connection(account)));
+ purple_account_get_connection(account))); case CMD_ACCOUNT_DISCONNECT:
@@ -183,9 +183,10 @@
if ((account = tcl_validate_account(objv[2], interp)) == NULL)
- Tcl_SetBooleanObj(result,
- purple_account_get_enabled(account,
- purple_core_get_ui()));
+ Tcl_SetObjResult(interp, + purple_account_get_enabled(account, + purple_core_get_ui()))); if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &b)) != TCL_OK)
@@ -207,7 +208,9 @@
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_accounts_get_handle());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, + purple_accounts_get_handle())); case CMD_ACCOUNT_ISCONNECTED:
@@ -216,7 +219,9 @@
if ((account = tcl_validate_account(objv[2], interp)) == NULL)
- Tcl_SetBooleanObj(result, purple_account_is_connected(account));
+ Tcl_SetObjResult(interp, + purple_account_is_connected(account))); listopt = CMD_ACCOUNTLIST_ALL;
@@ -255,7 +260,7 @@
if ((account = tcl_validate_account(objv[2], interp)) == NULL)
- Tcl_SetStringObj(result, (char *)purple_account_get_protocol_id(account), -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj((char *)purple_account_get_protocol_id(account), -1)); @@ -271,19 +276,19 @@
- Tcl_SetStringObj(result, "name without value setting status", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("name without value setting status", -1)); status = purple_account_get_status(account, Tcl_GetString(objv[3]));
- Tcl_SetStringObj(result, "invalid status for account", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid status for account", -1)); for (i = 4; i < objc; i += 2) {
attr_id = Tcl_GetString(objv[i]);
value = purple_status_get_attr_value(status, attr_id);
- Tcl_SetStringObj(result, "invalid attribute for account", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid attribute for account", -1)); switch (purple_value_get_type(value)) {
@@ -306,7 +311,7 @@
l = g_list_append(l, Tcl_GetString(objv[i + 1]));
- Tcl_SetStringObj(result, "unknown PurpleValue type", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("unknown PurpleValue type", -1)); @@ -327,10 +332,10 @@
PurpleStatusPrimitive primitive;
if (strcmp(Tcl_GetString(objv[3]), "-primitive")) {
- Tcl_SetStringObj(result, "bad option \"", -1);
+ result = Tcl_NewStringObj("bad option \"", -1); Tcl_AppendObjToObj(result, objv[3]);
- Tcl_AppendToObj(result,
- "\": should be -primitive", -1);
+ Tcl_AppendToObj(result, "\": should be -primitive", -1); + Tcl_SetObjResult(interp,result); primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4]));
@@ -338,7 +343,7 @@
if (status_type == NULL) {
- Tcl_SetStringObj(result, "status type not found", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("status type not found", -1)); @@ -368,7 +373,8 @@
if ((account = tcl_validate_account(objv[2], interp)) == NULL)
- Tcl_SetStringObj(result, (char *)purple_account_get_username(account), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj((char *)purple_account_get_username(account), -1)); @@ -383,7 +389,8 @@
- Tcl_SetStringObj(Tcl_GetObjResult(interp), "list too short", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("list too short", -1)); @@ -420,8 +427,6 @@
if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
- result = Tcl_GetObjResult(interp);
@@ -433,9 +438,11 @@
if ((node = tcl_list_to_buddy(interp, count, elems)) == NULL)
if (node->type == PURPLE_BLIST_CHAT_NODE)
- Tcl_SetStringObj(result, ((PurpleChat *)node)->alias, -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(((PurpleChat *)node)->alias, -1)); else if (node->type == PURPLE_BLIST_BUDDY_NODE)
- Tcl_SetStringObj(result, (char *)purple_buddy_get_alias((PurpleBuddy *)node), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj((char *)purple_buddy_get_alias((PurpleBuddy *)node), -1)); @@ -443,7 +450,9 @@
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_blist_get_handle());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, + purple_blist_get_handle())); if (objc != 3 && objc != 4) {
@@ -454,11 +463,13 @@
if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK)
- Tcl_SetStringObj(result, "buddy too short", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("buddy too short", -1)); if (strcmp("buddy", Tcl_GetString(elems[0]))) {
- Tcl_SetStringObj(result, "invalid buddy", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("invalid buddy", -1)); if ((account = tcl_validate_account(elems[2], interp)) == NULL)
@@ -475,8 +486,9 @@
if (!strcmp("-all", Tcl_GetString(objv[2]))) {
- Tcl_SetStringObj(result, "", -1);
+ result = Tcl_NewStringObj("",-1); Tcl_AppendStringsToObj(result, "unknown option: ", Tcl_GetString(objv[2]), NULL);
+ Tcl_SetObjResult(interp,result); @@ -547,7 +559,7 @@
const char *cmds[] = { "do", "help", "list", "register", "unregister", NULL };
enum { CMD_CMD_DO, CMD_CMD_HELP, CMD_CMD_LIST, CMD_CMD_REGISTER, CMD_CMD_UNREGISTER } cmd;
struct tcl_cmd_handler *handler;
- Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp);
PurpleConversation *convo;
@@ -575,7 +587,8 @@
status = purple_cmd_do_command(convo, Tcl_GetString(objv[3]),
- Tcl_SetStringObj(result, errstr ? (char *)errstr : "", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(errstr ? (char *)errstr : "", -1)); if (status != PURPLE_CMD_STATUS_OK) {
@@ -640,10 +653,10 @@
handler->interp = interp;
if ((id = tcl_cmd_register(handler)) == 0) {
tcl_cmd_handler_free(handler);
- Tcl_SetIntObj(result, 0);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); - Tcl_SetIntObj(result, id);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(id)); @@ -663,7 +676,7 @@
int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
const char *cmds[] = { "account", "displayname", "handle", "list", NULL };
enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd;
@@ -697,14 +710,16 @@
if ((gc = tcl_validate_gc(objv[2], interp)) == NULL)
- Tcl_SetStringObj(result, (char *)purple_connection_get_display_name(gc), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_connection_get_display_name(gc), -1)); Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_connections_get_handle());
+ Tcl_SetObjResult(interp, purple_tcl_ref_new(PurpleTclRefHandle, + purple_connections_get_handle())); @@ -725,7 +740,7 @@
int tcl_cmd_conversation(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp);
const char *cmds[] = { "find", "handle", "list", "new", "write", "name", "title", "send", NULL };
enum { CMD_CONV_FIND, CMD_CONV_HANDLE, CMD_CONV_LIST, CMD_CONV_NEW, CMD_CONV_WRITE , CMD_CONV_NAME, CMD_CONV_TITLE, CMD_CONV_SEND } cmd;
const char *styles[] = { "send", "recv", "system", NULL };
@@ -766,7 +781,9 @@
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_conversations_get_handle());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, + purple_conversations_get_handle())); list = Tcl_NewListObj(0, NULL);
@@ -847,7 +864,8 @@
if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
- Tcl_SetStringObj(result, (char *)purple_conversation_get_name(convo), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj((char *)purple_conversation_get_name(convo), -1)); @@ -857,7 +875,8 @@
if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
- Tcl_SetStringObj(result, (char *)purple_conversation_get_title(convo), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj((char *)purple_conversation_get_title(convo), -1)); @@ -879,7 +898,6 @@
int tcl_cmd_core(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result = Tcl_GetObjResult(interp);
const char *cmds[] = { "handle", "quit", NULL };
enum { CMD_CORE_HANDLE, CMD_CORE_QUIT } cmd;
@@ -898,7 +916,9 @@
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_get_core());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, @@ -970,7 +990,6 @@
int tcl_cmd_plugins(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result = Tcl_GetObjResult(interp);
const char *cmds[] = { "handle", NULL };
enum { CMD_PLUGINS_HANDLE } cmd;
@@ -989,7 +1008,9 @@
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_plugins_get_handle());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, + purple_plugins_get_handle())); @@ -998,7 +1019,7 @@
int tcl_cmd_prefs(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result, *list, *elem, **elems;
+ Tcl_Obj *list, *elem, **elems; const char *cmds[] = { "get", "set", "type", NULL };
enum { CMD_PREFS_GET, CMD_PREFS_SET, CMD_PREFS_TYPE } cmd;
/* char *types[] = { "none", "boolean", "int", "string", "stringlist", NULL }; */
@@ -1015,7 +1036,6 @@
if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
- result = Tcl_GetObjResult(interp);
@@ -1025,17 +1045,21 @@
preftype = purple_prefs_get_type(Tcl_GetString(objv[2]));
- Tcl_SetStringObj(result, "pref type none", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("pref type none", -1)); case PURPLE_PREF_BOOLEAN:
- Tcl_SetBooleanObj(result, purple_prefs_get_bool(Tcl_GetString(objv[2])));
+ Tcl_SetObjResult(interp, + purple_prefs_get_bool(Tcl_GetString(objv[2])))); - Tcl_SetIntObj(result, purple_prefs_get_int(Tcl_GetString(objv[2])));
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_prefs_get_int(Tcl_GetString(objv[2])))); - Tcl_SetStringObj(result, (char *)purple_prefs_get_string(Tcl_GetString(objv[2])), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj((char *)purple_prefs_get_string(Tcl_GetString(objv[2])), -1)); case PURPLE_PREF_STRING_LIST:
cur = purple_prefs_get_string_list(Tcl_GetString(objv[2]));
@@ -1049,7 +1073,8 @@
purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
- Tcl_SetStringObj(result, "unknown pref type", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("unknown pref type", -1)); @@ -1061,7 +1086,8 @@
preftype = purple_prefs_get_type(Tcl_GetString(objv[2]));
- Tcl_SetStringObj(result, "bad path or pref type none", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("bad path or pref type none", -1)); case PURPLE_PREF_BOOLEAN:
@@ -1100,23 +1126,23 @@
preftype = purple_prefs_get_type(Tcl_GetString(objv[2]));
- Tcl_SetStringObj(result, "none", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("none", -1)); case PURPLE_PREF_BOOLEAN:
- Tcl_SetStringObj(result, "boolean", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("boolean", -1)); - Tcl_SetStringObj(result, "int", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("int", -1)); - Tcl_SetStringObj(result, "string", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("string", -1)); case PURPLE_PREF_STRING_LIST:
- Tcl_SetStringObj(result, "stringlist", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("stringlist", -1)); purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
- Tcl_SetStringObj(result, "unknown", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("unknown", -1)); @@ -1134,7 +1160,7 @@
CMD_PRESENCE_CONTEXT, CMD_PRESENCE_CONVERSATION,
CMD_PRESENCE_IDLE, CMD_PRESENCE_LOGIN, CMD_PRESENCE_ONLINE,
CMD_PRESENCE_STATUS, CMD_PRESENCE_STATUSES } cmd;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
PurplePresence *presence;
@@ -1171,25 +1197,30 @@
purple_tcl_ref_new(PurpleTclRefStatus,
purple_presence_get_active_status(presence)));
- Tcl_SetBooleanObj(result,
- purple_presence_is_status_active(presence,
- Tcl_GetString(objv[3])));
+ Tcl_SetObjResult(interp, + purple_presence_is_status_active(presence, + Tcl_GetString(objv[3])))); PurpleStatusPrimitive primitive;
if (strcmp(Tcl_GetString(objv[3]), "-primitive")) {
- Tcl_SetStringObj(result, "bad option \"", -1);
+ result = Tcl_NewStringObj("bad option \"", -1); Tcl_AppendObjToObj(result, objv[3]);
"\": should be -primitive", -1);
+ Tcl_SetObjResult(interp,result); primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4]));
if (primitive == PURPLE_STATUS_UNSET) {
- Tcl_SetStringObj(result, "invalid primitive ", -1);
+ result = Tcl_NewStringObj("invalid primitive ", -1); Tcl_AppendObjToObj(result, objv[4]);
+ Tcl_SetObjResult(interp,result); - Tcl_SetBooleanObj(result, purple_presence_is_status_primitive_active(presence, primitive));
+ Tcl_SetObjResult(interp, + purple_presence_is_status_primitive_active(presence, primitive))); @@ -1200,7 +1231,8 @@
if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL)
- Tcl_SetBooleanObj(result, purple_presence_is_available(presence));
+ Tcl_SetObjResult(interp, + Tcl_NewBooleanObj(purple_presence_is_available(presence))); case CMD_PRESENCE_CHAT_USER:
@@ -1209,7 +1241,8 @@
if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL)
- Tcl_SetStringObj(result, purple_presence_get_chat_user(presence), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_presence_get_chat_user(presence), -1)); case CMD_PRESENCE_CONTEXT:
@@ -1220,16 +1253,16 @@
switch (purple_presence_get_context(presence)) {
case PURPLE_PRESENCE_CONTEXT_UNSET:
- Tcl_SetStringObj(result, "unset", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("unset", -1)); case PURPLE_PRESENCE_CONTEXT_ACCOUNT:
- Tcl_SetStringObj(result, "account", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("account", -1)); case PURPLE_PRESENCE_CONTEXT_CONV:
- Tcl_SetStringObj(result, "conversation", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("conversation", -1)); case PURPLE_PRESENCE_CONTEXT_BUDDY:
- Tcl_SetStringObj(result, "buddy", -1);
+ Tcl_SetObjResult(interp, Tcl_NewStringObj("buddy", -1)); @@ -1253,7 +1286,7 @@
if (purple_presence_is_idle(presence)) {
idle_time = purple_presence_get_idle_time (presence);
- Tcl_SetIntObj(result, idle_time);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(idle_time)); result = Tcl_NewListObj(0, NULL);
Tcl_SetObjResult(interp, result);
@@ -1280,7 +1313,7 @@
if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL)
- Tcl_SetIntObj(result, purple_presence_get_login_time(presence));
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_presence_get_login_time(presence))); if ((error == Tcl_GetIntFromObj(interp,
@@ -1296,7 +1329,9 @@
if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL)
- Tcl_SetBooleanObj(result, purple_presence_is_online(presence));
+ Tcl_SetObjResult(interp, + purple_presence_is_online(presence))); case CMD_PRESENCE_STATUS:
@@ -1332,7 +1367,7 @@
int tcl_cmd_savedstatus(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
- Tcl_Obj *result = Tcl_GetObjResult(interp);
const char *cmds[] = { "current", "handle", NULL };
enum { CMD_SAVEDSTATUS_CURRENT, CMD_SAVEDSTATUS_HANDLE } cmd;
@@ -1354,16 +1389,20 @@
if ((saved_status = purple_savedstatus_get_current()) == NULL)
+ result = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_title(saved_status), -1));
Tcl_ListObjAppendElement(interp, result, Tcl_NewIntObj(purple_savedstatus_get_type(saved_status)));
Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_message(saved_status), -1));
+ Tcl_SetObjResult(interp,result); case CMD_SAVEDSTATUS_HANDLE:
Tcl_WrongNumArgs(interp, 2, objv, "");
- Tcl_SetIntObj(result, (int)purple_savedstatuses_get_handle());
+ Tcl_SetObjResult(interp, + purple_tcl_ref_new(PurpleTclRefHandle, + purple_savedstatuses_get_handle())); @@ -1396,7 +1435,6 @@
const char *cmds[] = { "connect", "disconnect", NULL };
enum { CMD_SIGNAL_CONNECT, CMD_SIGNAL_DISCONNECT } cmd;
struct tcl_signal_handler *handler;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
@@ -1415,7 +1453,7 @@
handler = g_new0(struct tcl_signal_handler, 1);
- if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&handler->instance)) != TCL_OK) {
+ if ((handler->instance = purple_tcl_ref_get(interp, objv[2],PurpleTclRefHandle)) == NULL) { @@ -1426,9 +1464,9 @@
handler->interp = interp;
if (!tcl_signal_connect(handler)) {
tcl_signal_handler_free(handler);
- Tcl_SetIntObj(result, 1);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(1)); - Tcl_SetIntObj(result, 0);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); case CMD_SIGNAL_DISCONNECT:
@@ -1436,7 +1474,7 @@
Tcl_WrongNumArgs(interp, 2, objv, "instance signal");
- if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&instance)) != TCL_OK)
+ if ((instance = purple_tcl_ref_get(interp, objv[2],PurpleTclRefHandle)) == NULL) tcl_signal_disconnect(instance, Tcl_GetString(objv[3]), interp);
@@ -1449,7 +1487,6 @@
const char *cmds[] = { "attr", "type", NULL };
enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
PurpleStatusType *status_type;
@@ -1475,13 +1512,15 @@
attr = Tcl_GetString(objv[3]);
value = purple_status_get_attr_value(status, attr);
- Tcl_SetStringObj(result, "no such attribute", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("no such attribute", -1)); switch (purple_value_get_type(value)) {
case PURPLE_TYPE_BOOLEAN:
- Tcl_SetBooleanObj(result, purple_value_get_boolean(value));
+ Tcl_SetObjResult(interp, + Tcl_NewBooleanObj(purple_value_get_boolean(value))); if ((error = Tcl_GetBooleanFromObj(interp, objv[4], &v)) != TCL_OK)
@@ -1490,7 +1529,7 @@
- Tcl_SetIntObj(result, purple_value_get_int(value));
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_value_get_int(value))); if ((error = Tcl_GetIntFromObj(interp, objv[4], &v)) != TCL_OK)
@@ -1499,12 +1538,14 @@
- Tcl_SetStringObj(result, purple_value_get_string(value), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_value_get_string(value), -1)); purple_status_set_attr_string(status, attr, Tcl_GetString(objv[4]));
- Tcl_SetStringObj(result, "attribute has unknown type", -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj("attribute has unknown type", -1)); @@ -1528,7 +1569,6 @@
const char *cmds[] = { "id", "name", NULL };
enum { CMD_STATUS_ATTR_ID, CMD_STATUS_ATTR_NAME } cmd;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
@@ -1548,7 +1588,8 @@
if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL)
- Tcl_SetStringObj(result, purple_status_attr_get_id(attr), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_status_attr_get_id(attr), -1)); case CMD_STATUS_ATTR_NAME:
@@ -1557,7 +1598,8 @@
if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL)
- Tcl_SetStringObj(result, purple_status_attr_get_name(attr), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_status_attr_get_name(attr), -1)); @@ -1576,7 +1618,6 @@
CMD_STATUS_TYPE_NAME, CMD_STATUS_TYPE_PRIMARY_ATTR,
CMD_STATUS_TYPE_PRIMITIVE, CMD_STATUS_TYPE_SAVEABLE,
CMD_STATUS_TYPE_USER_SETTABLE } cmd;
- Tcl_Obj *result = Tcl_GetObjResult(interp);
PurpleStatusType *status_type;
@@ -1598,7 +1639,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetBooleanObj(result, purple_status_type_is_available(status_type));
+ Tcl_SetObjResult(interp, + Tcl_NewBooleanObj(purple_status_type_is_available(status_type))); case CMD_STATUS_TYPE_ATTR:
@@ -1634,7 +1676,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetBooleanObj(result, purple_status_type_is_exclusive(status_type));
+ Tcl_SetObjResult(interp, + Tcl_NewBooleanObj(purple_status_type_is_exclusive(status_type))); @@ -1643,7 +1686,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetStringObj(result, purple_status_type_get_id(status_type), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_status_type_get_id(status_type), -1)); case CMD_STATUS_TYPE_INDEPENDENT:
@@ -1652,7 +1696,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetBooleanObj(result, purple_status_type_is_independent(status_type));
+ Tcl_SetObjResult(interp, + Tcl_NewBooleanObj(purple_status_type_is_independent(status_type))); case CMD_STATUS_TYPE_NAME:
@@ -1661,7 +1706,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetStringObj(result, purple_status_type_get_name(status_type), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_status_type_get_name(status_type), -1)); case CMD_STATUS_TYPE_PRIMITIVE:
@@ -1670,7 +1716,9 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetStringObj(result, purple_primitive_get_id_from_type(purple_status_type_get_primitive(status_type)), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_primitive_get_id_from_type + (purple_status_type_get_primitive(status_type)), -1)); case CMD_STATUS_TYPE_PRIMARY_ATTR:
@@ -1679,7 +1727,8 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetStringObj(result, purple_status_type_get_primary_attr(status_type), -1);
+ Tcl_SetObjResult(interp, + Tcl_NewStringObj(purple_status_type_get_primary_attr(status_type), -1)); case CMD_STATUS_TYPE_SAVEABLE:
@@ -1688,7 +1737,9 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetBooleanObj(result, purple_status_type_is_saveable(status_type));
+ Tcl_SetObjResult(interp, + purple_status_type_is_saveable(status_type))); case CMD_STATUS_TYPE_USER_SETTABLE:
@@ -1697,7 +1748,9 @@
if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL)
- Tcl_SetBooleanObj(result, purple_status_type_is_user_settable(status_type));
+ Tcl_SetObjResult(interp, + purple_status_type_is_user_settable(status_type))); --- a/pidgin/gtkblist.c Wed Sep 19 03:28:52 2007 +0000
+++ b/pidgin/gtkblist.c Wed Sep 19 03:30:40 2007 +0000
@@ -521,7 +521,7 @@
- char *msg = g_strdup_printf(ngettext("You currently have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias);
+ char *msg = g_strdup_printf(ngettext("You have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias); purple_request_action(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. "
"You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL,
merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free));
@@ -662,6 +662,26 @@
+static void gtk_blist_menu_showoffline_cb(GtkWidget *w, PurpleBlistNode *node) + if (PURPLE_BLIST_NODE_IS_BUDDY(node)) + purple_blist_node_set_bool(node, "show_offline", + !purple_blist_node_get_bool(node, "show_offline")); + else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) + PurpleBlistNode *bnode; + gboolean setting = !purple_blist_node_get_bool(node, "show_offline"); + purple_blist_node_set_bool(node, "show_offline", setting); + for (bnode = node->child; bnode != NULL; bnode = bnode->next) { + purple_blist_node_set_bool(bnode, "show_offline", setting); + pidgin_blist_update(purple_get_blist(), node); static void gtk_blist_show_systemlog_cb()
@@ -1288,13 +1308,17 @@
pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) {
PurplePluginProtocolInfo *prpl_info;
gboolean contact_expanded = FALSE;
+ gboolean show_offline = FALSE; prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl);
+ node = (PurpleBlistNode*)buddy; contact = purple_buddy_get_contact(buddy);
contact_expanded = ((struct _pidgin_blist_node *)(((PurpleBlistNode*)contact)->ui_data))->contact_expanded;
@@ -1320,7 +1344,7 @@
pidgin_new_item_from_stock(menu, _("Add Buddy _Pounce"), NULL,
G_CALLBACK(gtk_blist_menu_bp_cb), buddy, 0, 0, NULL);
- if (((PurpleBlistNode*)buddy)->parent && ((PurpleBlistNode*)buddy)->parent->child->next &&
+ if (node->parent && node->parent->child->next && !sub && !contact_expanded) {
pidgin_new_item_from_stock(menu, _("View _Log"), NULL,
G_CALLBACK(gtk_blist_menu_showlog_cb),
@@ -1330,18 +1354,22 @@
G_CALLBACK(gtk_blist_menu_showlog_cb), buddy, 0, 0, NULL);
- pidgin_append_blist_node_proto_menu(menu, buddy->account->gc,
- (PurpleBlistNode *)buddy);
- pidgin_append_blist_node_extended_menu(menu, (PurpleBlistNode *)buddy);
+ if (!(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) { + show_offline = purple_blist_node_get_bool(node, "show_offline"); + pidgin_new_item_from_stock(menu, show_offline ? _("Hide when offline") : _("Show when offline"), + NULL, G_CALLBACK(gtk_blist_menu_showoffline_cb), node, 0, 0, NULL); + pidgin_append_blist_node_proto_menu(menu, buddy->account->gc, node); + pidgin_append_blist_node_extended_menu(menu, node); pidgin_append_blist_node_move_to_menu(menu, (PurpleBlistNode *)contact);
- if (((PurpleBlistNode*)buddy)->parent && ((PurpleBlistNode*)buddy)->parent->child->next &&
+ if (node->parent && node->parent->child->next && !sub && !contact_expanded) {
- pidgin_append_blist_node_privacy_menu(menu, (PurpleBlistNode *)buddy);
+ pidgin_append_blist_node_privacy_menu(menu, node); pidgin_new_item_from_stock(menu, _("_Alias..."), PIDGIN_STOCK_ALIAS,
G_CALLBACK(gtk_blist_menu_alias_cb),
@@ -1350,7 +1378,7 @@
} else if (!sub || contact_expanded) {
- pidgin_append_blist_node_privacy_menu(menu, (PurpleBlistNode *)buddy);
+ pidgin_append_blist_node_privacy_menu(menu, node); pidgin_new_item_from_stock(menu, _("_Alias..."), PIDGIN_STOCK_ALIAS,
G_CALLBACK(gtk_blist_menu_alias_cb), buddy, 0, 0, NULL);
pidgin_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE,
@@ -3451,7 +3479,7 @@
p = purple_buddy_get_presence(buddy);
- trans = (purple_presence_is_idle(p) && size == PIDGIN_STATUS_ICON_SMALL);
+ trans = purple_presence_is_idle(p); if (PURPLE_BUDDY_IS_ONLINE(buddy) && gtkbuddynode && gtkbuddynode->recent_signonoff)
icon = PIDGIN_STOCK_STATUS_LOGIN;
@@ -5682,7 +5710,8 @@
- if ((g = purple_find_group(grp)) == NULL)
+ if ((grp != NULL) && (*grp != '\0') && ((g = purple_find_group(grp)) == NULL)) g = purple_group_new(grp);
purple_blist_add_group(g, NULL);
@@ -5892,7 +5921,8 @@
group_name = pidgin_text_combo_box_entry_get_text(data->group_combo);
- if ((group = purple_find_group(group_name)) == NULL)
+ if ((group_name != NULL) && (*group_name != '\0') && ((group = purple_find_group(group_name)) == NULL)) group = purple_group_new(group_name);
purple_blist_add_group(group, NULL);