Mercurial > pidgin
annotate src/gtkplugin.c @ 11851:3bfb2cffcef2
[gaim-migrate @ 14142]
inspired by Richard Stellingwerff's patch 1339606, this workaround for
annoying visible borders on tab close buttons is no longer required with
at least gtk 2.6 (if someone can confirm if it was fixed in 2.4 we could
remove it there too)
committer: Tailor Script <tailor@pidgin.im>
| author | Stu Tomlinson <stu@nosnilmot.com> |
|---|---|
| date | Thu, 27 Oct 2005 15:15:52 +0000 |
| parents | 6539e6aa8ae6 |
| children | f1f7c83d7b6c |
| rev | line source |
|---|---|
| 5205 | 1 /** |
|
6927
ee51189dfe76
[gaim-migrate @ 7474]
Christian Hammond <chipx86@chipx86.com>
parents:
5982
diff
changeset
|
2 * @file gtkplugin.c GTK+ Plugins support |
|
ee51189dfe76
[gaim-migrate @ 7474]
Christian Hammond <chipx86@chipx86.com>
parents:
5982
diff
changeset
|
3 * @ingroup gtkui |
| 5205 | 4 * |
| 5 * gaim | |
| 6 * | |
| 8046 | 7 * Gaim is the legal property of its developers, whose names are too numerous |
| 8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 * source distribution. | |
|
6927
ee51189dfe76
[gaim-migrate @ 7474]
Christian Hammond <chipx86@chipx86.com>
parents:
5982
diff
changeset
|
10 * |
| 5205 | 11 * This program is free software; you can redistribute it and/or modify |
| 12 * it under the terms of the GNU General Public License as published by | |
| 13 * the Free Software Foundation; either version 2 of the License, or | |
| 14 * (at your option) any later version. | |
| 15 * | |
| 16 * This program is distributed in the hope that it will be useful, | |
| 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 * GNU General Public License for more details. | |
| 20 * | |
| 21 * You should have received a copy of the GNU General Public License | |
| 22 * along with this program; if not, write to the Free Software | |
| 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 */ | |
| 11740 | 25 #include "internal.h" |
| 9791 | 26 #include "gtkgaim.h" |
| 5205 | 27 #include "gtkplugin.h" |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
28 #include "gtkpluginpref.h" |
|
5981
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
29 #include "debug.h" |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
30 #include "prefs.h" |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
31 |
| 5205 | 32 #include <string.h> |
| 33 | |
| 11740 | 34 static GtkWidget *plugin_dialog = NULL; |
| 35 static GtkWidget *plugin_details = NULL; | |
| 36 static GtkWidget *pref_button = NULL; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
37 static GHashTable *plugin_pref_dialogs = NULL; |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
38 |
| 5205 | 39 GtkWidget * |
| 40 gaim_gtk_plugin_get_config_frame(GaimPlugin *plugin) | |
| 41 { | |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
42 GtkWidget *config = NULL; |
| 5205 | 43 |
| 44 g_return_val_if_fail(plugin != NULL, NULL); | |
| 45 | |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
46 if (GAIM_IS_GTK_PLUGIN(plugin) && plugin->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
47 && GAIM_GTK_PLUGIN_UI_INFO(plugin)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
48 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
49 GaimGtkPluginUiInfo *ui_info; |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
50 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
51 ui_info = GAIM_GTK_PLUGIN_UI_INFO(plugin); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
52 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
53 config = ui_info->get_config_frame(plugin); |
| 5205 | 54 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
55 if (plugin->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
56 && plugin->info->prefs_info->get_plugin_pref_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
57 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
58 gaim_debug_warning("gtkplugin", |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
59 "Plugin %s contains both, ui_info and " |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
60 "prefs_info preferences; prefs_info will be " |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
61 "ignored.", plugin->info->name); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
62 } |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
63 } |
| 5205 | 64 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
65 if (config == NULL && plugin->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
66 && plugin->info->prefs_info->get_plugin_pref_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
67 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
68 GaimPluginPrefFrame *frame; |
| 5205 | 69 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
70 frame = plugin->info->prefs_info->get_plugin_pref_frame(plugin); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
71 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
72 config = gaim_gtk_plugin_pref_create_frame(frame); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
73 } |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
74 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
75 return config; |
| 5205 | 76 } |
|
5981
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
77 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
78 void |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
79 gaim_gtk_plugins_save(void) |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
80 { |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
81 GList *pl; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
82 GList *files = NULL; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
83 GaimPlugin *p; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
84 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
85 for (pl = gaim_plugins_get_loaded(); pl != NULL; pl = pl->next) { |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
86 p = pl->data; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
87 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
88 if (p->info->type != GAIM_PLUGIN_PROTOCOL && |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
89 p->info->type != GAIM_PLUGIN_LOADER) { |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
90 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
91 files = g_list_append(files, p->path); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
92 } |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
93 } |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
94 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
95 gaim_prefs_set_string_list("/gaim/gtk/plugins/loaded", files); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
96 g_list_free(files); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
97 } |
| 11740 | 98 |
| 99 static void | |
| 100 update_plugin_list(void *data) | |
| 101 { | |
| 102 GtkListStore *ls = GTK_LIST_STORE(data); | |
| 103 GtkTreeIter iter; | |
| 104 GList *probes; | |
| 105 GaimPlugin *plug; | |
| 106 | |
| 107 gtk_list_store_clear(ls); | |
| 108 gaim_plugins_probe(GAIM_PLUGIN_EXT); | |
| 109 | |
| 110 for (probes = gaim_plugins_get_all(); | |
| 111 probes != NULL; | |
| 112 probes = probes->next) | |
| 113 { | |
| 114 char *desc; | |
| 115 plug = probes->data; | |
| 116 | |
| 117 if (plug->info->type != GAIM_PLUGIN_STANDARD || | |
| 118 (plug->info->flags & GAIM_PLUGIN_FLAG_INVISIBLE)) | |
| 119 { | |
| 120 continue; | |
| 121 } | |
| 122 | |
| 123 gtk_list_store_append (ls, &iter); | |
| 124 desc = g_strdup_printf("<b>%s</b> %s\n%s", plug->info->name ? _(plug->info->name) : g_basename(plug->path), | |
| 125 plug->info->version, | |
| 126 plug->info->summary); | |
| 127 gtk_list_store_set(ls, &iter, | |
| 128 0, gaim_plugin_is_loaded(plug), | |
| 129 1, desc, | |
| 130 2, plug, -1); | |
| 131 g_free(desc); | |
| 132 } | |
| 133 } | |
| 134 | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
135 static void pref_dialog_response_cb(GtkWidget *d, int response, GaimPlugin *plug) |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
136 { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
137 switch (response) { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
138 case GTK_RESPONSE_CLOSE: |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
139 case GTK_RESPONSE_DELETE_EVENT: |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
140 g_hash_table_remove(plugin_pref_dialogs, plug); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
141 if (g_hash_table_size(plugin_pref_dialogs) == 0) { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
142 g_hash_table_destroy(plugin_pref_dialogs); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
143 plugin_pref_dialogs = NULL; |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
144 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
145 gtk_widget_destroy(d); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
146 break; |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
147 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
148 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
149 |
| 11740 | 150 static void plugin_load (GtkCellRendererToggle *cell, gchar *pth, gpointer data) |
| 151 { | |
| 152 GtkTreeModel *model = (GtkTreeModel *)data; | |
| 153 GtkTreeIter iter; | |
| 154 GtkTreePath *path = gtk_tree_path_new_from_string(pth); | |
| 155 GaimPlugin *plug; | |
| 156 gchar buf[1024]; | |
| 157 gchar *name = NULL, *description = NULL; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
158 GtkWidget *dialog = NULL; |
| 11740 | 159 |
| 160 GdkCursor *wait = gdk_cursor_new (GDK_WATCH); | |
| 11742 | 161 gdk_window_set_cursor(plugin_dialog->window, wait); |
| 11740 | 162 gdk_cursor_unref(wait); |
| 163 | |
| 164 gtk_tree_model_get_iter (model, &iter, path); | |
| 165 gtk_tree_model_get (model, &iter, 2, &plug, -1); | |
| 166 | |
| 167 if (!gaim_plugin_is_loaded(plug)) | |
| 168 gaim_plugin_load(plug); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
169 else { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
170 if (plugin_pref_dialogs != NULL && |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
171 (dialog = g_hash_table_lookup(plugin_pref_dialogs, plug))) |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
172 pref_dialog_response_cb(dialog, GTK_RESPONSE_DELETE_EVENT, plug); |
| 11740 | 173 gaim_plugin_unload(plug); |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
174 } |
| 11740 | 175 |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
176 gtk_widget_set_sensitive(pref_button, |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
177 gaim_plugin_is_loaded(plug) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
178 && ((GAIM_IS_GTK_PLUGIN(plug) && plug->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
179 && GAIM_GTK_PLUGIN_UI_INFO(plug)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
180 || (plug->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
181 && plug->info->prefs_info->get_plugin_pref_frame))); |
| 11740 | 182 |
| 11742 | 183 gdk_window_set_cursor(plugin_dialog->window, NULL); |
| 11740 | 184 |
| 185 name = g_markup_escape_text(_(plug->info->name), -1); | |
| 186 description = g_markup_escape_text(_(plug->info->description), -1); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
187 |
| 11740 | 188 if (plug->error != NULL) { |
| 189 gchar *error = g_markup_escape_text(plug->error, -1); | |
| 190 gchar *desc; | |
| 191 g_snprintf(buf, sizeof(buf), | |
| 192 "<span size=\"larger\">%s %s</span>\n\n" | |
| 193 "<span weight=\"bold\" color=\"red\">%s</span>\n\n" | |
| 194 "%s", | |
| 195 name, plug->info->version, error, description); | |
| 196 desc = g_strdup_printf("<b>%s</b> %s\n<span weight=\"bold\" color=\"red\"%s</span>", | |
| 197 plug->info->name, plug->info->version, error); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
198 gtk_list_store_set (GTK_LIST_STORE (model), &iter, |
| 11740 | 199 1, desc, |
| 200 -1); | |
| 201 g_free(desc); | |
| 202 g_free(error); | |
| 11843 | 203 gtk_label_set_markup(GTK_LABEL(plugin_details), buf); |
| 11740 | 204 } |
| 205 g_free(name); | |
| 206 g_free(description); | |
| 207 | |
| 208 | |
| 209 gtk_list_store_set (GTK_LIST_STORE (model), &iter, | |
| 210 0, gaim_plugin_is_loaded(plug), | |
| 211 -1); | |
| 212 | |
| 213 gtk_tree_path_free(path); | |
| 214 gaim_gtk_plugins_save(); | |
| 215 } | |
| 216 | |
| 217 static void prefs_plugin_sel (GtkTreeSelection *sel, GtkTreeModel *model) | |
| 218 { | |
| 11741 | 219 gchar *buf, *pname, *pdesc, *pauth, *pweb; |
| 11740 | 220 GtkTreeIter iter; |
| 221 GValue val = { 0, }; | |
| 222 GaimPlugin *plug; | |
| 223 | |
| 11833 | 224 if (!gtk_tree_selection_get_selected (sel, &model, &iter)) |
| 225 { | |
| 226 /* Clear the old plugin details */ | |
| 227 gtk_label_set_markup(GTK_LABEL(plugin_details), ""); | |
| 228 gtk_widget_set_sensitive(pref_button, FALSE); | |
| 11740 | 229 return; |
| 11833 | 230 } |
| 231 | |
| 11740 | 232 gtk_tree_model_get_value (model, &iter, 2, &val); |
| 233 plug = g_value_get_pointer(&val); | |
| 234 | |
| 235 pname = g_markup_escape_text(_(plug->info->name), -1); | |
| 236 pdesc = (plug->info->description) ? | |
| 237 g_markup_escape_text(_(plug->info->description), -1) : NULL; | |
| 238 pauth = (plug->info->author) ? | |
| 239 g_markup_escape_text(_(plug->info->author), -1) : NULL; | |
| 240 pweb = (plug->info->homepage) ? | |
| 241 g_markup_escape_text(_(plug->info->homepage), -1) : NULL; | |
| 242 buf = g_strdup_printf( | |
|
11771
08b1dd8aa11c
[gaim-migrate @ 14062]
Richard Laager <rlaager@wiktel.com>
parents:
11770
diff
changeset
|
243 _("%s%s" |
| 11740 | 244 "<span weight=\"bold\">Written by:</span>\t%s\n" |
|
11777
1253620ea5f2
[gaim-migrate @ 14068]
Richard Laager <rlaager@wiktel.com>
parents:
11775
diff
changeset
|
245 "<span weight=\"bold\">Web site:</span>\t\t%s\n" |
| 11740 | 246 "<span weight=\"bold\">File name:</span>\t%s"), |
|
11771
08b1dd8aa11c
[gaim-migrate @ 14062]
Richard Laager <rlaager@wiktel.com>
parents:
11770
diff
changeset
|
247 pdesc ? pdesc : "", pdesc ? "\n\n" : "", |
| 11740 | 248 pauth ? pauth : "", pweb ? pweb : "", plug->path); |
| 249 | |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
250 gtk_widget_set_sensitive(pref_button, |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
251 gaim_plugin_is_loaded(plug) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
252 && ((GAIM_IS_GTK_PLUGIN(plug) && plug->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
253 && GAIM_GTK_PLUGIN_UI_INFO(plug)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
254 || (plug->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
255 && plug->info->prefs_info->get_plugin_pref_frame))); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
256 |
| 11740 | 257 gtk_label_set_markup(GTK_LABEL(plugin_details), buf); |
| 258 g_value_unset(&val); | |
| 259 g_free(buf); | |
| 260 g_free(pname); | |
| 261 g_free(pdesc); | |
| 262 g_free(pauth); | |
| 263 g_free(pweb); | |
| 264 } | |
| 265 | |
| 11741 | 266 static void plugin_dialog_response_cb(GtkWidget *d, int response, GtkTreeSelection *sel) |
| 11740 | 267 { |
| 268 GaimPlugin *plug; | |
| 269 GtkWidget *dialog, *box; | |
| 270 GtkTreeModel *model; | |
| 11743 | 271 GValue val = { 0, }; |
| 11740 | 272 GtkTreeIter iter; |
| 273 | |
| 274 switch (response) { | |
| 275 case GTK_RESPONSE_CLOSE: | |
| 276 case GTK_RESPONSE_DELETE_EVENT: | |
| 277 gtk_widget_destroy(d); | |
| 278 plugin_dialog = NULL; | |
| 279 break; | |
| 280 case 98121: | |
| 281 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) | |
| 282 return; | |
| 283 gtk_tree_model_get_value (model, &iter, 2, &val); | |
| 284 plug = g_value_get_pointer(&val); | |
| 285 if (plug == NULL) | |
| 286 break; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
287 if (plugin_pref_dialogs != NULL && |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
288 g_hash_table_lookup(plugin_pref_dialogs, plug)) |
| 11770 | 289 break; |
| 11740 | 290 box = gaim_gtk_plugin_get_config_frame(plug); |
| 291 if (box == NULL) | |
| 292 break; | |
| 293 | |
| 11741 | 294 dialog = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, GTK_WINDOW(d), |
| 11744 | 295 GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, |
| 11740 | 296 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, |
| 297 NULL); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
298 if (plugin_pref_dialogs == NULL) |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
299 plugin_pref_dialogs = g_hash_table_new(NULL, NULL); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
300 |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
301 g_hash_table_insert(plugin_pref_dialogs, plug, dialog); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
302 |
| 11770 | 303 g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response_cb), plug); |
| 11740 | 304 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), box); |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
305 gtk_window_set_role(GTK_WINDOW(dialog), "plugin_config"); |
|
11775
400b802cd62b
[gaim-migrate @ 14066]
Gary Kramlich <grim@reaperworld.com>
parents:
11771
diff
changeset
|
306 gtk_window_set_title(GTK_WINDOW(dialog), gaim_plugin_get_name(plug)); |
| 11740 | 307 gtk_widget_show_all(dialog); |
| 11770 | 308 g_value_unset(&val); |
| 11740 | 309 break; |
| 310 } | |
| 311 } | |
| 312 | |
| 313 void gaim_gtk_plugin_dialog_show() | |
| 314 { | |
| 11741 | 315 GtkWidget *sw; |
| 11740 | 316 GtkWidget *event_view; |
| 317 GtkListStore *ls; | |
| 318 GtkCellRenderer *rend, *rendt; | |
| 319 GtkTreeViewColumn *col; | |
| 320 GtkTreeSelection *sel; | |
| 321 GtkWidget *expander; | |
| 322 | |
| 323 if (plugin_dialog != NULL) { | |
| 324 gtk_window_present(GTK_WINDOW(plugin_dialog)); | |
| 325 return; | |
| 326 } | |
| 327 | |
| 328 plugin_dialog = gtk_dialog_new_with_buttons(_("Plugins"), | |
| 329 NULL, | |
| 330 GTK_DIALOG_NO_SEPARATOR, | |
| 331 NULL); | |
| 332 pref_button = gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), GTK_STOCK_PREFERENCES, 98121); | |
| 333 gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); | |
|
11813
1f7f4f850db5
[gaim-migrate @ 14104]
Gary Kramlich <grim@reaperworld.com>
parents:
11794
diff
changeset
|
334 gtk_widget_set_sensitive(pref_button, FALSE); |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
335 gtk_window_set_role(GTK_WINDOW(plugin_dialog), "plugins"); |
| 11740 | 336 |
| 337 sw = gtk_scrolled_window_new(NULL,NULL); | |
| 338 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
| 339 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); | |
| 340 | |
| 341 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), sw, TRUE, TRUE, 0); | |
| 342 | |
| 343 ls = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER); | |
| 344 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), | |
| 345 1, GTK_SORT_ASCENDING); | |
| 346 | |
| 347 update_plugin_list(ls); | |
|
11813
1f7f4f850db5
[gaim-migrate @ 14104]
Gary Kramlich <grim@reaperworld.com>
parents:
11794
diff
changeset
|
348 |
| 11740 | 349 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(ls)); |
| 350 | |
| 351 rend = gtk_cell_renderer_toggle_new(); | |
| 352 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view)); | |
| 353 | |
| 354 col = gtk_tree_view_column_new_with_attributes (_("Enabled"), | |
| 355 rend, | |
| 356 "active", 0, | |
| 357 NULL); | |
| 358 gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); | |
|
11794
f5105a2b8bf6
[gaim-migrate @ 14085]
Gary Kramlich <grim@reaperworld.com>
parents:
11783
diff
changeset
|
359 gtk_tree_view_column_set_sort_column_id(col, 0); |
| 11740 | 360 g_signal_connect (G_OBJECT(rend), "toggled", |
| 361 G_CALLBACK(plugin_load), ls); | |
| 362 | |
| 363 rendt = gtk_cell_renderer_text_new(); | |
| 364 col = gtk_tree_view_column_new_with_attributes (_("Name"), | |
| 365 rendt, | |
| 366 "markup", 1, | |
| 367 NULL); | |
| 368 #if GTK_CHECK_VERSION(2,6,0) | |
| 369 gtk_tree_view_column_set_expand (col, TRUE); | |
| 370 g_object_set(rendt, "ellipsize", PANGO_ELLIPSIZE_END, NULL); | |
| 371 #endif | |
| 372 gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); | |
|
11794
f5105a2b8bf6
[gaim-migrate @ 14085]
Gary Kramlich <grim@reaperworld.com>
parents:
11783
diff
changeset
|
373 gtk_tree_view_column_set_sort_column_id(col, 1); |
| 11740 | 374 g_object_unref(G_OBJECT(ls)); |
| 375 gtk_container_add(GTK_CONTAINER(sw), event_view); | |
| 376 | |
| 377 expander = gtk_expander_new(_("<b>Plugin Details</b>")); | |
| 378 gtk_expander_set_use_markup(GTK_EXPANDER(expander), TRUE); | |
| 379 plugin_details = gtk_label_new(NULL); | |
| 380 gtk_label_set_line_wrap(GTK_LABEL(plugin_details), TRUE); | |
| 381 gtk_container_add(GTK_CONTAINER(expander), plugin_details); | |
| 382 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), expander, FALSE, FALSE, 0); | |
| 383 | |
| 384 g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (prefs_plugin_sel), NULL); | |
| 385 g_signal_connect(G_OBJECT(plugin_dialog), "response", G_CALLBACK(plugin_dialog_response_cb), sel); | |
| 386 gtk_window_set_default_size(GTK_WINDOW(plugin_dialog), 430, 430); | |
| 387 gtk_widget_show_all(plugin_dialog); | |
| 388 } |
