# HG changeset patch # User Sean Egan # Date 1196152829 0 # Node ID 7dff569f2a6ebc57e4bde4a5648abe7b223259e3 # Parent c29f2e3a3b99266946fc2b9462f342e015d1abdd Earlier, resiak and khc agreed that we're better off without the resizable paned widget in the gtkconv. diff -r c29f2e3a3b99 -r 7dff569f2a6e pidgin/gtkconv.c --- a/pidgin/gtkconv.c Tue Nov 27 07:47:20 2007 +0000 +++ b/pidgin/gtkconv.c Tue Nov 27 08:40:29 2007 +0000 @@ -266,43 +266,6 @@ return FALSE; } -static gboolean -size_allocate_cb(GtkWidget *w, GtkAllocation *allocation, PidginConversation *gtkconv) -{ - PurpleConversation *conv = gtkconv->active_conv; - - if (!GTK_WIDGET_VISIBLE(w)) - return FALSE; - - if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) - return FALSE; - if (gtkconv->auto_resize) { - return FALSE; - } - - if (gdk_window_get_state(gtkconv->win->window->window) & GDK_WINDOW_STATE_MAXIMIZED) { - return FALSE; - } - - /* I find that I resize the window when it has a bunch of conversations in it, mostly so that the - * tab bar will fit, but then I don't want new windows taking up the entire screen. I check to see - * if there is only one conversation in the window. This way we'll be setting new windows to the - * size of the last resized new window. */ - /* I think that the above justification is not the majority, and that the new tab resizing should - * negate it anyway. --luke */ - if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) - { - if (w == gtkconv->lower_hbox) - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", allocation->height); - } - else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) - { - if (w == gtkconv->lower_hbox) - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height", allocation->height); - } - return FALSE; -} - static void default_formatize(PidginConversation *c) { @@ -452,18 +415,6 @@ gtkconv->send_history = g_list_prepend(first, NULL); } -static void -reset_default_size(PidginConversation *gtkconv) -{ - PurpleConversation *conv = gtkconv->active_conv; - if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) - gtk_widget_set_size_request(gtkconv->lower_hbox, -1, - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height")); - else - gtk_widget_set_size_request(gtkconv->lower_hbox, -1, - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height")); -} - static gboolean check_for_and_do_command(PurpleConversation *conv) { @@ -573,7 +524,6 @@ if (check_for_and_do_command(conv)) { if (gtkconv->entry_growing) { - reset_default_size(gtkconv); gtkconv->entry_growing = FALSE; } gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); @@ -633,7 +583,6 @@ gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); if (gtkconv->entry_growing) { - reset_default_size(gtkconv); gtkconv->entry_growing = FALSE; } gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE); @@ -4369,7 +4318,7 @@ gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 1); } -static void resize_imhtml_cb(PidginConversation *gtkconv) +static gboolean resize_imhtml_cb(PidginConversation *gtkconv) { GtkTextBuffer *buffer; GtkTextIter iter; @@ -4406,18 +4355,12 @@ diff = height - gtkconv->entry->allocation.height; - if (diff > 0) { - gtk_widget_size_request(gtkconv->lower_hbox, &sr); - gtkconv->entry_growing = TRUE; - - /* uncomment this to auto resize even after the user manually - resizes - gtk_paned_set_position(GTK_PANED(gtkconv->lower_hbox->parent->parent), - -1); - */ - gtk_widget_set_size_request(gtkconv->lower_hbox, -1, - diff + gtkconv->lower_hbox->allocation.height); - } + gtk_widget_size_request(gtkconv->lower_hbox, &sr); + gtkconv->entry_growing = TRUE; + + gtk_widget_set_size_request(gtkconv->lower_hbox, -1, + diff + gtkconv->lower_hbox->allocation.height); + return FALSE; } static void @@ -4687,19 +4630,15 @@ static GtkWidget * setup_common_pane(PidginConversation *gtkconv) { - GtkWidget *paned, *vbox, *frame, *imhtml_sw, *event_box; + GtkWidget *vbox, *frame, *imhtml_sw, *event_box; GtkCellRenderer *rend; GtkTreePath *path; PurpleConversation *conv = gtkconv->active_conv; gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); GtkPolicyType imhtml_sw_hscroll; - paned = gtk_vpaned_new(); - gtk_widget_show(paned); - /* Setup the top part of the pane */ vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); gtk_widget_show(vbox); /* Setup the info pane */ @@ -4794,30 +4733,18 @@ g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", G_CALLBACK(refocus_entry_cb), gtkconv); - /* Setup the bottom half of the conversation window */ - vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_paned_pack2(GTK_PANED(paned), vbox, FALSE, TRUE); - gtk_widget_show(vbox); - gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, FALSE, FALSE, 0); gtk_widget_show(gtkconv->lower_hbox); - vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show(vbox); - /* Setup the toolbar, entry widget and all signals */ frame = pidgin_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar, NULL); - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), frame, TRUE, TRUE, 0); gtk_widget_show(frame); gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), purple_account_get_protocol_name(conv->account)); - gtk_widget_set_size_request(gtkconv->lower_hbox, -1, - chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height") : - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height")); g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", G_CALLBACK(entry_popup_menu_cb), gtkconv); @@ -4827,8 +4754,6 @@ G_CALLBACK(send_cb), gtkconv); g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", G_CALLBACK(entry_stop_rclick_cb), NULL); - g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate", - G_CALLBACK(size_allocate_cb), gtkconv); gtkconv->entry_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); @@ -4851,7 +4776,7 @@ default_formatize(gtkconv); g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", G_CALLBACK(clear_formatting_cb), gtkconv); - return paned; + return vbox; } static void @@ -5111,6 +5036,7 @@ gtk_widget_show(gtkconv->toolbar); else gtk_widget_hide(gtkconv->toolbar); + g_idle_add(resize_imhtml_cb, gtkconv); if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons")) gtk_widget_show(gtkconv->infopane_hbox); @@ -7121,6 +7047,8 @@ gtk_widget_show(gtkconv->toolbar); else gtk_widget_hide(gtkconv->toolbar); + + g_idle_add(resize_imhtml_cb,gtkconv); } }