# HG changeset patch # User Marcus Lundblad # Date 1291036141 0 # Node ID 28cfdda1f391ecbe230eb45ac24af8299b98844c # Parent 4d6419c3e0675e418ab3e06acc79e2b2153cc02a the status box is now visible (and usable). autoexpanding for the in-line status editor is not quite working right... diff -r 4d6419c3e067 -r 28cfdda1f391 pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Mon Nov 29 09:23:05 2010 +0000 +++ b/pidgin/gtkstatusbox.c Mon Nov 29 13:09:01 2010 +0000 @@ -82,7 +82,8 @@ static void status_menu_refresh_iter(PidginStatusBox *status_box, gboolean status_changed); static void pidgin_status_box_regenerate(PidginStatusBox *status_box, gboolean status_changed); static void pidgin_status_box_changed(PidginStatusBox *box); -/*static void pidgin_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition);*/ +static void pidgin_status_box_get_preferred_height (GtkWidget *widget, + gint *minimum_height, gint *natural_height); static void pidgin_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gboolean pidgin_status_box_draw (GtkWidget *widget, cairo_t *cr); static void pidgin_status_box_redisplay_buddy_icon(PidginStatusBox *status_box); @@ -616,8 +617,7 @@ parent_class = g_type_class_peek_parent(klass); widget_class = (GtkWidgetClass*)klass; - /* this seems to be removed in GTK+ 3...*/ - /*widget_class->size_request = pidgin_status_box_size_request;*/ + widget_class->get_preferred_height = pidgin_status_box_get_preferred_height; widget_class->size_allocate = pidgin_status_box_size_allocate; widget_class->draw = pidgin_status_box_draw; @@ -1931,29 +1931,61 @@ } -/* TODO: is this needed in GTK+ 3? */ #if 0 static void -pidgin_status_box_size_request(GtkWidget *widget, - GtkRequisition *requisition) +pidgin_status_box_get_preferred_size(GtkWidget *widget, + GtkRequisition *minimum_size, GtkRequisition *natural_size) { - GtkRequisition box_req; + GtkRequisition box_min_req; + GtkRequisition box_nat_req; gint border_width = gtk_container_get_border_width(GTK_CONTAINER (widget)); - gtk_widget_size_request(PIDGIN_STATUS_BOX(widget)->toggle_button, requisition); + gtk_widget_get_preferred_size(PIDGIN_STATUS_BOX(widget)->toggle_button, + minimum_size, natural_size); /* Make this icon the same size as other buddy icons in the list; unless it already wants to be bigger */ - requisition->height = MAX(requisition->height, 34); - requisition->height += border_width * 2; + minimum_size->height = MAX(minimum_size->height, 34); + minimum_size->height += border_width * 2; + natural_size->height = MAX(minium_size->height, 34); + natural_size->height += border_width * 2; + + /* If the gtkimhtml is visible, then add some additional padding */ + gtk_widget_get_preferred_size(PIDGIN_STATUS_BOX(widget)->vbox, &box_min_req, &box_nat_req); + + if (box_min_req.height > 1) + minimum_size->height += box_min_req.height + border_width * 2; + + if (box_nat_req.height > 1) + natural_size->height += box_nat_req.height + border_width * 2; + + minimum_size->width = 1; + natural_size->width = 1; +} +#endif + +static void +pidgin_status_box_get_preferred_height(GtkWidget *widget, gint *minimum_height, + gint *natural_height) +{ + gint box_min_height, box_nat_height; + gint border_width = gtk_container_get_border_width(GTK_CONTAINER (widget)); + + gtk_widget_get_preferred_height(PIDGIN_STATUS_BOX(widget)->toggle_button, + minimum_height, natural_height); + + *minimum_height = MAX(*minimum_height, 34) + border_width * 2; + *natural_height = MAX(*natural_height, 34) + border_width * 2; /* If the gtkimhtml is visible, then add some additional padding */ - gtk_widget_size_request(PIDGIN_STATUS_BOX(widget)->vbox, &box_req); - if (box_req.height > 1) - requisition->height += box_req.height + border_width * 2; - - requisition->width = 1; + gtk_widget_get_preferred_height(PIDGIN_STATUS_BOX(widget)->vbox, + &box_min_height, &box_nat_height); + + if (box_min_height > 1) + *minimum_height += box_min_height + border_width * 2; + + if (box_nat_height > 1) + *natural_height += box_nat_height + border_width * 2; } -#endif /* From gnome-panel */ static void @@ -2000,7 +2032,7 @@ GtkAllocation *allocation) { PidginStatusBox *status_box = PIDGIN_STATUS_BOX(widget); - GtkRequisition req = {0,0}; + GtkRequisition req = {0,40}; GtkAllocation parent_alc, box_alc, icon_alc; gint border_width = gtk_container_get_border_width(GTK_CONTAINER (widget)); @@ -2041,7 +2073,9 @@ gtk_widget_size_allocate(status_box->icon_box, &icon_alc); } gtk_widget_size_allocate(status_box->toggle_button, &parent_alc); - gtk_widget_set_allocation(GTK_WIDGET(status_box), allocation); + gtk_widget_set_allocation(GTK_WIDGET(status_box), allocation); + purple_debug_info("pidgin", "statusbox allocation: width = %d, height = %d\n", + allocation->width, allocation->height); } static gboolean