# HG changeset patch # User Etan Reisner # Date 1208489287 0 # Node ID 72090ce1786401def2e71c81b810ea3112f3203d # Parent 9fa57410e7439d6e324be710661e50b0c7dbafbb Add a plugin to add a Send button to the conversation windows, users of tablet computers without physical keyboards have a harder time dealing without it then people with keyboards. I haven't set it to build by default because I didn't think that was necessary. I also didn't test it with hidden conversations (either initially or non-immediate closing) but I think it should work. Closes #5238. diff -r 9fa57410e743 -r 72090ce17864 ChangeLog --- a/ChangeLog Thu Apr 17 17:01:03 2008 +0000 +++ b/ChangeLog Fri Apr 18 03:28:07 2008 +0000 @@ -9,6 +9,9 @@ Pidgin: * The typing notification in the conversation history can be disabled or customized (font, color etc.) in .gtkrc-2.0. + * Added a plugin (not built by default) which adds a Send button back + to the conversation window. People without physical keyboards have a + hard time with the lack of the button. General: * The configure script now dies on more absent dependencies. The diff -r 9fa57410e743 -r 72090ce17864 pidgin/plugins/Makefile.am --- a/pidgin/plugins/Makefile.am Thu Apr 17 17:01:03 2008 +0000 +++ b/pidgin/plugins/Makefile.am Fri Apr 18 03:28:07 2008 +0000 @@ -106,6 +106,7 @@ mailchk.c \ pidgininc.c \ raw.c \ + sendbutton.c \ win32/transparency/Makefile.mingw \ win32/transparency/win2ktrans.c \ win32/winprefs/gtkappbar.c \ diff -r 9fa57410e743 -r 72090ce17864 pidgin/plugins/sendbutton.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/sendbutton.c Fri Apr 18 03:28:07 2008 +0000 @@ -0,0 +1,166 @@ +/* + * SendButton - Add a Send button to the conversation window entry area. + * Copyright (C) 2008 Etan Reisner + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "internal.h" + +#include "version.h" + +#include "pidgin.h" + +#include "gtkconv.h" +#include "gtkplugin.h" + +static void +send_button_cb(GtkButton *button, PidginConversation *gtkconv) +{ + g_signal_emit_by_name(gtkconv->entry, "message_send"); +} + +static void +create_send_button_pidgin(PidginConversation *gtkconv) +{ + GtkWidget *send_button; + + send_button = gtk_button_new_with_mnemonic(_("_Send")); + g_signal_connect(G_OBJECT(send_button), "clicked", + G_CALLBACK(send_button_cb), gtkconv); + gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), send_button, FALSE, + FALSE, 0); + gtk_widget_show(send_button); + + g_object_set_data(G_OBJECT(gtkconv->lower_hbox), "send_button", + send_button); +} + +static void +remove_send_button_pidgin(PidginConversation *gtkconv) +{ + GtkWidget *send_button = NULL; + + send_button = g_object_get_data(G_OBJECT(gtkconv->lower_hbox), + "send_button"); + if (send_button != NULL) { + gtk_widget_destroy(send_button); + } +} + +static void +conversation_displayed_cb(PidginConversation *gtkconv) +{ + GtkWidget *send_button = NULL; + + send_button = g_object_get_data(G_OBJECT(gtkconv->lower_hbox), + "send_button"); + if (send_button == NULL) { + create_send_button_pidgin(gtkconv); + } +} + +static gboolean +plugin_load(PurplePlugin *plugin) +{ + GList *convs = purple_get_conversations(); + void *gtk_conv_handle = pidgin_conversations_get_handle(); + + purple_signal_connect(gtk_conv_handle, "conversation-displayed", plugin, + PURPLE_CALLBACK(conversation_displayed_cb), NULL); + /* + purple_signal_connect(gtk_conv_handle, "conversation-hiding", plugin, + PURPLE_CALLBACK(conversation_hiding_cb), NULL); + */ + + while (convs) { + + PurpleConversation *conv = (PurpleConversation *)convs->data; + + /* Setup Send button */ + if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { + create_send_button_pidgin(PIDGIN_CONVERSATION(conv)); + } + + convs = convs->next; + } + + return TRUE; +} + +static gboolean +plugin_unload(PurplePlugin *plugin) +{ + GList *convs = purple_get_conversations(); + + while (convs) { + PurpleConversation *conv = (PurpleConversation *)convs->data; + + /* Remove Send button */ + if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { + remove_send_button_pidgin(PIDGIN_CONVERSATION(conv)); + } + + convs = convs->next; + } + + return TRUE; +} + +static PurplePluginInfo info = +{ + PURPLE_PLUGIN_MAGIC, + PURPLE_MAJOR_VERSION, /**< major version */ + PURPLE_MINOR_VERSION, /**< minor version */ + PURPLE_PLUGIN_STANDARD, /**< type */ + PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + PURPLE_PRIORITY_DEFAULT, /**< priority */ + + "gtksendbutton", /**< id */ + N_("Send Button"), /**< name */ + DISPLAY_VERSION, /**< version */ + N_("Conversation Window Send Button."), /**< summary */ + N_("Adds a Send button to the entry area of " + "the conversation window. Intended for when " + "no physical keyboard is present."), /**< description */ + "Etan Reisner ", /**< author */ + PURPLE_WEBSITE, /**< homepage */ + plugin_load, /**< load */ + plugin_unload, /**< unload */ + NULL, /**< destroy */ + NULL, /**< ui_info */ + NULL, /**< extra_info */ + NULL, /**< prefs_info */ + NULL, /**< actions */ + + /* padding */ + NULL, + NULL, + NULL, + NULL +}; + +static void +init_plugin(PurplePlugin *plugin) +{ +} + +PURPLE_INIT_PLUGIN(sendbutton, init_plugin, info)