pidgin/pidginmessage.c

Mon, 13 Jan 2025 02:36:10 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 13 Jan 2025 02:36:10 -0600
changeset 43136
36eba703e2b9
parent 43125
06367e26ef2f
child 43141
99855a04b447
permissions
-rw-r--r--

Add some additional methods to Purple.ProtocolConversation

This adds virtual functions for setting the title and description as well as
some additional implements methods that we were missing.

Testing Done:
Ran the tests under valgrind and called in the turtles.

Bugs closed: PIDGIN-18026

Reviewed at https://reviews.imfreedom.org/r/3738/

43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "pidginmessage.h"
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidgincolor.h"
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 struct _PidginMessage {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 GtkBox parent;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 PurpleMessage *message;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 };
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 enum {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 PROP_0,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 PROP_MESSAGE,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 N_PROPERTIES,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 };
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 * Helpers
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 *****************************************************************************/
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 /**
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 * pidgin_message_set_tooltip_for_timestamp: (skip)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 * @tooltip: The tooltip to update.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 * @timestamp: The timestamp to set.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 * Updates @tooltip to display @timestamp. This is meant to be called from
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 * a GtkWidget::query-tooltip signal and its return value should be returned
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 * from that handler.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 * Returns: %TRUE if a tooltip was set, otherwise %FALSE.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 * Since: 3.0
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 */
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 static gboolean
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 pidgin_message_set_tooltip_for_timestamp(GtkTooltip *tooltip,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 GDateTime *timestamp)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 GDateTime *local = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 char *text = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 if(timestamp == NULL) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 return FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 local = g_date_time_to_local(timestamp);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 text = g_date_time_format(local, "%c");
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 g_clear_pointer(&local, g_date_time_unref);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 gtk_tooltip_set_text(tooltip, text);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 g_clear_pointer(&text, g_free);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 return TRUE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 * Callbacks
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 *****************************************************************************/
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 static char *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 pidgin_message_get_author(G_GNUC_UNUSED GObject *self, PurpleMessage *message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 G_GNUC_UNUSED gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 if(PURPLE_IS_MESSAGE(message)) {
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43094
diff changeset
86 PurpleConversationMember *author = NULL;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 author = purple_message_get_author(message);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43094
diff changeset
90 if(PURPLE_IS_CONVERSATION_MEMBER(author)) {
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43094
diff changeset
91 return g_strdup(purple_conversation_member_get_name_for_display(author));
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 return g_strdup("");
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 static PangoAttrList *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 pidgin_message_get_author_attributes(G_GNUC_UNUSED GObject *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 PurpleMessage *message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 G_GNUC_UNUSED gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 GdkRGBA rgba;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 PangoAttrList *attrs = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 gboolean color_valid = FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 const char *custom_color = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 if(!PURPLE_IS_MESSAGE(message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 return NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 custom_color = purple_message_get_author_name_color(message);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 if(!purple_strempty(custom_color)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 color_valid = gdk_rgba_parse(&rgba, custom_color);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 if(!color_valid) {
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43094
diff changeset
118 PurpleConversationMember *author = NULL;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 const char *name_for_display = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 author = purple_message_get_author(message);
43118
d7965104ef85 Fix some PURPLE_IS_CONVERSATION_MEMEBER assertion failures
Gary Kramlich <grim@reaperworld.com>
parents: 43100
diff changeset
122 if(PURPLE_IS_CONVERSATION_MEMBER(author)) {
d7965104ef85 Fix some PURPLE_IS_CONVERSATION_MEMEBER assertion failures
Gary Kramlich <grim@reaperworld.com>
parents: 43100
diff changeset
123 name_for_display = purple_conversation_member_get_name_for_display(author);
d7965104ef85 Fix some PURPLE_IS_CONVERSATION_MEMEBER assertion failures
Gary Kramlich <grim@reaperworld.com>
parents: 43100
diff changeset
124 }
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 pidgin_color_calculate_for_text(name_for_display, &rgba);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 color_valid = TRUE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 attrs = pango_attr_list_new();
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 if(color_valid) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 PangoAttribute *attr = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 attr = pango_attr_foreground_new(0xFFFF * rgba.red,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 0xFFFF * rgba.green,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 0xFFFF * rgba.blue);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 pango_attr_list_insert(attrs, attr);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 return attrs;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 static PangoAttrList *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 pidgin_message_get_message_attributes(G_GNUC_UNUSED GObject *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 PurpleMessage *message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 G_GNUC_UNUSED gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 PangoAttrList *attrs = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 if(!PURPLE_IS_MESSAGE(message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 return NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 attrs = pango_attr_list_new();
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 if(purple_message_get_action(message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 PangoAttribute *attr = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 attr = pango_attr_style_new(PANGO_STYLE_ITALIC);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 pango_attr_list_insert(attrs, attr);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 return attrs;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 static char *
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
169 pidgin_message_get_timestamp_string(G_GNUC_UNUSED GObject *self,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
170 PurpleMessage *message,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
171 G_GNUC_UNUSED gpointer data)
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
172 {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
173 GDateTime *timestamp = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
174
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
175 if(!PURPLE_IS_MESSAGE(message)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
176 return NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
177 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
178
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
179 timestamp = purple_message_get_timestamp(message);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
180 if(timestamp != NULL) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
181 GDateTime *local = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
182 char *ret = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
183
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
184 local = g_date_time_to_local(timestamp);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
185 ret = g_date_time_format(local, "%I:%M %p");
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
186 g_date_time_unref(local);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
187
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
188 return ret;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
189 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
190
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
191 return NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
192 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
193
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
194 static char *
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 pidgin_message_process_message_contents_cb(G_GNUC_UNUSED GObject *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 const char *contents,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 G_GNUC_UNUSED gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 char *escaped = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 char *linkified = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 escaped = g_markup_escape_text(contents, -1);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 linkified = purple_markup_linkify(escaped);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 g_free(escaped);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 return linkified;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 static gboolean
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
210 pidgin_message_query_tooltip_contents_cb(GtkWidget *self,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
211 G_GNUC_UNUSED gint x,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
212 G_GNUC_UNUSED gint y,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
213 G_GNUC_UNUSED gboolean keyboard_mode,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
214 GtkTooltip *tooltip,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
215 G_GNUC_UNUSED gpointer data)
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
216 {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
217 const char *uri = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
218
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
219 uri = gtk_label_get_current_uri(GTK_LABEL(self));
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
220 if(purple_strempty(uri)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
221 return FALSE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
222 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
223
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
224 gtk_tooltip_set_text(tooltip, uri);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
225
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
226 return TRUE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
227 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
228
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
229 static gboolean
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 pidgin_message_query_tooltip_edited_cb(G_GNUC_UNUSED GtkWidget *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 G_GNUC_UNUSED gint x,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 G_GNUC_UNUSED gint y,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 G_GNUC_UNUSED gboolean keyboard_mode,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 GtkTooltip *tooltip,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 {
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
237 PidginMessage *pidgin_message = data;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
238 PurpleMessage *purple_message = NULL;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 GDateTime *timestamp = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
241 if(!PIDGIN_IS_MESSAGE(pidgin_message)) {
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 return FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
245 purple_message = pidgin_message_get_message(pidgin_message);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
246 if(!PURPLE_IS_MESSAGE(purple_message)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
247 return FALSE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
248 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
249
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
250 timestamp = purple_message_get_edited_at(purple_message);
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 return pidgin_message_set_tooltip_for_timestamp(tooltip, timestamp);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 static gboolean
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 pidgin_message_query_tooltip_timestamp_cb(G_GNUC_UNUSED GtkWidget *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 G_GNUC_UNUSED gint x,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 G_GNUC_UNUSED gint y,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 G_GNUC_UNUSED gboolean keyboard_mode,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 GtkTooltip *tooltip,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 PidginMessage *message = data;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 GDateTime *timestamp = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 if(!PURPLE_IS_MESSAGE(message->message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 return FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 timestamp = purple_message_get_timestamp(message->message);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 return pidgin_message_set_tooltip_for_timestamp(tooltip, timestamp);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275
43125
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
276 static gboolean
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
277 pidgin_message_show_badges_cb(G_GNUC_UNUSED GObject *self,
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
278 PurpleMessage *message,
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
279 G_GNUC_UNUSED gpointer data)
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
280 {
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
281 if(PURPLE_IS_MESSAGE(message)) {
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
282 PurpleConversationMember *member = NULL;
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
283
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
284 member = purple_message_get_author(message);
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
285 if(PURPLE_IS_CONVERSATION_MEMBER(member)) {
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
286 PurpleBadges *badges = NULL;
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
287 guint n_badges = 0;
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
288
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
289 badges = purple_conversation_member_get_badges(member);
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
290 n_badges = g_list_model_get_n_items(G_LIST_MODEL(badges));
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
291
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
292 if(n_badges > 0) {
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
293 return TRUE;
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
294 }
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
295 }
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
296 }
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
297
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
298 return FALSE;
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
299 }
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
300
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 * GObject Implementation
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 *****************************************************************************/
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 G_DEFINE_FINAL_TYPE(PidginMessage, pidgin_message, GTK_TYPE_BOX)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 pidgin_message_finalize(GObject *obj) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 PidginMessage *message = PIDGIN_MESSAGE(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 g_clear_object(&message->message);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 G_OBJECT_CLASS(pidgin_message_parent_class)->finalize(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 pidgin_message_get_property(GObject *obj, guint param_id, GValue *value,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317 GParamSpec *pspec)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319 PidginMessage *message = PIDGIN_MESSAGE(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321 switch(param_id) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
322 case PROP_MESSAGE:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323 g_value_set_object(value, pidgin_message_get_message(message));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325 default:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 pidgin_message_set_property(GObject *obj, guint param_id, const GValue *value,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 GParamSpec *pspec)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 PidginMessage *message = PIDGIN_MESSAGE(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 switch(param_id) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 case PROP_MESSAGE:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 pidgin_message_set_message(message, g_value_get_object(value));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 default:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 pidgin_message_init(PidginMessage *message) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 gtk_widget_init_template(GTK_WIDGET(message));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 pidgin_message_class_init(PidginMessageClass *klass) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 obj_class->finalize = pidgin_message_finalize;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 obj_class->get_property = pidgin_message_get_property;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 obj_class->set_property = pidgin_message_set_property;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 /**
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 * PidginMessage:message:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 * The [class@Purple.Message] to be displayed.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 * Since: 3.0
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 */
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 properties[PROP_MESSAGE] = g_param_spec_object(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369 "message", NULL, NULL,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 PURPLE_TYPE_MESSAGE,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 gtk_widget_class_set_template_from_resource(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 "/im/pidgin/Pidgin3/Conversations/message.ui"
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 );
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 pidgin_message_get_author);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 pidgin_message_get_author_attributes);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 pidgin_message_get_message_attributes);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 gtk_widget_class_bind_template_callback(widget_class,
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
387 pidgin_message_get_timestamp_string);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
388 gtk_widget_class_bind_template_callback(widget_class,
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 pidgin_message_process_message_contents_cb);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 gtk_widget_class_bind_template_callback(widget_class,
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
391 pidgin_message_query_tooltip_contents_cb);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
392 gtk_widget_class_bind_template_callback(widget_class,
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 pidgin_message_query_tooltip_edited_cb);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 pidgin_message_query_tooltip_timestamp_cb);
43125
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
396 gtk_widget_class_bind_template_callback(widget_class,
06367e26ef2f Hide the badges on Pidgin.Message when the user doesn't have any
Gary Kramlich <grim@reaperworld.com>
parents: 43118
diff changeset
397 pidgin_message_show_badges_cb);
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 * Public API
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 *****************************************************************************/
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 GtkWidget *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 pidgin_message_new(PurpleMessage *message) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 return g_object_new(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 PIDGIN_TYPE_MESSAGE,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 "message", message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408 NULL);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
410
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 PurpleMessage *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412 pidgin_message_get_message(PidginMessage *message) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413 g_return_val_if_fail(PIDGIN_IS_MESSAGE(message), NULL);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
414
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
415 return message->message;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
416 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
417
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
418 void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
419 pidgin_message_set_message(PidginMessage *pidgin_message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
420 PurpleMessage *purple_message)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
421 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
422 g_return_if_fail(PIDGIN_IS_MESSAGE(pidgin_message));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
423
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
424 if(g_set_object(&pidgin_message->message, purple_message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
425 g_object_notify_by_pspec(G_OBJECT(pidgin_message),
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
426 properties[PROP_MESSAGE]);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
427 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
428 }

mercurial