pidgin/pidginstatusmanager.c

Wed, 29 Mar 2023 23:33:48 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Wed, 29 Mar 2023 23:33:48 -0500
changeset 42189
4784cd60a1f8
parent 42106
eafcc5051015
child 42198
4df23def5fe0
permissions
-rw-r--r--

Use Adwaita widgets in status editor

The `PidginStatusChooser` is also changed from a `GtkDropDown` to a `AdwComboRow` as everything that uses it is now in an `AdwPreferencesGroup`.

Also simplifies a bit of the status editor by using responses instead of widgets.

Testing Done:
Compiled and opened Statuses, modified an existing one and confirmed the dialog was reloaded correctly and appeared to work.

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

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
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
47 GListStore *model;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
48 GtkSingleSelection *selection;
41306
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) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
65 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
66 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
67 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
68
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
69 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
70 status = g_object_get_data(wrapper, "savedstatus");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
71 editor = g_object_get_data(wrapper, "editor");
41356
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 if(status == NULL) {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
74 return;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
75 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
76
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
77 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
78 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
79
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
80 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
81
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
82 g_object_set_data(wrapper, "editor", editor);
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
83 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
84 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
85 manager, 0);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
86
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
87 gtk_widget_show(editor);
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
88 } else {
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
89 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
90 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
91 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
92
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
93 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
94 pidgin_status_manager_remove_selected(PidginStatusManager *manager) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
95 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
96 PurpleSavedStatus *status = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
97 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
98
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
99 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
100 status = g_object_get_data(wrapper, "savedstatus");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
101 editor = g_object_get_data(wrapper, "editor");
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
102
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
103 if(GTK_IS_WIDGET(editor)) {
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
104 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
105 }
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 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
108 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
109
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 static PurpleSavedStatus *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 pidgin_status_manager_get_selected_status(PidginStatusManager *manager) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
112 GObject *wrapper = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113 PurpleSavedStatus *status = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
115 wrapper = gtk_single_selection_get_selected_item(manager->selection);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
116 status = g_object_get_data(wrapper, "savedstatus");
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 return status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 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
123 PurpleSavedStatus *status)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
125 GObject *wrapper = NULL;
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 PurpleStatusPrimitive primitive;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 gchar *message = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128 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
129
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 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
131
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 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
133 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
134 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
135
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
136 /* PurpleSavedStatus is a boxed type, so it can't be put in a GListModel;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
137 * instead create a wrapper GObject instance to hold its information. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
138 wrapper = g_object_new(G_TYPE_OBJECT, NULL);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
139 g_object_set_data(wrapper, "savedstatus", status);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
140 g_object_set_data_full(wrapper, "title",
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
141 g_strdup(purple_savedstatus_get_title(status)),
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
142 g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
143 g_object_set_data_full(wrapper, "icon-name", g_strdup(icon_name), g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
144 g_object_set_data_full(wrapper, "type", g_strdup(type), g_free);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
145 g_object_set_data_full(wrapper, "message", g_strdup(message), g_free);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
147 g_list_store_append(manager->model, wrapper);
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
148
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
149 g_free(message);
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
150 g_object_unref(wrapper);
41306
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
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 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
155 PidginStatusManager *manager = user_data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156 PurpleSavedStatus *status = data;
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 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
159 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
160 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 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
165 GList *statuses = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
167 g_list_store_remove_all(manager->model);
41306
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 statuses = purple_savedstatuses_get_all();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 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
171 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 * Callbacks
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 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
178 gpointer data)
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 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 PurpleSavedStatus *status = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
182 GtkWidget *editor = NULL;
41306
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 switch(response_id) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 case RESPONSE_USE:
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 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
187
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 purple_savedstatus_activate(status);
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 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 case RESPONSE_ADD:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
192 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
193 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
194 GTK_WINDOW(manager));
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
195 gtk_widget_show(editor);
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197 case RESPONSE_MODIFY:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
198 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
199
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 case RESPONSE_REMOVE:
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
202 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
203 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 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
205 case GTK_RESPONSE_DELETE_EVENT:
41542
e0ff7bea9eb3 Port PidginStatusManager to GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41356
diff changeset
206 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
207 break;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
211 static char *
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
212 pidgin_status_manager_sort_data_cb(GObject *wrapper, const char *name,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
213 G_GNUC_UNUSED gpointer data)
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214 {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
215 const char *value = NULL;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
216
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
217 if(G_IS_OBJECT(wrapper)) {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
218 value = g_object_get_data(wrapper, name);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
219 }
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
221 /* NOTE: Most GTK widget properties don't care if you return NULL, but the
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
222 * GtkStringSorter does some string comparisons without checking for NULL,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
223 * so we need to ensure that non-NULL is returned to prevent runtime
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
224 * warnings. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
225 return g_strdup(value ? value : "");
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
226 }
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
228 /* A closure from within a GtkBuilderListItemFactory passes an extra first
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
229 * argument, so we need to drop that to re-use the above callback. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
230 static char *
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
231 pidgin_status_manager_lookup_text_data_cb(G_GNUC_UNUSED GObject *self,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
232 GObject *wrapper, const char *name,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
233 gpointer data)
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
234 {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
235 return pidgin_status_manager_sort_data_cb(wrapper, name, data);
41306
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
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 static void
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
239 pidgin_status_manager_row_activated_cb(G_GNUC_UNUSED GtkColumnView *self,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
240 guint position, gpointer data)
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
241 {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
242 PidginStatusManager *manager = data;
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
243
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
244 gtk_single_selection_set_selected(manager->selection, position);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
245 pidgin_status_manager_show_editor(manager);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
246 }
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
247
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
248 static void
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
249 pidgin_status_manager_selection_changed_cb(G_GNUC_UNUSED GObject *object,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
250 G_GNUC_UNUSED GParamSpec *pspec,
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 gboolean sensitive = TRUE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
256 if(g_list_model_get_n_items(G_LIST_MODEL(manager->model)) == 0) {
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257 sensitive = FALSE;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260 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
261 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
262
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 /* 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
264 * currently active status.
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 if(sensitive) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 PurpleSavedStatus *status = NULL;
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 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
270
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 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
272 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 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
275 }
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 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 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
279 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
280 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283 PurpleSavedStatus *selected = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 /* 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
286 * status.
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 */
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 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
289 if(selected != NULL) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 gboolean sensitive = selected != new_status;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292 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
293 }
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
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 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
298 gpointer data)
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 PidginStatusManager *manager = data;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
305 static void
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
306 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
307 PidginStatusManager *manager = data;
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
308 GListModel *model = G_LIST_MODEL(manager->model);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
309 guint n_items = 0;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
310
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
311 n_items = g_list_model_get_n_items(model);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
312 for(guint index = 0; index < n_items; index++) {
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
313 GObject *wrapper = NULL;
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
314 GtkWidget *editor = NULL;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
315
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
316 wrapper = g_list_model_get_item(model, index);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
317 editor = g_object_get_data(wrapper, "editor");
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
318
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
319 /* 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
320 if(editor == widget) {
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
321 /* It is, so set it back to NULL to remove it from the wrapper. */
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
322 g_object_set_data(wrapper, "editor", NULL);
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
323 g_object_unref(wrapper);
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
324
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
325 break;
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
326 }
42106
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
327
eafcc5051015 Fix leak in Status Manager dialog
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42026
diff changeset
328 g_object_unref(wrapper);
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
329 }
41356
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
330 }
9753153c49fc Add a new templated PidginStatusEditor and wire it up.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
331
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333 * GObject Implementation
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 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
337 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
338
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339 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
340 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 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
344 gpointer handle = NULL;
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 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
347
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 pidgin_status_manager_refresh(manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 handle = purple_savedstatuses_get_handle();
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 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
352 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
353 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 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
355 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
356 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357 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
358 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
359 manager);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360 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
361 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
362 manager);
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
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 static void
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366 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
367 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
368 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
369
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 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
371
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372 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
373 widget_class,
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 "/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
375 );
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 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
378 model);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379 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
380 selection);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 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
382 use_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 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
384 modify_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 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
386 remove_button);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 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
389 pidgin_status_manager_response_cb);
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 gtk_widget_class_bind_template_callback(widget_class,
42026
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
391 pidgin_status_manager_lookup_text_data_cb);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
392 gtk_widget_class_bind_template_callback(widget_class,
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
393 pidgin_status_manager_sort_data_cb);
14aae1aaeb98 Convert GtkTreeView in status editor to GtkColumnView
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41596
diff changeset
394 gtk_widget_class_bind_template_callback(widget_class,
41306
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 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
396 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
397 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
398 }
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 /******************************************************************************
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 * Public API
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 *****************************************************************************/
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 GtkWidget *
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404 pidgin_status_manager_new(void) {
8befd71928c2 Create a new status manager that's built in glade
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 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
406 }

mercurial