Mercurial > pidgin.yaz
annotate plugins/statenotify.c @ 12229:18f0dadb29cf
[gaim-migrate @ 14531]
SF Patch #1366481 from Michael Carlson
"The function gtk_smiley_tree_insert() in gtkimhtml.c is
using up (on my system) the most CPU of all the
functions in gaim whenever the preferences box is
opened (tested by opening the preferences box 50 times
and measuring with oprofile).
The function is called some 297 times each time the
prefs box is opened, and each time we call strlen() on
a (usually 3 or 4) character string to see if the
string is empty or not.
I've eliminated the unnecessary call to strlen by
checking the first element, and I've changed the while
{} loop to a do {} while loop, because since we return
if the string is empty at the beginning of the
function, the same check on the first iteration of the
loop is unnecessary.
I believe it's faster for every case, even if only by a
little bit."
I don't know how necessary this is, but it doesn't hurt and it doesn't negatively impact the readability of the code.
I also fixed an existing piece of code for which the compiler issued a warning.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sat, 26 Nov 2005 17:09:29 +0000 |
parents | cb73483c9f63 |
children | e856f985a0b9 |
rev | line source |
---|---|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
1 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
2 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3 #include "blist.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
4 #include "conversation.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5 #include "debug.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
6 #include "signals.h" |
9943 | 7 #include "version.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
8 |
9583 | 9 #include "plugin.h" |
10 #include "pluginpref.h" | |
11 #include "prefs.h" | |
12 | |
13 #define STATENOTIFY_PLUGIN_ID "core-statenotify" | |
14 | |
5267 | 15 static void |
6695 | 16 write_status(GaimBuddy *buddy, const char *message) |
5267 | 17 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5587
diff
changeset
|
18 GaimConversation *conv; |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
19 const char *who; |
5267 | 20 char buf[256]; |
10167 | 21 char *escaped; |
5267 | 22 |
11338 | 23 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, |
10246 | 24 buddy->name, buddy->account); |
5267 | 25 |
26 if (conv == NULL) | |
27 return; | |
28 | |
9620 | 29 who = gaim_buddy_get_alias(buddy); |
10167 | 30 escaped = g_markup_escape_text(who, -1); |
5267 | 31 |
10167 | 32 g_snprintf(buf, sizeof(buf), message, escaped); |
33 g_free(escaped); | |
5267 | 34 |
6982 | 35 gaim_conversation_write(conv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
5267 | 36 } |
37 | |
38 static void | |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
39 buddy_status_changed_cb(GaimBuddy *buddy, GaimStatus *old_status, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
40 GaimStatus *status, void *data) |
5267 | 41 { |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
42 gboolean available, old_available; |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
43 |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
44 available = gaim_status_is_available(status); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
45 old_available = gaim_status_is_available(old_status); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
46 |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
47 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
48 if (available && !old_available) |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
49 write_status(buddy, _("%s is no longer away.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
50 else if (!available && old_available) |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
51 write_status(buddy, _("%s has gone away.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
52 } |
5267 | 53 } |
54 | |
55 static void | |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
56 buddy_idle_changed_cb(GaimBuddy *buddy, gboolean old_idle, gboolean idle, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
57 void *data) |
5267 | 58 { |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
59 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
60 if (idle) { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
61 write_status(buddy, _("%s has become idle.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
62 } else { |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
63 write_status(buddy, _("%s is no longer idle.")); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
64 } |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
65 } |
9583 | 66 } |
67 | |
11901 | 68 static void |
69 buddy_signon_cb(GaimBuddy *buddy, void *data) | |
70 { | |
71 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_signon")) | |
72 write_status(buddy, _("%s has signed on.")); | |
73 } | |
74 | |
75 static void | |
76 buddy_signoff_cb(GaimBuddy *buddy, void *data) | |
77 { | |
78 if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_signon")) | |
79 write_status(buddy, _("%s has signed off.")); | |
80 } | |
81 | |
9583 | 82 static GaimPluginPrefFrame * |
83 get_plugin_pref_frame(GaimPlugin *plugin) | |
84 { | |
85 GaimPluginPrefFrame *frame; | |
86 GaimPluginPref *ppref; | |
87 | |
88 frame = gaim_plugin_pref_frame_new(); | |
89 | |
9648 | 90 ppref = gaim_plugin_pref_new_with_label(_("Notify When")); |
9583 | 91 gaim_plugin_pref_frame_add(frame, ppref); |
92 | |
9648 | 93 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_away", _("Buddy Goes _Away")); |
9583 | 94 gaim_plugin_pref_frame_add(frame, ppref); |
10246 | 95 |
9648 | 96 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_idle", _("Buddy Goes _Idle")); |
9583 | 97 gaim_plugin_pref_frame_add(frame, ppref); |
10246 | 98 |
11901 | 99 ppref = gaim_plugin_pref_new_with_name_and_label("/plugins/core/statenotify/notify_signon", _("Buddy _Signs On/Off")); |
100 gaim_plugin_pref_frame_add(frame, ppref); | |
101 | |
9583 | 102 return frame; |
5267 | 103 } |
104 | |
105 static gboolean | |
106 plugin_load(GaimPlugin *plugin) | |
107 { | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
108 void *blist_handle = gaim_blist_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
109 |
11935
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
110 gaim_signal_connect(blist_handle, "buddy-status-changed", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
111 GAIM_CALLBACK(buddy_status_changed_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
112 gaim_signal_connect(blist_handle, "buddy-idle-changed", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
113 GAIM_CALLBACK(buddy_idle_changed_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
114 gaim_signal_connect(blist_handle, "buddy-signed-on", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
115 GAIM_CALLBACK(buddy_signon_cb), NULL); |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
116 gaim_signal_connect(blist_handle, "buddy-signed-off", plugin, |
cb73483c9f63
[gaim-migrate @ 14226]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11901
diff
changeset
|
117 GAIM_CALLBACK(buddy_signoff_cb), NULL); |
5267 | 118 |
119 return TRUE; | |
120 } | |
121 | |
9583 | 122 static GaimPluginUiInfo prefs_info = |
123 { | |
124 get_plugin_pref_frame | |
125 }; | |
126 | |
5267 | 127 static GaimPluginInfo info = |
128 { | |
9943 | 129 GAIM_PLUGIN_MAGIC, |
130 GAIM_MAJOR_VERSION, | |
131 GAIM_MINOR_VERSION, | |
5267 | 132 GAIM_PLUGIN_STANDARD, /**< type */ |
133 NULL, /**< ui_requirement */ | |
134 0, /**< flags */ | |
135 NULL, /**< dependencies */ | |
136 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
137 | |
9583 | 138 STATENOTIFY_PLUGIN_ID, /**< id */ |
5267 | 139 N_("Buddy State Notification"), /**< name */ |
140 VERSION, /**< version */ | |
141 /** summary */ | |
142 N_("Notifies in a conversation window when a buddy goes or returns from " | |
143 "away or idle."), | |
144 /** description */ | |
145 N_("Notifies in a conversation window when a buddy goes or returns from " | |
146 "away or idle."), | |
147 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
148 GAIM_WEBSITE, /**< homepage */ |
5267 | 149 |
150 plugin_load, /**< load */ | |
151 NULL, /**< unload */ | |
152 NULL, /**< destroy */ | |
153 | |
154 NULL, /**< ui_info */ | |
8993 | 155 NULL, /**< extra_info */ |
9583 | 156 &prefs_info, /**< prefs_info */ |
8993 | 157 NULL |
5267 | 158 }; |
159 | |
160 static void | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
161 init_plugin(GaimPlugin *plugin) |
5267 | 162 { |
9583 | 163 gaim_prefs_add_none("/plugins/core/statenotify"); |
164 gaim_prefs_add_bool("/plugins/core/statenotify/notify_away", TRUE); | |
165 gaim_prefs_add_bool("/plugins/core/statenotify/notify_idle", TRUE); | |
11901 | 166 gaim_prefs_add_bool("/plugins/core/statenotify/notify_signon", TRUE); |
5267 | 167 } |
168 | |
6063 | 169 GAIM_INIT_PLUGIN(statenotify, init_plugin, info) |