// // Blinking uin's face image // static void qq_tray_blinking(QQTray *tray, const gchar *uin) { gchar buf[500]; GdkPixbuf *pb; QQBuddy *bdy = qq_info_lookup_buddy_by_uin(info, uin); // blinking if(bdy == NULL){ g_snprintf(buf, 500, IMGDIR"/webqq_icon.png%s", ""); }else{ g_snprintf(buf, 500, CONFIGDIR"/faces/%s", bdy -> qqnumber -> str); } pb = gdk_pixbuf_new_from_file(buf, NULL); if(pb == NULL){ pb = gdk_pixbuf_new_from_file(IMGDIR"/webqq_icon.png", NULL); } gtk_status_icon_set_from_pixbuf(GTK_STATUS_ICON(tray), pb); g_object_unref(pb); gtk_status_icon_set_blinking(GTK_STATUS_ICON(tray), TRUE); }
/* * The setter. */ static void qq_chatwindow_setter(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { if(object == NULL || value == NULL || property_id < 0){ return; } QQChatWindowPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE( object, qq_chatwindow_get_type() , QQChatWindowPriv); gchar buf[500]; GdkPixbuf *pb = NULL; switch (property_id) { case QQ_CHATWINDOW_PROPERTY_UIN: g_stpcpy(priv -> uin, g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } QQBuddy *bdy = qq_info_lookup_buddy_by_uin(info, priv -> uin); gchar *name = priv -> uin; if(bdy == NULL){ return; } // set lnick g_snprintf(buf, 500, "<b>%s</b>", bdy -> lnick -> str); gtk_label_set_markup(GTK_LABEL(priv -> lnick_label), buf); // set face image g_snprintf(buf, 500, "%s/%s", QQ_FACEDIR, bdy -> qqnumber -> str); pb= gdk_pixbuf_new_from_file_at_size(buf, 35, 35, NULL); if(pb == NULL){ pb= gdk_pixbuf_new_from_file_at_size(IMGDIR"/avatar.gif" , 35, 35, NULL); } gtk_image_set_from_pixbuf(GTK_IMAGE(priv -> faceimage), pb); // window icon gtk_window_set_icon(GTK_WINDOW(object), pb); g_object_unref(pb); if(bdy -> markname == NULL || bdy -> markname -> len <= 0){ name = bdy -> nick -> str; }else{ name = bdy -> markname -> str; } // set status and name if(g_strcmp0("online", bdy -> status -> str) == 0 || g_strcmp0("away", bdy -> status -> str) == 0 || g_strcmp0("busy", bdy -> status -> str) == 0 || g_strcmp0("silent", bdy -> status -> str) == 0 || g_strcmp0("callme", bdy -> status -> str) == 0){ gtk_widget_set_sensitive(priv -> faceimage, TRUE); g_snprintf(buf, 500, "<b>%s</b><span color='blue'>[%s]</span>" , name , bdy -> status -> str); }else{ gtk_widget_set_sensitive(priv -> faceimage, FALSE); g_snprintf(buf, 500, "<b>%s</b>", name); } gtk_label_set_markup(GTK_LABEL(priv -> name_label), buf); // window title g_snprintf(buf, 500, "Talking with %s", name); gtk_window_set_title(GTK_WINDOW(object), buf); }
static void qq_chatwindow_init(QQChatWindow *win) { QQChatWindowPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE(win , qq_chatwindow_get_type() , QQChatWindowPriv); gchar buf[500]; priv -> body_vbox = gtk_vbox_new(FALSE, 0); GtkWidget *header_hbox = gtk_hbox_new(FALSE, 0); GtkWidget *vbox = gtk_vbox_new(FALSE, 0); QQBuddy *bdy = qq_info_lookup_buddy_by_uin(info, priv -> uin); GdkPixbuf *pb = NULL; g_snprintf(buf, 500, IMGDIR"%s", "avatar.gif"); pb = gdk_pixbuf_new_from_file(buf, NULL); gtk_window_set_icon(GTK_WINDOW(win), pb); g_object_unref(pb); g_snprintf(buf, 500, "Talking with %s", bdy == NULL ? priv -> uin : bdy -> nick -> str); gtk_window_set_title(GTK_WINDOW(win), buf); //create header g_snprintf(buf, 500, IMGDIR"%s", "avatar.gif"); pb= gdk_pixbuf_new_from_file_at_size(buf, 35, 35, NULL); priv -> faceimage = gtk_image_new_from_pixbuf(pb); g_object_unref(pb); priv -> name_label = gtk_label_new(""); priv -> lnick_label = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(header_hbox), priv -> faceimage , FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), priv -> name_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), priv -> lnick_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(header_hbox), vbox, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(priv -> body_vbox), header_hbox , FALSE, FALSE, 5); // message text view priv -> chat_widget = qq_chatwidget_new(); gtk_box_pack_start(GTK_BOX(priv -> body_vbox), priv -> chat_widget , TRUE, TRUE, 0); // buttons GtkWidget *buttonbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(buttonbox), 5); priv -> close_btn = gtk_button_new_with_label("Close"); g_signal_connect(G_OBJECT(priv -> close_btn), "clicked", G_CALLBACK(qq_chatwindow_on_close_clicked), win); priv -> send_btn = gtk_button_new_with_label("Send"); g_signal_connect(G_OBJECT(priv -> send_btn), "clicked", G_CALLBACK(qq_chatwindow_on_send_clicked), win); gtk_container_add(GTK_CONTAINER(buttonbox), priv -> close_btn); gtk_container_add(GTK_CONTAINER(buttonbox), priv -> send_btn); gtk_box_pack_start(GTK_BOX(priv -> body_vbox), buttonbox, FALSE, FALSE, 3); GtkWidget *w = GTK_WIDGET(win); gtk_window_resize(GTK_WINDOW(w), 500, 450); gtk_container_add(GTK_CONTAINER(win), priv -> body_vbox); gtk_widget_show_all(priv -> body_vbox); gtk_widget_grab_focus(qq_chatwidget_get_input_textview( priv -> chat_widget)); g_signal_connect(G_OBJECT(win), "delete-event" , G_CALLBACK(qq_chatwindow_delete_event) , priv); g_signal_connect(G_OBJECT(win), "focus-in-event" , G_CALLBACK(qq_chatwindow_focus_in_event) , priv); g_signal_connect(G_OBJECT(win), "key-press-event" , G_CALLBACK(qq_chatwindow_key_press), priv); g_signal_connect(G_OBJECT(qq_chatwidget_get_input_textview( priv -> chat_widget)) , "key-press-event" , G_CALLBACK(qq_input_textview_key_press), win); }