# HG changeset patch # User Tim Ringenbach # Date 1093216249 0 # Node ID 54e0322c81fbdeffa9ee25d30d69e417c8208d7d # Parent 0d02a51ea1c3e86a03333e6df9786a35291a519d [gaim-migrate @ 10703] I think people will like this better. Maybe. I changed toggling commands on/off with toggling passing through unknown commands on/off. I can always revert it if people hate it even more. committer: Tailor Script diff -r 0d02a51ea1c3 -r 54e0322c81fb ChangeLog --- a/ChangeLog Sun Aug 22 22:21:20 2004 +0000 +++ b/ChangeLog Sun Aug 22 23:10:49 2004 +0000 @@ -9,6 +9,8 @@ top) with URLs will now appear as links (Stu Tomlinson) * File transfers appear in the file transfer window when they are initiated rather than when they begin transferring (Dave West) + * Instead of toggling slash commands on/off, you can now toggle + passing through unknown slash commands on/off. Bug Fixes: * Joining a Jabber chat no longer causes a crash (Stu Tomlinson) diff -r 0d02a51ea1c3 -r 54e0322c81fb src/gtkconv.c --- a/src/gtkconv.c Sun Aug 22 22:21:20 2004 +0000 +++ b/src/gtkconv.c Sun Aug 22 23:10:49 2004 +0000 @@ -392,19 +392,92 @@ conv->send_history = g_list_prepend(first, NULL); } +static gboolean +check_for_and_do_command(GaimConversation *conv) +{ + GaimGtkConversation *gtkconv; + char *cmd; + const char *prefix; + GaimAccount *account; + GtkTextIter start; + + gtkconv = GAIM_GTK_CONVERSATION(conv); + account = gaim_conversation_get_account(conv); + prefix = gaim_gtk_get_cmd_prefix(); + + cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); + gtk_text_buffer_get_start_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &start); + + if (cmd && (strncmp(cmd, prefix, strlen(prefix)) == 0) + && !gtk_text_iter_get_child_anchor(&start)) { + GaimCmdStatus status; + char *error, *cmdline, *markup, *send_history; + GtkTextIter end; + + send_history = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); + send_history_add(conv, send_history); + g_free(send_history); + + cmdline = cmd + strlen(prefix); + + gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); + gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); + markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); + status = gaim_cmd_do_command(conv, cmdline, markup, &error); + g_free(cmd); + g_free(markup); + + switch (status) { + case GAIM_CMD_STATUS_OK: + return TRUE; + case GAIM_CMD_STATUS_NOT_FOUND: + if (!gaim_prefs_get_bool("/gaim/gtk/conversations/passthrough_unknown_commands")) { + gaim_conversation_write(conv, "", _("No such command."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + + return TRUE; + } + return FALSE; + case GAIM_CMD_STATUS_WRONG_ARGS: + gaim_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " + "to that command."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + return TRUE; + case GAIM_CMD_STATUS_FAILED: + gaim_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + if(error) + g_free(error); + return TRUE; + case GAIM_CMD_STATUS_WRONG_TYPE: + if(gaim_conversation_get_type(conv) == GAIM_CONV_IM) + gaim_conversation_write(conv, "", _("That command only works in Chats, not IMs."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + else + gaim_conversation_write(conv, "", _("That command only works in IMs, not Chats."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + return TRUE; + case GAIM_CMD_STATUS_WRONG_PRPL: + gaim_conversation_write(conv, "", _("That command doesn't work on this protocol."), + GAIM_MESSAGE_NO_LOG, time(NULL)); + return TRUE; + } + } + + g_free(cmd); + return FALSE; +} + static void send_cb(GtkWidget *widget, GaimConversation *conv) { GaimGtkConversation *gtkconv; - char *cmd; - const char *prefix; GaimAccount *account; GaimConnection *gc; char *buf, *clean; gtkconv = GAIM_GTK_CONVERSATION(conv); account = gaim_conversation_get_account(conv); - prefix = gaim_gtk_get_cmd_prefix(); if (!gaim_account_is_connected(account)) return; @@ -413,76 +486,12 @@ gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv))) return; - if(gaim_prefs_get_bool("/gaim/gtk/conversations/enable_commands")) { - GtkTextIter start; - cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); - gtk_text_buffer_get_start_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &start); - - if(cmd && (strncmp(cmd, prefix, strlen(prefix)) == 0) - && !gtk_text_iter_get_child_anchor(&start)) { - GaimCmdStatus status; - char *error, *cmdline, *markup, *send_history; - GtkTextIter end; - - send_history = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); - send_history_add(conv, send_history); - g_free(send_history); - - cmdline = cmd + strlen(prefix); - - gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); - gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); - markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); - status = gaim_cmd_do_command(conv, cmdline, markup, &error); - g_free(cmd); - g_free(markup); - - gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); - default_formatize(conv); - - switch(status) { - case GAIM_CMD_STATUS_OK: - return; - case GAIM_CMD_STATUS_NOT_FOUND: - gaim_conversation_write(conv, "", _("No such command. If you didn't mean " - "to type a command, you can turn " - "commands off from Tools->" - "Preferences->Interface->Conversation" - "->Enable \"slash\" commands."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - return; - case GAIM_CMD_STATUS_WRONG_ARGS: - gaim_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " - "to that command. If you didn't mean to type a command, " - "you can turn commands off from Tools->Preferences->" - "Interface->Conversation->Enable \"slash\" commands."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - return; - case GAIM_CMD_STATUS_FAILED: - gaim_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - if(error) - g_free(error); - return; - case GAIM_CMD_STATUS_WRONG_TYPE: - if(gaim_conversation_get_type(conv) == GAIM_CONV_IM) - gaim_conversation_write(conv, "", _("That command only works in Chats, not IMs."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - else - gaim_conversation_write(conv, "", _("That command only works in IMs, not Chats."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - return; - case GAIM_CMD_STATUS_WRONG_PRPL: - gaim_conversation_write(conv, "", _("That command doesn't work on this protocol."), - GAIM_MESSAGE_NO_LOG, time(NULL)); - return; - } - } - - g_free(cmd); + if (check_for_and_do_command(conv)) { + gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); + default_formatize(conv); + return; } - buf = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); clean = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); @@ -6225,7 +6234,7 @@ gaim_prefs_add_bool("/gaim/gtk/conversations/html_shortcuts", TRUE); gaim_prefs_add_bool("/gaim/gtk/conversations/smiley_shortcuts", FALSE); gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); - gaim_prefs_add_bool("/gaim/gtk/conversations/enable_commands", TRUE); + gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); gaim_prefs_add_int("/gaim/gtk/conversations/placement_number", 1); diff -r 0d02a51ea1c3 -r 54e0322c81fb src/gtkprefs.c --- a/src/gtkprefs.c Sun Aug 22 22:21:20 2004 +0000 +++ b/src/gtkprefs.c Sun Aug 22 23:10:49 2004 +0000 @@ -1013,8 +1013,12 @@ gtk_size_group_add_widget(sg, label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); +#if 0 gaim_gtk_prefs_checkbox(_("Enable \"_slash\" commands"), "/gaim/gtk/conversations/enable_commands", vbox); +#endif + gaim_gtk_prefs_checkbox(_("Send unknown \"_slash\" commands as messages"), + "/gaim/gtk/conversations/passthrough_unknown_commands", vbox); gaim_gtk_prefs_checkbox(_("Show _formatting toolbar"), "/gaim/gtk/conversations/show_formatting_toolbar", vbox);