Mercurial > pidgin
annotate plugins/statenotify.c @ 12601:e63fb8e9f4ac
[gaim-migrate @ 14935]
Jason LeBrun wrote to gaim-devel:
"I have found a small quirk in the way gdk_pixbuf_loader works. When you
are using it without signalling, the proper way to use it is to call
gdk_pixbuf_loader_close *before* calling gdk_pixbuf_loader_get_animation
or gdk_pixbuf_loader_get_pixbuf. The call to gdk_pixbuf_loader_close
signals that no more writes will be occuring.
In particular, this affects images that are less than 1k in size. If
gdk_pixbuf_loader_close is not called before _get_animation, the loader
will not return anything unless it has received more than 1k of data
(the file type sniffing buffer size) or it has been closed.
So, the proper order of calls for loaders in the gtk*.c code is:
gdk_pixbuf_loader_new();
gdk_pixbuf_loader_write();
gdk_pixbuf_loader_close();
gdk_pixbuf_loader_get_animation();"
I know we fixed a bug by changing this in one place. I've gone through and updated the rest.
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Wed, 21 Dec 2005 18:43:39 +0000 |
| parents | e856f985a0b9 |
| children | 465c368366f8 |
| 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 { | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
124 get_plugin_pref_frame, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
125 0, /* page_num (Reserved) */ |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
11935
diff
changeset
|
126 NULL /* frame (Reserved) */ |
| 9583 | 127 }; |
| 128 | |
| 5267 | 129 static GaimPluginInfo info = |
| 130 { | |
| 9943 | 131 GAIM_PLUGIN_MAGIC, |
| 132 GAIM_MAJOR_VERSION, | |
| 133 GAIM_MINOR_VERSION, | |
| 5267 | 134 GAIM_PLUGIN_STANDARD, /**< type */ |
| 135 NULL, /**< ui_requirement */ | |
| 136 0, /**< flags */ | |
| 137 NULL, /**< dependencies */ | |
| 138 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 139 | |
| 9583 | 140 STATENOTIFY_PLUGIN_ID, /**< id */ |
| 5267 | 141 N_("Buddy State Notification"), /**< name */ |
| 142 VERSION, /**< version */ | |
| 143 /** summary */ | |
| 144 N_("Notifies in a conversation window when a buddy goes or returns from " | |
| 145 "away or idle."), | |
| 146 /** description */ | |
| 147 N_("Notifies in a conversation window when a buddy goes or returns from " | |
| 148 "away or idle."), | |
| 149 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ | |
|
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6441
diff
changeset
|
150 GAIM_WEBSITE, /**< homepage */ |
| 5267 | 151 |
| 152 plugin_load, /**< load */ | |
| 153 NULL, /**< unload */ | |
| 154 NULL, /**< destroy */ | |
| 155 | |
| 156 NULL, /**< ui_info */ | |
| 8993 | 157 NULL, /**< extra_info */ |
| 9583 | 158 &prefs_info, /**< prefs_info */ |
| 8993 | 159 NULL |
| 5267 | 160 }; |
| 161 | |
| 162 static void | |
|
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
163 init_plugin(GaimPlugin *plugin) |
| 5267 | 164 { |
| 9583 | 165 gaim_prefs_add_none("/plugins/core/statenotify"); |
| 166 gaim_prefs_add_bool("/plugins/core/statenotify/notify_away", TRUE); | |
| 167 gaim_prefs_add_bool("/plugins/core/statenotify/notify_idle", TRUE); | |
| 11901 | 168 gaim_prefs_add_bool("/plugins/core/statenotify/notify_signon", TRUE); |
| 5267 | 169 } |
| 170 | |
| 6063 | 171 GAIM_INIT_PLUGIN(statenotify, init_plugin, info) |
