This program emulates the behaviour of gtk2_interface and then prints out the style properties for a separator. It also is the program that was used for the test screenshot.
#include <gtk/gtk.h>
void gtk_widget_reset_rc_style(GtkWidget* widget);
gboolean get_widget_style_property_boolean(GtkWidget* widget, const
char* property_name) {
GValue value = {0};
g_value_init(&value, G_TYPE_BOOLEAN);
gtk_widget_style_get_property(widget, property_name, &value);
return g_value_get_boolean(&value);
}
gint get_widget_style_property_int(GtkWidget* widget, const char*
property_name) {
GValue value = {0};
g_value_init(&value, G_TYPE_INT);
gtk_widget_style_get_property(widget, property_name, &value);
return g_value_get_int(&value);
}
void print_style(GtkWidget* separator) {
GtkStyle* style = separator->style;
gint thickness = style->ythickness;
gboolean wide_active = get_widget_style_property_boolean(separator,
"wide-separators");
gint wide_height = get_widget_style_property_int(separator,
"separator-height");
printf("wide-separators: %i, separator-height: %i, ythickness: %i\n",
wide_active, wide_height, thickness);
}
int main(int argc, char** argv) {
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 100);
gtk_window_set_title(GTK_WINDOW(window), "Menu-Test");
GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
GtkWidget* menu_bar = gtk_menu_bar_new();
GtkWidget* menu = gtk_menu_new();
GtkWidget* menu_item = gtk_menu_item_new_with_label("Menu");
GtkWidget* foo_item = gtk_menu_item_new_with_label("Foo");
GtkWidget* bar_item = gtk_menu_item_new_with_label("Bar");
GtkWidget* separator = gtk_separator_menu_item_new();
gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 0);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), foo_item);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), bar_item);
gtk_widget_realize(window);
gtk_widget_realize(vbox);
gtk_widget_realize(menu_bar);
gtk_widget_realize(menu);
gtk_widget_realize(menu_item);
gtk_widget_realize(foo_item);
gtk_widget_realize(bar_item);
gtk_widget_realize(separator);
print_style(separator);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
The results for some themes:
Shiki-Wise: wide-separators: 1, separator-height: 7, ythickness: 0
Clearlooks: wide-separators: 1, separator-height: 7, ythickness: 0
Glider: wide-separators: 0, separator-height: 0, ythickness: 2
Glossy: wide-separators: 0, separator-height: 0, ythickness: 3
These values are consistent with the themes gtkrc files, so the general
system to read styles from realized invisible widgets seems to work
fine. However java's gtk look and feel ignores the wide-sepeartors
property completely. The actual preferred height of the JSeparator ends
up as 3 * separator-height. As predicted, themes using a
separator-height of 0 show no seperators in java.
signature.asc
Description: This is a digitally signed message part

