pidgin/pidginstatusmanager.c

Fri, 16 Sep 2022 01:54:11 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 16 Sep 2022 01:54:11 -0500
changeset 41694
83e6692c76a3
parent 41596
2f0fec76cfbc
child 42026
14aae1aaeb98
permissions
-rw-r--r--

Change the credential provider row active indicator to a CheckButton

Because I noticed that Adw has a style that is for this sort of thing.

Testing Done:
Opened Credential prefs, and changed selected provider. Also checked that clicking the check button didn't accidentally change its state without changing the row, and that it could not be selected by keyboard separately from the row.

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

41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include "pidginstatusmanager.h"
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include "pidginiconname.h"
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
26 #include "pidginstatuseditor.h"
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 enum {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 RESPONSE_USE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 RESPONSE_ADD,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 RESPONSE_MODIFY,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 RESPONSE_REMOVE
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 enum {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 COLUMN_TITLE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 COLUMN_ICON_NAME,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 COLUMN_TYPE,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 COLUMN_MESSAGE,
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
40 COLUMN_STATUS,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
41 COLUMN_EDITOR
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 struct _PidginStatusManager {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 GtkDialog parent;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 GtkListStore *model;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 GtkTreeSelection *selection;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 GtkWidget *use_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 GtkWidget *modify_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 GtkWidget *remove_button;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 };
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 G_DEFINE_TYPE(PidginStatusManager, pidgin_status_manager, GTK_TYPE_DIALOG)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
57 /* Ugh, prototypes :,( */
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
58 static void pidgin_status_editor_destroy_cb(GtkWidget *widget, gpointer data);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
59
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 * Helpers
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 *****************************************************************************/
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
63 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
64 pidgin_status_manager_show_editor(PidginStatusManager *manager) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
65 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
66 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
67 GtkTreeIter iter;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
68
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
69 if(gtk_tree_selection_count_selected_rows(manager->selection) == 0) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
70 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
71 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
72
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
73 gtk_tree_selection_get_selected(manager->selection, NULL, &iter);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
74 gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
75 COLUMN_STATUS, &status,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
76 COLUMN_EDITOR, &editor,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
77 -1);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
78
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
79 if(status == NULL) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
80 g_clear_object(&editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
81
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
82 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
83 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
84
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
85 if(!PIDGIN_IS_STATUS_EDITOR(editor)) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
86 editor = pidgin_status_editor_new(status);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
87
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
88 gtk_window_set_transient_for(GTK_WINDOW(editor), GTK_WINDOW(manager));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
89
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
90 gtk_list_store_set(manager->model, &iter, COLUMN_EDITOR, editor, -1);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
91 g_signal_connect_object(editor, "destroy",
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
92 G_CALLBACK(pidgin_status_editor_destroy_cb),
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
93 manager, 0);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
94
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
95 gtk_widget_show(editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
96 } else {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
97 gtk_window_present_with_time(GTK_WINDOW(editor), GDK_CURRENT_TIME);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
98 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
99 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
100
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
101 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
102 pidgin_status_manager_remove_selected(PidginStatusManager *manager) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
103 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
104 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
105 GtkTreeIter iter;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
106
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
107 if(gtk_tree_selection_count_selected_rows(manager->selection) == 0) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
108 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
109 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
110
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
111 gtk_tree_selection_get_selected(manager->selection, NULL, &iter);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
112 gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
113 COLUMN_STATUS, &status,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
114 COLUMN_EDITOR, &editor,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
115 -1);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
116
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
117 if(GTK_IS_WIDGET(editor)) {
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
118 gtk_window_destroy(GTK_WINDOW(editor));
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
119
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
120 g_clear_object(&editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
121 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
122
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
123 purple_savedstatus_delete_by_status(status);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
124 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
125
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 static PurpleSavedStatus *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 pidgin_status_manager_get_selected_status(PidginStatusManager *manager) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 PurpleSavedStatus *status = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 GtkTreeIter iter;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131 if(gtk_tree_selection_count_selected_rows(manager->selection) == 0) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 return NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 gtk_tree_selection_get_selected(manager->selection, NULL, &iter);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 COLUMN_STATUS, &status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 -1);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 return status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 pidgin_status_manager_add(PidginStatusManager *manager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145 PurpleSavedStatus *status)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 PurpleStatusPrimitive primitive;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 GtkTreeIter iter;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149 gchar *message = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 const gchar *icon_name = NULL, *type = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 message = purple_markup_strip_html(purple_savedstatus_get_message(status));
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 primitive = purple_savedstatus_get_primitive_type(status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 icon_name = pidgin_icon_name_from_status_primitive(primitive, NULL);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 type = purple_primitive_get_name_from_type(primitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 gtk_list_store_append(manager->model, &iter);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 gtk_list_store_set(manager->model, &iter,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 COLUMN_TITLE, purple_savedstatus_get_title(status),
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 COLUMN_ICON_NAME, icon_name,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 COLUMN_TYPE, type,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 COLUMN_MESSAGE, message,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 COLUMN_STATUS, status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 -1);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 g_free(message);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 pidgin_status_manager_populate_helper(gpointer data, gpointer user_data) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 PidginStatusManager *manager = user_data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 PurpleSavedStatus *status = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 if(!purple_savedstatus_is_transient(status)) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 pidgin_status_manager_add(manager, status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 pidgin_status_manager_refresh(PidginStatusManager *manager) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182 GList *statuses = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 gtk_list_store_clear(manager->model);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 statuses = purple_savedstatuses_get_all();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 g_list_foreach(statuses, pidgin_status_manager_populate_helper, manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 * Callbacks
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 pidgin_status_manager_response_cb(GtkDialog *dialog, gint response_id,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 PurpleSavedStatus *status = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
199 GtkWidget *editor = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 switch(response_id) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202 case RESPONSE_USE:
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 status = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205 purple_savedstatus_activate(status);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 case RESPONSE_ADD:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
209 editor = pidgin_status_editor_new(NULL);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
210 gtk_window_set_transient_for(GTK_WINDOW(editor),
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
211 GTK_WINDOW(manager));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
212 gtk_widget_show(editor);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 case RESPONSE_MODIFY:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
215 pidgin_status_manager_show_editor(manager);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218 case RESPONSE_REMOVE:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
219 pidgin_status_manager_remove_selected(manager);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 case GTK_RESPONSE_CLOSE:
41596
2f0fec76cfbc Handle delete event in more dialogs (probably all, but can't be too sure.)
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41542
diff changeset
222 case GTK_RESPONSE_DELETE_EVENT:
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
223 gtk_window_destroy(GTK_WINDOW(dialog));
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 pidgin_status_manager_row_activated_cb(G_GNUC_UNUSED GtkTreeView *tree_view,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 GtkTreePath *path,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231 G_GNUC_UNUSED GtkTreeViewColumn *column,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 GtkTreeIter iter;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 if(gtk_tree_model_get_iter(GTK_TREE_MODEL(manager->model), &iter, path)) {
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
238 gtk_tree_selection_select_iter(manager->selection, &iter);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
240 pidgin_status_manager_show_editor(manager);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 pidgin_status_manager_selection_changed_cb(GtkTreeSelection *selection,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 gboolean sensitive = TRUE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 if(gtk_tree_selection_count_selected_rows(selection) == 0) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 sensitive = FALSE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255 gtk_widget_set_sensitive(manager->use_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 gtk_widget_set_sensitive(manager->modify_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 /* Only enable the remove button if the currently selected row is not the
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 * currently active status.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 if(sensitive) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 PurpleSavedStatus *status = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 status = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 sensitive = status != purple_savedstatus_get_current();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 gtk_widget_set_sensitive(manager->remove_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 pidgin_status_manager_savedstatus_changed_cb(PurpleSavedStatus *new_status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 G_GNUC_UNUSED PurpleSavedStatus *old_status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 PurpleSavedStatus *selected = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280 /* Disable the remove button if the selected status is the currently active
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 * status.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 selected = pidgin_status_manager_get_selected_status(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 if(selected != NULL) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 gboolean sensitive = selected != new_status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 gtk_widget_set_sensitive(manager->remove_button, sensitive);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 pidgin_status_manager_savedstatus_updated_cb(G_GNUC_UNUSED PurpleSavedStatus *status,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
300 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
301 pidgin_status_editor_destroy_cb(GtkWidget *widget, gpointer data) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
302 PidginStatusManager *manager = data;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
303 GtkTreeIter iter;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
304
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
305 if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(manager->model), &iter)) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
306 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
307 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
308
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
309 do {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
310 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
311
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
312 gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
313 COLUMN_EDITOR, &editor,
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
314 -1);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
315
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
316 /* Check if editor is the widget being destroyed. */
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
317 if(editor == widget) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
318 /* It is, so set it back to NULL and unreference the copy we just
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
319 * got.
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
320 */
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
321 gtk_list_store_set(manager->model, &iter, COLUMN_EDITOR, NULL, -1);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
322 g_clear_object(&editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
323
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
324 break;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
325 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
326
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
327 g_clear_object(&editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
328 } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(manager->model), &iter));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
329 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
330
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 * GObject Implementation
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 pidgin_status_manager_finalize(GObject *obj) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 purple_signals_disconnect_by_handle(obj);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 G_OBJECT_CLASS(pidgin_status_manager_parent_class)->finalize(obj);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 pidgin_status_manager_init(PidginStatusManager *manager) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 gpointer handle = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 gtk_widget_init_template(GTK_WIDGET(manager));
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 handle = purple_savedstatuses_get_handle();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 purple_signal_connect(handle, "savedstatus-changed", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
351 G_CALLBACK(pidgin_status_manager_savedstatus_changed_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 purple_signal_connect(handle, "savedstatus-added", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
354 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 purple_signal_connect(handle, "savedstatus-deleted", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
357 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 purple_signal_connect(handle, "savedstatus-modified", manager,
41314
0dc72eacd8bf Replace PURPLE_CALLBACK by G_CALLBACK
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41306
diff changeset
360 G_CALLBACK(pidgin_status_manager_savedstatus_updated_cb),
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 pidgin_status_manager_class_init(PidginStatusManagerClass *klass) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369 obj_class->finalize = pidgin_status_manager_finalize;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 gtk_widget_class_set_template_from_resource(
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372 widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 "/im/pidgin/Pidgin3/Status/manager.ui"
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 );
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 model);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 selection);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 use_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 modify_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 gtk_widget_class_bind_template_child(widget_class, PidginStatusManager,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 remove_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 gtk_widget_class_bind_template_callback(widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 pidgin_status_manager_response_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 gtk_widget_class_bind_template_callback(widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 pidgin_status_manager_row_activated_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 gtk_widget_class_bind_template_callback(widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 pidgin_status_manager_selection_changed_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396 * Public API
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 GtkWidget *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399 pidgin_status_manager_new(void) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 return g_object_new(PIDGIN_TYPE_STATUS_MANAGER, NULL);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 }

mercurial