pidgin/gtkprefs.c

branch
cpw.qulogic.gtk3
changeset 32347
169ee59389a1
parent 27607
1d8bffba0505
parent 27439
482df00eccd3
child 32365
0c722056e496
equal deleted inserted replaced
27948:212f39e44359 32347:169ee59389a1
174 gtk_widget_show(entry); 174 gtk_widget_show(entry);
175 175
176 return pidgin_add_widget_to_vbox(GTK_BOX(page), title, sg, entry, TRUE, NULL); 176 return pidgin_add_widget_to_vbox(GTK_BOX(page), title, sg, entry, TRUE, NULL);
177 } 177 }
178 178
179 /* TODO: Maybe move this up somewheres... */
180 enum {
181 PREF_DROPDOWN_TEXT,
182 PREF_DROPDOWN_VALUE,
183 PREF_DROPDOWN_COUNT
184 };
179 185
180 static void 186 static void
181 dropdown_set(GObject *w, const char *key) 187 dropdown_set(GObject *w, const char *key)
182 { 188 {
183 const char *str_value; 189 const char *str_value;
184 int int_value; 190 int int_value;
191 gboolean bool_value;
185 PurplePrefType type; 192 PurplePrefType type;
186 193
194 #if GTK_CHECK_VERSION(2,4,0)
195 GtkTreeIter iter;
196 GtkTreeModel *tree_model;
197
198 tree_model = gtk_combo_box_get_model(GTK_COMBO_BOX(w));
199 gtk_combo_box_get_active_iter(GTK_COMBO_BOX(w), &iter);
200
201 type = GPOINTER_TO_INT(g_object_get_data(w, "type"));
202
203 if (type == PURPLE_PREF_INT) {
204 gtk_tree_model_get(tree_model, &iter,
205 PREF_DROPDOWN_VALUE, &int_value,
206 -1);
207
208 purple_prefs_set_int(key, int_value);
209 }
210 else if (type == PURPLE_PREF_STRING) {
211 gtk_tree_model_get(tree_model, &iter,
212 PREF_DROPDOWN_VALUE, &str_value,
213 -1);
214
215 purple_prefs_set_string(key, str_value);
216 }
217 else if (type == PURPLE_PREF_BOOLEAN) {
218 gtk_tree_model_get(tree_model, &iter,
219 PREF_DROPDOWN_VALUE, &bool_value,
220 -1);
221
222 purple_prefs_set_bool(key, bool_value);
223 }
224 #else
187 type = GPOINTER_TO_INT(g_object_get_data(w, "type")); 225 type = GPOINTER_TO_INT(g_object_get_data(w, "type"));
188 226
189 if (type == PURPLE_PREF_INT) { 227 if (type == PURPLE_PREF_INT) {
190 int_value = GPOINTER_TO_INT(g_object_get_data(w, "value")); 228 int_value = GPOINTER_TO_INT(g_object_get_data(w, "value"));
191 229
195 str_value = (const char *)g_object_get_data(w, "value"); 233 str_value = (const char *)g_object_get_data(w, "value");
196 234
197 purple_prefs_set_string(key, str_value); 235 purple_prefs_set_string(key, str_value);
198 } 236 }
199 else if (type == PURPLE_PREF_BOOLEAN) { 237 else if (type == PURPLE_PREF_BOOLEAN) {
200 purple_prefs_set_bool(key, 238 bool_value = (gboolean)GPOINTER_TO_INT(g_object_get_data(w, "value"));
201 GPOINTER_TO_INT(g_object_get_data(w, "value"))); 239 purple_prefs_set_bool(key, bool_value);
202 } 240 }
241 #endif
203 } 242 }
204 243
205 GtkWidget * 244 GtkWidget *
206 pidgin_prefs_dropdown_from_list(GtkWidget *box, const gchar *title, 245 pidgin_prefs_dropdown_from_list(GtkWidget *box, const gchar *title,
207 PurplePrefType type, const char *key, GList *menuitems) 246 PurplePrefType type, const char *key, GList *menuitems)
208 { 247 {
209 GtkWidget *dropdown, *opt, *menu; 248 GtkWidget *dropdown;
210 GtkWidget *label = NULL; 249 GtkWidget *label = NULL;
211 gchar *text; 250 gchar *text;
212 const char *stored_str = NULL; 251 const char *stored_str = NULL;
213 int stored_int = 0; 252 int stored_int = 0;
253 gboolean stored_bool = FALSE;
214 int int_value = 0; 254 int int_value = 0;
215 const char *str_value = NULL; 255 const char *str_value = NULL;
256 gboolean bool_value = FALSE;
257 #if GTK_CHECK_VERSION(2,4,0)
258 GtkListStore *store;
259 GtkTreeIter iter;
260 GtkTreeIter active;
261 GtkCellRenderer *renderer;
262
263 g_return_val_if_fail(menuitems != NULL, NULL);
264
265 if (type == PURPLE_PREF_INT) {
266 store = gtk_list_store_new(PREF_DROPDOWN_COUNT, G_TYPE_STRING, G_TYPE_INT);
267 stored_int = purple_prefs_get_int(key);
268 } else if (type == PURPLE_PREF_STRING) {
269 store = gtk_list_store_new(PREF_DROPDOWN_COUNT, G_TYPE_STRING, G_TYPE_STRING);
270 stored_str = purple_prefs_get_string(key);
271 } else if (type == PURPLE_PREF_BOOLEAN) {
272 store = gtk_list_store_new(PREF_DROPDOWN_COUNT, G_TYPE_STRING, G_TYPE_BOOLEAN);
273 stored_bool = purple_prefs_get_bool(key);
274 }
275
276 dropdown = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
277 g_object_set_data(G_OBJECT(dropdown), "type", GINT_TO_POINTER(type));
278
279 while (menuitems != NULL && (text = (char *)menuitems->data) != NULL) {
280 menuitems = g_list_next(menuitems);
281 g_return_val_if_fail(menuitems != NULL, NULL);
282
283 gtk_list_store_append(store, &iter);
284 gtk_list_store_set(store, &iter,
285 PREF_DROPDOWN_TEXT, text,
286 -1);
287
288 if (type == PURPLE_PREF_INT) {
289 int_value = GPOINTER_TO_INT(menuitems->data);
290 gtk_list_store_set(store, &iter,
291 PREF_DROPDOWN_VALUE, int_value,
292 -1);
293 }
294 else if (type == PURPLE_PREF_STRING) {
295 str_value = (const char *)menuitems->data;
296 gtk_list_store_set(store, &iter,
297 PREF_DROPDOWN_VALUE, str_value,
298 -1);
299 }
300 else if (type == PURPLE_PREF_BOOLEAN) {
301 bool_value = (gboolean)GPOINTER_TO_INT(menuitems->data);
302 gtk_list_store_set(store, &iter,
303 PREF_DROPDOWN_VALUE, bool_value,
304 -1);
305 }
306
307 if ((type == PURPLE_PREF_INT && stored_int == int_value) ||
308 (type == PURPLE_PREF_STRING && stored_str != NULL &&
309 !strcmp(stored_str, str_value)) ||
310 (type == PURPLE_PREF_BOOLEAN &&
311 (stored_bool == bool_value))) {
312
313 active = iter;
314 }
315
316 menuitems = g_list_next(menuitems);
317 }
318
319 renderer = gtk_cell_renderer_text_new();
320 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dropdown), renderer, TRUE);
321 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dropdown), renderer,
322 "text", 0,
323 NULL);
324
325 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(dropdown), &active);
326
327 g_signal_connect(G_OBJECT(dropdown), "changed",
328 G_CALLBACK(dropdown_set), (char *)key);
329
330 #else
331 GtkWidget *opt, *menu;
216 int o = 0; 332 int o = 0;
217 333
218 g_return_val_if_fail(menuitems != NULL, NULL); 334 g_return_val_if_fail(menuitems != NULL, NULL);
219 335
220 #if 0 /* GTK_CHECK_VERSION(2,4,0) */
221 if(type == PURPLE_PREF_INT)
222 model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
223 else if(type == PURPLE_PREF_STRING)
224 model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
225 dropdown = gtk_combo_box_new_with_model(model);
226 #else
227 dropdown = gtk_option_menu_new(); 336 dropdown = gtk_option_menu_new();
228 menu = gtk_menu_new(); 337 menu = gtk_menu_new();
229 #endif
230 338
231 if (type == PURPLE_PREF_INT) 339 if (type == PURPLE_PREF_INT)
232 stored_int = purple_prefs_get_int(key); 340 stored_int = purple_prefs_get_int(key);
233 else if (type == PURPLE_PREF_STRING) 341 else if (type == PURPLE_PREF_STRING)
234 stored_str = purple_prefs_get_string(key); 342 stored_str = purple_prefs_get_string(key);
235 343 else if (type == PURPLE_PREF_BOOLEAN)
236 while (menuitems != NULL && (text = (char *) menuitems->data) != NULL) { 344 stored_bool = purple_prefs_get_bool(key);
345
346 while (menuitems != NULL && (text = (char *)menuitems->data) != NULL) {
237 menuitems = g_list_next(menuitems); 347 menuitems = g_list_next(menuitems);
238 g_return_val_if_fail(menuitems != NULL, NULL); 348 g_return_val_if_fail(menuitems != NULL, NULL);
239 349
240 opt = gtk_menu_item_new_with_label(text); 350 opt = gtk_menu_item_new_with_label(text);
241 351
242 g_object_set_data(G_OBJECT(opt), "type", GINT_TO_POINTER(type)); 352 g_object_set_data(G_OBJECT(opt), "type", GINT_TO_POINTER(type));
243 353 g_object_set_data(G_OBJECT(opt), "value", menuitems->data);
244 if (type == PURPLE_PREF_INT) { 354
355 if (type == PURPLE_PREF_INT)
245 int_value = GPOINTER_TO_INT(menuitems->data); 356 int_value = GPOINTER_TO_INT(menuitems->data);
246 g_object_set_data(G_OBJECT(opt), "value", 357 else if (type == PURPLE_PREF_STRING)
247 GINT_TO_POINTER(int_value));
248 }
249 else if (type == PURPLE_PREF_STRING) {
250 str_value = (const char *)menuitems->data; 358 str_value = (const char *)menuitems->data;
251 359 else if (type == PURPLE_PREF_BOOLEAN)
252 g_object_set_data(G_OBJECT(opt), "value", (char *)str_value); 360 bool_value = (gboolean)GPOINTER_TO_INT(menuitems->data);
253 }
254 else if (type == PURPLE_PREF_BOOLEAN) {
255 g_object_set_data(G_OBJECT(opt), "value",
256 menuitems->data);
257 }
258 361
259 g_signal_connect(G_OBJECT(opt), "activate", 362 g_signal_connect(G_OBJECT(opt), "activate",
260 G_CALLBACK(dropdown_set), (char *)key); 363 G_CALLBACK(dropdown_set), (char *)key);
261 364
262 gtk_widget_show(opt); 365 gtk_widget_show(opt);
264 367
265 if ((type == PURPLE_PREF_INT && stored_int == int_value) || 368 if ((type == PURPLE_PREF_INT && stored_int == int_value) ||
266 (type == PURPLE_PREF_STRING && stored_str != NULL && 369 (type == PURPLE_PREF_STRING && stored_str != NULL &&
267 !strcmp(stored_str, str_value)) || 370 !strcmp(stored_str, str_value)) ||
268 (type == PURPLE_PREF_BOOLEAN && 371 (type == PURPLE_PREF_BOOLEAN &&
269 (purple_prefs_get_bool(key) == GPOINTER_TO_INT(menuitems->data)))) { 372 (stored_bool == bool_value))) {
270 373
271 gtk_menu_set_active(GTK_MENU(menu), o); 374 gtk_menu_set_active(GTK_MENU(menu), o);
272 } 375 }
273 376
274 menuitems = g_list_next(menuitems); 377 menuitems = g_list_next(menuitems);
275 378
276 o++; 379 o++;
277 } 380 }
278 381
279 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); 382 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu);
383
384 #endif
280 385
281 pidgin_add_widget_to_vbox(GTK_BOX(box), title, NULL, dropdown, FALSE, &label); 386 pidgin_add_widget_to_vbox(GTK_BOX(box), title, NULL, dropdown, FALSE, &label);
282 387
283 return label; 388 return label;
284 } 389 }

mercurial