pidgin/gtkconv.c

branch
release-2.1.0
changeset 18093
cd3388e6b713
parent 17503
ab96a7e22d86
parent 18092
1a2362194473
child 18105
bab0b0bcb664
equal deleted inserted replaced
17519:500d04f3bf87 18093:cd3388e6b713
475 { 475 {
476 PidginConversation *gtkconv; 476 PidginConversation *gtkconv;
477 char *cmd; 477 char *cmd;
478 const char *prefix; 478 const char *prefix;
479 GtkTextIter start; 479 GtkTextIter start;
480 gboolean retval = FALSE;
480 481
481 gtkconv = PIDGIN_CONVERSATION(conv); 482 gtkconv = PIDGIN_CONVERSATION(conv);
482 prefix = pidgin_get_cmd_prefix(); 483 prefix = pidgin_get_cmd_prefix();
483 484
484 cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); 485 cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL);
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 }

mercurial