<Swing Dev> [PATCH] 6624717: Corrupted combo box, GTK L&F, Ubuntu 7.10

Kirill Kirichenko Kirill.Kirichenko at Sun.COM
Fri Apr 11 08:57:02 UTC 2008


Gentlemen,

I already have an approved fix for the issue.
Wait up for little while. I just have to find out how to put it into the 
repository. I have some troubles with the new version control system.

Thanks,
Kirill.

Thomas Fitzsimmons wrote:
> Damjan Jovanovic wrote:
>> Hi
>>
>> In http://www.mail-archive.com/swing-dev@openjdk.java.net/msg00092.html
>> Kirill Kirichenko said that the problem with combo boxes is that the
>> entry and the button are drawn separately, and they each need to be in
>> a GtkComboBoxEntry so the theme engine draws them right, but since
>> GtkComboBoxEntry now only supports GtkEntry subclasses as children (if
>> you try to add a button to a GtkComboBoxEntry it doesn't actually get
>> added), the button has to be drawn by us instead of GTK.
>>
>> Well, from what I can see, we already draw the button correctly, and
>> with my patch below the button colour and arrow are identical to GTK's
>> own GtkComboBoxEntry under every theme that comes with Ubuntu
>> (Clearlooks, Human, Mist, ...). By just not adding the button to a
>> GtkComboBoxEntry, we get the right results.
> 
> Kirill already rejected a similar patch I proposed in November:
> 
> http://mail.openjdk.java.net/pipermail/swing-dev/2007-November/000103.html
> 
> His preferred solution is "[...] to find out how ArrowButtons are 
> rendered in native gtk and do the same in our code."
> 
> Tom
> 
>>
>> Bye
>> Damjan
>>
>> diff -r 0f955581dc0b src/solaris/native/sun/awt/gtk2_interface.c
>> --- a/src/solaris/native/sun/awt/gtk2_interface.c       Mon Mar 24
>> 06:33:16 2008 -0700
>> +++ b/src/solaris/native/sun/awt/gtk2_interface.c       Sat Apr 05
>> 10:20:00 2008 +0200
>> @@ -1410,13 +1410,12 @@ static GtkWidget *gtk2_get_widget(Widget
>>              (*fp_gtk_menu_item_set_submenu)((GtkMenuItem*)root_menu, 
>> result);
>>              (*fp_gtk_menu_shell_append)((GtkMenuShell *)menu_bar, 
>> root_menu);
>>          }
>> -        else if (widget_type == COMBO_BOX_ARROW_BUTTON ||
>> -                 widget_type == COMBO_BOX_TEXT_FIELD)
>> +        else if (widget_type == COMBO_BOX_TEXT_FIELD)
>>          {
>>              /*
>> -             * We add a regular GtkButton/GtkEntry to a GtkComboBoxEntry
>> +             * We add a regular GtkEntry to a GtkComboBoxEntry
>>               * in order to trick engines into thinking it's a real 
>> combobox
>> -             * arrow button/text field.
>> +             * text field.
>>               */
>>              GtkWidget *combo = (*fp_gtk_combo_box_entry_new)();
>>              (*fp_gtk_container_add)((GtkContainer *)combo, result);
> 



More information about the swing-dev mailing list