Mercurial > pidgin.yaz
comparison pidgin/plugins/sendbutton.c @ 22668:72090ce17864
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.
| author | Etan Reisner <pidgin@unreliablesource.net> |
|---|---|
| date | Fri, 18 Apr 2008 03:28:07 +0000 |
| parents | |
| children | 068557dd121a |
comparison
equal
deleted
inserted
replaced
| 22667:9fa57410e743 | 22668:72090ce17864 |
|---|---|
| 1 /* | |
| 2 * SendButton - Add a Send button to the conversation window entry area. | |
| 3 * Copyright (C) 2008 Etan Reisner <deryni@pidgin.im> | |
| 4 * | |
| 5 * This program is free software; you can redistribute it and/or | |
| 6 * modify it under the terms of the GNU General Public License | |
| 7 * as published by the Free Software Foundation; either version 2 | |
| 8 * of the License, or (at your option) any later version. | |
| 9 * | |
| 10 * This program is distributed in the hope that it will be useful, | |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 13 * GNU General Public License for more details. | |
| 14 * | |
| 15 * You should have received a copy of the GNU General Public License | |
| 16 * along with this program; if not, write to the Free Software | |
| 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA. | |
| 18 */ | |
| 19 | |
| 20 #ifdef HAVE_CONFIG_H | |
| 21 #include <config.h> | |
| 22 #endif | |
| 23 | |
| 24 #include "internal.h" | |
| 25 | |
| 26 #include "version.h" | |
| 27 | |
| 28 #include "pidgin.h" | |
| 29 | |
| 30 #include "gtkconv.h" | |
| 31 #include "gtkplugin.h" | |
| 32 | |
| 33 static void | |
| 34 send_button_cb(GtkButton *button, PidginConversation *gtkconv) | |
| 35 { | |
| 36 g_signal_emit_by_name(gtkconv->entry, "message_send"); | |
| 37 } | |
| 38 | |
| 39 static void | |
| 40 create_send_button_pidgin(PidginConversation *gtkconv) | |
| 41 { | |
| 42 GtkWidget *send_button; | |
| 43 | |
| 44 send_button = gtk_button_new_with_mnemonic(_("_Send")); | |
| 45 g_signal_connect(G_OBJECT(send_button), "clicked", | |
| 46 G_CALLBACK(send_button_cb), gtkconv); | |
| 47 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), send_button, FALSE, | |
| 48 FALSE, 0); | |
| 49 gtk_widget_show(send_button); | |
| 50 | |
| 51 g_object_set_data(G_OBJECT(gtkconv->lower_hbox), "send_button", | |
| 52 send_button); | |
| 53 } | |
| 54 | |
| 55 static void | |
| 56 remove_send_button_pidgin(PidginConversation *gtkconv) | |
| 57 { | |
| 58 GtkWidget *send_button = NULL; | |
| 59 | |
| 60 send_button = g_object_get_data(G_OBJECT(gtkconv->lower_hbox), | |
| 61 "send_button"); | |
| 62 if (send_button != NULL) { | |
| 63 gtk_widget_destroy(send_button); | |
| 64 } | |
| 65 } | |
| 66 | |
| 67 static void | |
| 68 conversation_displayed_cb(PidginConversation *gtkconv) | |
| 69 { | |
| 70 GtkWidget *send_button = NULL; | |
| 71 | |
| 72 send_button = g_object_get_data(G_OBJECT(gtkconv->lower_hbox), | |
| 73 "send_button"); | |
| 74 if (send_button == NULL) { | |
| 75 create_send_button_pidgin(gtkconv); | |
| 76 } | |
| 77 } | |
| 78 | |
| 79 static gboolean | |
| 80 plugin_load(PurplePlugin *plugin) | |
| 81 { | |
| 82 GList *convs = purple_get_conversations(); | |
| 83 void *gtk_conv_handle = pidgin_conversations_get_handle(); | |
| 84 | |
| 85 purple_signal_connect(gtk_conv_handle, "conversation-displayed", plugin, | |
| 86 PURPLE_CALLBACK(conversation_displayed_cb), NULL); | |
| 87 /* | |
| 88 purple_signal_connect(gtk_conv_handle, "conversation-hiding", plugin, | |
| 89 PURPLE_CALLBACK(conversation_hiding_cb), NULL); | |
| 90 */ | |
| 91 | |
| 92 while (convs) { | |
| 93 | |
| 94 PurpleConversation *conv = (PurpleConversation *)convs->data; | |
| 95 | |
| 96 /* Setup Send button */ | |
| 97 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { | |
| 98 create_send_button_pidgin(PIDGIN_CONVERSATION(conv)); | |
| 99 } | |
| 100 | |
| 101 convs = convs->next; | |
| 102 } | |
| 103 | |
| 104 return TRUE; | |
| 105 } | |
| 106 | |
| 107 static gboolean | |
| 108 plugin_unload(PurplePlugin *plugin) | |
| 109 { | |
| 110 GList *convs = purple_get_conversations(); | |
| 111 | |
| 112 while (convs) { | |
| 113 PurpleConversation *conv = (PurpleConversation *)convs->data; | |
| 114 | |
| 115 /* Remove Send button */ | |
| 116 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { | |
| 117 remove_send_button_pidgin(PIDGIN_CONVERSATION(conv)); | |
| 118 } | |
| 119 | |
| 120 convs = convs->next; | |
| 121 } | |
| 122 | |
| 123 return TRUE; | |
| 124 } | |
| 125 | |
| 126 static PurplePluginInfo info = | |
| 127 { | |
| 128 PURPLE_PLUGIN_MAGIC, | |
| 129 PURPLE_MAJOR_VERSION, /**< major version */ | |
| 130 PURPLE_MINOR_VERSION, /**< minor version */ | |
| 131 PURPLE_PLUGIN_STANDARD, /**< type */ | |
| 132 PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ | |
| 133 0, /**< flags */ | |
| 134 NULL, /**< dependencies */ | |
| 135 PURPLE_PRIORITY_DEFAULT, /**< priority */ | |
| 136 | |
| 137 "gtksendbutton", /**< id */ | |
| 138 N_("Send Button"), /**< name */ | |
| 139 DISPLAY_VERSION, /**< version */ | |
| 140 N_("Conversation Window Send Button."), /**< summary */ | |
| 141 N_("Adds a Send button to the entry area of " | |
| 142 "the conversation window. Intended for when " | |
| 143 "no physical keyboard is present."), /**< description */ | |
| 144 "Etan Reisner <deryni@pidgin.im>", /**< author */ | |
| 145 PURPLE_WEBSITE, /**< homepage */ | |
| 146 plugin_load, /**< load */ | |
| 147 plugin_unload, /**< unload */ | |
| 148 NULL, /**< destroy */ | |
| 149 NULL, /**< ui_info */ | |
| 150 NULL, /**< extra_info */ | |
| 151 NULL, /**< prefs_info */ | |
| 152 NULL, /**< actions */ | |
| 153 | |
| 154 /* padding */ | |
| 155 NULL, | |
| 156 NULL, | |
| 157 NULL, | |
| 158 NULL | |
| 159 }; | |
| 160 | |
| 161 static void | |
| 162 init_plugin(PurplePlugin *plugin) | |
| 163 { | |
| 164 } | |
| 165 | |
| 166 PURPLE_INIT_PLUGIN(sendbutton, init_plugin, info) |
