Mercurial > pidgin.yaz
annotate src/gtkstatusbox.c @ 12595:3169cd6727ad
[gaim-migrate @ 14925]
I've been meaning to spend the time to commit these changes separately, but it's been a couple days without me finding the time...
1. Allow the creation of GaimStatusTypes by passing NULL for the name and/or id. The core uses the default name and/or id. This eliminates quite a bit of duplication in the prpls.
2. Make statuses more consistent. For example, in some prpls, "Busy" was descended from the UNAVAILABLE primitive and on others it was a case of AWAY. Another example... "On Vacation" is definitely an EXTENDED_AWAY not an AWAY.
3. Rename some pixmaps to elminate some special cases. The names of the pixmaps should now match the primitive default IDs.
4. Rename the HIDDEN primitive to INVISIBLE, since we seem to be using that term everywhere. In conjunction with #1, more duplication was eliminated.
5. Add a MOBILE status primitive. It's not used now. It'll be needed in the (hopefully not-too-distant) future, so I'm planning ahead.
6. Shrink the status select for small blist folks. Now if someone can get rid of that stupid extra padding, we'll be set (well, after we deal with imhtml space issues). I've fought with this for many many hours over several days and I can't get it. It's clear that the combo box is requesting more space than is really necessary, but I don't know why.
This is really my first go at anything significant status-related. Everyone should check their favorite prpls carefully to make sure I didn't break anything.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 21 Dec 2005 08:24:17 +0000 |
parents | 7bbd410442cb |
children | 037a673ba862 |
rev | line source |
---|---|
10643 | 1 /* |
2 * @file gtkstatusbox.c GTK+ Status Selection Widget | |
3 * @ingroup gtkui | |
4 * | |
5 * gaim | |
6 * | |
7 * Gaim is the legal property of its developers, whose names are too numerous | |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
25 | |
12274 | 26 #include <gdk/gdkkeysyms.h> |
27 | |
11627 | 28 #include "account.h" |
10643 | 29 #include "internal.h" |
11627 | 30 #include "savedstatuses.h" |
10643 | 31 #include "status.h" |
11732 | 32 #include "debug.h" |
11627 | 33 |
10643 | 34 #include "gtkgaim.h" |
12269 | 35 #include "gtkimhtmltoolbar.h" |
11729 | 36 #include "gtksavedstatuses.h" |
10643 | 37 #include "gtkstock.h" |
38 #include "gtkstatusbox.h" | |
12080 | 39 #include "gtkutils.h" |
10643 | 40 |
12309 | 41 #define TYPING_TIMEOUT 4000 |
42 | |
10643 | 43 static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data); |
12460
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
44 static void imhtml_format_changed_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, void *data); |
11562 | 45 static void remove_typing_cb(GtkGaimStatusBox *box); |
10643 | 46 |
12274 | 47 static void gtk_gaim_status_box_pulse_typing(GtkGaimStatusBox *status_box); |
11967 | 48 static void gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box); |
11732 | 49 static void gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box); |
10643 | 50 static void gtk_gaim_status_box_changed(GtkComboBox *box); |
51 static void gtk_gaim_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition); | |
52 static void gtk_gaim_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation); | |
53 static gboolean gtk_gaim_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event); | |
54 static void gtk_gaim_status_box_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); | |
55 | |
56 static void (*combo_box_size_request)(GtkWidget *widget, GtkRequisition *requisition); | |
57 static void (*combo_box_size_allocate)(GtkWidget *widget, GtkAllocation *allocation); | |
58 static void (*combo_box_forall) (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); | |
11739 | 59 |
10643 | 60 enum { |
11739 | 61 TYPE_COLUMN, /* A GtkGaimStatusBoxItemType */ |
11738 | 62 ICON_COLUMN, /* This is a GdkPixbuf (the other columns are strings) */ |
63 TEXT_COLUMN, /* A string */ | |
64 TITLE_COLUMN, /* The plain-English title of this item */ | |
65 DESC_COLUMN, /* A plain-English description of this item */ | |
10643 | 66 NUM_COLUMNS |
67 }; | |
68 | |
11499 | 69 enum { |
70 PROP_0, | |
71 PROP_ACCOUNT | |
72 }; | |
73 | |
12379
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
74 GtkComboBoxClass *parent_class = NULL; |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
75 |
10643 | 76 static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass); |
77 static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box); | |
78 | |
79 GType | |
80 gtk_gaim_status_box_get_type (void) | |
81 { | |
10861 | 82 static GType status_box_type = 0; |
10643 | 83 |
10861 | 84 if (!status_box_type) |
85 { | |
86 static const GTypeInfo status_box_info = | |
87 { | |
88 sizeof (GtkGaimStatusBoxClass), | |
89 NULL, /* base_init */ | |
90 NULL, /* base_finalize */ | |
91 (GClassInitFunc) gtk_gaim_status_box_class_init, | |
92 NULL, /* class_finalize */ | |
93 NULL, /* class_data */ | |
94 sizeof (GtkGaimStatusBox), | |
95 0, | |
12221
152748df85cf
[gaim-migrate @ 14523]
Richard Laager <rlaager@wiktel.com>
parents:
12125
diff
changeset
|
96 (GInstanceInitFunc) gtk_gaim_status_box_init, |
152748df85cf
[gaim-migrate @ 14523]
Richard Laager <rlaager@wiktel.com>
parents:
12125
diff
changeset
|
97 NULL /* value_table */ |
10861 | 98 }; |
10643 | 99 |
10861 | 100 status_box_type = g_type_register_static(GTK_TYPE_COMBO_BOX, |
101 "GtkGaimStatusBox", | |
102 &status_box_info, | |
103 0); | |
104 } | |
10643 | 105 |
10861 | 106 return status_box_type; |
10643 | 107 } |
108 | |
109 static void | |
11499 | 110 gtk_gaim_status_box_get_property(GObject *object, guint param_id, |
111 GValue *value, GParamSpec *psec) | |
112 { | |
113 GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(object); | |
114 | |
115 switch (param_id) { | |
116 case PROP_ACCOUNT: | |
117 g_value_set_pointer(value, statusbox->account); | |
118 break; | |
119 default: | |
120 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, psec); | |
121 break; | |
122 } | |
123 } | |
124 | |
125 static void | |
11967 | 126 update_to_reflect_account_status(GtkGaimStatusBox *status_box, GaimAccount *account, GaimStatus *newstatus) |
11960 | 127 { |
11967 | 128 const GList *l; |
129 int status_no = -1; | |
130 const GaimStatusType *statustype = NULL; | |
12060 | 131 const char *message; |
11967 | 132 |
133 statustype = gaim_status_type_find_with_id((GList *)gaim_account_get_status_types(account), | |
134 (char *)gaim_status_type_get_id(gaim_status_get_type(newstatus))); | |
135 | |
136 for (l = gaim_account_get_status_types(account); l != NULL; l = l->next) { | |
137 GaimStatusType *status_type = (GaimStatusType *)l->data; | |
138 | |
139 if (!gaim_status_type_is_user_settable(status_type)) | |
140 continue; | |
141 status_no++; | |
142 if (statustype == status_type) | |
143 break; | |
144 } | |
145 | |
146 if (status_no != -1) { | |
147 gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE); | |
148 gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), status_no); | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
149 |
12060 | 150 message = gaim_status_get_attr_string(newstatus, "message"); |
151 | |
152 if (!message || !*message) | |
153 { | |
154 gtk_widget_hide_all(status_box->vbox); | |
155 status_box->imhtml_visible = FALSE; | |
156 } | |
157 else | |
158 { | |
159 gtk_widget_show_all(status_box->vbox); | |
160 status_box->imhtml_visible = TRUE; | |
161 gtk_imhtml_clear(GTK_IMHTML(status_box->imhtml)); | |
12274 | 162 gtk_imhtml_clear_formatting(GTK_IMHTML(status_box->imhtml)); |
12060 | 163 gtk_imhtml_append_text(GTK_IMHTML(status_box->imhtml), message, 0); |
12274 | 164 gtk_widget_hide(status_box->toolbar); |
165 gtk_widget_hide(status_box->hsep); | |
12060 | 166 } |
11967 | 167 gtk_widget_set_sensitive(GTK_WIDGET(status_box), TRUE); |
12274 | 168 gtk_gaim_status_box_refresh(status_box); |
11967 | 169 } |
170 } | |
171 | |
172 static void | |
173 account_status_changed_cb(GaimAccount *account, GaimStatus *oldstatus, GaimStatus *newstatus, GtkGaimStatusBox *status_box) | |
174 { | |
175 if (status_box->account == account) | |
176 update_to_reflect_account_status(status_box, account, newstatus); | |
11960 | 177 } |
178 | |
179 static void | |
11499 | 180 gtk_gaim_status_box_set_property(GObject *object, guint param_id, |
181 const GValue *value, GParamSpec *pspec) | |
182 { | |
183 GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(object); | |
184 | |
185 switch (param_id) { | |
186 case PROP_ACCOUNT: | |
187 statusbox->account = g_value_get_pointer(value); | |
11960 | 188 |
11967 | 189 if (statusbox->status_changed_signal) { |
190 gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed", | |
191 statusbox, GAIM_CALLBACK(account_status_changed_cb)); | |
192 statusbox->status_changed_signal = 0; | |
193 } | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
194 |
11960 | 195 if (statusbox->account) |
11967 | 196 statusbox->status_changed_signal = gaim_signal_connect(gaim_accounts_get_handle(), "account-status-changed", |
11960 | 197 statusbox, GAIM_CALLBACK(account_status_changed_cb), |
198 statusbox); | |
11732 | 199 gtk_gaim_status_box_regenerate(statusbox); |
12256 | 200 |
11499 | 201 break; |
202 default: | |
203 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); | |
204 break; | |
205 } | |
206 } | |
207 | |
208 static void | |
12379
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
209 gtk_gaim_status_box_finalize(GObject *obj) |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
210 { |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
211 GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(obj); |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
212 |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
213 if (statusbox->status_changed_signal) { |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
214 gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed", |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
215 statusbox, GAIM_CALLBACK(account_status_changed_cb)); |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
216 statusbox->status_changed_signal = 0; |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
217 } |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
218 gaim_prefs_disconnect_by_handle(statusbox); |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
219 |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
220 G_OBJECT_CLASS(parent_class)->finalize(obj); |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
221 } |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
222 |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
223 static void |
10643 | 224 gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass) |
225 { | |
10861 | 226 GObjectClass *object_class; |
12379
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
227 GtkComboBoxClass *combo_class; |
10861 | 228 GtkWidgetClass *widget_class; |
229 GtkContainerClass *container_class = (GtkContainerClass*)klass; | |
10643 | 230 |
12379
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
231 parent_class = g_type_class_peek_parent(klass); |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
232 |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
233 combo_class = (GtkComboBoxClass*)klass; |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
234 combo_class->changed = gtk_gaim_status_box_changed; |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
235 |
10861 | 236 widget_class = (GtkWidgetClass*)klass; |
237 combo_box_size_request = widget_class->size_request; | |
238 widget_class->size_request = gtk_gaim_status_box_size_request; | |
239 combo_box_size_allocate = widget_class->size_allocate; | |
240 widget_class->size_allocate = gtk_gaim_status_box_size_allocate; | |
241 widget_class->expose_event = gtk_gaim_status_box_expose_event; | |
10643 | 242 |
10861 | 243 combo_box_forall = container_class->forall; |
244 container_class->forall = gtk_gaim_status_box_forall; | |
245 | |
246 object_class = (GObjectClass *)klass; | |
11499 | 247 |
12379
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
248 object_class->finalize = gtk_gaim_status_box_finalize; |
24c5fbfca306
[gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12320
diff
changeset
|
249 |
11499 | 250 object_class->get_property = gtk_gaim_status_box_get_property; |
251 object_class->set_property = gtk_gaim_status_box_set_property; | |
252 | |
253 g_object_class_install_property(object_class, | |
254 PROP_ACCOUNT, | |
255 g_param_spec_pointer("account", | |
256 "Account", | |
257 "The account, or NULL for all accounts", | |
258 G_PARAM_READWRITE | |
259 ) | |
260 ); | |
10643 | 261 } |
262 | |
263 static void | |
264 gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box) | |
265 { | |
12228 | 266 char *text = NULL, *title; |
10643 | 267 char aa_color[8]; |
268 GdkPixbuf *pixbuf; | |
10702 | 269 GtkTreePath *path; |
11870 | 270 GtkStyle *style; |
10643 | 271 |
11870 | 272 style = gtk_widget_get_style(GTK_WIDGET(status_box)); |
10643 | 273 snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x", |
274 style->text_aa[GTK_STATE_NORMAL].red >> 8, | |
275 style->text_aa[GTK_STATE_NORMAL].green >> 8, | |
276 style->text_aa[GTK_STATE_NORMAL].blue >> 8); | |
10672
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
277 |
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
278 title = status_box->title; |
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
279 if (!title) |
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
280 title = ""; |
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
281 |
10643 | 282 if (status_box->error) { |
12228 | 283 text = g_strdup_printf("<span size=\"smaller\" weight=\"bold\" color=\"red\">%s</span>", |
284 status_box->error); | |
10643 | 285 } else if (status_box->typing) { |
12228 | 286 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>", |
287 aa_color, _("Typing")); | |
10643 | 288 } else if (status_box->connecting) { |
12228 | 289 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>", |
290 aa_color, _("Connecting")); | |
10861 | 291 } else if (status_box->desc) { |
12228 | 292 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>", |
293 aa_color, status_box->desc); | |
10643 | 294 } |
10861 | 295 |
11960 | 296 if (status_box->account) { |
12228 | 297 char *text2 = g_strdup_printf("%s\n<span size=\"smaller\">%s</span>", |
298 gaim_account_get_username(status_box->account), | |
299 text ? text : title); | |
11960 | 300 g_free(text); |
301 text = text2; | |
12228 | 302 } else if (text) { |
303 char *text2 = g_strdup_printf("%s\n%s", title, text); | |
304 g_free(text); | |
305 text = text2; | |
306 } else { | |
307 text = g_strdup(title); | |
11960 | 308 } |
309 | |
11523 | 310 if (status_box->connecting) |
311 pixbuf = status_box->connecting_pixbufs[status_box->connecting_index]; | |
312 else if (status_box->error) | |
10643 | 313 pixbuf = status_box->error_pixbuf; |
314 else if (status_box->typing) | |
315 pixbuf = status_box->typing_pixbufs[status_box->typing_index]; | |
316 else | |
317 pixbuf = status_box->pixbuf; | |
318 | |
319 gtk_list_store_set(status_box->store, &(status_box->iter), | |
11755 | 320 TYPE_COLUMN, -1, /* This field is not used in this list store */ |
10643 | 321 ICON_COLUMN, pixbuf, |
10861 | 322 TEXT_COLUMN, text, |
10672
0925c898b73c
[gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10661
diff
changeset
|
323 TITLE_COLUMN, title, |
10861 | 324 DESC_COLUMN, status_box->desc, |
11739 | 325 -1); |
10702 | 326 path = gtk_tree_path_new_from_string("0"); |
327 gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(status_box->cell_view), path); | |
328 gtk_tree_path_free(path); | |
10643 | 329 |
330 g_free(text); | |
331 } | |
332 | |
11870 | 333 /** |
334 * This updates the GtkTreeView so that it correctly shows the state | |
335 * we are currently using. It is used when the current state is | |
336 * updated from somewhere other than the GtkStatusBox (from a plugin, | |
337 * or when signing on with the "-n" option, for example). It is | |
338 * also used when the user selects the "Custom..." option. | |
339 * | |
340 * Maybe we could accomplish this by triggering off the mouse and | |
341 * keyboard signals instead of the changed signal? | |
342 */ | |
343 static void | |
344 update_to_reflect_current_status(GtkGaimStatusBox *status_box) | |
345 { | |
346 GaimSavedStatus *saved_status; | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
347 guint index; |
12125 | 348 const char *message; |
11870 | 349 |
11983 | 350 /* this function is inappropriate for ones with accounts */ |
351 if (status_box->account) | |
352 return; | |
353 | |
12125 | 354 saved_status = gaim_savedstatus_get_current(); |
11951 | 355 |
356 /* | |
357 * Suppress the "changed" signal because the status | |
358 * was changed programmatically. | |
359 */ | |
360 gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE); | |
361 | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
362 if (gaim_savedstatus_has_substatuses(saved_status)) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
363 index = 5; |
11870 | 364 else |
365 { | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
366 switch (gaim_savedstatus_get_type(saved_status)) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
367 { |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
368 case GAIM_STATUS_AVAILABLE: |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
369 index = 0; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
370 break; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
371 case GAIM_STATUS_AWAY: |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
372 index = 1; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
373 break; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
374 case GAIM_STATUS_INVISIBLE: |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
375 index = 2; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
376 break; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
377 case GAIM_STATUS_OFFLINE: |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
378 index = 3; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
379 break; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
380 default: |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
381 index = 5; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
382 break; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
383 } |
12125 | 384 } |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
385 gtk_combo_box_set_active(GTK_COMBO_BOX(status_box), index); |
11870 | 386 |
12125 | 387 message = gaim_savedstatus_get_message(saved_status); |
388 if (!message || !*message) | |
389 { | |
390 status_box->imhtml_visible = FALSE; | |
391 gtk_widget_hide_all(status_box->vbox); | |
392 } | |
393 else | |
394 { | |
395 status_box->imhtml_visible = TRUE; | |
396 gtk_widget_show_all(status_box->vbox); | |
11870 | 397 |
12125 | 398 /* |
399 * Suppress the "changed" signal because the status | |
400 * was changed programmatically. | |
401 */ | |
402 gtk_widget_set_sensitive(GTK_WIDGET(status_box->imhtml), FALSE); | |
11954 | 403 |
12125 | 404 gtk_imhtml_clear(GTK_IMHTML(status_box->imhtml)); |
12274 | 405 gtk_imhtml_clear_formatting(GTK_IMHTML(status_box->imhtml)); |
12125 | 406 gtk_imhtml_append_text(GTK_IMHTML(status_box->imhtml), message, 0); |
12274 | 407 gtk_widget_hide(status_box->toolbar); |
408 gtk_widget_hide(status_box->hsep); | |
12125 | 409 gtk_widget_set_sensitive(GTK_WIDGET(status_box->imhtml), TRUE); |
11870 | 410 } |
11951 | 411 |
412 /* Stop suppressing the "changed" signal. */ | |
413 gtk_widget_set_sensitive(GTK_WIDGET(status_box), TRUE); | |
11870 | 414 } |
415 | |
11732 | 416 static void |
417 gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box) | |
418 { | |
11739 | 419 GaimAccount *account; |
11732 | 420 GdkPixbuf *pixbuf, *pixbuf2, *pixbuf3, *pixbuf4; |
421 GtkIconSize icon_size; | |
422 | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
423 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
424 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
425 else |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
426 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL); |
11732 | 427 |
12256 | 428 /* Unset the model while clearing it */ |
429 gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL); | |
11732 | 430 gtk_list_store_clear(status_box->dropdown_store); |
12256 | 431 gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
432 |
11739 | 433 account = GTK_GAIM_STATUS_BOX(status_box)->account; |
434 if (account == NULL) | |
435 { | |
11756 | 436 pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_ONLINE, |
11732 | 437 icon_size, "GtkGaimStatusBox"); |
11756 | 438 pixbuf2 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_AWAY, |
11732 | 439 icon_size, "GtkGaimStatusBox"); |
11756 | 440 pixbuf3 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE, |
11732 | 441 icon_size, "GtkGaimStatusBox"); |
11756 | 442 pixbuf4 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_INVISIBLE, |
11732 | 443 icon_size, "GtkGaimStatusBox"); |
444 /* hacks */ | |
11739 | 445 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AVAILABLE, pixbuf, _("Available"), NULL); |
446 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AWAY, pixbuf2, _("Away"), NULL); | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
447 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_INVISIBLE, pixbuf4, _("Invisible"), NULL); |
11739 | 448 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_OFFLINE, pixbuf3, _("Offline"), NULL); |
11738 | 449 gtk_gaim_status_box_add_separator(GTK_GAIM_STATUS_BOX(status_box)); |
11739 | 450 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_CUSTOM, pixbuf, _("Custom..."), NULL); |
451 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_SAVED, pixbuf, _("Saved..."), NULL); | |
11732 | 452 |
11870 | 453 update_to_reflect_current_status(status_box); |
11732 | 454 |
455 } else { | |
456 const GList *l; | |
11739 | 457 |
458 for (l = gaim_account_get_status_types(account); l != NULL; l = l->next) | |
459 { | |
11732 | 460 GaimStatusType *status_type = (GaimStatusType *)l->data; |
461 | |
462 if (!gaim_status_type_is_user_settable(status_type)) | |
463 continue; | |
464 | |
11739 | 465 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), |
466 gaim_status_type_get_primitive(status_type), | |
12080 | 467 gaim_gtk_create_prpl_icon_with_status(account, status_type), |
11739 | 468 gaim_status_type_get_name(status_type), |
469 NULL); | |
11732 | 470 } |
11967 | 471 update_to_reflect_account_status(status_box, account, gaim_account_get_active_status(account)); |
11732 | 472 } |
473 } | |
474 | |
12075
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
475 static gboolean scroll_event_cb(GtkWidget *w, GdkEventScroll *event, GtkIMHtml *imhtml) |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
476 { |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
477 if (event->direction == GDK_SCROLL_UP) |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
478 gtk_imhtml_page_up(imhtml); |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
479 else if (event->direction == GDK_SCROLL_DOWN) |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
480 gtk_imhtml_page_down(imhtml); |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
481 return TRUE; |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
482 } |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
483 |
12274 | 484 static int imhtml_remove_focus(GtkWidget *w, GdkEventKey *event, GtkGaimStatusBox *box) |
485 { | |
486 if (event->keyval == GDK_Tab || event->keyval == GDK_KP_Tab) | |
487 { | |
488 /* If last inserted character is a tab, then remove the focus from here */ | |
489 GtkWidget *top = gtk_widget_get_toplevel(w); | |
490 g_signal_emit_by_name(G_OBJECT(top), "move_focus", | |
491 (event->state & GDK_SHIFT_MASK) ? | |
492 GTK_DIR_TAB_BACKWARD: GTK_DIR_TAB_FORWARD); | |
493 return TRUE; | |
494 } | |
495 if (!box->typing) | |
496 return FALSE; | |
497 gtk_gaim_status_box_pulse_typing(box); | |
498 g_source_remove(box->typing); | |
12309 | 499 box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, box); |
12460
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
500 |
12274 | 501 return FALSE; |
502 } | |
503 | |
11753 | 504 #if GTK_CHECK_VERSION(2,6,0) |
11738 | 505 static gboolean |
506 dropdown_store_row_separator_func(GtkTreeModel *model, | |
507 GtkTreeIter *iter, gpointer data) | |
508 { | |
11739 | 509 GtkGaimStatusBoxItemType type; |
11738 | 510 |
11885 | 511 gtk_tree_model_get(model, iter, TYPE_COLUMN, &type, -1); |
11738 | 512 |
11739 | 513 if (type == GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR) |
11738 | 514 return TRUE; |
515 | |
516 return FALSE; | |
517 } | |
11753 | 518 #endif |
11738 | 519 |
10643 | 520 static void |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
521 cache_pixbufs(GtkGaimStatusBox *status_box) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
522 { |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
523 GtkIconSize icon_size; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
524 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
525 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
526 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_TWO_LINE); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
527 else |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
528 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
529 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
530 if (status_box->error_pixbuf != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
531 gdk_pixbuf_unref(status_box->error_pixbuf); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
532 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
533 status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
534 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
535 if (status_box->connecting_pixbufs[0] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
536 gdk_pixbuf_unref(status_box->connecting_pixbufs[0]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
537 if (status_box->connecting_pixbufs[1] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
538 gdk_pixbuf_unref(status_box->connecting_pixbufs[1]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
539 if (status_box->connecting_pixbufs[2] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
540 gdk_pixbuf_unref(status_box->connecting_pixbufs[2]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
541 if (status_box->connecting_pixbufs[3] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
542 gdk_pixbuf_unref(status_box->connecting_pixbufs[3]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
543 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
544 status_box->connecting_index = 0; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
545 status_box->connecting_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT0, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
546 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
547 status_box->connecting_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT1, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
548 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
549 status_box->connecting_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT2, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
550 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
551 status_box->connecting_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT3, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
552 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
553 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
554 if (status_box->typing_pixbufs[0] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
555 gdk_pixbuf_unref(status_box->typing_pixbufs[0]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
556 if (status_box->typing_pixbufs[1] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
557 gdk_pixbuf_unref(status_box->typing_pixbufs[1]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
558 if (status_box->typing_pixbufs[2] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
559 gdk_pixbuf_unref(status_box->typing_pixbufs[2]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
560 if (status_box->typing_pixbufs[3] != NULL) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
561 gdk_pixbuf_unref(status_box->typing_pixbufs[3]); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
562 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
563 status_box->typing_index = 0; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
564 status_box->typing_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING0, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
565 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
566 status_box->typing_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING1, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
567 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
568 status_box->typing_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING2, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
569 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
570 status_box->typing_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING3, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
571 icon_size, "GtkGaimStatusBox"); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
572 } |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
573 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
574 static void |
11954 | 575 current_status_pref_changed_cb(const char *name, GaimPrefType type, |
576 gpointer val, gpointer data) | |
577 { | |
12244 | 578 GtkGaimStatusBox *box = data; |
579 if (box->account) | |
580 update_to_reflect_account_status(box, box->account, | |
581 gaim_account_get_active_status(box->account)); | |
582 else | |
583 update_to_reflect_current_status(box); | |
11954 | 584 } |
585 | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
586 static void |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
587 buddy_list_details_pref_changed_cb(const char *name, GaimPrefType type, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
588 gpointer val, gpointer data) |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
589 { |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
590 GtkGaimStatusBox *status_box = (GtkGaimStatusBox *)data; |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
591 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
592 cache_pixbufs(status_box); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
593 gtk_gaim_status_box_regenerate(status_box); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
594 } |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
595 |
12294
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
596 #if 0 |
12262 | 597 static gboolean button_released_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box) |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
598 { |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
599 |
12274 | 600 if (event->button != 1) |
601 return FALSE; | |
12262 | 602 gtk_combo_box_popdown(GTK_COMBO_BOX(box)); |
603 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE); | |
604 if (!box->imhtml_visible) | |
605 g_signal_emit_by_name(G_OBJECT(box), "changed", NULL, NULL); | |
606 return TRUE; | |
607 } | |
608 | |
609 static gboolean button_pressed_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box) | |
610 { | |
12274 | 611 if (event->button != 1) |
612 return FALSE; | |
12262 | 613 gtk_combo_box_popup(GTK_COMBO_BOX(box)); |
12274 | 614 // Disabled until button_released_cb works |
615 // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), TRUE); | |
12262 | 616 return TRUE; |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
617 } |
12294
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
618 #endif |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
619 |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
620 static void |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
621 toggled_cb(GtkWidget *widget, GtkGaimStatusBox *box) |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
622 { |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
623 gtk_combo_box_popup(GTK_COMBO_BOX(box)); |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
624 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE); |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
625 } |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
626 |
11954 | 627 static void |
10643 | 628 gtk_gaim_status_box_init (GtkGaimStatusBox *status_box) |
629 { | |
12269 | 630 GtkWidget *vbox; |
11400 | 631 GtkCellRenderer *text_rend; |
632 GtkCellRenderer *icon_rend; | |
10643 | 633 GtkTextBuffer *buffer; |
11732 | 634 GtkTreePath *path; |
11400 | 635 |
636 text_rend = gtk_cell_renderer_text_new(); | |
637 icon_rend = gtk_cell_renderer_pixbuf_new(); | |
10643 | 638 |
639 status_box->imhtml_visible = FALSE; | |
640 status_box->connecting = FALSE; | |
641 status_box->typing = FALSE; | |
642 status_box->title = NULL; | |
10861 | 643 status_box->pixbuf = NULL; |
12262 | 644 status_box->toggle_button = gtk_toggle_button_new(); |
645 status_box->hbox = gtk_hbox_new(FALSE, 6); | |
10643 | 646 status_box->cell_view = gtk_cell_view_new(); |
12262 | 647 status_box->vsep = gtk_vseparator_new(); |
648 status_box->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
649 |
11739 | 650 status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); |
651 status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); | |
10643 | 652 gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store)); |
653 gtk_cell_view_set_model(GTK_CELL_VIEW(status_box->cell_view), GTK_TREE_MODEL(status_box->store)); | |
654 gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(status_box), 0); | |
655 gtk_list_store_append(status_box->store, &(status_box->iter)); | |
656 gtk_gaim_status_box_refresh(status_box); | |
11593
4b7fb30b8926
[gaim-migrate @ 13863]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11562
diff
changeset
|
657 path = gtk_tree_path_new_from_string("0"); |
4b7fb30b8926
[gaim-migrate @ 13863]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11562
diff
changeset
|
658 gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(status_box->cell_view), path); |
4b7fb30b8926
[gaim-migrate @ 13863]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11562
diff
changeset
|
659 gtk_tree_path_free(path); |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
660 |
12262 | 661 gtk_container_add(GTK_CONTAINER(status_box->toggle_button), status_box->hbox); |
662 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->cell_view, TRUE, TRUE, 0); | |
12274 | 663 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->vsep, FALSE, FALSE, 0); |
664 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->arrow, FALSE, FALSE, 0); | |
12262 | 665 gtk_widget_show_all(status_box->toggle_button); |
666 #if GTK_CHECK_VERSION(2,4,0) | |
667 gtk_button_set_focus_on_click(GTK_BUTTON(status_box->toggle_button), FALSE); | |
668 #endif | |
10643 | 669 status_box->icon_rend = gtk_cell_renderer_pixbuf_new(); |
670 status_box->text_rend = gtk_cell_renderer_text_new(); | |
671 | |
672 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), icon_rend, FALSE); | |
10861 | 673 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), text_rend, TRUE); |
10643 | 674 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), icon_rend, "pixbuf", ICON_COLUMN, NULL); |
675 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), text_rend, "markup", TEXT_COLUMN, NULL); | |
676 | |
677 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, FALSE); | |
11499 | 678 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, TRUE); |
10643 | 679 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, "pixbuf", ICON_COLUMN, NULL); |
680 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, "markup", TEXT_COLUMN, NULL); | |
681 | |
12262 | 682 g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 6, NULL); |
683 | |
10643 | 684 status_box->vbox = gtk_vbox_new(0, FALSE); |
12269 | 685 vbox = gtk_vbox_new(0,FALSE); |
12274 | 686 status_box->imhtml = gtk_imhtml_new(NULL, NULL); |
12269 | 687 status_box->toolbar = gtk_imhtmltoolbar_new(); |
688 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(status_box->toolbar), status_box->imhtml); | |
689 status_box->hsep = gtk_hseparator_new(); | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
690 |
10643 | 691 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(status_box->imhtml)); |
12294
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
692 #if 0 |
12274 | 693 g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event", |
694 G_CALLBACK(button_pressed_cb), status_box); | |
695 g_signal_connect(G_OBJECT(status_box->toggle_button), "button-release-event", | |
696 G_CALLBACK(button_released_cb), status_box); | |
12294
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
697 #endif |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
698 g_signal_connect(G_OBJECT(status_box->toggle_button), "toggled", |
d6b5373948f9
[gaim-migrate @ 14598]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12286
diff
changeset
|
699 G_CALLBACK(toggled_cb), status_box); |
10643 | 700 g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(imhtml_changed_cb), status_box); |
12460
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
701 g_signal_connect(G_OBJECT(status_box->imhtml), "format_function_toggle", |
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
702 G_CALLBACK(imhtml_format_changed_cb), status_box); |
12274 | 703 g_signal_connect(G_OBJECT(status_box->imhtml), "key_press_event", |
704 G_CALLBACK(imhtml_remove_focus), status_box); | |
11562 | 705 g_signal_connect_swapped(G_OBJECT(status_box->imhtml), "message_send", G_CALLBACK(remove_typing_cb), status_box); |
10643 | 706 gtk_imhtml_set_editable(GTK_IMHTML(status_box->imhtml), TRUE); |
707 gtk_widget_set_parent(status_box->vbox, GTK_WIDGET(status_box)); | |
12262 | 708 gtk_widget_set_parent(status_box->toggle_button, GTK_WIDGET(status_box)); |
12275 | 709 GTK_BIN(status_box)->child = status_box->toggle_button; |
10643 | 710 status_box->sw = gtk_scrolled_window_new(NULL, NULL); |
711 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
712 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(status_box->sw), GTK_SHADOW_IN); | |
12320 | 713 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(status_box->sw), vbox); |
12269 | 714 gtk_box_pack_start(GTK_BOX(vbox), status_box->toolbar, FALSE, FALSE, 0); |
715 gtk_box_pack_start(GTK_BOX(vbox), status_box->hsep, FALSE, FALSE, 0); | |
716 gtk_box_pack_start(GTK_BOX(vbox), status_box->imhtml, TRUE, TRUE, 0); | |
717 | |
10643 | 718 gtk_box_pack_start(GTK_BOX(status_box->vbox), status_box->sw, TRUE, TRUE, 0); |
11654 | 719 |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
720 g_signal_connect(G_OBJECT(status_box->imhtml), "scroll_event", |
12075
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
721 G_CALLBACK(scroll_event_cb), status_box->imhtml); |
f62022e07351
[gaim-migrate @ 14372]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12074
diff
changeset
|
722 |
11850 | 723 #if GTK_CHECK_VERSION(2,6,0) |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
724 gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(status_box), dropdown_store_row_separator_func, NULL, NULL); |
11850 | 725 #endif |
726 | |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
727 cache_pixbufs(status_box); |
11732 | 728 gtk_gaim_status_box_regenerate(status_box); |
11954 | 729 |
12123 | 730 gaim_prefs_connect_callback(status_box, "/core/savedstatus/current", |
11954 | 731 current_status_pref_changed_cb, status_box); |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
732 gaim_prefs_connect_callback(status_box, "/gaim/gtk/blist/show_buddy_icons", |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
733 buddy_list_details_pref_changed_cb, status_box); |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
734 |
10643 | 735 } |
736 | |
737 static void | |
10861 | 738 gtk_gaim_status_box_size_request(GtkWidget *widget, |
739 GtkRequisition *requisition) | |
10643 | 740 { |
741 GtkRequisition box_req; | |
742 combo_box_size_request(widget, requisition); | |
12103 | 743 requisition->height += 6; |
10861 | 744 |
10643 | 745 gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->vbox, &box_req); |
746 if (box_req.height > 1) | |
747 requisition->height = requisition->height + box_req.height + 6; | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
748 |
12269 | 749 if (GTK_GAIM_STATUS_BOX(widget)->typing) { |
750 gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->toolbar, &box_req); | |
751 requisition->height = requisition->height + box_req.height; | |
752 } | |
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12275
diff
changeset
|
753 |
10643 | 754 requisition->width = 1; |
755 } | |
756 | |
757 static void | |
10861 | 758 gtk_gaim_status_box_size_allocate(GtkWidget *widget, |
759 GtkAllocation *allocation) | |
10643 | 760 { |
761 GtkRequisition req = {0,0}; | |
11400 | 762 GtkAllocation parent_alc, box_alc; |
763 | |
764 parent_alc = *allocation; | |
765 box_alc = *allocation; | |
10643 | 766 combo_box_size_request(widget, &req); |
10861 | 767 |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12585
diff
changeset
|
768 box_alc.height = MAX(1, (allocation->height - req.height - 12)); |
12100 | 769 box_alc.y = box_alc.y + req.height + 9; |
10861 | 770 |
12102
8df87db79bad
[gaim-migrate @ 14399]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12100
diff
changeset
|
771 box_alc.width -= 6; |
8df87db79bad
[gaim-migrate @ 14399]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12100
diff
changeset
|
772 box_alc.x += 3; |
12100 | 773 |
10643 | 774 gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->vbox, &box_alc); |
10861 | 775 |
10643 | 776 parent_alc.height = MAX(1,req.height); |
12102
8df87db79bad
[gaim-migrate @ 14399]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12100
diff
changeset
|
777 parent_alc.width -= 6; |
8df87db79bad
[gaim-migrate @ 14399]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12100
diff
changeset
|
778 parent_alc.x += 3; |
8df87db79bad
[gaim-migrate @ 14399]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12100
diff
changeset
|
779 parent_alc.y += 3; |
12100 | 780 |
10643 | 781 combo_box_size_allocate(widget, &parent_alc); |
12262 | 782 gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->toggle_button, &parent_alc); |
10643 | 783 widget->allocation = *allocation; |
784 } | |
785 | |
786 static gboolean | |
10861 | 787 gtk_gaim_status_box_expose_event(GtkWidget *widget, |
12262 | 788 GdkEventExpose *event) |
10643 | 789 { |
10861 | 790 GtkGaimStatusBox *status_box = GTK_GAIM_STATUS_BOX(widget); |
12262 | 791 gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->vbox, event); |
12275 | 792 gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->toggle_button, event); |
10861 | 793 return FALSE; |
10643 | 794 } |
795 | |
796 static void | |
10861 | 797 gtk_gaim_status_box_forall(GtkContainer *container, |
798 gboolean include_internals, | |
799 GtkCallback callback, | |
800 gpointer callback_data) | |
10643 | 801 { |
10861 | 802 GtkGaimStatusBox *status_box = GTK_GAIM_STATUS_BOX (container); |
10643 | 803 |
10861 | 804 if (include_internals) |
805 { | |
806 (* callback) (status_box->vbox, callback_data); | |
12275 | 807 (* callback) (status_box->toggle_button, callback_data); |
808 (* callback) (status_box->arrow, callback_data); | |
10861 | 809 } |
10643 | 810 |
10861 | 811 combo_box_forall(container, include_internals, callback, callback_data); |
10643 | 812 } |
813 | |
814 GtkWidget * | |
815 gtk_gaim_status_box_new() | |
816 { | |
817 return g_object_new(GTK_GAIM_TYPE_STATUS_BOX, NULL); | |
818 } | |
819 | |
11499 | 820 GtkWidget * |
821 gtk_gaim_status_box_new_with_account(GaimAccount *account) | |
822 { | |
823 return g_object_new(GTK_GAIM_TYPE_STATUS_BOX, "account", account, NULL); | |
824 } | |
10643 | 825 |
826 void | |
11739 | 827 gtk_gaim_status_box_add(GtkGaimStatusBox *status_box, GtkGaimStatusBoxItemType type, GdkPixbuf *pixbuf, const char *text, const char *sec_text) |
10643 | 828 { |
829 GtkTreeIter iter; | |
830 char *t; | |
10861 | 831 |
10643 | 832 if (sec_text) { |
833 char aa_color[8]; | |
834 GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(status_box)); | |
835 snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x", | |
836 style->text_aa[GTK_STATE_NORMAL].red >> 8, | |
837 style->text_aa[GTK_STATE_NORMAL].green >> 8, | |
10861 | 838 style->text_aa[GTK_STATE_NORMAL].blue >> 8); |
10643 | 839 t = g_strdup_printf("%s\n<span color=\"%s\">%s</span>", text, aa_color, sec_text); |
840 } else { | |
841 t = g_strdup(text); | |
842 } | |
10861 | 843 |
10643 | 844 gtk_list_store_append(status_box->dropdown_store, &iter); |
845 gtk_list_store_set(status_box->dropdown_store, &iter, | |
11739 | 846 TYPE_COLUMN, type, |
10643 | 847 ICON_COLUMN, pixbuf, |
10861 | 848 TEXT_COLUMN, t, |
10643 | 849 TITLE_COLUMN, text, |
10861 | 850 DESC_COLUMN, sec_text, |
11739 | 851 -1); |
11638 | 852 g_free(t); |
10643 | 853 } |
854 | |
855 void | |
11738 | 856 gtk_gaim_status_box_add_separator(GtkGaimStatusBox *status_box) |
857 { | |
11756 | 858 /* Don't do anything unless GTK actually supports |
859 * gtk_combo_box_set_row_separator_func */ | |
860 #if GTK_CHECK_VERSION(2,6,0) | |
11738 | 861 GtkTreeIter iter; |
862 | |
863 gtk_list_store_append(status_box->dropdown_store, &iter); | |
864 gtk_list_store_set(status_box->dropdown_store, &iter, | |
11739 | 865 TYPE_COLUMN, GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR, |
866 -1); | |
11756 | 867 #endif |
11738 | 868 } |
869 | |
870 void | |
10643 | 871 gtk_gaim_status_box_set_error(GtkGaimStatusBox *status_box, const gchar *error) |
872 { | |
11523 | 873 if (status_box->error) |
874 g_free(status_box->error); | |
11891 | 875 status_box->error = NULL; |
876 if (error != NULL) | |
877 status_box->error = g_strdup(error); | |
10643 | 878 gtk_gaim_status_box_refresh(status_box); |
879 } | |
880 | |
881 void | |
882 gtk_gaim_status_box_set_connecting(GtkGaimStatusBox *status_box, gboolean connecting) | |
883 { | |
884 if (!status_box) | |
885 return; | |
886 status_box->connecting = connecting; | |
887 gtk_gaim_status_box_refresh(status_box); | |
888 } | |
889 | |
890 void | |
891 gtk_gaim_status_box_pulse_connecting(GtkGaimStatusBox *status_box) | |
892 { | |
893 if (!status_box) | |
894 return; | |
895 if (status_box->connecting_index == 3) | |
896 status_box->connecting_index = 0; | |
10861 | 897 else |
10643 | 898 status_box->connecting_index++; |
899 gtk_gaim_status_box_refresh(status_box); | |
900 } | |
901 | |
12274 | 902 static void |
10643 | 903 gtk_gaim_status_box_pulse_typing(GtkGaimStatusBox *status_box) |
904 { | |
905 if (status_box->typing_index == 3) | |
906 status_box->typing_index = 0; | |
10861 | 907 else |
10643 | 908 status_box->typing_index++; |
909 gtk_gaim_status_box_refresh(status_box); | |
910 } | |
911 | |
11993 | 912 static GaimStatusType |
913 *find_status_type_by_index(const GaimAccount *account, gint active) | |
914 { | |
915 const GList *l = gaim_account_get_status_types(account); | |
916 gint i; | |
917 | |
918 for (i = 0; l; l = l->next) { | |
919 GaimStatusType *status_type = l->data; | |
920 if (!gaim_status_type_is_user_settable(status_type)) | |
921 continue; | |
922 | |
923 if (active == i) | |
924 return status_type; | |
925 i++; | |
926 } | |
927 | |
928 return NULL; | |
929 } | |
930 | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
931 static gboolean |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
932 message_changed(const char *one, const char *two) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
933 { |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
934 if (one == NULL && two == NULL) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
935 return FALSE; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
936 |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
937 if (one == NULL || two == NULL) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
938 return TRUE; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
939 |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
940 return (g_utf8_collate(one, two) != 0); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
941 } |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
942 |
11654 | 943 static void |
944 activate_currently_selected_status(GtkGaimStatusBox *status_box) | |
10643 | 945 { |
11739 | 946 GtkGaimStatusBoxItemType type; |
947 gchar *title; | |
10643 | 948 GtkTreeIter iter; |
11654 | 949 char *message; |
950 GaimSavedStatus *saved_status; | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
951 gboolean changed = TRUE; |
10643 | 952 |
11951 | 953 if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) |
954 return; | |
11654 | 955 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, |
11739 | 956 TYPE_COLUMN, &type, |
11638 | 957 TITLE_COLUMN, &title, -1); |
11654 | 958 message = gtk_gaim_status_box_get_message(status_box); |
11739 | 959 |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
960 if (!message || !*message) |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
961 { |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
962 gtk_widget_hide_all(status_box->vbox); |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
963 status_box->imhtml_visible = FALSE; |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
964 } |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
965 |
11739 | 966 /* |
967 * If the currently selected status is "Custom..." or | |
11954 | 968 * "Saved..." then do nothing. Custom statuses are |
969 * activated elsewhere, and we update the status_box | |
970 * accordingly by monitoring the preference | |
12123 | 971 * "/core/savedstatus/current" and then calling |
11954 | 972 * update_to_reflect_current_status() |
11739 | 973 */ |
12221
152748df85cf
[gaim-migrate @ 14523]
Richard Laager <rlaager@wiktel.com>
parents:
12125
diff
changeset
|
974 if (type >= GAIM_STATUS_NUM_PRIMITIVES) |
11739 | 975 return; |
11654 | 976 |
11981 | 977 if (status_box->account) { |
978 gint active; | |
979 GaimStatusType *status_type; | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
980 GaimStatus *status; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
981 const char *id = NULL; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
982 |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
983 status = gaim_account_get_active_status(status_box->account); |
11981 | 984 |
985 g_object_get(G_OBJECT(status_box), "active", &active, NULL); | |
11654 | 986 |
11993 | 987 status_type = find_status_type_by_index(status_box->account, active); |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
988 id = gaim_status_type_get_id(status_type); |
11981 | 989 |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
990 if (strncmp(id, gaim_status_get_id(status), strlen(id)) == 0) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
991 { |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
992 /* Selected status and previous status is the same */ |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
993 if (!message_changed(message, gaim_status_get_attr_string(status, "message"))) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
994 changed = FALSE; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
995 } |
12123 | 996 |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
997 if (changed) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
998 { |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
999 if (message) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1000 gaim_account_set_status(status_box->account, id, |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1001 TRUE, "message", message, NULL); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1002 else |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1003 gaim_account_set_status(status_box->account, id, |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1004 TRUE, NULL); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1005 } |
11981 | 1006 } else { |
1007 /* Save the newly selected status to prefs.xml and status.xml */ | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1008 |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1009 /* Has the status been really changed? */ |
12125 | 1010 saved_status = gaim_savedstatus_get_current(); |
1011 if (gaim_savedstatus_get_type(saved_status) == type) | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1012 { |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1013 if (!message_changed(gaim_savedstatus_get_message(saved_status), message)) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1014 changed = FALSE; |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1015 } |
11981 | 1016 |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1017 if (changed) |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1018 { |
12125 | 1019 /* Create a new transient saved status */ |
1020 saved_status = gaim_savedstatus_new(NULL, type); | |
12076
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1021 gaim_savedstatus_set_type(saved_status, type); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1022 gaim_savedstatus_set_message(saved_status, message); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1023 |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1024 /* Set the status for each account */ |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1025 gaim_savedstatus_activate(saved_status); |
4fb1edd43f45
[gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12075
diff
changeset
|
1026 } |
11981 | 1027 } |
11627 | 1028 |
11638 | 1029 g_free(title); |
11654 | 1030 g_free(message); |
1031 } | |
1032 | |
1033 static void remove_typing_cb(GtkGaimStatusBox *status_box) | |
1034 { | |
1035 activate_currently_selected_status(status_box); | |
1036 | |
1037 g_source_remove(status_box->typing); | |
1038 status_box->typing = 0; | |
1039 gtk_gaim_status_box_refresh(status_box); | |
10643 | 1040 } |
1041 | |
1042 static void gtk_gaim_status_box_changed(GtkComboBox *box) | |
1043 { | |
11400 | 1044 GtkGaimStatusBox *status_box; |
10643 | 1045 GtkTreeIter iter; |
11739 | 1046 GtkGaimStatusBoxItemType type; |
10643 | 1047 char *text, *sec_text; |
1048 GdkPixbuf *pixbuf; | |
11960 | 1049 GList *accounts = NULL, *node; |
10643 | 1050 |
11400 | 1051 status_box = GTK_GAIM_STATUS_BOX(box); |
1052 | |
12074
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
1053 if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter)) |
950acb2bc835
[gaim-migrate @ 14370]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12060
diff
changeset
|
1054 return; |
11739 | 1055 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, |
1056 TYPE_COLUMN, &type, | |
1057 TITLE_COLUMN, &text, | |
10861 | 1058 DESC_COLUMN, &sec_text, ICON_COLUMN, &pixbuf, |
11739 | 1059 -1); |
10643 | 1060 if (status_box->title) |
1061 g_free(status_box->title); | |
11638 | 1062 status_box->title = text; |
10643 | 1063 if (status_box->desc && sec_text) |
11638 | 1064 g_free(status_box->desc); |
1065 status_box->desc = sec_text; | |
10643 | 1066 if (status_box->pixbuf) |
1067 g_object_unref(status_box->pixbuf); | |
1068 status_box->pixbuf = pixbuf; | |
11638 | 1069 if (status_box->typing) |
1070 g_source_remove(status_box->typing); | |
1071 status_box->typing = 0; | |
12269 | 1072 gtk_widget_hide(status_box->hsep); |
1073 gtk_widget_hide(status_box->toolbar); | |
10861 | 1074 |
11951 | 1075 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) |
11729 | 1076 { |
11951 | 1077 if (type == GTK_GAIM_STATUS_BOX_TYPE_CUSTOM) |
1078 { | |
1079 gaim_gtk_status_editor_show(NULL); | |
1080 update_to_reflect_current_status(status_box); | |
1081 return; | |
1082 } | |
11729 | 1083 |
11951 | 1084 if (type == GTK_GAIM_STATUS_BOX_TYPE_SAVED) |
1085 { | |
1086 gaim_gtk_status_window_show(); | |
1087 update_to_reflect_current_status(status_box); | |
1088 return; | |
1089 } | |
11729 | 1090 } |
1091 | |
11654 | 1092 /* |
11755 | 1093 * Show the message box whenever 'type' allows for a |
11960 | 1094 * message attribute on any protocol that is enabled, |
1095 * or our protocol, if we have account set | |
11654 | 1096 */ |
11960 | 1097 if (status_box->account) |
1098 accounts = g_list_prepend(accounts, status_box->account); | |
1099 else | |
1100 accounts = gaim_accounts_get_all_active(); | |
11755 | 1101 status_box->imhtml_visible = FALSE; |
1102 for (node = accounts; node != NULL; node = node->next) | |
1103 { | |
1104 GaimAccount *account; | |
1105 GaimStatusType *status_type; | |
1106 | |
1107 account = node->data; | |
1108 status_type = gaim_account_get_status_type_with_primitive(account, type); | |
1109 if ((status_type != NULL) && | |
1110 (gaim_status_type_get_attr(status_type, "message") != NULL)) | |
1111 { | |
1112 status_box->imhtml_visible = TRUE; | |
1113 break; | |
1114 } | |
1115 } | |
1116 g_list_free(accounts); | |
11654 | 1117 |
1118 if (status_box->imhtml_visible) | |
1119 { | |
12585 | 1120 GtkTextBuffer *buf; |
1121 GtkTextIter start, end; | |
10643 | 1122 gtk_widget_show_all(status_box->vbox); |
12274 | 1123 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) { |
12309 | 1124 status_box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, status_box); |
12274 | 1125 } else { |
1126 gtk_widget_hide(status_box->toolbar); | |
1127 gtk_widget_hide(status_box->hsep); | |
1128 } | |
12585 | 1129 gtk_widget_grab_focus(status_box->imhtml); |
1130 buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(status_box->imhtml)); | |
1131 gtk_text_buffer_get_start_iter(buf, &start); | |
1132 gtk_text_buffer_get_end_iter(buf, &end); | |
1133 gtk_text_buffer_move_mark_by_name(buf, "insert", &end); | |
1134 gtk_text_buffer_move_mark_by_name(buf, "selection_bound", &start); | |
11654 | 1135 } |
1136 else | |
1137 { | |
10643 | 1138 gtk_widget_hide_all(status_box->vbox); |
11951 | 1139 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) |
11981 | 1140 activate_currently_selected_status(status_box); /* This is where we actually set the status */ |
10643 | 1141 } |
1142 gtk_gaim_status_box_refresh(status_box); | |
1143 } | |
1144 | |
1145 static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data) | |
1146 { | |
1147 GtkGaimStatusBox *box = (GtkGaimStatusBox*)data; | |
11951 | 1148 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(box))) |
1149 { | |
1150 if (box->typing) { | |
1151 gtk_gaim_status_box_pulse_typing(box); | |
1152 g_source_remove(box->typing); | |
1153 } | |
12309 | 1154 box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, box); |
12269 | 1155 gtk_widget_show(box->hsep); |
1156 gtk_widget_show(box->toolbar); | |
10861 | 1157 } |
10643 | 1158 gtk_gaim_status_box_refresh(box); |
1159 } | |
10649 | 1160 |
12460
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
1161 static void imhtml_format_changed_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, void *data) |
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
1162 { |
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
1163 imhtml_changed_cb(NULL, data); |
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
1164 } |
3d999a4d4892
[gaim-migrate @ 14770]
Richard Laager <rlaager@wiktel.com>
parents:
12379
diff
changeset
|
1165 |
11739 | 1166 GtkGaimStatusBoxItemType gtk_gaim_status_box_get_active_type(GtkGaimStatusBox *status_box) |
10649 | 1167 { |
1168 GtkTreeIter iter; | |
11739 | 1169 GtkGaimStatusBoxItemType type; |
10649 | 1170 gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter); |
10861 | 1171 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter, |
10649 | 1172 TYPE_COLUMN, &type, -1); |
1173 return type; | |
1174 } | |
1175 | |
11638 | 1176 char *gtk_gaim_status_box_get_message(GtkGaimStatusBox *status_box) |
10649 | 1177 { |
1178 if (status_box->imhtml_visible) | |
1179 return gtk_imhtml_get_markup(GTK_IMHTML(status_box->imhtml)); | |
1180 else | |
1181 return NULL; | |
1182 } |