| 2333 static void |
2334 static void |
| 2334 update_tab_icon(PurpleConversation *conv) |
2335 update_tab_icon(PurpleConversation *conv) |
| 2335 { |
2336 { |
| 2336 PidginConversation *gtkconv; |
2337 PidginConversation *gtkconv; |
| 2337 PidginWindow *win; |
2338 PidginWindow *win; |
| |
2339 PurpleBuddy *b; |
| 2338 GList *l; |
2340 GList *l; |
| 2339 GdkPixbuf *status = NULL; |
2341 GdkPixbuf *status = NULL; |
| |
2342 GdkPixbuf *emblem = NULL; |
| 2340 |
2343 |
| 2341 g_return_if_fail(conv != NULL); |
2344 g_return_if_fail(conv != NULL); |
| 2342 |
2345 |
| 2343 gtkconv = PIDGIN_CONVERSATION(conv); |
2346 gtkconv = PIDGIN_CONVERSATION(conv); |
| 2344 win = gtkconv->win; |
2347 win = gtkconv->win; |
| 2345 if (conv != gtkconv->active_conv) |
2348 if (conv != gtkconv->active_conv) |
| 2346 return; |
2349 return; |
| 2347 |
2350 |
| |
2351 |
| 2348 status = pidgin_conv_get_tab_icon(conv, TRUE); |
2352 status = pidgin_conv_get_tab_icon(conv, TRUE); |
| |
2353 b = purple_find_buddy(conv->account, conv->name); |
| |
2354 if (b) |
| |
2355 emblem = pidgin_blist_get_emblem((PurpleBlistNode*)b); |
| 2349 |
2356 |
| 2350 g_return_if_fail(status != NULL); |
2357 g_return_if_fail(status != NULL); |
| 2351 |
2358 |
| 2352 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); |
2359 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); |
| 2353 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); |
2360 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); |
| 2354 |
2361 |
| 2355 gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), |
2362 gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), |
| 2356 &(gtkconv->infopane_iter), |
2363 &(gtkconv->infopane_iter), |
| 2357 ICON_COLUMN, status, -1); |
2364 CONV_ICON_COLUMN, status, -1); |
| |
2365 |
| |
2366 gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), |
| |
2367 &(gtkconv->infopane_iter), |
| |
2368 CONV_EMBLEM_COLUMN, emblem, -1); |
| |
2369 |
| 2358 |
2370 |
| 2359 if (status != NULL) |
2371 if (status != NULL) |
| 2360 g_object_unref(status); |
2372 g_object_unref(status); |
| 2361 |
2373 |
| 2362 if (pidgin_conv_window_is_active_conversation(conv) && |
2374 if (pidgin_conv_window_is_active_conversation(conv) && |
| 4410 g_signal_connect(G_OBJECT(event_box), "button_press_event", |
4422 g_signal_connect(G_OBJECT(event_box), "button_press_event", |
| 4411 G_CALLBACK(infopane_press_cb), gtkconv); |
4423 G_CALLBACK(infopane_press_cb), gtkconv); |
| 4412 |
4424 |
| 4413 |
4425 |
| 4414 gtkconv->infopane = gtk_cell_view_new(); |
4426 gtkconv->infopane = gtk_cell_view_new(); |
| 4415 gtkconv->infopane_model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING); |
4427 gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF); |
| 4416 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), |
4428 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), |
| 4417 GTK_TREE_MODEL(gtkconv->infopane_model)); |
4429 GTK_TREE_MODEL(gtkconv->infopane_model)); |
| 4418 gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); |
4430 gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); |
| 4419 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), gtkconv->infopane, TRUE, TRUE, 0); |
4431 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), gtkconv->infopane, TRUE, TRUE, 0); |
| 4420 path = gtk_tree_path_new_from_string("0"); |
4432 path = gtk_tree_path_new_from_string("0"); |
| 4423 gtk_widget_set_size_request(gtkconv->infopane, -1, 32); |
4435 gtk_widget_set_size_request(gtkconv->infopane, -1, 32); |
| 4424 gtk_widget_show(gtkconv->infopane); |
4436 gtk_widget_show(gtkconv->infopane); |
| 4425 |
4437 |
| 4426 rend = gtk_cell_renderer_pixbuf_new(); |
4438 rend = gtk_cell_renderer_pixbuf_new(); |
| 4427 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); |
4439 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); |
| 4428 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", ICON_COLUMN, NULL); |
4440 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_ICON_COLUMN, NULL); |
| 4429 g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); |
4441 g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); |
| 4430 |
4442 |
| 4431 rend = gtk_cell_renderer_text_new(); |
4443 rend = gtk_cell_renderer_text_new(); |
| 4432 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, TRUE); |
4444 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, TRUE); |
| 4433 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "markup", TEXT_COLUMN, NULL); |
4445 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "markup", CONV_TEXT_COLUMN, NULL); |
| 4434 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
4446 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
| 4435 |
4447 |
| 4436 #if GTK_CHECK_VERSION(2, 6, 0) |
4448 #if GTK_CHECK_VERSION(2, 6, 0) |
| 4437 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
4449 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 4438 #endif |
4450 #endif |
| |
4451 |
| |
4452 rend = gtk_cell_renderer_pixbuf_new(); |
| |
4453 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); |
| |
4454 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_EMBLEM_COLUMN, NULL); |
| |
4455 g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); |
| 4439 |
4456 |
| 4440 /* Setup the gtkimhtml widget */ |
4457 /* Setup the gtkimhtml widget */ |
| 4441 frame = pidgin_create_imhtml(FALSE, >kconv->imhtml, NULL, &imhtml_sw); |
4458 frame = pidgin_create_imhtml(FALSE, >kconv->imhtml, NULL, &imhtml_sw); |
| 4442 if (chat) { |
4459 if (chat) { |
| 4443 GtkWidget *hpaned; |
4460 GtkWidget *hpaned; |
| 7616 static gboolean |
7633 static gboolean |
| 7617 infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv) |
7634 infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv) |
| 7618 { |
7635 { |
| 7619 int nb_x, nb_y; |
7636 int nb_x, nb_y; |
| 7620 |
7637 |
| 7621 if (e->button != 1 || e->type != GDK_BUTTON_PRESS) |
7638 if (e->type != GDK_BUTTON_PRESS) |
| 7622 return FALSE; |
7639 return FALSE; |
| 7623 |
7640 |
| |
7641 if (e->button == 3) { |
| |
7642 /* Right click was pressed. Popup the Send To menu. */ |
| |
7643 GtkWidget *menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(gtkconv->win->menu.send_to)); |
| |
7644 if (menu) |
| |
7645 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); |
| |
7646 else |
| |
7647 return FALSE; |
| |
7648 return TRUE; |
| |
7649 } else if (e->button != 1) { |
| |
7650 return FALSE; |
| |
7651 } |
| |
7652 |
| 7624 if (gtkconv->win->in_drag) { |
7653 if (gtkconv->win->in_drag) { |
| 7625 purple_debug(PURPLE_DEBUG_WARNING, "gtkconv", |
7654 purple_debug(PURPLE_DEBUG_WARNING, "gtkconv", |
| 7626 "Already in the middle of a window drag at tab_press_cb\n"); |
7655 "Already in the middle of a window drag at tab_press_cb\n"); |
| 7627 return TRUE; |
7656 return TRUE; |
| 7628 } |
7657 } |
| 7629 |
7658 |
| 7630 gtkconv->win->in_predrag = TRUE; |
7659 gtkconv->win->in_predrag = TRUE; |
| 7631 gtkconv->win->drag_tab = gtk_notebook_page_num(GTK_NOTEBOOK(gtkconv->win->notebook), gtkconv->tab_cont); |
7660 gtkconv->win->drag_tab = gtk_notebook_page_num(GTK_NOTEBOOK(gtkconv->win->notebook), gtkconv->tab_cont); |
| 7632 |
7661 |
| 7633 gdk_window_get_origin(gtkconv->infopane_hbox->window, &nb_x, &nb_y); |
7662 gdk_window_get_origin(gtkconv->infopane_hbox->window, &nb_x, &nb_y); |
| 7634 |
7663 |
| 7635 gtkconv->win->drag_min_x = gtkconv->infopane_hbox->allocation.x + nb_x; |
7664 gtkconv->win->drag_min_x = gtkconv->infopane_hbox->allocation.x + nb_x; |
| 7636 gtkconv->win->drag_min_y = gtkconv->infopane_hbox->allocation.y + nb_y; |
7665 gtkconv->win->drag_min_y = gtkconv->infopane_hbox->allocation.y + nb_y; |
| 7637 gtkconv->win->drag_max_x = gtkconv->infopane_hbox->allocation.width + gtkconv->win->drag_min_x; |
7666 gtkconv->win->drag_max_x = gtkconv->infopane_hbox->allocation.width + gtkconv->win->drag_min_x; |
| 7638 gtkconv->win->drag_max_y = gtkconv->infopane_hbox->allocation.height + gtkconv->win->drag_min_y; |
7667 gtkconv->win->drag_max_y = gtkconv->infopane_hbox->allocation.height + gtkconv->win->drag_min_y; |
| 7639 |
|
| 7640 |
7668 |
| 7641 /* Connect the new motion signals. */ |
7669 /* Connect the new motion signals. */ |
| 7642 gtkconv->win->drag_motion_signal = |
7670 gtkconv->win->drag_motion_signal = |
| 7643 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "motion_notify_event", |
7671 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "motion_notify_event", |
| 7644 G_CALLBACK(notebook_motion_cb), gtkconv->win); |
7672 G_CALLBACK(notebook_motion_cb), gtkconv->win); |
| 7645 |
7673 |
| 7646 gtkconv->win->drag_leave_signal = |
7674 gtkconv->win->drag_leave_signal = |
| 7647 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "leave_notify_event", |
7675 g_signal_connect(G_OBJECT(gtkconv->win->notebook), "leave_notify_event", |
| 7648 G_CALLBACK(notebook_leave_cb), gtkconv->win); |
7676 G_CALLBACK(notebook_leave_cb), gtkconv->win); |
| 7649 |
7677 |
| 7650 return FALSE; |
7678 return FALSE; |
| 7651 |
7679 |
| 7652 } |
7680 } |
| 7653 |
7681 |