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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /*
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file gtkstatusbox.c GTK+ Status Selection Widget
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 * @ingroup gtkui
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
4 *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 * gaim
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * source distribution.
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * (at your option) any later version.
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * GNU General Public License for more details.
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 */
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
26 #include <gdk/gdkkeysyms.h>
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
27
11627
5dbefebb20cb [gaim-migrate @ 13902]
Tim Ringenbach <marv@pidgin.im>
parents: 11593
diff changeset
28 #include "account.h"
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "internal.h"
11627
5dbefebb20cb [gaim-migrate @ 13902]
Tim Ringenbach <marv@pidgin.im>
parents: 11593
diff changeset
30 #include "savedstatuses.h"
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "status.h"
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
32 #include "debug.h"
11627
5dbefebb20cb [gaim-migrate @ 13902]
Tim Ringenbach <marv@pidgin.im>
parents: 11593
diff changeset
33
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "gtkgaim.h"
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
35 #include "gtkimhtmltoolbar.h"
11729
8a981a601242 [gaim-migrate @ 14020]
Mark Doliner <mark@kingant.net>
parents: 11724
diff changeset
36 #include "gtksavedstatuses.h"
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 #include "gtkstock.h"
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 #include "gtkstatusbox.h"
12080
3b52d94437f3 [gaim-migrate @ 14377]
Mark Doliner <mark@kingant.net>
parents: 12076
diff changeset
39 #include "gtkutils.h"
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40
12309
b3385115815c [gaim-migrate @ 14613]
Mark Doliner <mark@kingant.net>
parents: 12294
diff changeset
41 #define TYPING_TIMEOUT 4000
b3385115815c [gaim-migrate @ 14613]
Mark Doliner <mark@kingant.net>
parents: 12294
diff changeset
42
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
9f521a61ef58 [gaim-migrate @ 13828]
Sean Egan <seanegan@gmail.com>
parents: 11523
diff changeset
45 static void remove_typing_cb(GtkGaimStatusBox *box);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
47 static void gtk_gaim_status_box_pulse_typing(GtkGaimStatusBox *status_box);
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
48 static void gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
49 static void gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50 static void gtk_gaim_status_box_changed(GtkComboBox *box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51 static void gtk_gaim_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 static void gtk_gaim_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53 static gboolean gtk_gaim_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 static void gtk_gaim_status_box_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56 static void (*combo_box_size_request)(GtkWidget *widget, GtkRequisition *requisition);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 static void (*combo_box_size_allocate)(GtkWidget *widget, GtkAllocation *allocation);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 static void (*combo_box_forall) (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
59
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
60 enum {
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
61 TYPE_COLUMN, /* A GtkGaimStatusBoxItemType */
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
62 ICON_COLUMN, /* This is a GdkPixbuf (the other columns are strings) */
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
63 TEXT_COLUMN, /* A string */
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
64 TITLE_COLUMN, /* The plain-English title of this item */
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
65 DESC_COLUMN, /* A plain-English description of this item */
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66 NUM_COLUMNS
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
67 };
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
69 enum {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
70 PROP_0,
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
71 PROP_ACCOUNT
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
72 };
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76 static void gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 static void gtk_gaim_status_box_init (GtkGaimStatusBox *status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 GType
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80 gtk_gaim_status_box_get_type (void)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 {
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
82 static GType status_box_type = 0;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
84 if (!status_box_type)
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
85 {
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
86 static const GTypeInfo status_box_info =
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
87 {
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
88 sizeof (GtkGaimStatusBoxClass),
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
89 NULL, /* base_init */
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
90 NULL, /* base_finalize */
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
91 (GClassInitFunc) gtk_gaim_status_box_class_init,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
92 NULL, /* class_finalize */
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
93 NULL, /* class_data */
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
94 sizeof (GtkGaimStatusBox),
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
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
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
98 };
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
100 status_box_type = g_type_register_static(GTK_TYPE_COMBO_BOX,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
101 "GtkGaimStatusBox",
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
102 &status_box_info,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
103 0);
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
104 }
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
106 return status_box_type;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 static void
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
110 gtk_gaim_status_box_get_property(GObject *object, guint param_id,
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
111 GValue *value, GParamSpec *psec)
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
112 {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
113 GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(object);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
114
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
115 switch (param_id) {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
116 case PROP_ACCOUNT:
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
117 g_value_set_pointer(value, statusbox->account);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
118 break;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
119 default:
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
120 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, psec);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
121 break;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
122 }
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
123 }
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
124
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
125 static void
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
126 update_to_reflect_account_status(GtkGaimStatusBox *status_box, GaimAccount *account, GaimStatus *newstatus)
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
127 {
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
128 const GList *l;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
129 int status_no = -1;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
130 const GaimStatusType *statustype = NULL;
12060
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
131 const char *message;
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
132
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
133 statustype = gaim_status_type_find_with_id((GList *)gaim_account_get_status_types(account),
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
134 (char *)gaim_status_type_get_id(gaim_status_get_type(newstatus)));
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
135
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
136 for (l = gaim_account_get_status_types(account); l != NULL; l = l->next) {
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
137 GaimStatusType *status_type = (GaimStatusType *)l->data;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
138
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
139 if (!gaim_status_type_is_user_settable(status_type))
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
140 continue;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
141 status_no++;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
142 if (statustype == status_type)
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
143 break;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
144 }
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
145
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
146 if (status_no != -1) {
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
147 gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE);
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
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
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
150 message = gaim_status_get_attr_string(newstatus, "message");
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
151
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
152 if (!message || !*message)
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
153 {
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
154 gtk_widget_hide_all(status_box->vbox);
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
155 status_box->imhtml_visible = FALSE;
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
156 }
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
157 else
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
158 {
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
159 gtk_widget_show_all(status_box->vbox);
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
160 status_box->imhtml_visible = TRUE;
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
161 gtk_imhtml_clear(GTK_IMHTML(status_box->imhtml));
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
162 gtk_imhtml_clear_formatting(GTK_IMHTML(status_box->imhtml));
12060
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
163 gtk_imhtml_append_text(GTK_IMHTML(status_box->imhtml), message, 0);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
164 gtk_widget_hide(status_box->toolbar);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
165 gtk_widget_hide(status_box->hsep);
12060
f7d2f637ff03 [gaim-migrate @ 14355]
Tim Ringenbach <marv@pidgin.im>
parents: 11998
diff changeset
166 }
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
167 gtk_widget_set_sensitive(GTK_WIDGET(status_box), TRUE);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
168 gtk_gaim_status_box_refresh(status_box);
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
169 }
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
170 }
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
171
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
172 static void
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
173 account_status_changed_cb(GaimAccount *account, GaimStatus *oldstatus, GaimStatus *newstatus, GtkGaimStatusBox *status_box)
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
174 {
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
175 if (status_box->account == account)
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
176 update_to_reflect_account_status(status_box, account, newstatus);
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
177 }
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
178
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
179 static void
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
180 gtk_gaim_status_box_set_property(GObject *object, guint param_id,
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
181 const GValue *value, GParamSpec *pspec)
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
182 {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
183 GtkGaimStatusBox *statusbox = GTK_GAIM_STATUS_BOX(object);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
184
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
185 switch (param_id) {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
186 case PROP_ACCOUNT:
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
187 statusbox->account = g_value_get_pointer(value);
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
188
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
189 if (statusbox->status_changed_signal) {
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
190 gaim_signal_disconnect(gaim_accounts_get_handle(), "account-status-changed",
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
191 statusbox, GAIM_CALLBACK(account_status_changed_cb));
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
192 statusbox->status_changed_signal = 0;
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
193 }
12286
255e6912607b [gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12275
diff changeset
194
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
195 if (statusbox->account)
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
196 statusbox->status_changed_signal = gaim_signal_connect(gaim_accounts_get_handle(), "account-status-changed",
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
197 statusbox, GAIM_CALLBACK(account_status_changed_cb),
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
198 statusbox);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
199 gtk_gaim_status_box_regenerate(statusbox);
12256
0eed625872f7 [gaim-migrate @ 14558]
Sean Egan <seanegan@gmail.com>
parents: 12244
diff changeset
200
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
201 break;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
202 default:
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
203 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
204 break;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
205 }
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
206 }
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
207
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 gtk_gaim_status_box_class_init (GtkGaimStatusBoxClass *klass)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225 {
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
226 GObjectClass *object_class;
12379
24c5fbfca306 [gaim-migrate @ 14683]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12320
diff changeset
227 GtkComboBoxClass *combo_class;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
228 GtkWidgetClass *widget_class;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
229 GtkContainerClass *container_class = (GtkContainerClass*)klass;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
236 widget_class = (GtkWidgetClass*)klass;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
237 combo_box_size_request = widget_class->size_request;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
238 widget_class->size_request = gtk_gaim_status_box_size_request;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
239 combo_box_size_allocate = widget_class->size_allocate;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
240 widget_class->size_allocate = gtk_gaim_status_box_size_allocate;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
241 widget_class->expose_event = gtk_gaim_status_box_expose_event;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
243 combo_box_forall = container_class->forall;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
244 container_class->forall = gtk_gaim_status_box_forall;
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
245
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
246 object_class = (GObjectClass *)klass;
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
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
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
250 object_class->get_property = gtk_gaim_status_box_get_property;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
251 object_class->set_property = gtk_gaim_status_box_set_property;
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
252
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
253 g_object_class_install_property(object_class,
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
254 PROP_ACCOUNT,
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
255 g_param_spec_pointer("account",
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
256 "Account",
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
257 "The account, or NULL for all accounts",
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
258 G_PARAM_READWRITE
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
259 )
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
260 );
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 static void
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 gtk_gaim_status_box_refresh(GtkGaimStatusBox *status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265 {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
266 char *text = NULL, *title;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 char aa_color[8];
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268 GdkPixbuf *pixbuf;
10702
f51e040affc6 [gaim-migrate @ 12284]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10672
diff changeset
269 GtkTreePath *path;
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
270 GtkStyle *style;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
271
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
272 style = gtk_widget_get_style(GTK_WIDGET(status_box));
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
273 snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x",
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
274 style->text_aa[GTK_STATE_NORMAL].red >> 8,
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
275 style->text_aa[GTK_STATE_NORMAL].green >> 8,
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
282 if (status_box->error) {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
283 text = g_strdup_printf("<span size=\"smaller\" weight=\"bold\" color=\"red\">%s</span>",
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
284 status_box->error);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
285 } else if (status_box->typing) {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
286 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>",
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
287 aa_color, _("Typing"));
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
288 } else if (status_box->connecting) {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
289 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>",
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
290 aa_color, _("Connecting"));
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
291 } else if (status_box->desc) {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
292 text = g_strdup_printf("<span size=\"smaller\" color=\"%s\">%s</span>",
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
293 aa_color, status_box->desc);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
294 }
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
295
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
296 if (status_box->account) {
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
297 char *text2 = g_strdup_printf("%s\n<span size=\"smaller\">%s</span>",
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
298 gaim_account_get_username(status_box->account),
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
299 text ? text : title);
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
300 g_free(text);
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
301 text = text2;
12228
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
302 } else if (text) {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
303 char *text2 = g_strdup_printf("%s\n%s", title, text);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
304 g_free(text);
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
305 text = text2;
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
306 } else {
f28e51bf9be8 [gaim-migrate @ 14530]
Tim Ringenbach <marv@pidgin.im>
parents: 12221
diff changeset
307 text = g_strdup(title);
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
308 }
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
309
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11499
diff changeset
310 if (status_box->connecting)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11499
diff changeset
311 pixbuf = status_box->connecting_pixbufs[status_box->connecting_index];
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11499
diff changeset
312 else if (status_box->error)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
313 pixbuf = status_box->error_pixbuf;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
314 else if (status_box->typing)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
315 pixbuf = status_box->typing_pixbufs[status_box->typing_index];
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
316 else
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
317 pixbuf = status_box->pixbuf;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
318
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
319 gtk_list_store_set(status_box->store, &(status_box->iter),
11755
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
320 TYPE_COLUMN, -1, /* This field is not used in this list store */
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
321 ICON_COLUMN, pixbuf,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
322 TEXT_COLUMN, text,
10672
0925c898b73c [gaim-migrate @ 12212]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10661
diff changeset
323 TITLE_COLUMN, title,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
324 DESC_COLUMN, status_box->desc,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
325 -1);
10702
f51e040affc6 [gaim-migrate @ 12284]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10672
diff changeset
326 path = gtk_tree_path_new_from_string("0");
f51e040affc6 [gaim-migrate @ 12284]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10672
diff changeset
327 gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(status_box->cell_view), path);
f51e040affc6 [gaim-migrate @ 12284]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10672
diff changeset
328 gtk_tree_path_free(path);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
329
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
330 g_free(text);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
331 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
333 /**
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
334 * This updates the GtkTreeView so that it correctly shows the state
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
335 * we are currently using. It is used when the current state is
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
336 * updated from somewhere other than the GtkStatusBox (from a plugin,
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
337 * or when signing on with the "-n" option, for example). It is
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
338 * also used when the user selects the "Custom..." option.
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
339 *
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
340 * Maybe we could accomplish this by triggering off the mouse and
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
341 * keyboard signals instead of the changed signal?
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
342 */
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
343 static void
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
344 update_to_reflect_current_status(GtkGaimStatusBox *status_box)
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
345 {
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
346 GaimSavedStatus *saved_status;
12595
3169cd6727ad [gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents: 12585
diff changeset
347 guint index;
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
348 const char *message;
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
349
11983
39f2aa4350d8 [gaim-migrate @ 14276]
Tim Ringenbach <marv@pidgin.im>
parents: 11981
diff changeset
350 /* this function is inappropriate for ones with accounts */
39f2aa4350d8 [gaim-migrate @ 14276]
Tim Ringenbach <marv@pidgin.im>
parents: 11981
diff changeset
351 if (status_box->account)
39f2aa4350d8 [gaim-migrate @ 14276]
Tim Ringenbach <marv@pidgin.im>
parents: 11981
diff changeset
352 return;
39f2aa4350d8 [gaim-migrate @ 14276]
Tim Ringenbach <marv@pidgin.im>
parents: 11981
diff changeset
353
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
354 saved_status = gaim_savedstatus_get_current();
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
355
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
356 /*
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
357 * Suppress the "changed" signal because the status
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
358 * was changed programmatically.
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
359 */
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
360 gtk_widget_set_sensitive(GTK_WIDGET(status_box), FALSE);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
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
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
364 else
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
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
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
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
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
386
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
387 message = gaim_savedstatus_get_message(saved_status);
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
388 if (!message || !*message)
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
389 {
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
390 status_box->imhtml_visible = FALSE;
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
391 gtk_widget_hide_all(status_box->vbox);
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
392 }
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
393 else
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
394 {
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
395 status_box->imhtml_visible = TRUE;
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
396 gtk_widget_show_all(status_box->vbox);
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
397
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
398 /*
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
399 * Suppress the "changed" signal because the status
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
400 * was changed programmatically.
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
401 */
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
402 gtk_widget_set_sensitive(GTK_WIDGET(status_box->imhtml), FALSE);
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
403
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
404 gtk_imhtml_clear(GTK_IMHTML(status_box->imhtml));
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
405 gtk_imhtml_clear_formatting(GTK_IMHTML(status_box->imhtml));
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
406 gtk_imhtml_append_text(GTK_IMHTML(status_box->imhtml), message, 0);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
407 gtk_widget_hide(status_box->toolbar);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
408 gtk_widget_hide(status_box->hsep);
12125
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
409 gtk_widget_set_sensitive(GTK_WIDGET(status_box->imhtml), TRUE);
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
410 }
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
411
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
412 /* Stop suppressing the "changed" signal. */
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
413 gtk_widget_set_sensitive(GTK_WIDGET(status_box), TRUE);
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
414 }
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
415
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
416 static void
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
417 gtk_gaim_status_box_regenerate(GtkGaimStatusBox *status_box)
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
418 {
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
419 GaimAccount *account;
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
420 GdkPixbuf *pixbuf, *pixbuf2, *pixbuf3, *pixbuf4;
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
421 GtkIconSize icon_size;
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
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
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
427
12256
0eed625872f7 [gaim-migrate @ 14558]
Sean Egan <seanegan@gmail.com>
parents: 12244
diff changeset
428 /* Unset the model while clearing it */
0eed625872f7 [gaim-migrate @ 14558]
Sean Egan <seanegan@gmail.com>
parents: 12244
diff changeset
429 gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), NULL);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
430 gtk_list_store_clear(status_box->dropdown_store);
12256
0eed625872f7 [gaim-migrate @ 14558]
Sean Egan <seanegan@gmail.com>
parents: 12244
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
433 account = GTK_GAIM_STATUS_BOX(status_box)->account;
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
434 if (account == NULL)
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
435 {
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
436 pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_ONLINE,
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
437 icon_size, "GtkGaimStatusBox");
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
438 pixbuf2 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_AWAY,
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
439 icon_size, "GtkGaimStatusBox");
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
440 pixbuf3 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE,
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
441 icon_size, "GtkGaimStatusBox");
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
442 pixbuf4 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_INVISIBLE,
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
443 icon_size, "GtkGaimStatusBox");
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
444 /* hacks */
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
445 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AVAILABLE, pixbuf, _("Available"), NULL);
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
448 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_OFFLINE, pixbuf3, _("Offline"), NULL);
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
449 gtk_gaim_status_box_add_separator(GTK_GAIM_STATUS_BOX(status_box));
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
450 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_CUSTOM, pixbuf, _("Custom..."), NULL);
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
451 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GTK_GAIM_STATUS_BOX_TYPE_SAVED, pixbuf, _("Saved..."), NULL);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
452
11870
678ef9ad7a0d [gaim-migrate @ 14161]
Mark Doliner <mark@kingant.net>
parents: 11850
diff changeset
453 update_to_reflect_current_status(status_box);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
454
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
455 } else {
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
456 const GList *l;
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
457
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
458 for (l = gaim_account_get_status_types(account); l != NULL; l = l->next)
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
459 {
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
460 GaimStatusType *status_type = (GaimStatusType *)l->data;
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
461
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
462 if (!gaim_status_type_is_user_settable(status_type))
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
463 continue;
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
464
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
465 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box),
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
466 gaim_status_type_get_primitive(status_type),
12080
3b52d94437f3 [gaim-migrate @ 14377]
Mark Doliner <mark@kingant.net>
parents: 12076
diff changeset
467 gaim_gtk_create_prpl_icon_with_status(account, status_type),
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
468 gaim_status_type_get_name(status_type),
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
469 NULL);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
470 }
11967
225e1b274033 [gaim-migrate @ 14259]
Tim Ringenbach <marv@pidgin.im>
parents: 11960
diff changeset
471 update_to_reflect_account_status(status_box, account, gaim_account_get_active_status(account));
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
472 }
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
473 }
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
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
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
484 static int imhtml_remove_focus(GtkWidget *w, GdkEventKey *event, GtkGaimStatusBox *box)
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
485 {
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
486 if (event->keyval == GDK_Tab || event->keyval == GDK_KP_Tab)
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
487 {
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
488 /* If last inserted character is a tab, then remove the focus from here */
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
489 GtkWidget *top = gtk_widget_get_toplevel(w);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
490 g_signal_emit_by_name(G_OBJECT(top), "move_focus",
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
491 (event->state & GDK_SHIFT_MASK) ?
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
492 GTK_DIR_TAB_BACKWARD: GTK_DIR_TAB_FORWARD);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
493 return TRUE;
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
494 }
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
495 if (!box->typing)
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
496 return FALSE;
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
497 gtk_gaim_status_box_pulse_typing(box);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
498 g_source_remove(box->typing);
12309
b3385115815c [gaim-migrate @ 14613]
Mark Doliner <mark@kingant.net>
parents: 12294
diff changeset
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
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
501 return FALSE;
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
502 }
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
503
11753
59ae71ae0b7c [gaim-migrate @ 14044]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11739
diff changeset
504 #if GTK_CHECK_VERSION(2,6,0)
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
505 static gboolean
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
506 dropdown_store_row_separator_func(GtkTreeModel *model,
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
507 GtkTreeIter *iter, gpointer data)
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
508 {
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
509 GtkGaimStatusBoxItemType type;
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
510
11885
163104122522 [gaim-migrate @ 14176]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11870
diff changeset
511 gtk_tree_model_get(model, iter, TYPE_COLUMN, &type, -1);
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
512
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
513 if (type == GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR)
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
514 return TRUE;
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
515
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
516 return FALSE;
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
517 }
11753
59ae71ae0b7c [gaim-migrate @ 14044]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11739
diff changeset
518 #endif
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
519
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
575 current_status_pref_changed_cb(const char *name, GaimPrefType type,
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
576 gpointer val, gpointer data)
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
577 {
12244
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
578 GtkGaimStatusBox *box = data;
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
579 if (box->account)
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
580 update_to_reflect_account_status(box, box->account,
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
581 gaim_account_get_active_status(box->account));
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
582 else
65477e67a712 [gaim-migrate @ 14546]
Tim Ringenbach <marv@pidgin.im>
parents: 12228
diff changeset
583 update_to_reflect_current_status(box);
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
584 }
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
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
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
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
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
600 if (event->button != 1)
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
601 return FALSE;
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
602 gtk_combo_box_popdown(GTK_COMBO_BOX(box));
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
603 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
604 if (!box->imhtml_visible)
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
605 g_signal_emit_by_name(G_OBJECT(box), "changed", NULL, NULL);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
606 return TRUE;
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
607 }
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
608
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
609 static gboolean button_pressed_cb(GtkWidget *widget, GdkEventButton *event, GtkGaimStatusBox *box)
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
610 {
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
611 if (event->button != 1)
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
612 return FALSE;
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
613 gtk_combo_box_popup(GTK_COMBO_BOX(box));
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
614 // Disabled until button_released_cb works
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
615 // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), TRUE);
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
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
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
627 static void
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
628 gtk_gaim_status_box_init (GtkGaimStatusBox *status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
629 {
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
630 GtkWidget *vbox;
11400
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
631 GtkCellRenderer *text_rend;
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
632 GtkCellRenderer *icon_rend;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
633 GtkTextBuffer *buffer;
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
634 GtkTreePath *path;
11400
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
635
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
636 text_rend = gtk_cell_renderer_text_new();
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
637 icon_rend = gtk_cell_renderer_pixbuf_new();
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
638
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
639 status_box->imhtml_visible = FALSE;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
640 status_box->connecting = FALSE;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
641 status_box->typing = FALSE;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
642 status_box->title = NULL;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
643 status_box->pixbuf = NULL;
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
644 status_box->toggle_button = gtk_toggle_button_new();
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
645 status_box->hbox = gtk_hbox_new(FALSE, 6);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
646 status_box->cell_view = gtk_cell_view_new();
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
647 status_box->vsep = gtk_vseparator_new();
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
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);
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
652 gtk_combo_box_set_model(GTK_COMBO_BOX(status_box), GTK_TREE_MODEL(status_box->dropdown_store));
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
653 gtk_cell_view_set_model(GTK_CELL_VIEW(status_box->cell_view), GTK_TREE_MODEL(status_box->store));
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
654 gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(status_box), 0);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
655 gtk_list_store_append(status_box->store, &(status_box->iter));
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
661 gtk_container_add(GTK_CONTAINER(status_box->toggle_button), status_box->hbox);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
662 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->cell_view, TRUE, TRUE, 0);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
663 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->vsep, FALSE, FALSE, 0);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
664 gtk_box_pack_start(GTK_BOX(status_box->hbox), status_box->arrow, FALSE, FALSE, 0);
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
665 gtk_widget_show_all(status_box->toggle_button);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
666 #if GTK_CHECK_VERSION(2,4,0)
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
667 gtk_button_set_focus_on_click(GTK_BUTTON(status_box->toggle_button), FALSE);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
668 #endif
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
669 status_box->icon_rend = gtk_cell_renderer_pixbuf_new();
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
670 status_box->text_rend = gtk_cell_renderer_text_new();
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
671
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
672 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), icon_rend, FALSE);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
673 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box), text_rend, TRUE);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
674 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), icon_rend, "pixbuf", ICON_COLUMN, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
675 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box), text_rend, "markup", TEXT_COLUMN, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
676
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
677 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, FALSE);
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
678 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, TRUE);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
679 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->icon_rend, "pixbuf", ICON_COLUMN, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
680 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), status_box->text_rend, "markup", TEXT_COLUMN, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
681
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
682 g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 6, NULL);
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
683
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
684 status_box->vbox = gtk_vbox_new(0, FALSE);
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
685 vbox = gtk_vbox_new(0,FALSE);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
686 status_box->imhtml = gtk_imhtml_new(NULL, NULL);
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
687 status_box->toolbar = gtk_imhtmltoolbar_new();
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
688 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(status_box->toolbar), status_box->imhtml);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
689 status_box->hsep = gtk_hseparator_new();
12286
255e6912607b [gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12275
diff changeset
690
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
693 g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event",
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
694 G_CALLBACK(button_pressed_cb), status_box);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
695 g_signal_connect(G_OBJECT(status_box->toggle_button), "button-release-event",
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
703 g_signal_connect(G_OBJECT(status_box->imhtml), "key_press_event",
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
704 G_CALLBACK(imhtml_remove_focus), status_box);
11562
9f521a61ef58 [gaim-migrate @ 13828]
Sean Egan <seanegan@gmail.com>
parents: 11523
diff changeset
705 g_signal_connect_swapped(G_OBJECT(status_box->imhtml), "message_send", G_CALLBACK(remove_typing_cb), status_box);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
706 gtk_imhtml_set_editable(GTK_IMHTML(status_box->imhtml), TRUE);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
707 gtk_widget_set_parent(status_box->vbox, GTK_WIDGET(status_box));
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
708 gtk_widget_set_parent(status_box->toggle_button, GTK_WIDGET(status_box));
12275
0d6aeb831975 [gaim-migrate @ 14579]
Sean Egan <seanegan@gmail.com>
parents: 12274
diff changeset
709 GTK_BIN(status_box)->child = status_box->toggle_button;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
710 status_box->sw = gtk_scrolled_window_new(NULL, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
711 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
712 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(status_box->sw), GTK_SHADOW_IN);
12320
c2867c4ddcd3 [gaim-migrate @ 14624]
Stu Tomlinson <stu@nosnilmot.com>
parents: 12309
diff changeset
713 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(status_box->sw), vbox);
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
714 gtk_box_pack_start(GTK_BOX(vbox), status_box->toolbar, FALSE, FALSE, 0);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
715 gtk_box_pack_start(GTK_BOX(vbox), status_box->hsep, FALSE, FALSE, 0);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
716 gtk_box_pack_start(GTK_BOX(vbox), status_box->imhtml, TRUE, TRUE, 0);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
717
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
718 gtk_box_pack_start(GTK_BOX(status_box->vbox), status_box->sw, TRUE, TRUE, 0);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
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
0d793b594a23 [gaim-migrate @ 14141]
Nathan Walp <nwalp@pidgin.im>
parents: 11836
diff changeset
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
0d793b594a23 [gaim-migrate @ 14141]
Nathan Walp <nwalp@pidgin.im>
parents: 11836
diff changeset
725 #endif
0d793b594a23 [gaim-migrate @ 14141]
Nathan Walp <nwalp@pidgin.im>
parents: 11836
diff changeset
726
12595
3169cd6727ad [gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents: 12585
diff changeset
727 cache_pixbufs(status_box);
11732
03c813a42c76 [gaim-migrate @ 14023]
Tim Ringenbach <marv@pidgin.im>
parents: 11729
diff changeset
728 gtk_gaim_status_box_regenerate(status_box);
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
729
12123
355c7acbb61d [gaim-migrate @ 14423]
Mark Doliner <mark@kingant.net>
parents: 12103
diff changeset
730 gaim_prefs_connect_callback(status_box, "/core/savedstatus/current",
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
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
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
735 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
736
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
737 static void
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
738 gtk_gaim_status_box_size_request(GtkWidget *widget,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
739 GtkRequisition *requisition)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
740 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
741 GtkRequisition box_req;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
742 combo_box_size_request(widget, requisition);
12103
f746fb528dc9 [gaim-migrate @ 14400]
Mark Doliner <mark@kingant.net>
parents: 12102
diff changeset
743 requisition->height += 6;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
744
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
745 gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->vbox, &box_req);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
746 if (box_req.height > 1)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
749 if (GTK_GAIM_STATUS_BOX(widget)->typing) {
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
750 gtk_widget_size_request(GTK_GAIM_STATUS_BOX(widget)->toolbar, &box_req);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
751 requisition->height = requisition->height + box_req.height;
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
752 }
12286
255e6912607b [gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents: 12275
diff changeset
753
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
754 requisition->width = 1;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
755 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
756
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
757 static void
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
758 gtk_gaim_status_box_size_allocate(GtkWidget *widget,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
759 GtkAllocation *allocation)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
760 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
761 GtkRequisition req = {0,0};
11400
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
762 GtkAllocation parent_alc, box_alc;
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
763
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
764 parent_alc = *allocation;
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
765 box_alc = *allocation;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
766 combo_box_size_request(widget, &req);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
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
383226e075f2 [gaim-migrate @ 14397]
Mark Doliner <mark@kingant.net>
parents: 12080
diff changeset
769 box_alc.y = box_alc.y + req.height + 9;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
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
383226e075f2 [gaim-migrate @ 14397]
Mark Doliner <mark@kingant.net>
parents: 12080
diff changeset
773
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
774 gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->vbox, &box_alc);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
775
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
383226e075f2 [gaim-migrate @ 14397]
Mark Doliner <mark@kingant.net>
parents: 12080
diff changeset
780
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
781 combo_box_size_allocate(widget, &parent_alc);
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
782 gtk_widget_size_allocate((GTK_GAIM_STATUS_BOX(widget))->toggle_button, &parent_alc);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
783 widget->allocation = *allocation;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
784 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
785
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
786 static gboolean
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
787 gtk_gaim_status_box_expose_event(GtkWidget *widget,
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
788 GdkEventExpose *event)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
789 {
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
790 GtkGaimStatusBox *status_box = GTK_GAIM_STATUS_BOX(widget);
12262
6e55515e4b39 [gaim-migrate @ 14564]
Sean Egan <seanegan@gmail.com>
parents: 12256
diff changeset
791 gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->vbox, event);
12275
0d6aeb831975 [gaim-migrate @ 14579]
Sean Egan <seanegan@gmail.com>
parents: 12274
diff changeset
792 gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->toggle_button, event);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
793 return FALSE;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
794 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
795
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
796 static void
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
797 gtk_gaim_status_box_forall(GtkContainer *container,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
798 gboolean include_internals,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
799 GtkCallback callback,
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
800 gpointer callback_data)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
801 {
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
802 GtkGaimStatusBox *status_box = GTK_GAIM_STATUS_BOX (container);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
803
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
804 if (include_internals)
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
805 {
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
806 (* callback) (status_box->vbox, callback_data);
12275
0d6aeb831975 [gaim-migrate @ 14579]
Sean Egan <seanegan@gmail.com>
parents: 12274
diff changeset
807 (* callback) (status_box->toggle_button, callback_data);
0d6aeb831975 [gaim-migrate @ 14579]
Sean Egan <seanegan@gmail.com>
parents: 12274
diff changeset
808 (* callback) (status_box->arrow, callback_data);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
809 }
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
810
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
811 combo_box_forall(container, include_internals, callback, callback_data);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
812 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
813
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
814 GtkWidget *
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
815 gtk_gaim_status_box_new()
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
816 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
817 return g_object_new(GTK_GAIM_TYPE_STATUS_BOX, NULL);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
818 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
819
11499
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
820 GtkWidget *
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
821 gtk_gaim_status_box_new_with_account(GaimAccount *account)
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
822 {
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
823 return g_object_new(GTK_GAIM_TYPE_STATUS_BOX, "account", account, NULL);
6f9fc83ee25c [gaim-migrate @ 13744]
Tim Ringenbach <marv@pidgin.im>
parents: 11400
diff changeset
824 }
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
825
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
826 void
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
827 gtk_gaim_status_box_add(GtkGaimStatusBox *status_box, GtkGaimStatusBoxItemType type, GdkPixbuf *pixbuf, const char *text, const char *sec_text)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
828 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
829 GtkTreeIter iter;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
830 char *t;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
831
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
832 if (sec_text) {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
833 char aa_color[8];
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
834 GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(status_box));
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
835 snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x",
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
836 style->text_aa[GTK_STATE_NORMAL].red >> 8,
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
837 style->text_aa[GTK_STATE_NORMAL].green >> 8,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
838 style->text_aa[GTK_STATE_NORMAL].blue >> 8);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
839 t = g_strdup_printf("%s\n<span color=\"%s\">%s</span>", text, aa_color, sec_text);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
840 } else {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
841 t = g_strdup(text);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
842 }
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
843
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
844 gtk_list_store_append(status_box->dropdown_store, &iter);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
845 gtk_list_store_set(status_box->dropdown_store, &iter,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
846 TYPE_COLUMN, type,
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
847 ICON_COLUMN, pixbuf,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
848 TEXT_COLUMN, t,
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
849 TITLE_COLUMN, text,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
850 DESC_COLUMN, sec_text,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
851 -1);
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
852 g_free(t);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
853 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
854
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
855 void
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
856 gtk_gaim_status_box_add_separator(GtkGaimStatusBox *status_box)
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
857 {
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
858 /* Don't do anything unless GTK actually supports
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
859 * gtk_combo_box_set_row_separator_func */
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
860 #if GTK_CHECK_VERSION(2,6,0)
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
861 GtkTreeIter iter;
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
862
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
863 gtk_list_store_append(status_box->dropdown_store, &iter);
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
864 gtk_list_store_set(status_box->dropdown_store, &iter,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
865 TYPE_COLUMN, GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR,
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
866 -1);
11756
f54c680d835c [gaim-migrate @ 14047]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11755
diff changeset
867 #endif
11738
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
868 }
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
869
992d49cf2b92 [gaim-migrate @ 14029]
Mark Doliner <mark@kingant.net>
parents: 11732
diff changeset
870 void
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
871 gtk_gaim_status_box_set_error(GtkGaimStatusBox *status_box, const gchar *error)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
872 {
11523
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11499
diff changeset
873 if (status_box->error)
1116993aadd2 [gaim-migrate @ 13771]
Sean Egan <seanegan@gmail.com>
parents: 11499
diff changeset
874 g_free(status_box->error);
11891
f1ada7870fae [gaim-migrate @ 14182]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11885
diff changeset
875 status_box->error = NULL;
f1ada7870fae [gaim-migrate @ 14182]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11885
diff changeset
876 if (error != NULL)
f1ada7870fae [gaim-migrate @ 14182]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11885
diff changeset
877 status_box->error = g_strdup(error);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
878 gtk_gaim_status_box_refresh(status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
879 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
880
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
881 void
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
882 gtk_gaim_status_box_set_connecting(GtkGaimStatusBox *status_box, gboolean connecting)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
883 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
884 if (!status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
885 return;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
886 status_box->connecting = connecting;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
887 gtk_gaim_status_box_refresh(status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
888 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
889
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
890 void
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
891 gtk_gaim_status_box_pulse_connecting(GtkGaimStatusBox *status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
892 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
893 if (!status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
894 return;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
895 if (status_box->connecting_index == 3)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
896 status_box->connecting_index = 0;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
897 else
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
898 status_box->connecting_index++;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
899 gtk_gaim_status_box_refresh(status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
900 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
901
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
902 static void
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
903 gtk_gaim_status_box_pulse_typing(GtkGaimStatusBox *status_box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
904 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
905 if (status_box->typing_index == 3)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
906 status_box->typing_index = 0;
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
907 else
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
908 status_box->typing_index++;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
909 gtk_gaim_status_box_refresh(status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
910 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
911
11993
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
912 static GaimStatusType
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
913 *find_status_type_by_index(const GaimAccount *account, gint active)
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
914 {
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
915 const GList *l = gaim_account_get_status_types(account);
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
916 gint i;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
917
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
918 for (i = 0; l; l = l->next) {
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
919 GaimStatusType *status_type = l->data;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
920 if (!gaim_status_type_is_user_settable(status_type))
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
921 continue;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
922
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
923 if (active == i)
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
924 return status_type;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
925 i++;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
926 }
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
927
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
928 return NULL;
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
929 }
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
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
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
943 static void
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
944 activate_currently_selected_status(GtkGaimStatusBox *status_box)
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
945 {
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
946 GtkGaimStatusBoxItemType type;
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
947 gchar *title;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
948 GtkTreeIter iter;
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
949 char *message;
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
950 GaimSavedStatus *saved_status;
12076
4fb1edd43f45 [gaim-migrate @ 14373]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12075
diff changeset
951 gboolean changed = TRUE;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
952
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
953 if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter))
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
954 return;
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
955 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
956 TYPE_COLUMN, &type,
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
957 TITLE_COLUMN, &title, -1);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
958 message = gtk_gaim_status_box_get_message(status_box);
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
966 /*
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
967 * If the currently selected status is "Custom..." or
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
968 * "Saved..." then do nothing. Custom statuses are
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
969 * activated elsewhere, and we update the status_box
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
970 * accordingly by monitoring the preference
12123
355c7acbb61d [gaim-migrate @ 14423]
Mark Doliner <mark@kingant.net>
parents: 12103
diff changeset
971 * "/core/savedstatus/current" and then calling
11954
351f4dd75718 [gaim-migrate @ 14245]
Mark Doliner <mark@kingant.net>
parents: 11951
diff changeset
972 * update_to_reflect_current_status()
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
973 */
12221
152748df85cf [gaim-migrate @ 14523]
Richard Laager <rlaager@wiktel.com>
parents: 12125
diff changeset
974 if (type >= GAIM_STATUS_NUM_PRIMITIVES)
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
975 return;
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
976
11981
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
977 if (status_box->account) {
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
978 gint active;
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
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
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
984
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
985 g_object_get(G_OBJECT(status_box), "active", &active, NULL);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
986
11993
aa77da6c7f21 [gaim-migrate @ 14286]
Tim Ringenbach <marv@pidgin.im>
parents: 11991
diff changeset
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
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
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
355c7acbb61d [gaim-migrate @ 14423]
Mark Doliner <mark@kingant.net>
parents: 12103
diff changeset
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
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
1006 } else {
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
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
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
1010 saved_status = gaim_savedstatus_get_current();
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
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
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
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
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
1019 /* Create a new transient saved status */
3c1bac709234 [gaim-migrate @ 14425]
Mark Doliner <mark@kingant.net>
parents: 12123
diff changeset
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
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
1027 }
11627
5dbefebb20cb [gaim-migrate @ 13902]
Tim Ringenbach <marv@pidgin.im>
parents: 11593
diff changeset
1028
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1029 g_free(title);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1030 g_free(message);
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1031 }
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1032
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1033 static void remove_typing_cb(GtkGaimStatusBox *status_box)
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1034 {
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1035 activate_currently_selected_status(status_box);
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1036
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1037 g_source_remove(status_box->typing);
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1038 status_box->typing = 0;
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1039 gtk_gaim_status_box_refresh(status_box);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1040 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1041
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1042 static void gtk_gaim_status_box_changed(GtkComboBox *box)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1043 {
11400
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
1044 GtkGaimStatusBox *status_box;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1045 GtkTreeIter iter;
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1046 GtkGaimStatusBoxItemType type;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1047 char *text, *sec_text;
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1048 GdkPixbuf *pixbuf;
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1049 GList *accounts = NULL, *node;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1050
11400
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
1051 status_box = GTK_GAIM_STATUS_BOX(box);
62db025d3eb0 [gaim-migrate @ 13635]
Mark Doliner <mark@kingant.net>
parents: 11347
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1055 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter,
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1056 TYPE_COLUMN, &type,
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1057 TITLE_COLUMN, &text,
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
1058 DESC_COLUMN, &sec_text, ICON_COLUMN, &pixbuf,
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1059 -1);
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1060 if (status_box->title)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1061 g_free(status_box->title);
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1062 status_box->title = text;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1063 if (status_box->desc && sec_text)
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1064 g_free(status_box->desc);
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1065 status_box->desc = sec_text;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1066 if (status_box->pixbuf)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1067 g_object_unref(status_box->pixbuf);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1068 status_box->pixbuf = pixbuf;
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1069 if (status_box->typing)
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1070 g_source_remove(status_box->typing);
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1071 status_box->typing = 0;
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
1072 gtk_widget_hide(status_box->hsep);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
1073 gtk_widget_hide(status_box->toolbar);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
1074
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1075 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box)))
11729
8a981a601242 [gaim-migrate @ 14020]
Mark Doliner <mark@kingant.net>
parents: 11724
diff changeset
1076 {
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1077 if (type == GTK_GAIM_STATUS_BOX_TYPE_CUSTOM)
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1078 {
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1079 gaim_gtk_status_editor_show(NULL);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1080 update_to_reflect_current_status(status_box);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1081 return;
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1082 }
11729
8a981a601242 [gaim-migrate @ 14020]
Mark Doliner <mark@kingant.net>
parents: 11724
diff changeset
1083
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1084 if (type == GTK_GAIM_STATUS_BOX_TYPE_SAVED)
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1085 {
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1086 gaim_gtk_status_window_show();
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1087 update_to_reflect_current_status(status_box);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1088 return;
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1089 }
11729
8a981a601242 [gaim-migrate @ 14020]
Mark Doliner <mark@kingant.net>
parents: 11724
diff changeset
1090 }
8a981a601242 [gaim-migrate @ 14020]
Mark Doliner <mark@kingant.net>
parents: 11724
diff changeset
1091
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1092 /*
11755
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1093 * Show the message box whenever 'type' allows for a
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1094 * message attribute on any protocol that is enabled,
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1095 * or our protocol, if we have account set
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1096 */
11960
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1097 if (status_box->account)
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1098 accounts = g_list_prepend(accounts, status_box->account);
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1099 else
082a2a9aa998 [gaim-migrate @ 14251]
Tim Ringenbach <marv@pidgin.im>
parents: 11954
diff changeset
1100 accounts = gaim_accounts_get_all_active();
11755
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1101 status_box->imhtml_visible = FALSE;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1102 for (node = accounts; node != NULL; node = node->next)
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1103 {
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1104 GaimAccount *account;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1105 GaimStatusType *status_type;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1106
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1107 account = node->data;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1108 status_type = gaim_account_get_status_type_with_primitive(account, type);
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1109 if ((status_type != NULL) &&
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1110 (gaim_status_type_get_attr(status_type, "message") != NULL))
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1111 {
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1112 status_box->imhtml_visible = TRUE;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1113 break;
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1114 }
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1115 }
50496ebef401 [gaim-migrate @ 14046]
Mark Doliner <mark@kingant.net>
parents: 11753
diff changeset
1116 g_list_free(accounts);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1117
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1118 if (status_box->imhtml_visible)
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1119 {
12585
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1120 GtkTextBuffer *buf;
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1121 GtkTextIter start, end;
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1122 gtk_widget_show_all(status_box->vbox);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
1123 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) {
12309
b3385115815c [gaim-migrate @ 14613]
Mark Doliner <mark@kingant.net>
parents: 12294
diff changeset
1124 status_box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, status_box);
12274
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
1125 } else {
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
1126 gtk_widget_hide(status_box->toolbar);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
1127 gtk_widget_hide(status_box->hsep);
3d9ef8a98074 [gaim-migrate @ 14578]
Sean Egan <seanegan@gmail.com>
parents: 12269
diff changeset
1128 }
12585
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1129 gtk_widget_grab_focus(status_box->imhtml);
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1130 buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(status_box->imhtml));
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1131 gtk_text_buffer_get_start_iter(buf, &start);
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1132 gtk_text_buffer_get_end_iter(buf, &end);
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1133 gtk_text_buffer_move_mark_by_name(buf, "insert", &end);
7bbd410442cb [gaim-migrate @ 14913]
Sean Egan <seanegan@gmail.com>
parents: 12460
diff changeset
1134 gtk_text_buffer_move_mark_by_name(buf, "selection_bound", &start);
11654
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1135 }
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1136 else
bf6ba37db13b [gaim-migrate @ 13938]
Mark Doliner <mark@kingant.net>
parents: 11638
diff changeset
1137 {
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1138 gtk_widget_hide_all(status_box->vbox);
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1139 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box)))
11981
053bb5ad040b [gaim-migrate @ 14274]
Tim Ringenbach <marv@pidgin.im>
parents: 11967
diff changeset
1140 activate_currently_selected_status(status_box); /* This is where we actually set the status */
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1141 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1142 gtk_gaim_status_box_refresh(status_box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1143 }
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1144
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1145 static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data)
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1146 {
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1147 GtkGaimStatusBox *box = (GtkGaimStatusBox*)data;
11951
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1148 if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(box)))
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1149 {
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1150 if (box->typing) {
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1151 gtk_gaim_status_box_pulse_typing(box);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1152 g_source_remove(box->typing);
b6fa01513d76 [gaim-migrate @ 14242]
Mark Doliner <mark@kingant.net>
parents: 11891
diff changeset
1153 }
12309
b3385115815c [gaim-migrate @ 14613]
Mark Doliner <mark@kingant.net>
parents: 12294
diff changeset
1154 box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, box);
12269
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
1155 gtk_widget_show(box->hsep);
f1515af27443 [gaim-migrate @ 14571]
Sean Egan <seanegan@gmail.com>
parents: 12262
diff changeset
1156 gtk_widget_show(box->toolbar);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
1157 }
10643
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1158 gtk_gaim_status_box_refresh(box);
868aafbe859b [gaim-migrate @ 12153]
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1159 }
10649
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
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
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1166 GtkGaimStatusBoxItemType gtk_gaim_status_box_get_active_type(GtkGaimStatusBox *status_box)
10649
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1167 {
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1168 GtkTreeIter iter;
11739
a25be0e70a67 [gaim-migrate @ 14030]
Mark Doliner <mark@kingant.net>
parents: 11738
diff changeset
1169 GtkGaimStatusBoxItemType type;
10649
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1170 gtk_combo_box_get_active_iter(GTK_COMBO_BOX(status_box), &iter);
10861
42c16b293867 [gaim-migrate @ 12544]
Mark Doliner <mark@kingant.net>
parents: 10749
diff changeset
1171 gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter,
10649
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1172 TYPE_COLUMN, &type, -1);
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1173 return type;
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1174 }
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1175
11638
3a05b53a589e [gaim-migrate @ 13914]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11627
diff changeset
1176 char *gtk_gaim_status_box_get_message(GtkGaimStatusBox *status_box)
10649
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1177 {
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1178 if (status_box->imhtml_visible)
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1179 return gtk_imhtml_get_markup(GTK_IMHTML(status_box->imhtml));
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1180 else
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1181 return NULL;
3353656c119e [gaim-migrate @ 12167]
Sean Egan <seanegan@gmail.com>
parents: 10643
diff changeset
1182 }