libpurple/purplemessages.c

Tue, 07 Jan 2025 04:49:09 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 07 Jan 2025 04:49:09 -0600
changeset 43128
1ce3ad90614c
parent 42984
818220289e67
permissions
-rw-r--r--

Make sure we notify on the n-items property for all objects that have it

Testing Done:
Called in the turtles.

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

42844
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * any later version.
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * more details.
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License along with
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "purplemessages.h"
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 enum {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 PROP_0,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 PROP_CONVERSATION,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 PROP_ITEM_TYPE,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 PROP_N_ITEMS,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 N_PROPERTIES,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 };
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 struct _PurpleMessages {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 GObject parent;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 PurpleConversation *conversation;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 GListStore *model;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 };
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 /******************************************************************************
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 * Helpers
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 *****************************************************************************/
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 purple_messages_set_conversation(PurpleMessages *messages,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 PurpleConversation *conversation)
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 g_return_if_fail(PURPLE_IS_MESSAGES(messages));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 if(g_set_object(&messages->conversation, conversation)) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 g_object_notify_by_pspec(G_OBJECT(messages),
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 properties[PROP_CONVERSATION]);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 static int
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 purple_messages_compare(gconstpointer a, gconstpointer b,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 G_GNUC_UNUSED gpointer data)
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 PurpleMessage *message1 = PURPLE_MESSAGE((gpointer)a);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 PurpleMessage *message2 = PURPLE_MESSAGE((gpointer)b);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 return purple_message_compare_timestamp(message1, message2);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 /******************************************************************************
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 * Callbacks
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 *****************************************************************************/
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 static void
43128
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
71 purple_messages_items_changed_cb(GListModel *model, guint position,
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
72 guint removed, guint added, gpointer data)
42844
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 g_list_model_items_changed(data, position, removed, added);
43128
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
75
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
76 if(removed > 0 || added > 0) {
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
77 g_object_notify_by_pspec(G_OBJECT(model), properties[PROP_N_ITEMS]);
1ce3ad90614c Make sure we notify on the n-items property for all objects that have it
Gary Kramlich <grim@reaperworld.com>
parents: 42984
diff changeset
78 }
42844
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 /******************************************************************************
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 * GListModel Implementation
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 *****************************************************************************/
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 static GType
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 purple_messages_get_item_type(GListModel *model) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 PurpleMessages *messages = PURPLE_MESSAGES(model);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 return g_list_model_get_item_type(G_LIST_MODEL(messages->model));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 static guint
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 purple_messages_get_n_items(GListModel *model) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 PurpleMessages *messages = PURPLE_MESSAGES(model);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 return g_list_model_get_n_items(G_LIST_MODEL(messages->model));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 static gpointer
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 purple_messages_get_item(GListModel *model, guint position) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 PurpleMessages *messages = PURPLE_MESSAGES(model);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 return g_list_model_get_item(G_LIST_MODEL(messages->model), position);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 purple_messages_list_model_iface_init(GListModelInterface *iface) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 iface->get_item_type = purple_messages_get_item_type;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 iface->get_n_items = purple_messages_get_n_items;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 iface->get_item = purple_messages_get_item;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 /******************************************************************************
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 * GObject Implementation
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 *****************************************************************************/
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 G_DEFINE_FINAL_TYPE_WITH_CODE(
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 PurpleMessages,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 purple_messages,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 G_TYPE_OBJECT,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 G_IMPLEMENT_INTERFACE(G_TYPE_LIST_MODEL,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 purple_messages_list_model_iface_init))
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 purple_messages_dispose(GObject *obj) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 PurpleMessages *message = PURPLE_MESSAGES(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 g_clear_object(&message->conversation);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 g_list_store_remove_all(message->model);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 G_OBJECT_CLASS(purple_messages_parent_class)->dispose(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 purple_messages_finalize(GObject *obj) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 PurpleMessages *message = PURPLE_MESSAGES(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 g_clear_object(&message->model);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 G_OBJECT_CLASS(purple_messages_parent_class)->finalize(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 purple_messages_get_property(GObject *obj, guint param_id, GValue *value,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 GParamSpec *pspec)
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 PurpleMessages *messages = PURPLE_MESSAGES(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 switch(param_id) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 case PROP_CONVERSATION:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 g_value_set_object(value, purple_messages_get_conversation(messages));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 case PROP_ITEM_TYPE:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 g_value_set_gtype(value,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 g_list_model_get_item_type(G_LIST_MODEL(messages->model)));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 case PROP_N_ITEMS:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 g_value_set_uint(value,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 g_list_model_get_n_items(G_LIST_MODEL(messages->model)));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 default:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 purple_messages_set_property(GObject *obj, guint param_id, const GValue *value,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 GParamSpec *pspec)
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 PurpleMessages *messages = PURPLE_MESSAGES(obj);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 switch(param_id) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 case PROP_CONVERSATION:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 purple_messages_set_conversation(messages, g_value_get_object(value));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 default:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 break;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 purple_messages_init(PurpleMessages *messages) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 messages->model = g_list_store_new(PURPLE_TYPE_MESSAGE);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 g_signal_connect_object(messages->model, "items-changed",
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 G_CALLBACK(purple_messages_items_changed_cb),
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 messages, G_CONNECT_DEFAULT);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 static void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 purple_messages_class_init(PurpleMessagesClass *klass) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 obj_class->dispose = purple_messages_dispose;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 obj_class->finalize = purple_messages_finalize;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 obj_class->get_property = purple_messages_get_property;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 obj_class->set_property = purple_messages_set_property;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 /**
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 * PurpleMessages:conversation:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 * The [class@Conversation] that these messages belong to.
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 * Since: 3.0
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 */
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 properties[PROP_CONVERSATION] = g_param_spec_object(
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 "conversation", NULL, NULL,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 PURPLE_TYPE_CONVERSATION,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 /**
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 * PurpleMessages:item-type:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 *
42984
818220289e67 Update the gi-docgen subproject and fix some new issues it found
Gary Kramlich <grim@reaperworld.com>
parents: 42844
diff changeset
214 * The type of items. See [vfunc@Gio.ListModel.get_item_type].
42844
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 * Since: 3.0
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 */
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 properties[PROP_ITEM_TYPE] = g_param_spec_gtype(
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 "item-type", NULL, NULL,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 PURPLE_TYPE_MESSAGE,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 /**
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 * PurpleMessages:n-items:
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 *
42984
818220289e67 Update the gi-docgen subproject and fix some new issues it found
Gary Kramlich <grim@reaperworld.com>
parents: 42844
diff changeset
226 * The number of items. See [vfunc@Gio.ListModel.get_n_items].
42844
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 * Since: 3.0
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 */
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 properties[PROP_N_ITEMS] = g_param_spec_uint(
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 "n-items", NULL, NULL,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 0, G_MAXUINT, 0,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 /******************************************************************************
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 * Public API
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 *****************************************************************************/
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 PurpleMessages *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 purple_messages_new(PurpleConversation *conversation) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 g_return_val_if_fail(PURPLE_IS_CONVERSATION(conversation), NULL);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 return g_object_new(
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 PURPLE_TYPE_MESSAGES,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 "conversation", conversation,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 NULL);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 PurpleConversation *
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 purple_messages_get_conversation(PurpleMessages *messages) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 g_return_val_if_fail(PURPLE_IS_MESSAGES(messages), NULL);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 return messages->conversation;
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 }
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 void
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 purple_messages_add(PurpleMessages *messages, PurpleMessage *message) {
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 g_return_if_fail(PURPLE_IS_MESSAGES(messages));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 g_return_if_fail(PURPLE_IS_MESSAGE(message));
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 g_list_store_insert_sorted(messages->model, message,
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 (GCompareDataFunc)purple_messages_compare, NULL);
74d2c95237e2 Add PurpleMessages
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 }

mercurial