| 498 |
499 |
| 499 gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); |
500 gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); |
| 500 gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); |
501 gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); |
| 501 markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); |
502 markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); |
| 502 status = purple_cmd_do_command(conv, cmdline, markup, &error); |
503 status = purple_cmd_do_command(conv, cmdline, markup, &error); |
| 503 g_free(cmd); |
|
| 504 g_free(markup); |
504 g_free(markup); |
| 505 |
505 |
| 506 switch (status) { |
506 switch (status) { |
| 507 case PURPLE_CMD_STATUS_OK: |
507 case PURPLE_CMD_STATUS_OK: |
| 508 return TRUE; |
508 retval = TRUE; |
| |
509 break; |
| 509 case PURPLE_CMD_STATUS_NOT_FOUND: |
510 case PURPLE_CMD_STATUS_NOT_FOUND: |
| 510 return FALSE; |
511 { |
| |
512 PurplePluginProtocolInfo *prpl_info = NULL; |
| |
513 PurpleConnection *gc; |
| |
514 |
| |
515 if ((gc = purple_conversation_get_gc(conv))) |
| |
516 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); |
| |
517 |
| |
518 if ((prpl_info != NULL) && (prpl_info->options & OPT_PROTO_SLASH_COMMANDS_NATIVE)) { |
| |
519 char *firstspace; |
| |
520 char *slash; |
| |
521 |
| |
522 firstspace = strchr(cmdline, ' '); |
| |
523 if (firstspace != NULL) { |
| |
524 slash = strrchr(firstspace, '/'); |
| |
525 } else { |
| |
526 slash = strchr(cmdline, '/'); |
| |
527 } |
| |
528 |
| |
529 if (slash == NULL) { |
| |
530 purple_conversation_write(conv, "", _("Unknown command."), PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| |
531 retval = TRUE; |
| |
532 } |
| |
533 } |
| |
534 break; |
| |
535 } |
| 511 case PURPLE_CMD_STATUS_WRONG_ARGS: |
536 case PURPLE_CMD_STATUS_WRONG_ARGS: |
| 512 purple_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " |
537 purple_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " |
| 513 "to that command."), |
538 "to that command."), |
| 514 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
539 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| 515 return TRUE; |
540 retval = TRUE; |
| |
541 break; |
| 516 case PURPLE_CMD_STATUS_FAILED: |
542 case PURPLE_CMD_STATUS_FAILED: |
| 517 purple_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), |
543 purple_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), |
| 518 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
544 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| 519 g_free(error); |
545 g_free(error); |
| 520 return TRUE; |
546 retval = TRUE; |
| |
547 break; |
| 521 case PURPLE_CMD_STATUS_WRONG_TYPE: |
548 case PURPLE_CMD_STATUS_WRONG_TYPE: |
| 522 if(purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) |
549 if(purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) |
| 523 purple_conversation_write(conv, "", _("That command only works in chats, not IMs."), |
550 purple_conversation_write(conv, "", _("That command only works in chats, not IMs."), |
| 524 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
551 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| 525 else |
552 else |
| 526 purple_conversation_write(conv, "", _("That command only works in IMs, not chats."), |
553 purple_conversation_write(conv, "", _("That command only works in IMs, not chats."), |
| 527 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
554 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| 528 return TRUE; |
555 retval = TRUE; |
| |
556 break; |
| 529 case PURPLE_CMD_STATUS_WRONG_PRPL: |
557 case PURPLE_CMD_STATUS_WRONG_PRPL: |
| 530 purple_conversation_write(conv, "", _("That command doesn't work on this protocol."), |
558 purple_conversation_write(conv, "", _("That command doesn't work on this protocol."), |
| 531 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
559 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
| 532 return TRUE; |
560 retval = TRUE; |
| |
561 break; |
| 533 } |
562 } |
| 534 } |
563 } |
| 535 |
564 |
| 536 g_free(cmd); |
565 g_free(cmd); |
| 537 return FALSE; |
566 return retval; |
| 538 } |
567 } |
| 539 |
568 |
| 540 static void |
569 static void |
| 541 send_cb(GtkWidget *widget, PidginConversation *gtkconv) |
570 send_cb(GtkWidget *widget, PidginConversation *gtkconv) |
| 542 { |
571 { |
| 5064 g_return_if_fail(account != NULL); |
5093 g_return_if_fail(account != NULL); |
| 5065 gc = purple_account_get_connection(account); |
5094 gc = purple_account_get_connection(account); |
| 5066 g_return_if_fail(gc != NULL); |
5095 g_return_if_fail(gc != NULL); |
| 5067 |
5096 |
| 5068 /* Make sure URLs are clickable */ |
5097 /* Make sure URLs are clickable */ |
| 5069 displaying = purple_markup_linkify(message); |
5098 if(flags & PURPLE_MESSAGE_NO_LINKIFY) |
| |
5099 displaying = g_strdup(message); |
| |
5100 else |
| |
5101 displaying = purple_markup_linkify(message); |
| |
5102 |
| 5070 plugin_return = GPOINTER_TO_INT(purple_signal_emit_return_1( |
5103 plugin_return = GPOINTER_TO_INT(purple_signal_emit_return_1( |
| 5071 pidgin_conversations_get_handle(), (type == PURPLE_CONV_TYPE_IM ? |
5104 pidgin_conversations_get_handle(), (type == PURPLE_CONV_TYPE_IM ? |
| 5072 "displaying-im-msg" : "displaying-chat-msg"), |
5105 "displaying-im-msg" : "displaying-chat-msg"), |
| 5073 account, name, &displaying, conv, flags)); |
5106 account, name, &displaying, conv, flags)); |
| 5074 if (plugin_return) |
5107 if (plugin_return) |
| 8054 win = g_malloc0(sizeof(PidginWindow)); |
8087 win = g_malloc0(sizeof(PidginWindow)); |
| 8055 |
8088 |
| 8056 window_list = g_list_append(window_list, win); |
8089 window_list = g_list_append(window_list, win); |
| 8057 |
8090 |
| 8058 /* Create the window. */ |
8091 /* Create the window. */ |
| 8059 win->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
8092 win->window = pidgin_create_window(NULL, 0, "conversation", TRUE); |
| 8060 gtk_window_set_role(GTK_WINDOW(win->window), "conversation"); |
|
| 8061 gtk_window_set_resizable(GTK_WINDOW(win->window), TRUE); |
|
| 8062 gtk_container_set_border_width(GTK_CONTAINER(win->window), 0); |
|
| 8063 GTK_WINDOW(win->window)->allow_shrink = TRUE; |
8093 GTK_WINDOW(win->window)->allow_shrink = TRUE; |
| 8064 |
8094 |
| 8065 if (available_list == NULL) { |
8095 if (available_list == NULL) { |
| 8066 create_icon_lists(win->window); |
8096 create_icon_lists(win->window); |
| 8067 } |
8097 } |