pidgin/pidginconversationwindow.c

Thu, 21 Jul 2022 20:47:58 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 21 Jul 2022 20:47:58 -0500
branch
gtk4
changeset 41557
479fdb903b82
parent 41527
4dff8cd4e9ea
child 41560
2579a5138f0c
permissions
-rw-r--r--

Convert the conversations status page to adwaita

Testing Done:
Compiled.

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

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
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidginconversationwindow.h"
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
27 #include "gtkconv.h"
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
28 #include "gtkdialogs.h"
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
29 #include "gtkutils.h"
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
30 #include "pidgininvitedialog.h"
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
31
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
32 enum {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
33 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT,
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
34 PIDGIN_CONVERSATION_WINDOW_COLUMN_NAME,
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
35 PIDGIN_CONVERSATION_WINDOW_COLUMN_ICON,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
36 PIDGIN_CONVERSATION_WINDOW_COLUMN_MARKUP,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
37 };
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 enum {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
40 SIG_CONVERSATION_SWITCHED,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
41 N_SIGNALS,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
42 };
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
43 static guint signals[N_SIGNALS] = {0, };
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
44
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 struct _PidginConversationWindow {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 GtkApplicationWindow parent;
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 GtkWidget *vbox;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
49
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
50 GtkWidget *view;
41476
1a53026013e4 Show conversations by default in the conversation window and set the select mode to browse
Gary Kramlich <grim@reaperworld.com>
parents: 41443
diff changeset
51 GtkTreeSelection *selection;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
52 GtkTreeStore *model;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
53
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
54 GtkWidget *stack;
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
55
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
56 GtkWidget *notification_list;
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
57
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
58 GtkTreePath *conversation_path;
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 };
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 G_DEFINE_TYPE(PidginConversationWindow, pidgin_conversation_window,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 GTK_TYPE_APPLICATION_WINDOW)
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
64 static GtkWidget *default_window = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
65
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
66 /******************************************************************************
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
67 * Helpers
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
68 *****************************************************************************/
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
69 static void
41484
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
70 pidgin_conversation_window_actions_set_enabled(GActionMap *map,
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
71 const gchar **actions,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
72 gboolean 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 gint i = 0;
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 for(i = 0; actions[i] != NULL; i++) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
77 GAction *action = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
78 const gchar *name = actions[i];
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
79
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
80 action = g_action_map_lookup_action(map, name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
81 if(action != NULL) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
82 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
83 } else {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
84 g_critical("Failed to find action named %s", name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
85 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
86 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
87 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
88
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
89 /******************************************************************************
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
90 * Callbacks
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
91 *****************************************************************************/
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
92 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
93 pidgin_conversation_window_invite_cb(GtkDialog *dialog, gint response_id,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
94 G_GNUC_UNUSED gpointer data)
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
95 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
96 PidginInviteDialog *invite_dialog = PIDGIN_INVITE_DIALOG(dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
97 PurpleChatConversation *chat = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
98
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
99 chat = pidgin_invite_dialog_get_conversation(invite_dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
100
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
101 g_object_set_data(G_OBJECT(chat), "pidgin-invite-dialog", NULL);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
102
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
103 if(response_id == GTK_RESPONSE_ACCEPT) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
104 const gchar *contact = NULL, *message = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
105
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
106 contact = pidgin_invite_dialog_get_contact(invite_dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
107 message = pidgin_invite_dialog_get_message(invite_dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
108
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
109 if(!purple_strequal(contact, "")) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
110 PurpleConnection *connection = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
111
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
112 connection = purple_conversation_get_connection(PURPLE_CONVERSATION(chat));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
113 purple_serv_chat_invite(connection,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
114 purple_chat_conversation_get_id(chat),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
115 message, contact);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
116 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
117 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
118
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
119 gtk_widget_destroy(GTK_WIDGET(invite_dialog));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
120 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
121
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
122 /******************************************************************************
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
123 * Actions
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
124 *****************************************************************************/
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
125 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
126 pidgin_conversation_window_alias(G_GNUC_UNUSED GSimpleAction *simple,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
127 G_GNUC_UNUSED GVariant *parameter,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
128 gpointer data)
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
129 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
130 PidginConversationWindow *window = data;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
131 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
132
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
133 selected = pidgin_conversation_window_get_selected(window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
134 if(PURPLE_IS_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
135 PurpleAccount *account;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
136 const gchar *name;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
137
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
138 account = purple_conversation_get_account(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
139 name = purple_conversation_get_name(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
140
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
141 if(PURPLE_IS_IM_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
142 PurpleBuddy *buddy = purple_blist_find_buddy(account, name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
143
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
144 if(PURPLE_IS_BUDDY(buddy)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
145 pidgin_dialogs_alias_buddy(buddy);
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 } else if(PURPLE_IS_CHAT_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
148 PurpleChat *chat = purple_blist_find_chat(account, name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
149
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
150 if(PURPLE_IS_CHAT(chat)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
151 pidgin_dialogs_alias_chat(chat);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
152 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
153 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
154 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
155 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
156
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
157 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
158 pidgin_conversation_window_close_conversation(G_GNUC_UNUSED GSimpleAction *simple,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
159 G_GNUC_UNUSED GVariant *parameter,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
160 gpointer data)
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
161 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
162 PidginConversationWindow *window = data;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
163 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
164
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
165 selected = pidgin_conversation_window_get_selected(window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
166 if(PURPLE_IS_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
167 pidgin_conversation_window_remove(window, selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
168 pidgin_conversation_detach(selected);
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 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
171
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
172 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
173 pidgin_conversation_window_get_info(G_GNUC_UNUSED GSimpleAction *simple,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
174 G_GNUC_UNUSED GVariant *parameter,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
175 gpointer data)
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
176 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
177 PidginConversationWindow *window = data;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
178 PurpleConversation *selected = NULL;
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 selected = pidgin_conversation_window_get_selected(window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
181 if(PURPLE_IS_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
182 if(PURPLE_IS_IM_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
183 PurpleConnection *connection = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
184
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
185 connection = purple_conversation_get_connection(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
186 pidgin_retrieve_user_info(connection,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
187 purple_conversation_get_name(selected));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
188 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
189 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
190 }
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 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
193 pidgin_conversation_window_invite(G_GNUC_UNUSED GSimpleAction *simple,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
194 G_GNUC_UNUSED GVariant *parameter,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
195 gpointer data)
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 PidginConversationWindow *window = data;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
198 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
199
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
200 selected = pidgin_conversation_window_get_selected(window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
201 if(PURPLE_IS_CHAT_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
202 GtkWidget *invite_dialog = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
203
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
204 invite_dialog = g_object_get_data(G_OBJECT(selected),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
205 "pidgin-invite-dialog");
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
206
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
207 if(!GTK_IS_WIDGET(invite_dialog)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
208 invite_dialog = pidgin_invite_dialog_new(PURPLE_CHAT_CONVERSATION(selected));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
209 g_object_set_data(G_OBJECT(selected), "pidgin-invite-dialog",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
210 invite_dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
211
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
212 gtk_window_set_transient_for(GTK_WINDOW(invite_dialog),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
213 GTK_WINDOW(window));
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
214 gtk_window_set_destroy_with_parent(GTK_WINDOW(invite_dialog), TRUE);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
215
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
216 g_signal_connect(invite_dialog, "response",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
217 G_CALLBACK(pidgin_conversation_window_invite_cb),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
218 NULL);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
219 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
220
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
221 gtk_widget_show_all(invite_dialog);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
222 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
223 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
224
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
225 static void
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
226 pidgin_conversation_window_send_file(G_GNUC_UNUSED GSimpleAction *simple,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
227 G_GNUC_UNUSED GVariant *parameter,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
228 gpointer data)
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
229 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
230 PidginConversationWindow *window = data;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
231 PurpleConversation *selected = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
232
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
233 selected = pidgin_conversation_window_get_selected(window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
234 if(PURPLE_IS_IM_CONVERSATION(selected)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
235 PurpleConnection *connection = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
236
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
237 connection = purple_conversation_get_connection(selected);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
238 purple_serv_send_file(connection,
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
239 purple_conversation_get_name(selected),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
240 NULL);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
241 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
242 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
243
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
244 static GActionEntry win_entries[] = {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
245 {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
246 .name = "alias",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
247 .activate = pidgin_conversation_window_alias
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
248 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
249 .name = "close",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
250 .activate = pidgin_conversation_window_close_conversation
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
251 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
252 .name = "get-info",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
253 .activate = pidgin_conversation_window_get_info
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
254 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
255 .name = "invite",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
256 .activate = pidgin_conversation_window_invite
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
257 }, {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
258 .name = "send-file",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
259 .activate = pidgin_conversation_window_send_file
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
260 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
261 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
262
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
263 /*<private>
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
264 * pidgin_conversation_window_conversation_actions:
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
265 *
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
266 * 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
267 */
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
268 static const gchar *pidgin_conversation_window_conversation_actions[] = {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
269 "alias",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
270 "close",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
271 "get-info",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
272 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
273 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
274
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
275 static const gchar *pidgin_conversation_window_im_conversation_actions[] = {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
276 "send-file",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
277 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
278 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
279
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
280 static const gchar *pidgin_conversation_window_chat_conversation_actions[] = {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
281 "invite",
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
282 NULL
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
283 };
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
284
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
285 /******************************************************************************
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
286 * Callbacks
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
287 *****************************************************************************/
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
288 static void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
289 pidgin_conversation_window_selection_changed(GtkTreeSelection *selection,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
290 gpointer data)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
291 {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
292 PidginConversationWindow *window = PIDGIN_CONVERSATION_WINDOW(data);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
293 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
294 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
295 gboolean changed = FALSE;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
296
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
297 if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
298 GObject *obj;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
299 gboolean is_conversation = FALSE;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
300 gboolean im_selected = FALSE, chat_selected = FALSE;
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
301 gchar *name = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
302
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
303 gtk_tree_model_get(model, &iter,
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
304 PIDGIN_CONVERSATION_WINDOW_COLUMN_NAME, &name,
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
305 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, &obj,
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
306 -1);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
307
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
308 gtk_stack_set_visible_child_name(GTK_STACK(window->stack), name);
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
309 g_free(name);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
310
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
311 changed = TRUE;
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
312
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
313 /* If a conversation is selected, enable the generic conversation
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
314 * actions.
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
315 */
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
316 is_conversation = PURPLE_IS_CONVERSATION(obj);
41484
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
317 pidgin_conversation_window_actions_set_enabled(G_ACTION_MAP(window),
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
318 pidgin_conversation_window_conversation_actions,
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
319 is_conversation);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
320
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
321 /* If an IM is selected, enable the IM-specific actions otherwise
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
322 * disable them.
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
323 */
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
324 im_selected = PURPLE_IS_IM_CONVERSATION(obj);
41484
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
325 pidgin_conversation_window_actions_set_enabled(G_ACTION_MAP(window),
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
326 pidgin_conversation_window_im_conversation_actions,
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
327 im_selected);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
328
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
329 /* If a chat is selected, enable the chat-specific actions otherwise
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
330 * disable them.
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
331 */
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
332 chat_selected = PURPLE_IS_CHAT_CONVERSATION(obj);
41484
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
333 pidgin_conversation_window_actions_set_enabled(G_ACTION_MAP(window),
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
334 pidgin_conversation_window_chat_conversation_actions,
abadfc227738 Fix warning when selecting Notifications tab
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41482
diff changeset
335 chat_selected);
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
336
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
337 g_clear_object(&obj);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
338 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
339
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
340 if(!changed) {
41443
60cec3b7ad30 Use a HdyStatusPage as a place holder for conversations
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
341 gtk_stack_set_visible_child_name(GTK_STACK(window->stack), "__conversations__");
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
342 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
343 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
344
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
345 static gboolean
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
346 pidgin_conversation_window_key_pressed_cb(GtkEventControllerKey *controller,
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
347 guint keyval,
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
348 G_GNUC_UNUSED guint keycode,
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
349 GdkModifierType state,
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
350 gpointer data)
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
351 {
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
352 PidginConversationWindow *window = data;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
353
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
354 /* If CTRL was held down... */
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
355 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
356 switch (keyval) {
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
357 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
358 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
359 case ']':
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
360 pidgin_conversation_window_select_next(window);
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
361 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
362 break;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
363
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
364 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
365 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
366 case '[':
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
367 pidgin_conversation_window_select_previous(window);
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
368 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
369 break;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
370 } /* End of switch */
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
371 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
372
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
373 /* If ALT (or whatever) was held down... */
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
374 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
375 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
376 guint switchto = keyval - '1';
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
377 pidgin_conversation_window_select_nth(window, switchto);
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
378
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
379 return TRUE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
380 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
381 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
382
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
383 return FALSE;
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
384 }
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
385
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 /******************************************************************************
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 * GObjectImplementation
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 static void
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
390 pidgin_conversation_window_dispose(GObject *obj) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
391 PidginConversationWindow *window = PIDGIN_CONVERSATION_WINDOW(obj);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
392
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
393 if(GTK_IS_TREE_MODEL(window->model)) {
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
394 GtkTreeModel *model = GTK_TREE_MODEL(window->model);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
395 GtkTreeIter parent, iter;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
396
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
397 gtk_tree_model_get_iter(model, &parent, window->conversation_path);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
398 if(gtk_tree_model_iter_children(model, &iter, &parent)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
399 gboolean valid = FALSE;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
400
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
401 /* gtk_tree_store_remove moves the iter to the next item at the
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
402 * same level, so we abuse that to do our iteration.
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
403 */
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
404 do {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
405 PurpleConversation *conversation = NULL;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
406
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
407 gtk_tree_model_get(model, &iter,
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
408 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, &conversation,
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
409 -1);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
410
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
411 if(PURPLE_IS_CONVERSATION(conversation)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
412 pidgin_conversation_detach(conversation);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
413
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
414 valid = gtk_tree_store_remove(window->model, &iter);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
415 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
416 } while(valid);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
417 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
418
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
419 g_clear_pointer(&window->conversation_path, gtk_tree_path_free);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
420 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
421
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
422 G_OBJECT_CLASS(pidgin_conversation_window_parent_class)->dispose(obj);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
423 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
424
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
425 static void
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
426 pidgin_conversation_window_init(PidginConversationWindow *window) {
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
427 GtkTreeIter iter;
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
428
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
429 gtk_widget_init_template(GTK_WIDGET(window));
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
430
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
431 gtk_window_set_application(GTK_WINDOW(window),
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
432 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
433
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
434 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
435 G_N_ELEMENTS(win_entries), window);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
436
41186
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
437 key = gtk_event_controller_key_new(GTK_WIDGET(window));
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
438 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
439 g_signal_connect(G_OBJECT(key), "key-pressed",
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
440 G_CALLBACK(pidgin_conversation_window_key_pressed_cb),
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
441 window);
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
442 g_object_set_data_full(G_OBJECT(window), "key-press-controller", key,
f8275d257afe Move conversation window key handling into its file
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41184
diff changeset
443 g_object_unref);
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
444
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
445 /* Add our toplevels to the tree store. */
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
446 gtk_tree_store_append(window->model, &iter, NULL);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
447 gtk_tree_store_set(window->model, &iter,
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
448 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, window->notification_list,
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
449 PIDGIN_CONVERSATION_WINDOW_COLUMN_NAME, "__notifications__",
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
450 PIDGIN_CONVERSATION_WINDOW_COLUMN_MARKUP, _("Notifications"),
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
451 -1);
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
452
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
453 gtk_tree_store_append(window->model, &iter, NULL);
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
454 gtk_tree_store_set(window->model, &iter,
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
455 PIDGIN_CONVERSATION_WINDOW_COLUMN_MARKUP, _("Conversations"),
41443
60cec3b7ad30 Use a HdyStatusPage as a place holder for conversations
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
456 PIDGIN_CONVERSATION_WINDOW_COLUMN_NAME, "__conversations__",
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
457 -1);
41476
1a53026013e4 Show conversations by default in the conversation window and set the select mode to browse
Gary Kramlich <grim@reaperworld.com>
parents: 41443
diff changeset
458 gtk_tree_selection_select_iter(window->selection, &iter);
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
459 window->conversation_path = gtk_tree_model_get_path(GTK_TREE_MODEL(window->model),
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
460 &iter);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
461 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
462
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
463 static void
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
464 pidgin_conversation_window_class_init(PidginConversationWindowClass *klass) {
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
465 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
466 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
467
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
468 obj_class->dispose = pidgin_conversation_window_dispose;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
469
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
470 /**
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
471 * PidginConversationWindow::conversation-switched:
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
472 * @window: The conversation window.
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
473 * @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
474 *
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41476
diff changeset
475 * 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
476 */
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
477 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
478 "conversation-switched",
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
479 G_OBJECT_CLASS_TYPE(obj_class),
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
480 G_SIGNAL_RUN_LAST,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
481 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
482 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
483 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
484 NULL,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
485 G_TYPE_NONE,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
486 1,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
487 PURPLE_TYPE_CONVERSATION
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
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
490 gtk_widget_class_set_template_from_resource(
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
491 widget_class,
41030
ec8b76f3bf0a Fix the resource path so we can use the automatic stuff that GtkApplication supports
Gary Kramlich <grim@reaperworld.com>
parents: 40629
diff changeset
492 "/im/pidgin/Pidgin3/Conversations/window.ui"
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
493 );
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
494
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
495 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
496 vbox);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
497
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
498 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
499 model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
500 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
501 view);
41476
1a53026013e4 Show conversations by default in the conversation window and set the select mode to browse
Gary Kramlich <grim@reaperworld.com>
parents: 41443
diff changeset
502 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
1a53026013e4 Show conversations by default in the conversation window and set the select mode to browse
Gary Kramlich <grim@reaperworld.com>
parents: 41443
diff changeset
503 selection);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
504
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
505 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
506 stack);
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
507 gtk_widget_class_bind_template_child(widget_class, PidginConversationWindow,
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
508 notification_list);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
509
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
510 gtk_widget_class_bind_template_callback(widget_class,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
511 pidgin_conversation_window_selection_changed);
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
512
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
513 gtk_widget_class_bind_template_callback(widget_class,
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
514 pidgin_conversation_window_key_pressed_cb);
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
515 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
516
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
517 /******************************************************************************
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
518 * API
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
519 *****************************************************************************/
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
520 GtkWidget *
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
521 pidgin_conversation_window_get_default(void) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
522 if(!GTK_IS_WIDGET(default_window)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
523 default_window = pidgin_conversation_window_new();
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
524 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
525 (gpointer)&default_window);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
526 }
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 return default_window;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
529 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
530
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
531 GtkWidget *
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
532 pidgin_conversation_window_new(void) {
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
533 return GTK_WIDGET(g_object_new(PIDGIN_TYPE_CONVERSATION_WINDOW, NULL));
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
534 }
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
535
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
536 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
537 pidgin_conversation_window_add(PidginConversationWindow *window,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
538 PurpleConversation *conversation)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
539 {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
540 PidginConversation *gtkconv = NULL;
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
541 GtkTreeIter parent, iter;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
542 GtkTreeModel *model = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
543 const gchar *markup = NULL;
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
544 gboolean expand = FALSE;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
545
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
546 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
547 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
548
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
549 model = GTK_TREE_MODEL(window->model);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
550 if(!gtk_tree_model_get_iter(model, &parent, window->conversation_path)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
551 /* If we can't find the conversation_path we have to bail. */
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
552 g_warning("couldn't get an iterator to conversation_path");
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
553
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
554 return;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
555 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
556
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
557 if(!gtk_tree_model_iter_has_child(model, &parent)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
558 expand = TRUE;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
559 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
560
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
561 markup = purple_conversation_get_name(conversation);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
562
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
563 gtkconv = PIDGIN_CONVERSATION(conversation);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
564 if(gtkconv != NULL) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
565 GtkWidget *parent = gtk_widget_get_parent(gtkconv->tab_cont);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
566
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
567 if(GTK_IS_WIDGET(parent)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
568 g_object_ref(gtkconv->tab_cont);
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
569 gtk_widget_unparent(gtkconv->tab_cont);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
570 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
571
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
572 gtk_stack_add_named(GTK_STACK(window->stack), gtkconv->tab_cont, markup);
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
573 gtk_widget_show(gtkconv->tab_cont);
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 if(GTK_IS_WIDGET(parent)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
576 g_object_unref(gtkconv->tab_cont);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
577 }
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
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
580 gtk_tree_store_prepend(window->model, &iter, &parent);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
581 gtk_tree_store_set(window->model, &iter,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
582 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, conversation,
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41254
diff changeset
583 PIDGIN_CONVERSATION_WINDOW_COLUMN_NAME, markup,
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
584 PIDGIN_CONVERSATION_WINDOW_COLUMN_MARKUP, markup,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
585 -1);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
586
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
587 /* If we just added the first child, expand the parent. */
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
588 if(expand) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
589 gtk_tree_view_expand_row(GTK_TREE_VIEW(window->view),
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
590 window->conversation_path, FALSE);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
591 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
592
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
593
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
594 if(!gtk_widget_is_visible(GTK_WIDGET(window))) {
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
595 gtk_widget_show(GTK_WIDGET(window));
41184
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 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
598
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
599 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
600 pidgin_conversation_window_remove(PidginConversationWindow *window,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
601 PurpleConversation *conversation)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
602 {
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
603 GtkTreeIter parent, iter;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
604 GtkTreeModel *model = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
605 GObject *obj = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
606
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
607 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
608 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
609
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
610 model = GTK_TREE_MODEL(window->model);
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
611
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
612 if(!gtk_tree_model_get_iter(model, &parent, window->conversation_path)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
613 /* The path is somehow invalid, so bail... */
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
614 return;
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
615 }
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
616
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
617 if(!gtk_tree_model_iter_children(model, &iter, &parent)) {
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
618 /* The conversations iter has no children. */
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
619 return;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
620 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
621
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
622 do {
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
623 gtk_tree_model_get(model, &iter,
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
624 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, &obj,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
625 -1);
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 if(PURPLE_CONVERSATION(obj) == conversation) {
41482
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
628 GtkWidget *child = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
629 const gchar *name = NULL;
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
630
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
631 name = purple_conversation_get_name(conversation);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
632 child = gtk_stack_get_child_by_name(GTK_STACK(window->stack),
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
633 name);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
634 if(GTK_IS_WIDGET(child)) {
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
635 gtk_container_remove(GTK_CONTAINER(window->stack), child);
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
636 }
c51a28d28a2d Start implementing the conversation window actions.
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
637
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
638 gtk_tree_store_remove(window->model, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
639
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
640 g_clear_object(&obj);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
641
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
642 break;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
643 }
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 g_clear_object(&obj);
41254
ef50e0dc74b0 Add a group for conversation in the PidginConversationWindow tree view
Gary Kramlich <grim@reaperworld.com>
parents: 41252
diff changeset
646 } while(gtk_tree_model_iter_next(model, &iter));
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
647 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
648
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
649 guint
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
650 pidgin_conversation_window_get_count(PidginConversationWindow *window) {
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
651 GtkSelectionModel *model = NULL;
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
652 guint count = 0;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
653
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
654 g_return_val_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window), 0);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
655
41527
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
656 model = gtk_stack_get_pages(GTK_STACK(window->stack));
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
657
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
658 count = g_list_model_get_n_items(G_LIST_MODEL(model));
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
659
4dff8cd4e9ea Convert PidginConversationWindow to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41484
diff changeset
660 g_object_unref(model);
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
661
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
662 return count;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
663 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
664
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
665 PurpleConversation *
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
666 pidgin_conversation_window_get_selected(PidginConversationWindow *window) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
667 PurpleConversation *conversation = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
668 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
669 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
670
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
671 g_return_val_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window), NULL);
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
672
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
673 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
674 if(gtk_tree_selection_get_selected(selection, NULL, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
675
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
676 gtk_tree_model_get(GTK_TREE_MODEL(window->model), &iter,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
677 PIDGIN_CONVERSATION_WINDOW_COLUMN_OBJECT, &conversation,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
678 -1);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
679 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
680
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
681 return conversation;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
682 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
683
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
684 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
685 pidgin_conversation_window_select(PidginConversationWindow *window,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
686 PurpleConversation *conversation)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
687 {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
688 const gchar *name = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
689
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
690 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
691 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
692
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
693 name = purple_conversation_get_name(conversation);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
694 gtk_stack_set_visible_child_name(GTK_STACK(window->stack), name);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
695 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
696
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
697 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
698 pidgin_conversation_window_select_previous(PidginConversationWindow *window) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
699 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
700 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
701 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
702 gboolean set = FALSE;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
703
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
704 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
705
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
706 model = GTK_TREE_MODEL(window->model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
707
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
708 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
709 if(gtk_tree_selection_get_selected(selection, NULL, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
710 if(gtk_tree_model_iter_previous(model, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
711 gtk_tree_selection_select_iter(selection, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
712 set = TRUE;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
713 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
714 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
715
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
716 if(!set) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
717 pidgin_conversation_window_select_last(window);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
718 }
40577
953d563429b8 Create a new PidginConversationWindow widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
719 }
41184
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
720
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
721
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
722 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
723 pidgin_conversation_window_select_next(PidginConversationWindow *window) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
724 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
725 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
726 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
727 gboolean set = FALSE;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
728
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
729 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
730
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
731 model = GTK_TREE_MODEL(window->model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
732
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
733 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
734 if(gtk_tree_selection_get_selected(selection, NULL, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
735 if(gtk_tree_model_iter_next(model, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
736 gtk_tree_selection_select_iter(selection, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
737 set = TRUE;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
738 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
739 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
740
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
741 if(!set) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
742 pidgin_conversation_window_select_first(window);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
743 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
744 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
745
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
746 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
747 pidgin_conversation_window_select_first(PidginConversationWindow *window) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
748 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
749 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
750
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
751 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
752
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
753 model = GTK_TREE_MODEL(window->model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
754
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
755 if(gtk_tree_model_get_iter_first(model, &iter)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
756 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
757
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
758 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
759 gtk_tree_selection_select_iter(selection, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
760 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
761 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
762
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
763 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
764 pidgin_conversation_window_select_last(PidginConversationWindow *window) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
765 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
766 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
767 gint count = 0;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
768
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
769 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
770
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
771 model = GTK_TREE_MODEL(window->model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
772 count = gtk_tree_model_iter_n_children(model, NULL);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
773
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
774 if(gtk_tree_model_iter_nth_child(model, &iter, NULL, count - 1)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
775 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
776
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
777 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
778 gtk_tree_selection_select_iter(selection, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
779 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
780 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
781
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
782 void
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
783 pidgin_conversation_window_select_nth(PidginConversationWindow *window,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
784 guint nth)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
785 {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
786 GtkTreeIter iter;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
787 GtkTreeModel *model = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
788
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
789 g_return_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
790
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
791 model = GTK_TREE_MODEL(window->model);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
792
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
793 if(gtk_tree_model_iter_nth_child(model, &iter, NULL, nth)) {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
794 GtkTreeSelection *selection = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
795
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
796 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(window->view));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
797 gtk_tree_selection_select_iter(selection, &iter);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
798 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
799 }
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
800
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
801 gboolean
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
802 pidgin_conversation_window_conversation_is_selected(PidginConversationWindow *window,
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
803 PurpleConversation *conversation)
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
804 {
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
805 const gchar *name = NULL, *visible = NULL;
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
806
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
807 g_return_val_if_fail(PIDGIN_IS_CONVERSATION_WINDOW(window), FALSE);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
808 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
809
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
810 name = purple_conversation_get_name(conversation);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
811 visible = gtk_stack_get_visible_child_name(GTK_STACK(window->stack));
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
812
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
813 return purple_strequal(name, visible);
05b5c210352b Move conversation management from gtkconv.c to PidginConversationWindow.
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
814 }

mercurial