Mercurial > pidgin
annotate plugins/statenotify.c @ 12115:e9790eb93216
[gaim-migrate @ 14415]
quoth charkins:
" This patch has a few small fixes for the visibility
stuff in gtkblist.c.
First, tracking of the ICONIFIED state of the blist was
removed. This was intended to allow the blist to
"remember" if it was minimized between restarts.
Unfortunately, this is not possible because the
ICONIFIED state gets set when the blist is on a
different desktop with many window managers.
Second, while talking about the ICONIFIED issue on
#gtk@GIMPNet, muntyan_ asked about a bug where the
blist would get shown on an account re-connect with
1.5.0. Luke mentioned something about this with cvs as
well. This patch introduces a check in
gaim_gtk_blist_show() to prevent the window from being
shown if it already exists and is visible.
Third, sadrul pointed me to a one-line fix for the
missing blist on startup. I added a second line to make
sure the blist restores its proper size as well.
Finally, when the last visibility manager is removed,
gaim will now minimize the blist if it was previously
hidden, rather than showing it. This could prevent a
race condition with out-of-process applets, preventing
gaim from maintaining the visibility state properly
between restarts.
This was 'cvs diff'ed against the last available anon
cvs from Friday. Hopefully it'll apply cleanly."
it did.
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Wed, 16 Nov 2005 17:55:26 +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) |