pidgin/pidginchanneljoindialog.c

Mon, 23 Oct 2023 22:08:37 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 23 Oct 2023 22:08:37 -0500
changeset 42383
e8302a55fddb
parent 42377
6e3f1f8709b5
child 42450
bd1327c022d4
permissions
-rw-r--r--

Create PurpleIdleManager for managing idle states

Testing Done:
Ran the unit tests

Bugs closed: PIDGIN-17818

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

42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <glib/gi18n.h>
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidginchanneljoindialog.h"
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "pidginaccountrow.h"
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 #include "pidgincore.h"
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 struct _PidginChannelJoinDialog {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 GtkWindow parent;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 GtkWidget *account;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 GtkCustomFilter *filter;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 GtkWidget *entries;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 GtkWidget *name;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 GtkWidget *nickname;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 GtkWidget *password;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 GtkWidget *error;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 GtkWidget *join;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 GtkWidget *cancel;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 GCancellable *cancellable;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 PurpleChannelJoinDetails *details;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 };
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 G_DEFINE_TYPE(PidginChannelJoinDialog, pidgin_channel_join_dialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 GTK_TYPE_WINDOW)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 /******************************************************************************
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 * Helpers
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 *****************************************************************************/
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 static gboolean
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 pidgin_channel_join_dialog_filter_accounts(gpointer item,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 G_GNUC_UNUSED gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 if(PURPLE_IS_ACCOUNT(item)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 PurpleAccount *account = PURPLE_ACCOUNT(item);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 PurpleProtocol *protocol = purple_account_get_protocol(account);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 if(PURPLE_IS_PROTOCOL(protocol)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 return PURPLE_PROTOCOL_IMPLEMENTS(protocol, CONVERSATION,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 get_channel_join_details);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 return FALSE;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 pidgin_channel_join_dialog_update(PidginChannelJoinDialog *dialog) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 PurpleAccount *account = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 PurpleChannelJoinDetails *details = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 PurpleProtocol *protocol = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 PurpleProtocolConversation *protocol_conversation = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 account = pidgin_account_row_get_account(PIDGIN_ACCOUNT_ROW(dialog->account));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 if(!PURPLE_IS_ACCOUNT(account)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 return;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 protocol = purple_account_get_protocol(account);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 if(!PURPLE_IS_PROTOCOL_CONVERSATION(protocol)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 return;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 protocol_conversation = PURPLE_PROTOCOL_CONVERSATION(protocol);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 details = purple_protocol_conversation_get_channel_join_details(protocol_conversation,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 account);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 if(PURPLE_IS_CHANNEL_JOIN_DETAILS(details)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 purple_channel_join_details_merge(details, dialog->details);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97 static gboolean
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 pidgin_channel_join_dialog_details_to_row(G_GNUC_UNUSED GBinding *binding,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 const GValue *from_value,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 GValue *to_value,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 G_GNUC_UNUSED gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 const char *str = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 str = g_value_get_string(from_value);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106 if(purple_strempty(str)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 g_value_set_string(to_value, "");
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 } else {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 g_value_set_string(to_value, str);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 return TRUE;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 static gboolean
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 pidgin_channel_join_dialog_row_to_details(G_GNUC_UNUSED GBinding *binding,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117 const GValue *from_value,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 GValue *to_value,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 G_GNUC_UNUSED gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 const char *str = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 str = g_value_get_string(from_value);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 if(purple_strempty(str)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125 g_value_set_string(to_value, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 } else {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 g_value_set_string(to_value, str);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 return TRUE;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 /******************************************************************************
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134 * Callbacks
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 *****************************************************************************/
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 pidgin_channel_join_dialog_account_changed_cb(G_GNUC_UNUSED GObject *obj,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 G_GNUC_UNUSED GParamSpec *pspec,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 pidgin_channel_join_dialog_update(data);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 pidgin_channel_join_dialog_join_named_changed_cb(GtkEditable *self,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 PidginChannelJoinDialog *dialog = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 const char *text = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 gboolean sensitive = FALSE;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 text = gtk_editable_get_text(self);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 sensitive = !purple_strempty(text);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 gtk_widget_set_sensitive(dialog->join, sensitive);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 pidgin_channel_join_dialog_cancelled_cb(G_GNUC_UNUSED GCancellable *cancellable,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 PidginChannelJoinDialog *dialog = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 gtk_widget_set_sensitive(dialog->entries, TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 gtk_widget_set_sensitive(dialog->join, TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 gtk_widget_set_sensitive(dialog->cancel, TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 g_clear_object(&dialog->cancellable);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 pidgin_channel_join_dialog_cancel_clicked(G_GNUC_UNUSED GtkButton *self,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 PidginChannelJoinDialog *dialog = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 gtk_widget_set_sensitive(dialog->cancel, FALSE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 /* Check if the user is cancelling a join that was started but hadn't
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 * completed yet.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 if(G_IS_CANCELLABLE(dialog->cancellable)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 if(!g_cancellable_is_cancelled(dialog->cancellable)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 g_cancellable_cancel(dialog->cancellable);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 g_clear_object(&dialog->cancellable);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 return;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 gtk_window_destroy(GTK_WINDOW(dialog));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 pidgin_channel_join_dialog_join_cb(GObject *source, GAsyncResult *result,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 PidginChannelJoinDialog *dialog = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 PurpleProtocolConversation *protocol_conversation = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 GError *error = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 gboolean joined = FALSE;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 protocol_conversation = PURPLE_PROTOCOL_CONVERSATION(source);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 joined = purple_protocol_conversation_join_channel_finish(protocol_conversation,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 result, &error);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 if(!joined) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210 const char *error_message = _("Unknown error");
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 if(error != NULL) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 error_message = error->message;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 gtk_label_set_text(GTK_LABEL(dialog->error), error_message);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 gtk_widget_set_sensitive(dialog->entries, TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 gtk_widget_set_sensitive(dialog->join, TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 } else {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 g_clear_object(&dialog->cancellable);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 gtk_window_destroy(GTK_WINDOW(dialog));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 g_clear_error(&error);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 pidgin_channel_join_dialog_join_clicked(G_GNUC_UNUSED GtkButton *self,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 PidginChannelJoinDialog *dialog = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 PurpleAccount *account = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 PurpleProtocol *protocol = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 PurpleProtocolConversation *protocol_conversation = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 gtk_label_set_text(GTK_LABEL(dialog->error), "");
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 gtk_widget_set_sensitive(dialog->entries, FALSE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240 gtk_widget_set_sensitive(dialog->join, FALSE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 account = pidgin_account_row_get_account(PIDGIN_ACCOUNT_ROW(dialog->account));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 if(!PURPLE_IS_ACCOUNT(account)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 return;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 protocol = purple_account_get_protocol(account);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 if(!PURPLE_IS_PROTOCOL_CONVERSATION(protocol)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 return;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 g_return_if_fail(!G_IS_CANCELLABLE(dialog->cancellable));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 dialog->cancellable = g_cancellable_new();
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 g_cancellable_connect(dialog->cancellable,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 G_CALLBACK(pidgin_channel_join_dialog_cancelled_cb),
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 dialog, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 protocol_conversation = PURPLE_PROTOCOL_CONVERSATION(protocol);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 purple_protocol_conversation_join_channel_async(protocol_conversation,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 account,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 dialog->details,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 dialog->cancellable,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 pidgin_channel_join_dialog_join_cb,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 dialog);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 /******************************************************************************
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 * GObject Implementation
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 *****************************************************************************/
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 pidgin_channel_join_dialog_finalize(GObject *obj) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 PidginChannelJoinDialog *dialog = PIDGIN_CHANNEL_JOIN_DIALOG(obj);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 g_clear_object(&dialog->cancellable);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 g_clear_object(&dialog->details);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 G_OBJECT_CLASS(pidgin_channel_join_dialog_parent_class)->finalize(obj);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 pidgin_channel_join_dialog_init(PidginChannelJoinDialog *dialog) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 gtk_widget_init_template(GTK_WIDGET(dialog));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 gtk_custom_filter_set_filter_func(dialog->filter,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 pidgin_channel_join_dialog_filter_accounts,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 NULL, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 dialog->details = purple_channel_join_details_new(FALSE, FALSE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 /* Bind the visible properties. */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 g_object_bind_property(dialog->details, "nickname-supported",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 dialog->nickname, "visible",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 g_object_bind_property(dialog->details, "password-supported",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 dialog->password, "visible",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 /* Bind the data properties. */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 g_object_bind_property_full(dialog->details, "name",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 dialog->name, "text",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 pidgin_channel_join_dialog_details_to_row,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305 pidgin_channel_join_dialog_row_to_details,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 NULL, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 g_object_bind_property_full(dialog->details, "nickname",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 dialog->nickname, "text",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 pidgin_channel_join_dialog_details_to_row,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311 pidgin_channel_join_dialog_row_to_details,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 NULL, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 g_object_bind_property_full(dialog->details, "password",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314 dialog->password, "text",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315 G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 pidgin_channel_join_dialog_details_to_row,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317 pidgin_channel_join_dialog_row_to_details,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 NULL, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 /* Make sure we are synchronized with the account that is selected. */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321 pidgin_channel_join_dialog_update(dialog);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
322 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 static void
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325 pidgin_channel_join_dialog_class_init(PidginChannelJoinDialogClass *klass) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 obj_class->finalize = pidgin_channel_join_dialog_finalize;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 gtk_widget_class_set_template_from_resource(
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 widget_class,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 "/im/pidgin/Pidgin3/channeljoindialog.ui"
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 );
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 account);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 filter);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 entries);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 name);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 nickname);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 password);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 error);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 join);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 gtk_widget_class_bind_template_child(widget_class, PidginChannelJoinDialog,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 cancel);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 gtk_widget_class_bind_template_callback(widget_class,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 pidgin_channel_join_dialog_account_changed_cb);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 gtk_widget_class_bind_template_callback(widget_class,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 pidgin_channel_join_dialog_join_named_changed_cb);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 gtk_widget_class_bind_template_callback(widget_class,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360 pidgin_channel_join_dialog_cancel_clicked);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 gtk_widget_class_bind_template_callback(widget_class,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 pidgin_channel_join_dialog_join_clicked);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 /******************************************************************************
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 * Public API
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 *****************************************************************************/
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 GtkWidget *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369 pidgin_channel_join_dialog_new(void) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 return g_object_new(PIDGIN_TYPE_CHANNEL_JOIN_DIALOG, NULL);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 }

mercurial