Mercurial > pidgin
annotate src/gtkplugin.c @ 12926:2c4f20ff387c
[gaim-migrate @ 15279]
SF Patch #1403656 from Nick Hebner
"This patch makes plugin unloading take into account
plugins that depend on the plugin being unloaded. All
plugins dependent on the plugin in question are
unloaded before this plugin is, so there are not
problems with missing dependencies."
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Wed, 18 Jan 2006 18:21:59 +0000 |
| parents | bba0faa37f3a |
| children | 3cc18baeaca3 |
| 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 | |
| 12246 | 34 #define GAIM_RESPONSE_CONFIGURE 98121 |
| 35 | |
| 12343 | 36 static GtkWidget *expander = NULL; |
| 11740 | 37 static GtkWidget *plugin_dialog = NULL; |
| 38 static GtkWidget *plugin_details = NULL; | |
| 39 static GtkWidget *pref_button = NULL; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
40 static GHashTable *plugin_pref_dialogs = NULL; |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
41 |
| 5205 | 42 GtkWidget * |
| 43 gaim_gtk_plugin_get_config_frame(GaimPlugin *plugin) | |
| 44 { | |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
45 GtkWidget *config = NULL; |
| 5205 | 46 |
| 47 g_return_val_if_fail(plugin != NULL, NULL); | |
| 48 | |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
49 if (GAIM_IS_GTK_PLUGIN(plugin) && plugin->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
50 && GAIM_GTK_PLUGIN_UI_INFO(plugin)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
51 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
52 GaimGtkPluginUiInfo *ui_info; |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
53 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
54 ui_info = GAIM_GTK_PLUGIN_UI_INFO(plugin); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
55 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
56 config = ui_info->get_config_frame(plugin); |
| 5205 | 57 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
58 if (plugin->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
59 && plugin->info->prefs_info->get_plugin_pref_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
60 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
61 gaim_debug_warning("gtkplugin", |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
62 "Plugin %s contains both, ui_info and " |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
63 "prefs_info preferences; prefs_info will be " |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
64 "ignored.", plugin->info->name); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
65 } |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
66 } |
| 5205 | 67 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
68 if (config == NULL && plugin->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
69 && plugin->info->prefs_info->get_plugin_pref_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
70 { |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
71 GaimPluginPrefFrame *frame; |
| 5205 | 72 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
73 frame = plugin->info->prefs_info->get_plugin_pref_frame(plugin); |
|
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 config = gaim_gtk_plugin_pref_create_frame(frame); |
|
12870
a9cd674078b1
[gaim-migrate @ 15222]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12705
diff
changeset
|
76 |
|
12889
bba0faa37f3a
[gaim-migrate @ 15242]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12870
diff
changeset
|
77 /* XXX According to bug #1407047 this broke saving pluging preferences, I'll look at fixing it correctly later. |
|
12870
a9cd674078b1
[gaim-migrate @ 15222]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12705
diff
changeset
|
78 gaim_plugin_pref_frame_destroy(frame); |
|
12889
bba0faa37f3a
[gaim-migrate @ 15242]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12870
diff
changeset
|
79 */ |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
80 } |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
81 |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
82 return config; |
| 5205 | 83 } |
|
5981
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 void |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
86 gaim_gtk_plugins_save(void) |
|
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 GList *pl; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
89 GList *files = NULL; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
90 GaimPlugin *p; |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
91 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
92 for (pl = gaim_plugins_get_loaded(); pl != NULL; pl = pl->next) { |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
93 p = pl->data; |
|
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 if (p->info->type != GAIM_PLUGIN_PROTOCOL && |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
96 p->info->type != GAIM_PLUGIN_LOADER) { |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
97 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
98 files = g_list_append(files, p->path); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
99 } |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
100 } |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
101 |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
102 gaim_prefs_set_string_list("/gaim/gtk/plugins/loaded", files); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
103 g_list_free(files); |
|
81564bb4db68
[gaim-migrate @ 6429]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
104 } |
| 11740 | 105 |
| 106 static void | |
| 107 update_plugin_list(void *data) | |
| 108 { | |
| 109 GtkListStore *ls = GTK_LIST_STORE(data); | |
| 110 GtkTreeIter iter; | |
| 111 GList *probes; | |
| 112 GaimPlugin *plug; | |
| 113 | |
| 114 gtk_list_store_clear(ls); | |
| 12066 | 115 gaim_plugins_probe(G_MODULE_SUFFIX); |
| 11740 | 116 |
| 117 for (probes = gaim_plugins_get_all(); | |
| 118 probes != NULL; | |
| 119 probes = probes->next) | |
| 120 { | |
|
12702
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
121 char *name; |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
122 char *version; |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
123 char *summary; |
| 11740 | 124 char *desc; |
| 125 plug = probes->data; | |
| 126 | |
| 127 if (plug->info->type != GAIM_PLUGIN_STANDARD || | |
| 128 (plug->info->flags & GAIM_PLUGIN_FLAG_INVISIBLE)) | |
| 129 { | |
| 130 continue; | |
| 131 } | |
| 132 | |
| 133 gtk_list_store_append (ls, &iter); | |
|
12702
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
134 |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
135 name = g_markup_escape_text(plug->info->name ? _(plug->info->name) : g_basename(plug->path), -1); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
136 version = g_markup_escape_text(plug->info->version, -1); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
137 summary = g_markup_escape_text(_(plug->info->summary), -1); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
138 |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
139 desc = g_strdup_printf("<b>%s</b> %s\n%s", name, |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
140 version, |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
141 summary); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
142 g_free(name); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
143 g_free(version); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
144 g_free(summary); |
|
ba7834d6e2c9
[gaim-migrate @ 15045]
Richard Laager <rlaager@wiktel.com>
parents:
12695
diff
changeset
|
145 |
| 11740 | 146 gtk_list_store_set(ls, &iter, |
| 147 0, gaim_plugin_is_loaded(plug), | |
| 148 1, desc, | |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
149 2, plug, |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
150 3, gaim_plugin_is_unloadable(plug), |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
151 -1); |
| 11740 | 152 g_free(desc); |
| 153 } | |
| 154 } | |
| 155 | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
156 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
|
157 { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
158 switch (response) { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
159 case GTK_RESPONSE_CLOSE: |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
160 case GTK_RESPONSE_DELETE_EVENT: |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
161 g_hash_table_remove(plugin_pref_dialogs, plug); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
162 if (g_hash_table_size(plugin_pref_dialogs) == 0) { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
163 g_hash_table_destroy(plugin_pref_dialogs); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
164 plugin_pref_dialogs = NULL; |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
165 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
166 gtk_widget_destroy(d); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
167 break; |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
168 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
169 } |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
170 |
| 11740 | 171 static void plugin_load (GtkCellRendererToggle *cell, gchar *pth, gpointer data) |
| 172 { | |
| 173 GtkTreeModel *model = (GtkTreeModel *)data; | |
| 174 GtkTreeIter iter; | |
| 175 GtkTreePath *path = gtk_tree_path_new_from_string(pth); | |
| 176 GaimPlugin *plug; | |
| 177 gchar buf[1024]; | |
| 178 gchar *name = NULL, *description = NULL; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
179 GtkWidget *dialog = NULL; |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
180 GdkCursor *wait; |
| 11740 | 181 |
| 182 gtk_tree_model_get_iter (model, &iter, path); | |
| 183 gtk_tree_model_get (model, &iter, 2, &plug, -1); | |
| 184 | |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
185 /* Apparently, GTK+ won't honor the sensitive flag on cell renderers for booleans. */ |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
186 if (gaim_plugin_is_unloadable(plug)) |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
187 return; |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
188 |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
189 wait = gdk_cursor_new (GDK_WATCH); |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
190 gdk_window_set_cursor(plugin_dialog->window, wait); |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
191 gdk_cursor_unref(wait); |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
192 |
| 11740 | 193 if (!gaim_plugin_is_loaded(plug)) |
| 194 gaim_plugin_load(plug); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
195 else { |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
196 if (plugin_pref_dialogs != NULL && |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
197 (dialog = g_hash_table_lookup(plugin_pref_dialogs, plug))) |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
198 pref_dialog_response_cb(dialog, GTK_RESPONSE_DELETE_EVENT, plug); |
| 11740 | 199 gaim_plugin_unload(plug); |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
200 } |
| 11740 | 201 |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
202 gtk_widget_set_sensitive(pref_button, |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
203 gaim_plugin_is_loaded(plug) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
204 && ((GAIM_IS_GTK_PLUGIN(plug) && plug->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
205 && GAIM_GTK_PLUGIN_UI_INFO(plug)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
206 || (plug->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
207 && plug->info->prefs_info->get_plugin_pref_frame))); |
| 11740 | 208 |
| 11742 | 209 gdk_window_set_cursor(plugin_dialog->window, NULL); |
| 11740 | 210 |
| 211 name = g_markup_escape_text(_(plug->info->name), -1); | |
| 212 description = g_markup_escape_text(_(plug->info->description), -1); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
213 |
| 11740 | 214 if (plug->error != NULL) { |
| 215 gchar *error = g_markup_escape_text(plug->error, -1); | |
| 216 gchar *desc; | |
| 217 g_snprintf(buf, sizeof(buf), | |
| 218 "<span size=\"larger\">%s %s</span>\n\n" | |
| 219 "<span weight=\"bold\" color=\"red\">%s</span>\n\n" | |
| 220 "%s", | |
| 221 name, plug->info->version, error, description); | |
| 222 desc = g_strdup_printf("<b>%s</b> %s\n<span weight=\"bold\" color=\"red\"%s</span>", | |
| 223 plug->info->name, plug->info->version, error); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
224 gtk_list_store_set (GTK_LIST_STORE (model), &iter, |
| 11740 | 225 1, desc, |
| 226 -1); | |
| 227 g_free(desc); | |
| 228 g_free(error); | |
| 11843 | 229 gtk_label_set_markup(GTK_LABEL(plugin_details), buf); |
| 11740 | 230 } |
| 231 g_free(name); | |
| 232 g_free(description); | |
| 233 | |
| 234 | |
| 12246 | 235 gtk_list_store_set (GTK_LIST_STORE (model), &iter, |
| 236 0, gaim_plugin_is_loaded(plug), | |
| 11740 | 237 -1); |
| 238 | |
| 239 gtk_tree_path_free(path); | |
| 240 gaim_gtk_plugins_save(); | |
| 241 } | |
| 242 | |
| 11877 | 243 static gboolean ensure_plugin_visible(void *data) |
| 244 { | |
| 245 GtkTreeSelection *sel = GTK_TREE_SELECTION(data); | |
| 12246 | 246 GtkTreeView *tv = gtk_tree_selection_get_tree_view(sel); |
| 11877 | 247 GtkTreeModel *model = gtk_tree_view_get_model(tv); |
| 248 GtkTreePath *path; | |
| 249 GtkTreeIter iter; | |
| 250 if (!gtk_tree_selection_get_selected (sel, &model, &iter)) | |
| 251 return FALSE; | |
| 252 path = gtk_tree_model_get_path(model, &iter); | |
| 253 gtk_tree_view_scroll_to_cell(gtk_tree_selection_get_tree_view(sel), path, NULL, FALSE, 0, 0); | |
| 254 gtk_tree_path_free(path); | |
| 255 return FALSE; | |
| 256 } | |
| 257 | |
| 11740 | 258 static void prefs_plugin_sel (GtkTreeSelection *sel, GtkTreeModel *model) |
| 259 { | |
| 11741 | 260 gchar *buf, *pname, *pdesc, *pauth, *pweb; |
| 11740 | 261 GtkTreeIter iter; |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12343
diff
changeset
|
262 GValue val; |
| 11740 | 263 GaimPlugin *plug; |
| 264 | |
| 11833 | 265 if (!gtk_tree_selection_get_selected (sel, &model, &iter)) |
| 266 { | |
| 267 /* Clear the old plugin details */ | |
| 268 gtk_label_set_markup(GTK_LABEL(plugin_details), ""); | |
| 269 gtk_widget_set_sensitive(pref_button, FALSE); | |
| 12343 | 270 |
| 271 /* Collapse and disable the expander widget */ | |
| 272 gtk_expander_set_expanded(GTK_EXPANDER(expander), FALSE); | |
| 273 gtk_widget_set_sensitive(expander, FALSE); | |
| 274 | |
| 11740 | 275 return; |
| 11833 | 276 } |
| 277 | |
| 12343 | 278 gtk_widget_set_sensitive(expander, TRUE); |
| 279 | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12343
diff
changeset
|
280 val.g_type = 0; |
| 11740 | 281 gtk_tree_model_get_value (model, &iter, 2, &val); |
| 282 plug = g_value_get_pointer(&val); | |
| 283 | |
| 284 pname = g_markup_escape_text(_(plug->info->name), -1); | |
| 285 pdesc = (plug->info->description) ? | |
| 286 g_markup_escape_text(_(plug->info->description), -1) : NULL; | |
| 287 pauth = (plug->info->author) ? | |
| 288 g_markup_escape_text(_(plug->info->author), -1) : NULL; | |
| 289 pweb = (plug->info->homepage) ? | |
| 290 g_markup_escape_text(_(plug->info->homepage), -1) : NULL; | |
| 291 buf = g_strdup_printf( | |
|
11771
08b1dd8aa11c
[gaim-migrate @ 14062]
Richard Laager <rlaager@wiktel.com>
parents:
11770
diff
changeset
|
292 _("%s%s" |
| 11740 | 293 "<span weight=\"bold\">Written by:</span>\t%s\n" |
|
12705
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
294 "<span weight=\"bold\">Website:</span>\t\t%s\n" |
|
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
295 "<span weight=\"bold\">Filename:</span>\t\t%s"), |
|
11771
08b1dd8aa11c
[gaim-migrate @ 14062]
Richard Laager <rlaager@wiktel.com>
parents:
11770
diff
changeset
|
296 pdesc ? pdesc : "", pdesc ? "\n\n" : "", |
| 11740 | 297 pauth ? pauth : "", pweb ? pweb : "", plug->path); |
| 298 | |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
299 if (plug->error != NULL) |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
300 { |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
301 char *tmp = g_strdup_printf( |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
302 _("%s\n" |
|
12705
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
303 "<span foreground=\"#ff0000\" weight=\"bold\">" |
|
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
304 "Error: %s\n" |
|
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
305 "Check the plugin website for an update." |
|
31b860fcf1aa
[gaim-migrate @ 15048]
Richard Laager <rlaager@wiktel.com>
parents:
12702
diff
changeset
|
306 "</span>"), |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
307 buf, plug->error); |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
308 g_free(buf); |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
309 buf = tmp; |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
310 } |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
311 |
|
11817
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
312 gtk_widget_set_sensitive(pref_button, |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
313 gaim_plugin_is_loaded(plug) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
314 && ((GAIM_IS_GTK_PLUGIN(plug) && plug->info->ui_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
315 && GAIM_GTK_PLUGIN_UI_INFO(plug)->get_config_frame) |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
316 || (plug->info->prefs_info |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
317 && plug->info->prefs_info->get_plugin_pref_frame))); |
|
1bb0efbd4394
[gaim-migrate @ 14108]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11813
diff
changeset
|
318 |
| 11740 | 319 gtk_label_set_markup(GTK_LABEL(plugin_details), buf); |
| 11877 | 320 |
| 321 /* Make sure the selected plugin is still visible */ | |
| 322 g_idle_add(ensure_plugin_visible, sel); | |
| 323 | |
| 324 | |
| 11740 | 325 g_value_unset(&val); |
| 326 g_free(buf); | |
| 327 g_free(pname); | |
| 328 g_free(pdesc); | |
| 329 g_free(pauth); | |
| 330 g_free(pweb); | |
| 331 } | |
| 332 | |
| 11741 | 333 static void plugin_dialog_response_cb(GtkWidget *d, int response, GtkTreeSelection *sel) |
| 11740 | 334 { |
| 335 GaimPlugin *plug; | |
| 336 GtkWidget *dialog, *box; | |
| 337 GtkTreeModel *model; | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12343
diff
changeset
|
338 GValue val; |
| 11740 | 339 GtkTreeIter iter; |
| 340 | |
| 341 switch (response) { | |
| 342 case GTK_RESPONSE_CLOSE: | |
| 343 case GTK_RESPONSE_DELETE_EVENT: | |
| 344 gtk_widget_destroy(d); | |
| 11888 | 345 if (plugin_pref_dialogs != NULL) { |
| 346 g_hash_table_destroy(plugin_pref_dialogs); | |
| 347 plugin_pref_dialogs = NULL; | |
| 348 } | |
| 11740 | 349 plugin_dialog = NULL; |
| 350 break; | |
| 12246 | 351 case GAIM_RESPONSE_CONFIGURE: |
| 11740 | 352 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) |
| 353 return; | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12343
diff
changeset
|
354 val.g_type = 0; |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12343
diff
changeset
|
355 gtk_tree_model_get_value(model, &iter, 2, &val); |
| 11740 | 356 plug = g_value_get_pointer(&val); |
| 357 if (plug == NULL) | |
| 358 break; | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
359 if (plugin_pref_dialogs != NULL && |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
360 g_hash_table_lookup(plugin_pref_dialogs, plug)) |
| 11770 | 361 break; |
| 11740 | 362 box = gaim_gtk_plugin_get_config_frame(plug); |
| 363 if (box == NULL) | |
| 364 break; | |
| 365 | |
| 11741 | 366 dialog = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, GTK_WINDOW(d), |
| 11744 | 367 GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, |
| 11740 | 368 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, |
| 369 NULL); | |
|
11781
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
370 if (plugin_pref_dialogs == NULL) |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
371 plugin_pref_dialogs = g_hash_table_new(NULL, NULL); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
372 |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
373 g_hash_table_insert(plugin_pref_dialogs, plug, dialog); |
|
10317f1a2de2
[gaim-migrate @ 14072]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11777
diff
changeset
|
374 |
| 11770 | 375 g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response_cb), plug); |
| 11740 | 376 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), box); |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
377 gtk_window_set_role(GTK_WINDOW(dialog), "plugin_config"); |
| 12290 | 378 gtk_window_set_title(GTK_WINDOW(dialog), _(gaim_plugin_get_name(plug))); |
| 11740 | 379 gtk_widget_show_all(dialog); |
| 11770 | 380 g_value_unset(&val); |
| 11740 | 381 break; |
| 382 } | |
| 383 } | |
| 384 | |
|
12162
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
385 static void |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
386 show_plugin_prefs_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer null) |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
387 { |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
388 GtkTreeSelection *sel; |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
389 GtkTreeIter iter; |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
390 GaimPlugin *plugin; |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
391 GtkTreeModel *model; |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
392 |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
393 sel = gtk_tree_view_get_selection(view); |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
394 |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
395 if (!gtk_tree_selection_get_selected(sel, &model, &iter)) |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
396 return; |
| 12246 | 397 |
|
12162
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
398 gtk_tree_model_get(model, &iter, 2, &plugin, -1); |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
399 |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
400 if (!gaim_plugin_is_loaded(plugin)) |
|
12174
c7652a910308
[gaim-migrate @ 14476]
Richard Laager <rlaager@wiktel.com>
parents:
12162
diff
changeset
|
401 return; |
|
c7652a910308
[gaim-migrate @ 14476]
Richard Laager <rlaager@wiktel.com>
parents:
12162
diff
changeset
|
402 |
|
12162
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
403 /* Now show the pref-dialog for the plugin */ |
| 12246 | 404 plugin_dialog_response_cb(NULL, GAIM_RESPONSE_CONFIGURE, sel); |
|
12162
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
405 } |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
406 |
| 11740 | 407 void gaim_gtk_plugin_dialog_show() |
| 408 { | |
| 11741 | 409 GtkWidget *sw; |
| 11740 | 410 GtkWidget *event_view; |
| 411 GtkListStore *ls; | |
| 412 GtkCellRenderer *rend, *rendt; | |
| 413 GtkTreeViewColumn *col; | |
| 414 GtkTreeSelection *sel; | |
| 415 | |
| 416 if (plugin_dialog != NULL) { | |
| 417 gtk_window_present(GTK_WINDOW(plugin_dialog)); | |
| 418 return; | |
| 419 } | |
| 420 | |
| 421 plugin_dialog = gtk_dialog_new_with_buttons(_("Plugins"), | |
| 422 NULL, | |
| 423 GTK_DIALOG_NO_SEPARATOR, | |
| 424 NULL); | |
| 12246 | 425 pref_button = gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), |
|
12276
b3652193d359
[gaim-migrate @ 14580]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12246
diff
changeset
|
426 _("Configure Pl_ugin"), GAIM_RESPONSE_CONFIGURE); |
| 12246 | 427 gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), |
| 428 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); | |
|
11813
1f7f4f850db5
[gaim-migrate @ 14104]
Gary Kramlich <grim@reaperworld.com>
parents:
11794
diff
changeset
|
429 gtk_widget_set_sensitive(pref_button, FALSE); |
|
11747
b8bf638cc4aa
[gaim-migrate @ 14038]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11744
diff
changeset
|
430 gtk_window_set_role(GTK_WINDOW(plugin_dialog), "plugins"); |
| 11740 | 431 |
| 432 sw = gtk_scrolled_window_new(NULL,NULL); | |
| 433 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
| 434 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); | |
| 435 | |
| 436 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), sw, TRUE, TRUE, 0); | |
| 437 | |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
438 ls = gtk_list_store_new (4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN); |
| 11740 | 439 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), |
| 440 1, GTK_SORT_ASCENDING); | |
| 441 | |
| 442 update_plugin_list(ls); | |
|
11813
1f7f4f850db5
[gaim-migrate @ 14104]
Gary Kramlich <grim@reaperworld.com>
parents:
11794
diff
changeset
|
443 |
| 11740 | 444 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(ls)); |
| 445 | |
|
12162
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
446 g_signal_connect(G_OBJECT(event_view), "row-activated", |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
447 G_CALLBACK(show_plugin_prefs_cb), event_view); |
|
5e24b8e49522
[gaim-migrate @ 14463]
Richard Laager <rlaager@wiktel.com>
parents:
12066
diff
changeset
|
448 |
| 11740 | 449 rend = gtk_cell_renderer_toggle_new(); |
| 450 sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view)); | |
| 451 | |
| 452 col = gtk_tree_view_column_new_with_attributes (_("Enabled"), | |
| 453 rend, | |
| 454 "active", 0, | |
| 455 NULL); | |
| 456 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
|
457 gtk_tree_view_column_set_sort_column_id(col, 0); |
| 11740 | 458 g_signal_connect (G_OBJECT(rend), "toggled", |
| 459 G_CALLBACK(plugin_load), ls); | |
| 12246 | 460 |
| 11740 | 461 rendt = gtk_cell_renderer_text_new(); |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
462 g_object_set(rendt, |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
463 "foreground", "#c0c0c0", |
|
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
464 NULL); |
| 11740 | 465 col = gtk_tree_view_column_new_with_attributes (_("Name"), |
| 466 rendt, | |
| 467 "markup", 1, | |
|
12695
0bc110c7ab91
[gaim-migrate @ 15038]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
468 "foreground-set", 3, |
| 11740 | 469 NULL); |
| 470 #if GTK_CHECK_VERSION(2,6,0) | |
| 471 gtk_tree_view_column_set_expand (col, TRUE); | |
| 472 g_object_set(rendt, "ellipsize", PANGO_ELLIPSIZE_END, NULL); | |
| 473 #endif | |
| 474 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
|
475 gtk_tree_view_column_set_sort_column_id(col, 1); |
| 11740 | 476 g_object_unref(G_OBJECT(ls)); |
| 477 gtk_container_add(GTK_CONTAINER(sw), event_view); | |
| 12246 | 478 |
| 11740 | 479 expander = gtk_expander_new(_("<b>Plugin Details</b>")); |
| 480 gtk_expander_set_use_markup(GTK_EXPANDER(expander), TRUE); | |
| 481 plugin_details = gtk_label_new(NULL); | |
| 482 gtk_label_set_line_wrap(GTK_LABEL(plugin_details), TRUE); | |
| 483 gtk_container_add(GTK_CONTAINER(expander), plugin_details); | |
| 12343 | 484 gtk_widget_set_sensitive(expander, FALSE); |
| 11740 | 485 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), expander, FALSE, FALSE, 0); |
| 486 | |
| 487 g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (prefs_plugin_sel), NULL); | |
| 488 g_signal_connect(G_OBJECT(plugin_dialog), "response", G_CALLBACK(plugin_dialog_response_cb), sel); | |
| 489 gtk_window_set_default_size(GTK_WINDOW(plugin_dialog), 430, 430); | |
| 490 gtk_widget_show_all(plugin_dialog); | |
| 491 } |
