| 1075 |
1075 |
| 1076 cursor = gdk_cursor_new(GDK_WATCH); |
1076 cursor = gdk_cursor_new(GDK_WATCH); |
| 1077 gdk_window_set_cursor(gtkblist->window->window, cursor); |
1077 gdk_window_set_cursor(gtkblist->window->window, cursor); |
| 1078 gdk_window_set_cursor(win->window->window, cursor); |
1078 gdk_window_set_cursor(win->window->window, cursor); |
| 1079 gdk_cursor_unref(cursor); |
1079 gdk_cursor_unref(cursor); |
| 1080 #if GTK_CHECK_VERSION(2,4,0) |
|
| 1081 gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window))); |
1080 gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window))); |
| 1082 #else |
|
| 1083 gdk_flush(); |
|
| 1084 #endif |
|
| 1085 |
1081 |
| 1086 name = purple_conversation_get_name(conv); |
1082 name = purple_conversation_get_name(conv); |
| 1087 account = purple_conversation_get_account(conv); |
1083 account = purple_conversation_get_account(conv); |
| 1088 |
1084 |
| 1089 buddies = purple_find_buddies(account, name); |
1085 buddies = purple_find_buddies(account, name); |
| 2060 break; |
2056 break; |
| 2061 |
2057 |
| 2062 case GDK_period: |
2058 case GDK_period: |
| 2063 gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), |
2059 gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), |
| 2064 gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), |
2060 gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), |
| 2065 #if GTK_CHECK_VERSION(2,2,0) |
|
| 2066 (curconv + 1) % gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook))); |
2061 (curconv + 1) % gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook))); |
| 2067 #else |
|
| 2068 (curconv + 1) % g_list_length(GTK_NOTEBOOK(win->notebook)->children)); |
|
| 2069 #endif |
|
| 2070 return TRUE; |
2062 return TRUE; |
| 2071 break; |
2063 break; |
| 2072 case GDK_F6: |
2064 case GDK_F6: |
| 2073 if (gtkconv_cycle_focus(gtkconv, event->state & GDK_SHIFT_MASK ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD)) |
2065 if (gtkconv_cycle_focus(gtkconv, event->state & GDK_SHIFT_MASK ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD)) |
| 2074 return TRUE; |
2066 return TRUE; |
| 3906 } |
3898 } |
| 3907 |
3899 |
| 3908 gtk_size_group_add_widget(sg, image); |
3900 gtk_size_group_add_widget(sg, image); |
| 3909 |
3901 |
| 3910 /* Make our menu item */ |
3902 /* Make our menu item */ |
| 3911 text = g_strdup_printf("%s (%s)", name, purple_account_get_username(account)); |
3903 text = g_strdup_printf("%s (%s)", name, purple_account_get_name_for_display(account)); |
| 3912 menuitem = gtk_radio_menu_item_new_with_label(*group, text); |
3904 menuitem = gtk_radio_menu_item_new_with_label(*group, text); |
| 3913 g_free(text); |
3905 g_free(text); |
| 3914 *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
3906 *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
| 3915 |
3907 |
| 3916 /* Do some evil, see some evil, speak some evil. */ |
3908 /* Do some evil, see some evil, speak some evil. */ |
| 4136 if ((tag = get_buddy_tag(conv, name, PURPLE_MESSAGE_NICK, FALSE))) |
4128 if ((tag = get_buddy_tag(conv, name, PURPLE_MESSAGE_NICK, FALSE))) |
| 4137 g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL); |
4129 g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL); |
| 4138 color = (GdkColor*)get_nick_color(gtkconv, name); |
4130 color = (GdkColor*)get_nick_color(gtkconv, name); |
| 4139 } |
4131 } |
| 4140 |
4132 |
| 4141 #if GTK_CHECK_VERSION(2,6,0) |
|
| 4142 gtk_list_store_insert_with_values(ls, &iter, |
4133 gtk_list_store_insert_with_values(ls, &iter, |
| 4143 /* |
4134 /* |
| 4144 * The GTK docs are mute about the effects of the "row" value for performance. |
4135 * The GTK docs are mute about the effects of the "row" value for performance. |
| 4145 * X-Chat hardcodes their value to 0 (prepend) and -1 (append), so we will too. |
4136 * X-Chat hardcodes their value to 0 (prepend) and -1 (append), so we will too. |
| 4146 * It *might* be faster to search the gtk_list_store and set row accurately, |
4137 * It *might* be faster to search the gtk_list_store and set row accurately, |
| 4154 CHAT_USERS_NAME_COLUMN, name, |
4145 CHAT_USERS_NAME_COLUMN, name, |
| 4155 CHAT_USERS_FLAGS_COLUMN, flags, |
4146 CHAT_USERS_FLAGS_COLUMN, flags, |
| 4156 CHAT_USERS_COLOR_COLUMN, color, |
4147 CHAT_USERS_COLOR_COLUMN, color, |
| 4157 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, |
4148 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, |
| 4158 -1); |
4149 -1); |
| 4159 #else |
|
| 4160 gtk_list_store_append(ls, &iter); |
|
| 4161 gtk_list_store_set(ls, &iter, |
|
| 4162 CHAT_USERS_ICON_STOCK_COLUMN, stock, |
|
| 4163 CHAT_USERS_ALIAS_COLUMN, alias, |
|
| 4164 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, |
|
| 4165 CHAT_USERS_NAME_COLUMN, name, |
|
| 4166 CHAT_USERS_FLAGS_COLUMN, flags, |
|
| 4167 CHAT_USERS_COLOR_COLUMN, color, |
|
| 4168 CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, |
|
| 4169 -1); |
|
| 4170 #endif |
|
| 4171 |
4150 |
| 4172 if (is_me && color) |
4151 if (is_me && color) |
| 4173 gdk_color_free(color); |
4152 gdk_color_free(color); |
| 4174 g_free(alias_key); |
4153 g_free(alias_key); |
| 4175 } |
4154 } |
| 4809 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
4788 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
| 4810 gtk_widget_show(lbox); |
4789 gtk_widget_show(lbox); |
| 4811 |
4790 |
| 4812 /* Setup the label telling how many people are in the room. */ |
4791 /* Setup the label telling how many people are in the room. */ |
| 4813 gtkchat->count = gtk_label_new(_("0 people in room")); |
4792 gtkchat->count = gtk_label_new(_("0 people in room")); |
| 4814 #if GTK_CHECK_VERSION(2,6,0) |
|
| 4815 gtk_label_set_ellipsize(GTK_LABEL(gtkchat->count), PANGO_ELLIPSIZE_END); |
4793 gtk_label_set_ellipsize(GTK_LABEL(gtkchat->count), PANGO_ELLIPSIZE_END); |
| 4816 #endif |
|
| 4817 gtk_box_pack_start(GTK_BOX(lbox), gtkchat->count, FALSE, FALSE, 0); |
4794 gtk_box_pack_start(GTK_BOX(lbox), gtkchat->count, FALSE, FALSE, 0); |
| 4818 gtk_widget_show(gtkchat->count); |
4795 gtk_widget_show(gtkchat->count); |
| 4819 |
4796 |
| 4820 /* Setup the list of users. */ |
4797 /* Setup the list of users. */ |
| 4821 sw = gtk_scrolled_window_new(NULL, NULL); |
4798 sw = gtk_scrolled_window_new(NULL, NULL); |
| 4881 purple_signal_connect(blist_handle, "blist-node-removed", |
4858 purple_signal_connect(blist_handle, "blist-node-removed", |
| 4882 gtkchat, PURPLE_CALLBACK(buddy_removed_cb), conv); |
4859 gtkchat, PURPLE_CALLBACK(buddy_removed_cb), conv); |
| 4883 purple_signal_connect(blist_handle, "blist-node-aliased", |
4860 purple_signal_connect(blist_handle, "blist-node-aliased", |
| 4884 gtkchat, PURPLE_CALLBACK(blist_node_aliased_cb), conv); |
4861 gtkchat, PURPLE_CALLBACK(blist_node_aliased_cb), conv); |
| 4885 |
4862 |
| 4886 #if GTK_CHECK_VERSION(2,6,0) |
|
| 4887 gtk_tree_view_column_set_expand(col, TRUE); |
4863 gtk_tree_view_column_set_expand(col, TRUE); |
| 4888 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
4864 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 4889 #endif |
|
| 4890 |
4865 |
| 4891 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
4866 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
| 4892 |
4867 |
| 4893 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); |
4868 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); |
| 4894 gtk_widget_show(list); |
4869 gtk_widget_show(list); |
| 4940 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4915 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4941 gtk_widget_show(vbox); |
4916 gtk_widget_show(vbox); |
| 4942 |
4917 |
| 4943 /* Setup the info pane */ |
4918 /* Setup the info pane */ |
| 4944 event_box = gtk_event_box_new(); |
4919 event_box = gtk_event_box_new(); |
| 4945 #if GTK_CHECK_VERSION(2,4,0) |
|
| 4946 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE); |
4920 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE); |
| 4947 #endif |
|
| 4948 gtk_widget_show(event_box); |
4921 gtk_widget_show(event_box); |
| 4949 gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0); |
4922 gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0); |
| 4950 gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0); |
4923 gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0); |
| 4951 gtk_container_add(GTK_CONTAINER(event_box), gtkconv->infopane_hbox); |
4924 gtk_container_add(GTK_CONTAINER(event_box), gtkconv->infopane_hbox); |
| 4952 gtk_widget_show(gtkconv->infopane_hbox); |
4925 gtk_widget_show(gtkconv->infopane_hbox); |
| 5012 rend = gtk_cell_renderer_text_new(); |
4985 rend = gtk_cell_renderer_text_new(); |
| 5013 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, TRUE); |
4986 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, TRUE); |
| 5014 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "markup", CONV_TEXT_COLUMN, NULL); |
4987 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "markup", CONV_TEXT_COLUMN, NULL); |
| 5015 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
4988 g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
| 5016 |
4989 |
| 5017 #if GTK_CHECK_VERSION(2, 6, 0) |
|
| 5018 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
4990 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 5019 #endif |
|
| 5020 |
4991 |
| 5021 rend = gtk_cell_renderer_pixbuf_new(); |
4992 rend = gtk_cell_renderer_pixbuf_new(); |
| 5022 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); |
4993 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); |
| 5023 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_PROTOCOL_ICON_COLUMN, NULL); |
4994 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_PROTOCOL_ICON_COLUMN, NULL); |
| 5024 g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); |
4995 g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); |
| 6150 |
6121 |
| 6151 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
6122 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
| 6152 |
6123 |
| 6153 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list))); |
6124 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list))); |
| 6154 |
6125 |
| 6155 #if GTK_CHECK_VERSION(2,6,0) |
|
| 6156 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, |
6126 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, |
| 6157 GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID); |
6127 GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID); |
| 6158 #endif |
|
| 6159 |
6128 |
| 6160 l = cbuddies; |
6129 l = cbuddies; |
| 6161 while (l != NULL) { |
6130 while (l != NULL) { |
| 6162 add_chat_buddy_common(conv, (PurpleConvChatBuddy *)l->data, NULL); |
6131 add_chat_buddy_common(conv, (PurpleConvChatBuddy *)l->data, NULL); |
| 6163 l = l->next; |
6132 l = l->next; |
| 6255 |
6224 |
| 6256 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, |
6225 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, |
| 6257 CHAT_USERS_NAME_COLUMN, &val, -1); |
6226 CHAT_USERS_NAME_COLUMN, &val, -1); |
| 6258 |
6227 |
| 6259 if (!purple_utf8_strcasecmp((char *)l->data, val)) { |
6228 if (!purple_utf8_strcasecmp((char *)l->data, val)) { |
| 6260 #if GTK_CHECK_VERSION(2,2,0) |
|
| 6261 f = gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
6229 f = gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
| 6262 #else |
|
| 6263 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
|
| 6264 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); |
|
| 6265 #endif |
|
| 6266 } |
6230 } |
| 6267 else |
6231 else |
| 6268 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); |
6232 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); |
| 6269 |
6233 |
| 6270 g_free(val); |
6234 g_free(val); |
| 6781 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
6745 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
| 6782 const char *topic = gtkconv->u.chat->topic_text |
6746 const char *topic = gtkconv->u.chat->topic_text |
| 6783 ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) |
6747 ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) |
| 6784 : NULL; |
6748 : NULL; |
| 6785 char *esc = NULL, *tmp; |
6749 char *esc = NULL, *tmp; |
| 6786 #if GTK_CHECK_VERSION(2,6,0) |
|
| 6787 esc = topic ? g_markup_escape_text(topic, -1) : NULL; |
6750 esc = topic ? g_markup_escape_text(topic, -1) : NULL; |
| 6788 #else |
|
| 6789 /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude |
|
| 6790 * trucation to prevent forcing the window to be as wide as the topic */ |
|
| 6791 int len = 0; |
|
| 6792 char *c; |
|
| 6793 |
|
| 6794 if (topic != NULL) { |
|
| 6795 tmp = g_strdup(topic); |
|
| 6796 c = tmp; |
|
| 6797 while(*c && len < 72) { |
|
| 6798 c = g_utf8_next_char(c); |
|
| 6799 len++; |
|
| 6800 } |
|
| 6801 if (len == 72) { |
|
| 6802 *c = '\0'; |
|
| 6803 c = g_strdup_printf("%s...", tmp); |
|
| 6804 g_free(tmp); |
|
| 6805 tmp = c; |
|
| 6806 } |
|
| 6807 esc = g_markup_escape_text(tmp, -1); |
|
| 6808 g_free(tmp); |
|
| 6809 } |
|
| 6810 #endif |
|
| 6811 tmp = g_markup_escape_text(purple_conversation_get_title(conv), -1); |
6751 tmp = g_markup_escape_text(purple_conversation_get_title(conv), -1); |
| 6812 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", |
6752 markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", |
| 6813 tmp, esc && *esc ? "\n" : "", |
6753 tmp, esc && *esc ? "\n" : "", |
| 6814 pidgin_get_dim_grey_string(gtkconv->infopane), |
6754 pidgin_get_dim_grey_string(gtkconv->infopane), |
| 6815 esc ? esc : ""); |
6755 esc ? esc : ""); |
| 7157 if (pidgin_gdk_pixbuf_is_opaque(scale)) |
7097 if (pidgin_gdk_pixbuf_is_opaque(scale)) |
| 7158 pidgin_gdk_pixbuf_make_round(scale); |
7098 pidgin_gdk_pixbuf_make_round(scale); |
| 7159 |
7099 |
| 7160 event = gtk_event_box_new(); |
7100 event = gtk_event_box_new(); |
| 7161 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); |
7101 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); |
| 7162 #if GTK_CHECK_VERSION(2,4,0) |
|
| 7163 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE); |
7102 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE); |
| 7164 #endif |
|
| 7165 gtk_widget_add_events(event, |
7103 gtk_widget_add_events(event, |
| 7166 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); |
7104 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); |
| 7167 g_signal_connect(G_OBJECT(event), "button-press-event", |
7105 g_signal_connect(G_OBJECT(event), "button-press-event", |
| 7168 G_CALLBACK(icon_menu), gtkconv); |
7106 G_CALLBACK(icon_menu), gtkconv); |
| 7169 |
7107 |
| 7232 y_rel = y - nb_y; |
7170 y_rel = y - nb_y; |
| 7233 |
7171 |
| 7234 horiz = (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP || |
7172 horiz = (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP || |
| 7235 gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM); |
7173 gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM); |
| 7236 |
7174 |
| 7237 #if GTK_CHECK_VERSION(2,2,0) |
|
| 7238 count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); |
7175 count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); |
| 7239 #else |
|
| 7240 /* this is hacky, but it's only for Gtk 2.0.0... */ |
|
| 7241 count = g_list_length(GTK_NOTEBOOK(notebook)->children); |
|
| 7242 #endif |
|
| 7243 |
7176 |
| 7244 for (i = 0; i < count; i++) { |
7177 for (i = 0; i < count; i++) { |
| 7245 |
7178 |
| 7246 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i); |
7179 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i); |
| 7247 tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page); |
7180 tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page); |
| 8226 styles[iter].labelname, styles[iter].stylename); |
8159 styles[iter].labelname, styles[iter].stylename); |
| 8227 } |
8160 } |
| 8228 } |
8161 } |
| 8229 gtk_rc_parse_string(str->str); |
8162 gtk_rc_parse_string(str->str); |
| 8230 g_string_free(str, TRUE); |
8163 g_string_free(str, TRUE); |
| 8231 #if GTK_CHECK_VERSION(2,4,0) |
|
| 8232 gtk_rc_reset_styles(settings); |
8164 gtk_rc_reset_styles(settings); |
| 8233 #endif |
|
| 8234 } |
8165 } |
| 8235 } |
8166 } |
| 8236 |
8167 |
| 8237 void |
8168 void |
| 8238 pidgin_conversations_uninit(void) |
8169 pidgin_conversations_uninit(void) |
| 8475 gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE); |
8406 gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE); |
| 8476 |
8407 |
| 8477 return FALSE; |
8408 return FALSE; |
| 8478 } |
8409 } |
| 8479 |
8410 |
| 8480 #if !GTK_CHECK_VERSION(2,6,0) |
|
| 8481 /* Courtesy of Galeon! */ |
|
| 8482 static void |
|
| 8483 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state) |
|
| 8484 { |
|
| 8485 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) |
|
| 8486 gtk_widget_set_state(widget, GTK_STATE_NORMAL); |
|
| 8487 } |
|
| 8488 #endif |
|
| 8489 |
|
| 8490 static void |
8411 static void |
| 8491 notebook_init_grab(PidginWindow *gtkwin, GtkWidget *widget) |
8412 notebook_init_grab(PidginWindow *gtkwin, GtkWidget *widget) |
| 8492 { |
8413 { |
| 8493 static GdkCursor *cursor = NULL; |
8414 static GdkCursor *cursor = NULL; |
| 8494 |
8415 |
| 9126 |
9047 |
| 9127 /* alias label */ |
9048 /* alias label */ |
| 9128 entry = gtk_entry_new(); |
9049 entry = gtk_entry_new(); |
| 9129 gtk_entry_set_has_frame(GTK_ENTRY(entry), FALSE); |
9050 gtk_entry_set_has_frame(GTK_ENTRY(entry), FALSE); |
| 9130 gtk_entry_set_width_chars(GTK_ENTRY(entry), 10); |
9051 gtk_entry_set_width_chars(GTK_ENTRY(entry), 10); |
| 9131 #if GTK_CHECK_VERSION(2,4,0) |
|
| 9132 gtk_entry_set_alignment(GTK_ENTRY(entry), 0.5); |
9052 gtk_entry_set_alignment(GTK_ENTRY(entry), 0.5); |
| 9133 #endif |
|
| 9134 |
9053 |
| 9135 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), entry, TRUE, TRUE, 0); |
9054 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), entry, TRUE, TRUE, 0); |
| 9136 /* after the tab label */ |
9055 /* after the tab label */ |
| 9137 gtk_box_reorder_child(GTK_BOX(gtkconv->infopane_hbox), entry, 0); |
9056 gtk_box_reorder_child(GTK_BOX(gtkconv->infopane_hbox), entry, 0); |
| 9138 |
9057 |
| 9327 { |
9246 { |
| 9328 PidginWindow *win; |
9247 PidginWindow *win; |
| 9329 GtkPositionType pos; |
9248 GtkPositionType pos; |
| 9330 GtkWidget *testidea; |
9249 GtkWidget *testidea; |
| 9331 GtkWidget *menubar; |
9250 GtkWidget *menubar; |
| 9332 #if GTK_CHECK_VERSION(2,6,0) |
|
| 9333 GdkModifierType state; |
9251 GdkModifierType state; |
| 9334 #endif |
|
| 9335 |
9252 |
| 9336 win = g_malloc0(sizeof(PidginWindow)); |
9253 win = g_malloc0(sizeof(PidginWindow)); |
| 9337 |
9254 |
| 9338 window_list = g_list_append(window_list, win); |
9255 window_list = g_list_append(window_list, win); |
| 9339 |
9256 |
| 9340 /* Create the window. */ |
9257 /* Create the window. */ |
| 9341 win->window = pidgin_create_window(NULL, 0, "conversation", TRUE); |
9258 win->window = pidgin_create_window(NULL, 0, "conversation", TRUE); |
| 9342 #if GTK_CHECK_VERSION(2,6,0) |
|
| 9343 if (!gtk_get_current_event_state(&state)) |
9259 if (!gtk_get_current_event_state(&state)) |
| 9344 gtk_window_set_focus_on_map(GTK_WINDOW(win->window), FALSE); |
9260 gtk_window_set_focus_on_map(GTK_WINDOW(win->window), FALSE); |
| 9345 #endif |
9261 |
| 9346 /* Etan: I really think this entire function call should happen only |
9262 /* Etan: I really think this entire function call should happen only |
| 9347 * when we are on Windows but I was informed that back before we used |
9263 * when we are on Windows but I was informed that back before we used |
| 9348 * to save the window position we stored the window size, so I'm |
9264 * to save the window position we stored the window size, so I'm |
| 9349 * leaving it for now. */ |
9265 * leaving it for now. */ |
| 9350 #if TRUE || defined(_WIN32) |
9266 #if TRUE || defined(_WIN32) |
| 9529 pidgin_conv_tab_pack(win, ((PidginConversation*)win->gtkconvs->data)); |
9445 pidgin_conv_tab_pack(win, ((PidginConversation*)win->gtkconvs->data)); |
| 9530 |
9446 |
| 9531 |
9447 |
| 9532 /* Close button. */ |
9448 /* Close button. */ |
| 9533 gtkconv->close = gtk_event_box_new(); |
9449 gtkconv->close = gtk_event_box_new(); |
| 9534 #if GTK_CHECK_VERSION(2,4,0) |
|
| 9535 gtk_event_box_set_visible_window(GTK_EVENT_BOX(gtkconv->close), FALSE); |
9450 gtk_event_box_set_visible_window(GTK_EVENT_BOX(gtkconv->close), FALSE); |
| 9536 #endif |
|
| 9537 gtk_widget_set_events(gtkconv->close, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); |
9451 gtk_widget_set_events(gtkconv->close, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); |
| 9538 close_image = gtk_label_new("×"); |
9452 close_image = gtk_label_new("×"); |
| 9539 g_signal_connect(G_OBJECT(gtkconv->close), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_image); |
9453 g_signal_connect(G_OBJECT(gtkconv->close), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_image); |
| 9540 g_signal_connect(G_OBJECT(gtkconv->close), "leave-notify-event", G_CALLBACK(close_button_left_cb), close_image); |
9454 g_signal_connect(G_OBJECT(gtkconv->close), "leave-notify-event", G_CALLBACK(close_button_left_cb), close_image); |
| 9541 gtk_widget_show(close_image); |
9455 gtk_widget_show(close_image); |
| 9543 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close, |
9457 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close, |
| 9544 _("Close conversation"), NULL); |
9458 _("Close conversation"), NULL); |
| 9545 |
9459 |
| 9546 g_signal_connect(G_OBJECT(gtkconv->close), "button-press-event", |
9460 g_signal_connect(G_OBJECT(gtkconv->close), "button-press-event", |
| 9547 G_CALLBACK(close_conv_cb), gtkconv); |
9461 G_CALLBACK(close_conv_cb), gtkconv); |
| 9548 |
|
| 9549 #if !GTK_CHECK_VERSION(2,6,0) |
|
| 9550 /* |
|
| 9551 * I love Galeon. They have a fix for that stupid annoying visible |
|
| 9552 * border bug. I love you guys! -- ChipX86 |
|
| 9553 */ |
|
| 9554 /* This is fixed properly in some version of Gtk before 2.6.0 */ |
|
| 9555 g_signal_connect(G_OBJECT(gtkconv->close), "state_changed", |
|
| 9556 G_CALLBACK(tab_close_button_state_changed_cb), NULL); |
|
| 9557 #endif |
|
| 9558 |
9462 |
| 9559 /* Status icon. */ |
9463 /* Status icon. */ |
| 9560 gtkconv->icon = gtk_image_new(); |
9464 gtkconv->icon = gtk_image_new(); |
| 9561 gtkconv->menu_icon = gtk_image_new(); |
9465 gtkconv->menu_icon = gtk_image_new(); |
| 9562 g_object_set(G_OBJECT(gtkconv->icon), |
9466 g_object_set(G_OBJECT(gtkconv->icon), |
| 9622 else if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_LEFT|8)) |
9526 else if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_LEFT|8)) |
| 9623 angle = 90; |
9527 angle = 90; |
| 9624 else if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_RIGHT|8)) |
9528 else if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == (GTK_POS_RIGHT|8)) |
| 9625 angle = 270; |
9529 angle = 270; |
| 9626 |
9530 |
| 9627 #if GTK_CHECK_VERSION(2,6,0) |
|
| 9628 if (!angle) { |
9531 if (!angle) { |
| 9629 g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
9532 g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 9630 gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 4); |
9533 gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 4); |
| 9631 } else { |
9534 } else { |
| 9632 g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_NONE, NULL); |
9535 g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_NONE, NULL); |
| 9639 MIN(g_utf8_strlen(gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)), -1), 12) |
9542 MIN(g_utf8_strlen(gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)), -1), 12) |
| 9640 ); |
9543 ); |
| 9641 } |
9544 } |
| 9642 |
9545 |
| 9643 gtk_label_set_angle(GTK_LABEL(gtkconv->tab_label), angle); |
9546 gtk_label_set_angle(GTK_LABEL(gtkconv->tab_label), angle); |
| 9644 #endif |
|
| 9645 |
9547 |
| 9646 #if 0 |
9548 #if 0 |
| 9647 gtk_misc_set_alignment(GTK_MISC(gtkconv->tab_label), 0.00, 0.5); |
9549 gtk_misc_set_alignment(GTK_MISC(gtkconv->tab_label), 0.00, 0.5); |
| 9648 gtk_misc_set_padding(GTK_MISC(gtkconv->tab_label), 4, 0); |
9550 gtk_misc_set_padding(GTK_MISC(gtkconv->tab_label), 4, 0); |
| 9649 #endif |
9551 #endif |
| 9662 first = gtkconv->icon; |
9564 first = gtkconv->icon; |
| 9663 third = gtkconv->close; |
9565 third = gtkconv->close; |
| 9664 } |
9566 } |
| 9665 |
9567 |
| 9666 ebox = gtk_event_box_new(); |
9568 ebox = gtk_event_box_new(); |
| 9667 #if GTK_CHECK_VERSION(2,4,0) |
|
| 9668 gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE); |
9569 gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE); |
| 9669 #endif |
|
| 9670 gtk_container_add(GTK_CONTAINER(ebox), gtkconv->tabby); |
9570 gtk_container_add(GTK_CONTAINER(ebox), gtkconv->tabby); |
| 9671 |
9571 |
| 9672 if (gtkconv->tab_label->parent == NULL) { |
9572 if (gtkconv->tab_label->parent == NULL) { |
| 9673 /* Pack if it's a new widget */ |
9573 /* Pack if it's a new widget */ |
| 9674 gtk_box_pack_start(GTK_BOX(gtkconv->tabby), first, FALSE, FALSE, 0); |
9574 gtk_box_pack_start(GTK_BOX(gtkconv->tabby), first, FALSE, FALSE, 0); |