pidgin/pidgindisplaywindow.c

Sun, 14 Jan 2024 20:08:13 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 14 Jan 2024 20:08:13 -0600
changeset 42568
31e8c7c92e2f
parent 42559
7bde7363e0f3
child 42575
580339aa47cc
permissions
-rw-r--r--

Make sure all of the license headers for IRCv3 are GPLv2

Testing Done:
Ran `licensecheck` from debian in the following way.

```
$ licensecheck *.[ch] | cut -d: -f 2 | sort | uniq -c
27 GNU General Public License v2.0 or later
```

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

40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
23 #include <glib/gi18n-lib.h>
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
24
41701
43f994f7f9f2 Replace GtkStack in PidginDisplayWindow with AdwViewStack
Gary Kramlich <grim@reaperworld.com>
parents: 41696
diff changeset
25 #include <adwaita.h>
43f994f7f9f2 Replace GtkStack in PidginDisplayWindow with AdwViewStack
Gary Kramlich <grim@reaperworld.com>
parents: 41696
diff changeset
26
41702
4289b30044ed Rename pidginconversationwindow.[ch] to pidgindisplaywindow.[ch]
Gary Kramlich <grim@reaperworld.com>
parents: 41701
diff changeset
27 #include "pidgindisplaywindow.h"
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
29 #include "gtkdialogs.h"
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
30 #include "gtkutils.h"
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
31 #include "pidginconversation.h"
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
32 #include "pidgindisplayitem.h"
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
33 #include "pidgininvitedialog.h"
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
34
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
35 enum {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
36 SIG_CONVERSATION_SWITCHED,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
37 N_SIGNALS,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
38 };
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
39 static guint signals[N_SIGNALS] = {0, };
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
40
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
41 struct _PidginDisplayWindow {
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 GtkApplicationWindow parent;
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
44 GtkWidget *view;
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
45 GtkWidget *bin;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
46
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
47 GListModel *base_model;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
48 GListModel *selection_model;
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
49
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
50 GListStore *conversation_model;
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 };
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
53 G_DEFINE_TYPE(PidginDisplayWindow, pidgin_display_window,
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 GTK_TYPE_APPLICATION_WINDOW)
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
56 static GtkWidget *default_window = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
57
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
58 /******************************************************************************
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
59 * Helpers
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
60 *****************************************************************************/
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
61 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
62 pidgin_display_window_actions_set_enabled(GActionMap *map,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
63 const gchar **actions,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
64 gboolean enabled)
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
65 {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
66 for(int i = 0; actions[i] != NULL; i++) {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
67 GAction *action = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
68 const gchar *name = actions[i];
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
69
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
70 action = g_action_map_lookup_action(map, name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
71 if(action != NULL) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
72 g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
73 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
74 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
75 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
76
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
77 static GListModel *
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
78 pidgin_display_window_create_model(GObject *item,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
79 G_GNUC_UNUSED gpointer data)
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
80 {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
81 GListModel *model = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
82
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
83 model = pidgin_display_item_get_children(PIDGIN_DISPLAY_ITEM(item));
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
84 if(model != NULL) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
85 return g_object_ref(model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
86 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
87
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
88 return NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
89 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
90
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
91 static gboolean
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
92 pidgin_display_window_find_conversation(gconstpointer a, gconstpointer b) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
93 PidginDisplayItem *item_a = PIDGIN_DISPLAY_ITEM((gpointer)a);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
94 PidginDisplayItem *item_b = PIDGIN_DISPLAY_ITEM((gpointer)b);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
95 PurpleConversation *conversation_a = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
96 PurpleConversation *conversation_b = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
97
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
98 conversation_a = g_object_get_data(G_OBJECT(item_a), "conversation");
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
99 conversation_b = g_object_get_data(G_OBJECT(item_b), "conversation");
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
100
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
101 return (conversation_a == conversation_b);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
102 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
103
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
104 /******************************************************************************
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
105 * Actions
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
106 *****************************************************************************/
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
107 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
108 pidgin_display_window_close_conversation(G_GNUC_UNUSED GSimpleAction *simple,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
109 G_GNUC_UNUSED GVariant *parameter,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
110 gpointer data)
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
111 {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
112 PidginDisplayWindow *window = data;
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
113 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
114
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
115 selected = pidgin_display_window_get_selected(window);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
116 if(PURPLE_IS_CONVERSATION(selected)) {
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
117 GtkWidget *conversation = NULL;
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
118
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
119 conversation = pidgin_conversation_from_purple_conversation(selected);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
120 if(PIDGIN_IS_CONVERSATION(conversation)) {
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
121 pidgin_conversation_close(PIDGIN_CONVERSATION(conversation));
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
122 g_clear_object(&conversation);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
123 }
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
124
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
125 pidgin_display_window_remove(window, selected);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
126 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
127 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
128
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
129 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
130 pidgin_display_window_get_info(G_GNUC_UNUSED GSimpleAction *simple,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
131 G_GNUC_UNUSED GVariant *parameter,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
132 gpointer data)
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
133 {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
134 PidginDisplayWindow *window = data;
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
135 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
136
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
137 selected = pidgin_display_window_get_selected(window);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
138 if(PURPLE_IS_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
139 if(PURPLE_IS_IM_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
140 PurpleConnection *connection = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
141
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
142 connection = purple_conversation_get_connection(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
143 pidgin_retrieve_user_info(connection,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
144 purple_conversation_get_name(selected));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
145 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
146 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
147 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
148
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
149 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
150 pidgin_display_window_send_file(G_GNUC_UNUSED GSimpleAction *simple,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
151 G_GNUC_UNUSED GVariant *parameter,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
152 gpointer data)
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
153 {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
154 PidginDisplayWindow *window = data;
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
155 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
156
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
157 selected = pidgin_display_window_get_selected(window);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
158 if(PURPLE_IS_IM_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
159 PurpleConnection *connection = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
160
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
161 connection = purple_conversation_get_connection(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
162 purple_serv_send_file(connection,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
163 purple_conversation_get_name(selected),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
164 NULL);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
165 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
166 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
167
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
168 static GActionEntry win_entries[] = {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
169 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
170 .name = "close",
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
171 .activate = pidgin_display_window_close_conversation
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
172 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
173 .name = "get-info",
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
174 .activate = pidgin_display_window_get_info
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
175 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
176 .name = "send-file",
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
177 .activate = pidgin_display_window_send_file
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
178 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
179 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
180
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
181 /*<private>
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
182 * pidgin_display_window_conversation_actions:
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
183 *
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
184 * A list of action names that are only valid if a conversation is selected.
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
185 */
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
186 static const gchar *pidgin_display_window_conversation_actions[] = {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
187 "alias",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
188 "close",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
189 "get-info",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
190 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
191 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
192
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
193 static const gchar *pidgin_display_window_im_conversation_actions[] = {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
194 "send-file",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
195 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
196 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
197
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
198 static const gchar *pidgin_display_window_chat_conversation_actions[] = {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
199 "invite",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
200 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
201 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
202
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
203 /******************************************************************************
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
204 * Callbacks
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
205 *****************************************************************************/
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
206 static gboolean
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41849
diff changeset
207 pidgin_display_window_key_pressed_cb(G_GNUC_UNUSED GtkEventControllerKey *controller,
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
208 guint keyval,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
209 G_GNUC_UNUSED guint keycode,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
210 GdkModifierType state,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
211 gpointer data)
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
212 {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
213 PidginDisplayWindow *window = data;
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
214
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
215 if (state & GDK_CONTROL_MASK) {
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
216 switch (keyval) {
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
217 case GDK_KEY_Page_Down:
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
218 case GDK_KEY_KP_Page_Down:
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
219 case ']':
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
220 pidgin_display_window_select_next(window);
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
221 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
222 break;
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
223 case GDK_KEY_Home:
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
224 pidgin_display_window_select_first(window);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
225 return TRUE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
226 break;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
227 case GDK_KEY_End:
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
228 pidgin_display_window_select_last(window);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
229 return TRUE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
230 break;
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
231 case GDK_KEY_Page_Up:
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
232 case GDK_KEY_KP_Page_Up:
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
233 case '[':
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
234 pidgin_display_window_select_previous(window);
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
235 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
236 break;
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
237 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
238 } else if (state & GDK_ALT_MASK) {
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
239 if ('1' <= keyval && keyval <= '9') {
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
240 guint switchto = keyval - '1';
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
241 pidgin_display_window_select_nth(window, switchto);
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
242
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
243 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
244 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
245 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
246
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
247 return FALSE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
248 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
249
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
250 static void
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
251 pidgin_display_window_selected_item_changed_cb(GObject *self,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
252 G_GNUC_UNUSED GParamSpec *pspec,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
253 gpointer data)
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
254 {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
255 PidginDisplayItem *item = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
256 PidginDisplayWindow *window = data;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
257 PurpleConversation *conversation = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
258 GtkSingleSelection *selection = GTK_SINGLE_SELECTION(self);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
259 GtkTreeListRow *row = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
260 GtkWidget *widget = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
261 gboolean is_conversation = FALSE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
262 gboolean is_im_conversation = FALSE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
263 gboolean is_chat_conversation = FALSE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
264
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
265 row = gtk_single_selection_get_selected_item(selection);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
266
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
267 item = gtk_tree_list_row_get_item(row);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
268
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
269 /* Toggle whether actions should be enabled or disabled. */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
270 conversation = g_object_get_data(G_OBJECT(item), "conversation");
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
271 if(PURPLE_IS_CONVERSATION(conversation)) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
272 is_conversation = PURPLE_IS_CONVERSATION(conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
273 is_im_conversation = PURPLE_IS_IM_CONVERSATION(conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
274 is_chat_conversation = PURPLE_IS_CHAT_CONVERSATION(conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
275 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
276
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
277 pidgin_display_window_actions_set_enabled(G_ACTION_MAP(window),
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
278 pidgin_display_window_conversation_actions,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
279 is_conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
280 pidgin_display_window_actions_set_enabled(G_ACTION_MAP(window),
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
281 pidgin_display_window_im_conversation_actions,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
282 is_im_conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
283 pidgin_display_window_actions_set_enabled(G_ACTION_MAP(window),
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
284 pidgin_display_window_chat_conversation_actions,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
285 is_chat_conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
286
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
287 widget = pidgin_display_item_get_widget(item);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
288 if(GTK_IS_WIDGET(widget)) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
289 adw_bin_set_child(ADW_BIN(window->bin), widget);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
290 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
291 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
292
42559
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
293 static void
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
294 pidgin_display_window_conversation_registered_cb(G_GNUC_UNUSED PurpleConversationManager *manager,
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
295 PurpleConversation *conversation,
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
296 gpointer data)
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
297 {
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
298 PidginDisplayWindow *window = data;
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
299
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
300 pidgin_display_window_add(window, conversation);
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
301 }
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
302
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
303 static void
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
304 pidgin_display_window_conversation_unregistered_cb(G_GNUC_UNUSED PurpleConversationManager *manager,
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
305 PurpleConversation *conversation,
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
306 gpointer data)
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
307 {
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
308 PidginDisplayWindow *window = data;
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
309
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
310 pidgin_display_window_remove(window, conversation);
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
311 }
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
312
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 /******************************************************************************
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
314 * GObject Implementation
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 static void
42215
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
317 pidgin_display_window_finalize(GObject *obj) {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
318 PidginDisplayWindow *window = PIDGIN_DISPLAY_WINDOW(obj);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
319
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
320 g_clear_object(&window->conversation_model);
42215
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
321 g_clear_object(&window->selection_model);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
322
42215
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
323 G_OBJECT_CLASS(pidgin_display_window_parent_class)->finalize(obj);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
324 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
325
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
326 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
327 pidgin_display_window_init(PidginDisplayWindow *window) {
41560
2579a5138f0c A bunch of random fixes for the the gtk4 branch
Gary Kramlich <grim@reaperworld.com>
parents: 41527
diff changeset
328 GtkEventController *key = NULL;
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
329 GtkTreeListModel *tree_model = NULL;
40627
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
330
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 gtk_widget_init_template(GTK_WIDGET(window));
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332
42215
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
333 /* Add a reference to the selection model as we use it internally and with
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
334 * out it we get some weird call backs being called when it's nulled out
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
335 * during destruction.
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
336 */
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
337 g_object_ref(window->selection_model);
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
338
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
339 /* Setup the tree list model. */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
340 tree_model = gtk_tree_list_model_new(window->base_model, FALSE, TRUE,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
341 (GtkTreeListModelCreateModelFunc)pidgin_display_window_create_model,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
342 window, NULL);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
343
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
344 /* Set the model of the selection to the tree model. */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
345 gtk_single_selection_set_model(GTK_SINGLE_SELECTION(window->selection_model),
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
346 G_LIST_MODEL(tree_model));
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
347 g_clear_object(&tree_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
348
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
349 /* Set the application and add all of our actions. */
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 gtk_window_set_application(GTK_WINDOW(window),
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 GTK_APPLICATION(g_application_get_default()));
40627
3d6797191bf5 Create a new menu bar for PidginConversationWindow. This is just the menu itself and no behavior.
Gary Kramlich <grim@reaperworld.com>
parents: 40577
diff changeset
352
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
353 g_action_map_add_action_entries(G_ACTION_MAP(window), win_entries,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
354 G_N_ELEMENTS(win_entries), window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
355
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
356 /* Add a key controller. */
41560
2579a5138f0c A bunch of random fixes for the the gtk4 branch
Gary Kramlich <grim@reaperworld.com>
parents: 41527
diff changeset
357 key = gtk_event_controller_key_new();
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
358 gtk_event_controller_set_propagation_phase(key, GTK_PHASE_CAPTURE);
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
359 g_signal_connect(G_OBJECT(key), "key-pressed",
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
360 G_CALLBACK(pidgin_display_window_key_pressed_cb),
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
361 window);
41560
2579a5138f0c A bunch of random fixes for the the gtk4 branch
Gary Kramlich <grim@reaperworld.com>
parents: 41527
diff changeset
362 gtk_widget_add_controller(GTK_WIDGET(window), key);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 static void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
366 pidgin_display_window_class_init(PidginDisplayWindowClass *klass) {
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
367 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369
42215
a0108bfcb108 Reference the selection_model in PidginDisplayWindow
Gary Kramlich <grim@reaperworld.com>
parents: 42202
diff changeset
370 obj_class->finalize = pidgin_display_window_finalize;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
371
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
372 /**
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
373 * PidginDisplayWindow::conversation-switched:
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
374 * @window: The conversation window.
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
375 * @new_conv: The now active conversation.
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
376 *
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
377 * Emitted when a window switched from one conversation to another.
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
378 */
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
379 signals[SIG_CONVERSATION_SWITCHED] = g_signal_new_class_handler(
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
380 "conversation-switched",
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
381 G_OBJECT_CLASS_TYPE(obj_class),
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
382 G_SIGNAL_RUN_LAST,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
383 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
384 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
385 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
386 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
387 G_TYPE_NONE,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
388 1,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
389 PURPLE_TYPE_CONVERSATION
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
390 );
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
391
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 gtk_widget_class_set_template_from_resource(
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 widget_class,
41702
4289b30044ed Rename pidginconversationwindow.[ch] to pidgindisplaywindow.[ch]
Gary Kramlich <grim@reaperworld.com>
parents: 41701
diff changeset
394 "/im/pidgin/Pidgin3/Display/window.ui"
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 );
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
397 gtk_widget_class_bind_template_child(widget_class, PidginDisplayWindow,
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
398 view);
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
399 gtk_widget_class_bind_template_child(widget_class, PidginDisplayWindow,
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
400 bin);
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
401 gtk_widget_class_bind_template_child(widget_class, PidginDisplayWindow,
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
402 base_model);
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
403 gtk_widget_class_bind_template_child(widget_class, PidginDisplayWindow,
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
404 selection_model);
41849
413cde086275 Add a placeholder to PidginDisplayWindow for the ContactList
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
405 gtk_widget_class_bind_template_child(widget_class, PidginDisplayWindow,
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
406 conversation_model);
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
407
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
408 gtk_widget_class_bind_template_callback(widget_class,
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
409 pidgin_display_window_key_pressed_cb);
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
410 gtk_widget_class_bind_template_callback(widget_class,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
411 pidgin_display_window_selected_item_changed_cb);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
414 /******************************************************************************
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
415 * API
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
416 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
417 GtkWidget *
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
418 pidgin_display_window_get_default(void) {
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
419 if(!GTK_IS_WIDGET(default_window)) {
42559
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
420 PurpleConversationManager *manager = NULL;
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
421
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
422 default_window = pidgin_display_window_new();
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
423 g_object_add_weak_pointer(G_OBJECT(default_window),
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
424 (gpointer)&default_window);
42559
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
425
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
426 manager = purple_conversation_manager_get_default();
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
427 g_signal_connect_object(manager, "registered",
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
428 G_CALLBACK(pidgin_display_window_conversation_registered_cb),
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
429 default_window, 0);
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
430 g_signal_connect_object(manager, "unregistered",
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
431 G_CALLBACK(pidgin_display_window_conversation_unregistered_cb),
7bde7363e0f3 Fix opening of conversations
Gary Kramlich <grim@reaperworld.com>
parents: 42554
diff changeset
432 default_window, 0);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
433 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
434
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
435 return default_window;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
436 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
437
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
438 GtkWidget *
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
439 pidgin_display_window_new(void) {
41582
4ee4a8ddc190 Explicitly set show-menubar so our menubars are shown
Gary Kramlich <grim@reaperworld.com>
parents: 41560
diff changeset
440 return g_object_new(
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
441 PIDGIN_TYPE_DISPLAY_WINDOW,
41582
4ee4a8ddc190 Explicitly set show-menubar so our menubars are shown
Gary Kramlich <grim@reaperworld.com>
parents: 41560
diff changeset
442 "show-menubar", TRUE,
4ee4a8ddc190 Explicitly set show-menubar so our menubars are shown
Gary Kramlich <grim@reaperworld.com>
parents: 41560
diff changeset
443 NULL);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
444 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
445
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
446 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
447 pidgin_display_window_add(PidginDisplayWindow *window,
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
448 PurpleConversation *purple_conversation)
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
449 {
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
450 GtkWidget *pidgin_conversation = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
451
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
452 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
453 g_return_if_fail(PURPLE_IS_CONVERSATION(purple_conversation));
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
454
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
455 pidgin_conversation = pidgin_conversation_from_purple_conversation(purple_conversation);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
456
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
457 if(!PIDGIN_IS_CONVERSATION(pidgin_conversation)) {
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
458 pidgin_conversation = pidgin_conversation_new(purple_conversation);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
459 }
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
460
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
461 if(PIDGIN_IS_CONVERSATION(pidgin_conversation)) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
462 PidginDisplayItem *item = NULL;
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
463 const char *id = NULL;
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
464
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
465 GtkWidget *parent = gtk_widget_get_parent(pidgin_conversation);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
466
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
467 if(GTK_IS_WIDGET(parent)) {
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
468 g_object_ref(pidgin_conversation);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
469 gtk_widget_unparent(pidgin_conversation);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
470 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
471
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
472 id = purple_conversation_get_name(purple_conversation);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
473 item = pidgin_display_item_new(pidgin_conversation, id);
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
474 g_object_set_data(G_OBJECT(item), "conversation", purple_conversation);
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
475
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
476 g_object_bind_property(purple_conversation, "title",
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
477 item, "title",
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
478 G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
479
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
480 g_list_store_append(window->conversation_model, item);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
481 g_clear_object(&item);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
482
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
483 if(GTK_IS_WIDGET(parent)) {
42301
d3930fe5505c The start of the new conversation window
Gary Kramlich <grim@reaperworld.com>
parents: 42295
diff changeset
484 g_object_unref(pidgin_conversation);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
485 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
486 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
487 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
488
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
489 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
490 pidgin_display_window_remove(PidginDisplayWindow *window,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
491 PurpleConversation *conversation)
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
492 {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
493 PidginDisplayItem *item = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
494 guint position = 0;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
495 gboolean found = FALSE;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
496 gchar *id = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
497
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
498 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
499 g_return_if_fail(PURPLE_IS_CONVERSATION(conversation));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
500
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
501 /* Create a wrapper item for our find function. */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
502 id = g_uuid_string_random();
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
503 item = g_object_new(PIDGIN_TYPE_DISPLAY_ITEM, "id", id, NULL);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
504 g_free(id);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
505 g_object_set_data(G_OBJECT(item), "conversation", conversation);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
506
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
507 found = g_list_store_find_with_equal_func(window->conversation_model,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
508 item,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
509 pidgin_display_window_find_conversation,
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
510 &position);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
511
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
512 g_clear_object(&item);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
513
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
514 if(found) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
515 g_list_store_remove(window->conversation_model, position);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
516 }
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
517 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
518
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
519 guint
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
520 pidgin_display_window_get_count(G_GNUC_UNUSED PidginDisplayWindow *window) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
521 /* TODO: This is only used by the gestures plugin and that will probably
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
522 * need some rewriting and different api for a mixed content window list
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
523 * this is now.
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
524 */
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
525
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
526 return 0;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
527 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
528
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
529 PurpleConversation *
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
530 pidgin_display_window_get_selected(PidginDisplayWindow *window) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
531 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
532 GtkTreeListRow *tree_row = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
533 GObject *selected = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
534
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
535 g_return_val_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window), NULL);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
536
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
537 selection = GTK_SINGLE_SELECTION(window->selection_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
538 tree_row = gtk_single_selection_get_selected_item(selection);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
539 selected = gtk_tree_list_row_get_item(tree_row);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
540
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
541 if(PIDGIN_IS_DISPLAY_ITEM(selected)) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
542 return g_object_get_data(selected, "conversation");
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
543 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
544
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
545 return NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
546 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
547
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
548 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
549 pidgin_display_window_select(PidginDisplayWindow *window,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
550 PurpleConversation *conversation)
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
551 {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
552 /* TODO: This is used by the unity and gestures plugins, but I'm really not
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
553 * sure how to make this work yet without some hard-coding or something, so
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
554 * I'm opting to stub it out for now.
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
555 */
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
556
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
557 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
558 g_return_if_fail(PURPLE_IS_CONVERSATION(conversation));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
559 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
560
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
561 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
562 pidgin_display_window_select_previous(PidginDisplayWindow *window) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
563 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
564 guint position = 0;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
565
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
566 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
567
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
568 selection = GTK_SINGLE_SELECTION(window->selection_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
569 position = gtk_single_selection_get_selected(selection);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
570 if(position == 0) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
571 position = g_list_model_get_n_items(G_LIST_MODEL(selection)) - 1;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
572 } else {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
573 position = position - 1;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
574 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
575
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
576 gtk_single_selection_set_selected(selection, position);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
577 }
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
578
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
579 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
580 pidgin_display_window_select_next(PidginDisplayWindow *window) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
581 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
582 guint position = 0;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
583
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
584 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
585
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
586 selection = GTK_SINGLE_SELECTION(window->selection_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
587 position = gtk_single_selection_get_selected(selection);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
588 if(position + 1 >= g_list_model_get_n_items(G_LIST_MODEL(selection))) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
589 position = 0;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
590 } else {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
591 position = position + 1;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
592 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
593
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
594 gtk_single_selection_set_selected(selection, position);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
595 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
596
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
597 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
598 pidgin_display_window_select_first(PidginDisplayWindow *window) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
599 GtkSingleSelection *selection = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
600
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
601 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
602
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
603 selection = GTK_SINGLE_SELECTION(window->selection_model);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
604
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
605 /* The selection has autoselect set to true, which won't do anything if
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
606 * this is an invalid value.
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
607 */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
608 gtk_single_selection_set_selected(selection, 0);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
609 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
610
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
611 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
612 pidgin_display_window_select_last(PidginDisplayWindow *window) {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
613 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
614 guint n_items = 0;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
615
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
616 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
617
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
618 selection = GTK_SINGLE_SELECTION(window->selection_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
619 n_items = g_list_model_get_n_items(G_LIST_MODEL(selection));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
620
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
621 /* The selection has autoselect set to true, which won't do anything if
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
622 * this is an invalid value.
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
623 */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
624 gtk_single_selection_set_selected(selection, n_items - 1);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
625 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
626
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
627 void
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
628 pidgin_display_window_select_nth(PidginDisplayWindow *window,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
629 guint nth)
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
630 {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
631 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
632 guint n_items = 0;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
633
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
634 g_return_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
635
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
636 selection = GTK_SINGLE_SELECTION(window->selection_model);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
637
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
638 /* The selection has autoselect set to true, but this isn't bound checking
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
639 * or something on the children models, so we verify before setting.
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
640 */
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
641 n_items = g_list_model_get_n_items(G_LIST_MODEL(selection));
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
642 if(nth < n_items) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
643 gtk_single_selection_set_selected(selection, nth);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
644 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
645 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
646
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
647 gboolean
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
648 pidgin_display_window_conversation_is_selected(PidginDisplayWindow *window,
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
649 PurpleConversation *conversation)
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
650 {
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
651 GtkSingleSelection *selection = NULL;
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
652 GObject *selected = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
653
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41582
diff changeset
654 g_return_val_if_fail(PIDGIN_IS_DISPLAY_WINDOW(window), FALSE);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
655 g_return_val_if_fail(PURPLE_IS_CONVERSATION(conversation), FALSE);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
656
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
657 selection = GTK_SINGLE_SELECTION(window->selection_model);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
658 selected = gtk_single_selection_get_selected_item(selection);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
659
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
660 if(PIDGIN_IS_DISPLAY_ITEM(selected)) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
661 PurpleConversation *selected_conversation = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
662
42050
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
663 selected_conversation = g_object_get_data(G_OBJECT(selected),
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
664 "conversation");
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
665 if(selected_conversation != NULL) {
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
666 return (selected_conversation == conversation);
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
667 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
668 }
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
669
5ac6db2b8c2d Make the DisplayWindow use a GtkListView
Gary Kramlich <grim@reaperworld.com>
parents: 41947
diff changeset
670 return FALSE;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
671 }

mercurial