pidgin/gtkconv.c

branch
next.minor
changeset 29653
5492cf7eb5b7
parent 29487
1fa2077fb506
parent 29628
7ba47b28bda9
child 29655
c24e3b7f75fb
equal deleted inserted replaced
29489:2322b6b9fcb7 29653:5492cf7eb5b7
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);

mercurial