comparison pidgin/plugins/disco/gtkdisco.c @ 27159:0baf79f7a58d

Add a row-activated callback for the XMPP Disco browser that provides a default action for each row. Browseable services expand/collapse, services with ADD flag open the add dialog, and services with the REGISTER flag will open the register dialog (in that order).
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sun, 07 Jun 2009 22:12:26 +0000
parents abab554140b5
children 0d01bd0c19ba
comparison
equal deleted inserted replaced
27158:abab554140b5 27159:0baf79f7a58d
280 service = g_value_get_pointer(&val); 280 service = g_value_get_pointer(&val);
281 xmpp_disco_service_expand(service); 281 xmpp_disco_service_expand(service);
282 } 282 }
283 283
284 static void 284 static void
285 row_activated_cb(GtkTreeView *tree_view,
286 GtkTreePath *path,
287 GtkTreeViewColumn *column,
288 gpointer user_data)
289 {
290 PidginDiscoList *pdl = user_data;
291 GtkTreeIter iter;
292 XmppDiscoService *service;
293 GValue val;
294
295 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(pdl->model), &iter, path))
296 return;
297
298 val.g_type = 0;
299 gtk_tree_model_get_value(GTK_TREE_MODEL(pdl->model), &iter, SERVICE_COLUMN,
300 &val);
301 service = g_value_get_pointer(&val);
302
303 if (service->flags & XMPP_DISCO_BROWSE)
304 if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(pdl->tree), path))
305 gtk_tree_view_collapse_row(GTK_TREE_VIEW(pdl->tree), path);
306 else
307 gtk_tree_view_expand_row(GTK_TREE_VIEW(pdl->tree), path, FALSE);
308 else if (service->flags & XMPP_DISCO_ADD)
309 add_room_to_blist_cb(GTK_BUTTON(pdl->dialog->add_button), pdl->dialog);
310 else if (service->flags & XMPP_DISCO_REGISTER)
311 register_button_cb(GTK_BUTTON(pdl->dialog->register_button), pdl->dialog);
312 }
313
314 static void
285 destroy_win_cb(GtkWidget *window, gpointer d) 315 destroy_win_cb(GtkWidget *window, gpointer d)
286 { 316 {
287 PidginDiscoDialog *dialog = d; 317 PidginDiscoDialog *dialog = d;
288 PidginDiscoList *list = dialog->discolist; 318 PidginDiscoList *list = dialog->discolist;
289 319
371 gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), DESCRIPTION_COLUMN); 401 gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), DESCRIPTION_COLUMN);
372 gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE); 402 gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE);
373 gtk_tree_view_append_column(GTK_TREE_VIEW(pdl->tree), column); 403 gtk_tree_view_append_column(GTK_TREE_VIEW(pdl->tree), column);
374 404
375 g_signal_connect(G_OBJECT(pdl->tree), "row-expanded", G_CALLBACK(row_expanded_cb), pdl); 405 g_signal_connect(G_OBJECT(pdl->tree), "row-expanded", G_CALLBACK(row_expanded_cb), pdl);
406 g_signal_connect(G_OBJECT(pdl->tree), "row-activated", G_CALLBACK(row_activated_cb), pdl);
376 } 407 }
377 408
378 void pidgin_disco_signed_off_cb(PurpleConnection *pc) 409 void pidgin_disco_signed_off_cb(PurpleConnection *pc)
379 { 410 {
380 GList *node; 411 GList *node;