pidgin/pidginmessage.c

Sun, 13 Jul 2025 00:01:48 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Sun, 13 Jul 2025 00:01:48 -0500
changeset 43285
acde304cf24c
parent 43277
286947581188
permissions
-rw-r--r--

Fix some Since tags

These either have an unnecessary micro version, or are missing altogether.

Testing Done:
Ran `girlint.xsl` on the `Purple-3.0.gir` and `Pidgin-3.0.gir`.

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

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 struct _PidginMessage {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 GtkBox parent;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 PurpleMessage *message;
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
29 gboolean show_formatting;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 };
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 enum {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 PROP_0,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 PROP_MESSAGE,
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
35 PROP_SHOW_FORMATTING,
43093
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 PangoAttrList *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 pidgin_message_get_message_attributes(G_GNUC_UNUSED GObject *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 PurpleMessage *message,
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
84 gboolean show_formatting,
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 G_GNUC_UNUSED gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 PangoAttrList *attrs = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 if(!PURPLE_IS_MESSAGE(message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 return NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
93 if(show_formatting) {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
94 PangoAttrList *message_attrs = NULL;
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
95
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
96 message_attrs = purple_message_get_attributes(message);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
97 attrs = pango_attr_list_copy(message_attrs);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
98 } else {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
99 attrs = pango_attr_list_new();
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
100 }
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 if(purple_message_get_action(message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 PangoAttribute *attr = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 attr = pango_attr_style_new(PANGO_STYLE_ITALIC);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 pango_attr_list_insert(attrs, attr);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109
43197
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
110 if(purple_message_get_event(message)) {
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
111 PangoAttribute *attr = NULL;
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
112
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
113 attr = pango_attr_style_new(PANGO_STYLE_ITALIC);
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
114 pango_attr_list_insert(attrs, attr);
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
115
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
116 attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
117 pango_attr_list_insert(attrs, attr);
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
118 }
5b7b4ef9b53f Make the contents of event messages bold and italic
Gary Kramlich <grim@reaperworld.com>
parents: 43163
diff changeset
119
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 return attrs;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 static char *
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
124 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
125 PurpleMessage *message,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
126 G_GNUC_UNUSED gpointer data)
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
127 {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
128 GDateTime *timestamp = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
129
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
130 if(!PURPLE_IS_MESSAGE(message)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
131 return NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
132 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
133
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
134 timestamp = purple_message_get_timestamp(message);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
135 if(timestamp != NULL) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
136 GDateTime *local = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
137 char *ret = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
138
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
139 local = g_date_time_to_local(timestamp);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
140 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
141 g_date_time_unref(local);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
142
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
143 return ret;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
144 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
145
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
146 return NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
147 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
148
43277
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
149 static char *
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
150 pidgin_message_process_message_contents_cb(G_GNUC_UNUSED GObject *self,
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
151 const char *contents,
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
152 G_GNUC_UNUSED gpointer data)
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
153 {
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
154 char *escaped = NULL;
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
155 char *linkified = NULL;
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
156
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
157 escaped = g_markup_escape_text(contents, -1);
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
158
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
159 linkified = purple_markup_linkify(escaped);
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
160
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
161 g_free(escaped);
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
162
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
163 return linkified;
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
164 }
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
165
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 static gboolean
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
167 pidgin_message_query_tooltip_contents_cb(GtkWidget *self,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
168 G_GNUC_UNUSED gint x,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
169 G_GNUC_UNUSED gint y,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
170 G_GNUC_UNUSED gboolean keyboard_mode,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
171 GtkTooltip *tooltip,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
172 G_GNUC_UNUSED gpointer data)
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
173 {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
174 const char *uri = NULL;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
175
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
176 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
177 if(purple_strempty(uri)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
178 return FALSE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
179 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
180
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
181 gtk_tooltip_set_text(tooltip, uri);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
182
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
183 return TRUE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
184 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
185
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
186 static gboolean
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 pidgin_message_query_tooltip_edited_cb(G_GNUC_UNUSED GtkWidget *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 G_GNUC_UNUSED gint x,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 G_GNUC_UNUSED gint y,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 G_GNUC_UNUSED gboolean keyboard_mode,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 GtkTooltip *tooltip,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 {
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
194 PidginMessage *pidgin_message = data;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
195 PurpleMessage *purple_message = NULL;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 GDateTime *timestamp = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
198 if(!PIDGIN_IS_MESSAGE(pidgin_message)) {
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 return FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201
43094
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
202 purple_message = pidgin_message_get_message(pidgin_message);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
203 if(!PURPLE_IS_MESSAGE(purple_message)) {
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
204 return FALSE;
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
205 }
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
206
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
207 timestamp = purple_message_get_edited_at(purple_message);
43093
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 return pidgin_message_set_tooltip_for_timestamp(tooltip, timestamp);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 static gboolean
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 pidgin_message_query_tooltip_timestamp_cb(G_GNUC_UNUSED GtkWidget *self,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 G_GNUC_UNUSED gint x,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 G_GNUC_UNUSED gint y,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 G_GNUC_UNUSED gboolean keyboard_mode,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 GtkTooltip *tooltip,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 gpointer data)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 PidginMessage *message = data;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 GDateTime *timestamp = NULL;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 if(!PURPLE_IS_MESSAGE(message->message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 return FALSE;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 timestamp = purple_message_get_timestamp(message->message);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 return pidgin_message_set_tooltip_for_timestamp(tooltip, timestamp);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 * GObject Implementation
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 *****************************************************************************/
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 G_DEFINE_FINAL_TYPE(PidginMessage, pidgin_message, GTK_TYPE_BOX)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 pidgin_message_finalize(GObject *obj) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 PidginMessage *message = PIDGIN_MESSAGE(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 g_clear_object(&message->message);
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 G_OBJECT_CLASS(pidgin_message_parent_class)->finalize(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 pidgin_message_get_property(GObject *obj, guint param_id, GValue *value,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 GParamSpec *pspec)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 PidginMessage *message = PIDGIN_MESSAGE(obj);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 switch(param_id) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 case PROP_MESSAGE:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 g_value_set_object(value, pidgin_message_get_message(message));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 break;
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
257 case PROP_SHOW_FORMATTING:
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
258 g_value_set_boolean(value,
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
259 pidgin_message_get_show_formatting(message));
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
260 break;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 default:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 }
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 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 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
269 GParamSpec *pspec)
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 PidginMessage *message = PIDGIN_MESSAGE(obj);
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 switch(param_id) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 case PROP_MESSAGE:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 pidgin_message_set_message(message, g_value_get_object(value));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 break;
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
277 case PROP_SHOW_FORMATTING:
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
278 pidgin_message_set_show_formatting(message,
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
279 g_value_get_boolean(value));
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
280 break;
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 default:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 break;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 pidgin_message_init(PidginMessage *message) {
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
289 GSettings *settings = NULL;
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
290
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 gtk_widget_init_template(GTK_WIDGET(message));
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
292
43253
0cc00d7d6215 Create purple_core_new_settings
Gary Kramlich <grim@reaperworld.com>
parents: 43248
diff changeset
293 settings = purple_core_new_settings("im.pidgin.Pidgin3.Appearance");
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
294 g_settings_bind(settings, "show-formatting",
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
295 G_OBJECT(message), "show-formatting",
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
296 G_SETTINGS_BIND_GET);
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 static void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 pidgin_message_class_init(PidginMessageClass *klass) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
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 obj_class->finalize = pidgin_message_finalize;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305 obj_class->get_property = pidgin_message_get_property;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 obj_class->set_property = pidgin_message_set_property;
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 /**
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 * PidginMessage:message:
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311 * The [class@Purple.Message] to be displayed.
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 * Since: 3.0
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 properties[PROP_MESSAGE] = g_param_spec_object(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 "message", NULL, NULL,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317 PURPLE_TYPE_MESSAGE,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
320 /**
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
321 * PidginMessage:show-formatting:
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
322 *
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
323 * Whether or not formatting should be shown for this message.
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
324 *
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
325 * This will be bound to the show-formatting setting from
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
326 * im.pidgin.Pidgin3.Preferences.Appearance so any changes will affect
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
327 * all messages.
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
328 *
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
329 * Since: 3.0
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
330 */
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
331 properties[PROP_SHOW_FORMATTING] = g_param_spec_boolean(
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
332 "show-formatting", NULL, NULL,
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
333 TRUE,
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
334 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
335
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 gtk_widget_class_set_template_from_resource(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 "/im/pidgin/Pidgin3/Conversations/message.ui"
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 );
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 pidgin_message_get_message_attributes);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 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
346 pidgin_message_get_timestamp_string);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
347 gtk_widget_class_bind_template_callback(widget_class,
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
348 pidgin_message_query_tooltip_contents_cb);
4ff60371673f A few updates for Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43093
diff changeset
349 gtk_widget_class_bind_template_callback(widget_class,
43277
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
350 pidgin_message_process_message_contents_cb);
286947581188 Re-enable links in Pidgin.Message
Gary Kramlich <grim@reaperworld.com>
parents: 43253
diff changeset
351 gtk_widget_class_bind_template_callback(widget_class,
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 pidgin_message_query_tooltip_edited_cb);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 gtk_widget_class_bind_template_callback(widget_class,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 pidgin_message_query_tooltip_timestamp_cb);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 }
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 /******************************************************************************
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 * Public API
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 *****************************************************************************/
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
360 PurpleMessage *
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
361 pidgin_message_get_message(PidginMessage *message) {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
362 g_return_val_if_fail(PIDGIN_IS_MESSAGE(message), NULL);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
363
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
364 return message->message;
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
365 }
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
366
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
367 gboolean
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
368 pidgin_message_get_show_formatting(PidginMessage *message) {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
369 g_return_val_if_fail(PIDGIN_IS_MESSAGE(message), FALSE);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
370
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
371 return message->show_formatting;
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
372 }
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
373
43093
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 GtkWidget *
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375 pidgin_message_new(PurpleMessage *message) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 return g_object_new(
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 PIDGIN_TYPE_MESSAGE,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 "message", message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 NULL);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 void
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 pidgin_message_set_message(PidginMessage *pidgin_message,
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 PurpleMessage *purple_message)
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 g_return_if_fail(PIDGIN_IS_MESSAGE(pidgin_message));
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 if(g_set_object(&pidgin_message->message, purple_message)) {
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 g_object_notify_by_pspec(G_OBJECT(pidgin_message),
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 properties[PROP_MESSAGE]);
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 }
27f816a512af Add a PidginMessage widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 }
43248
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
393
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
394 void
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
395 pidgin_message_set_show_formatting(PidginMessage *message,
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
396 gboolean show_formatting)
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
397 {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
398 g_return_if_fail(PIDGIN_IS_MESSAGE(message));
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
399
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
400 if(message->show_formatting != show_formatting) {
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
401 GObject *obj = G_OBJECT(message);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
402
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
403 message->show_formatting = show_formatting;
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
404
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
405 g_object_freeze_notify(obj);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
406 g_object_notify_by_pspec(obj, properties[PROP_MESSAGE]);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
407 g_object_notify_by_pspec(obj, properties[PROP_SHOW_FORMATTING]);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
408 g_object_thaw_notify(obj);
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
409 }
55ff17a82093 Add a preference for toggling whether or not to show formatting
Gary Kramlich <grim@reaperworld.com>
parents: 43210
diff changeset
410 }

mercurial