| 310 static void gtk_blist_menu_join_cb(GtkWidget *w, PurpleChat *chat) |
310 static void gtk_blist_menu_join_cb(GtkWidget *w, PurpleChat *chat) |
| 311 { |
311 { |
| 312 gtk_blist_join_chat(chat); |
312 gtk_blist_join_chat(chat); |
| 313 } |
313 } |
| 314 |
314 |
| |
315 static void gtk_blist_renderer_editing_started_cb(GtkCellRenderer *renderer, |
| |
316 GtkCellEditable *editable, |
| |
317 gchar *path_str, |
| |
318 gpointer user_data) |
| |
319 { |
| |
320 GtkTreeIter iter; |
| |
321 GtkTreePath *path = NULL; |
| |
322 GValue val; |
| |
323 PurpleBlistNode *node; |
| |
324 const char *text = NULL; |
| |
325 char *esc; |
| |
326 |
| |
327 path = gtk_tree_path_new_from_string (path_str); |
| |
328 gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); |
| |
329 gtk_tree_path_free (path); |
| |
330 val.g_type = 0; |
| |
331 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| |
332 node = g_value_get_pointer(&val); |
| |
333 |
| |
334 switch (node->type) { |
| |
335 case PURPLE_BLIST_CONTACT_NODE: |
| |
336 text = purple_contact_get_alias((PurpleContact *)node); |
| |
337 break; |
| |
338 case PURPLE_BLIST_BUDDY_NODE: |
| |
339 text = purple_buddy_get_alias((PurpleBuddy *)node); |
| |
340 break; |
| |
341 case PURPLE_BLIST_GROUP_NODE: |
| |
342 text = ((PurpleGroup *)node)->name; |
| |
343 break; |
| |
344 default: |
| |
345 g_return_if_reached(); |
| |
346 } |
| |
347 |
| |
348 esc = g_markup_escape_text(text, -1); |
| |
349 if (GTK_IS_ENTRY (editable)) { |
| |
350 GtkEntry *entry = GTK_ENTRY (editable); |
| |
351 gtk_entry_set_text(entry, esc); |
| |
352 } |
| |
353 g_free(esc); |
| |
354 } |
| |
355 |
| 315 static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1, |
356 static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1, |
| 316 char *arg2, gpointer nada) |
357 char *arg2, gpointer nada) |
| 317 { |
358 { |
| 318 GtkTreeIter iter; |
359 GtkTreeIter iter; |
| 319 GtkTreePath *path; |
360 GtkTreePath *path; |
| 369 |
410 |
| 370 static void gtk_blist_menu_alias_cb(GtkWidget *w, PurpleBlistNode *node) |
411 static void gtk_blist_menu_alias_cb(GtkWidget *w, PurpleBlistNode *node) |
| 371 { |
412 { |
| 372 GtkTreeIter iter; |
413 GtkTreeIter iter; |
| 373 GtkTreePath *path; |
414 GtkTreePath *path; |
| 374 const char *text = NULL; |
|
| 375 char *esc; |
|
| 376 |
415 |
| 377 if (!(get_iter_from_node(node, &iter))) { |
416 if (!(get_iter_from_node(node, &iter))) { |
| 378 /* This is either a bug, or the buddy is in a collapsed contact */ |
417 /* This is either a bug, or the buddy is in a collapsed contact */ |
| 379 node = node->parent; |
418 node = node->parent; |
| 380 if (!get_iter_from_node(node, &iter)) |
419 if (!get_iter_from_node(node, &iter)) |
| 381 /* Now it's definitely a bug */ |
420 /* Now it's definitely a bug */ |
| 382 return; |
421 return; |
| 383 } |
422 } |
| 384 |
|
| 385 switch (node->type) { |
|
| 386 case PURPLE_BLIST_BUDDY_NODE: |
|
| 387 text = purple_buddy_get_alias((PurpleBuddy *)node); |
|
| 388 break; |
|
| 389 case PURPLE_BLIST_CONTACT_NODE: |
|
| 390 text = purple_contact_get_alias((PurpleContact *)node); |
|
| 391 break; |
|
| 392 case PURPLE_BLIST_GROUP_NODE: |
|
| 393 text = ((PurpleGroup *)node)->name; |
|
| 394 break; |
|
| 395 case PURPLE_BLIST_CHAT_NODE: |
|
| 396 text = purple_chat_get_name((PurpleChat *)node); |
|
| 397 break; |
|
| 398 default: |
|
| 399 g_return_if_reached(); |
|
| 400 } |
|
| 401 |
|
| 402 esc = g_markup_escape_text(text, -1); |
|
| 403 gtk_tree_store_set(gtkblist->treemodel, &iter, NAME_COLUMN, esc, -1); |
|
| 404 g_free(esc); |
|
| 405 |
423 |
| 406 path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); |
424 path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); |
| 407 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL); |
425 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL); |
| 408 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE); |
426 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE); |
| 409 gtk_widget_grab_focus(gtkblist->treeview); |
427 gtk_widget_grab_focus(gtkblist->treeview); |
| 4400 #if GTK_CHECK_VERSION(2,6,0) |
4418 #if GTK_CHECK_VERSION(2,6,0) |
| 4401 "cell-background-gdk", BGCOLOR_COLUMN, |
4419 "cell-background-gdk", BGCOLOR_COLUMN, |
| 4402 #endif |
4420 #endif |
| 4403 "markup", NAME_COLUMN, |
4421 "markup", NAME_COLUMN, |
| 4404 NULL); |
4422 NULL); |
| |
4423 g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL); |
| 4405 g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), NULL); |
4424 g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), NULL); |
| 4406 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
4425 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
| 4407 #if GTK_CHECK_VERSION(2,6,0) |
4426 #if GTK_CHECK_VERSION(2,6,0) |
| 4408 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
4427 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 4409 #endif |
4428 #endif |