< prev index next >

src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c

Print this page




 546 
 547         fp_g_list_append = dl_symbol("g_list_append");
 548         fp_g_list_free = dl_symbol("g_list_free");
 549         fp_g_list_free_full = dl_symbol("g_list_free_full");
 550     }
 551     /* Now we have only one kind of exceptions: NO_SYMBOL_EXCEPTION
 552      * Otherwise we can check the return value of setjmp method.
 553      */
 554     else
 555     {
 556         dlclose(gtk3_libhandle);
 557         gtk3_libhandle = NULL;
 558 
 559         return NULL;
 560     }
 561 
 562     /*
 563      * Strip the AT-SPI GTK_MODULEs if present
 564      */
 565     gtk_modules_env = getenv ("GTK_MODULES");
 566     if (gtk_modules_env && strstr (gtk_modules_env, "atk-bridge") ||
 567         gtk_modules_env && strstr (gtk_modules_env, "gail"))
 568     {
 569         /* the new env will be smaller than the old one */
 570         gchar *s, *new_env = SAFE_SIZE_STRUCT_ALLOC(malloc,
 571                 sizeof(ENV_PREFIX), 1, strlen (gtk_modules_env));
 572 
 573         if (new_env != NULL )
 574         {
 575             /* careful, strtok modifies its args */
 576             gchar *tmp_env = strdup (gtk_modules_env);
 577             strcpy(new_env, ENV_PREFIX);
 578 
 579             /* strip out 'atk-bridge' and 'gail' */
 580             size_t PREFIX_LENGTH = strlen(ENV_PREFIX);
 581             while (s = strtok(tmp_env, ":"))
 582             {
 583                 if ((!strstr (s, "atk-bridge")) && (!strstr (s, "gail")))
 584                 {
 585                     if (strlen (new_env) > PREFIX_LENGTH) {
 586                         new_env = strcat (new_env, ":");
 587                     }
 588                     new_env = strcat(new_env, s);
 589                 }
 590                 if (tmp_env)
 591                 {
 592                     free (tmp_env);
 593                     tmp_env = NULL; /* next call to strtok arg1==NULL */
 594                 }
 595             }
 596             putenv (new_env);
 597             free (new_env);
 598             free (tmp_env);
 599         }
 600     }
 601     /*


 880 }
 881 
 882 static GtkAdjustment* create_adjustment()
 883 {
 884     return (GtkAdjustment *)
 885             (*fp_gtk_adjustment_new)(50.0, 0.0, 100.0, 10.0, 20.0, 20.0);
 886 }
 887 
 888 /**
 889  * Returns a pointer to the cached native widget for the specified widget
 890  * type.
 891  */
 892 static GtkWidget *gtk3_get_widget(WidgetType widget_type)
 893 {
 894     gboolean init_result = FALSE;
 895     GtkWidget *result = NULL;
 896     switch (widget_type)
 897     {
 898         case BUTTON:
 899         case TABLE_HEADER:
 900             if (init_result = (NULL == gtk3_widgets[_GTK_BUTTON_TYPE]))

 901             {
 902                 gtk3_widgets[_GTK_BUTTON_TYPE] = (*fp_gtk_button_new)();
 903             }
 904             result = gtk3_widgets[_GTK_BUTTON_TYPE];
 905             break;
 906         case CHECK_BOX:
 907             if (init_result = (NULL == gtk3_widgets[_GTK_CHECK_BUTTON_TYPE]))

 908             {
 909                 gtk3_widgets[_GTK_CHECK_BUTTON_TYPE] =
 910                     (*fp_gtk_check_button_new)();
 911             }
 912             result = gtk3_widgets[_GTK_CHECK_BUTTON_TYPE];
 913             break;
 914         case CHECK_BOX_MENU_ITEM:
 915             if (init_result = (NULL == gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE]))

 916             {
 917                 gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE] =
 918                     (*fp_gtk_check_menu_item_new)();
 919             }
 920             result = gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE];
 921             break;
 922         /************************************************************
 923          *    Creation a dedicated color chooser is dangerous because
 924          * it deadlocks the EDT
 925          ************************************************************/
 926 /*        case COLOR_CHOOSER:
 927             if (init_result =
 928                     (NULL == gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE]))
 929             {
 930                 gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE] =
 931                     (*fp_gtk_color_selection_dialog_new)(NULL);
 932             }
 933             result = gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE];
 934             break;*/
 935         case COMBO_BOX:
 936             if (init_result = (NULL == gtk3_widgets[_GTK_COMBO_BOX_TYPE]))

 937             {
 938                 gtk3_widgets[_GTK_COMBO_BOX_TYPE] =
 939                     (*fp_gtk_combo_box_new)();
 940             }
 941             result = gtk3_widgets[_GTK_COMBO_BOX_TYPE];
 942             break;
 943         case COMBO_BOX_ARROW_BUTTON:
 944             if (init_result =
 945                     (NULL == gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE]))

 946             {
 947                 gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE] =
 948                      (*fp_gtk_toggle_button_new)();
 949             }
 950             result = gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE];
 951             break;
 952         case COMBO_BOX_TEXT_FIELD:
 953             if (init_result =
 954                     (NULL == gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE]))

 955             {
 956                 result = gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE] =
 957                      (*fp_gtk_entry_new)();
 958             }
 959             result = gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE];
 960             break;
 961         case DESKTOP_ICON:
 962         case INTERNAL_FRAME_TITLE_PANE:
 963         case LABEL:
 964             if (init_result = (NULL == gtk3_widgets[_GTK_LABEL_TYPE]))

 965             {
 966                 gtk3_widgets[_GTK_LABEL_TYPE] =
 967                     (*fp_gtk_label_new)(NULL);
 968             }
 969             result = gtk3_widgets[_GTK_LABEL_TYPE];
 970             break;
 971         case DESKTOP_PANE:
 972         case PANEL:
 973         case ROOT_PANE:
 974             if (init_result = (NULL == gtk3_widgets[_GTK_CONTAINER_TYPE]))

 975             {
 976                 /* There is no constructor for a container type.  I've
 977                  * chosen GtkFixed container since it has a default
 978                  * constructor.
 979                  */
 980                 gtk3_widgets[_GTK_CONTAINER_TYPE] =
 981                     (*fp_gtk_fixed_new)();
 982             }
 983             result = gtk3_widgets[_GTK_CONTAINER_TYPE];
 984             break;
 985         case EDITOR_PANE:
 986         case TEXT_AREA:
 987         case TEXT_PANE:
 988             if (init_result = (NULL == gtk3_widgets[_GTK_TEXT_VIEW_TYPE]))

 989             {
 990                 gtk3_widgets[_GTK_TEXT_VIEW_TYPE] =
 991                     (*fp_gtk_text_view_new)();
 992             }
 993             result = gtk3_widgets[_GTK_TEXT_VIEW_TYPE];
 994             break;
 995         case FORMATTED_TEXT_FIELD:
 996         case PASSWORD_FIELD:
 997         case TEXT_FIELD:
 998             if (init_result = (NULL == gtk3_widgets[_GTK_ENTRY_TYPE]))

 999             {
1000                 gtk3_widgets[_GTK_ENTRY_TYPE] =
1001                     (*fp_gtk_entry_new)();
1002             }
1003             result = gtk3_widgets[_GTK_ENTRY_TYPE];
1004             break;
1005         case HANDLE_BOX:
1006             if (init_result = (NULL == gtk3_widgets[_GTK_HANDLE_BOX_TYPE]))

1007             {
1008                 gtk3_widgets[_GTK_HANDLE_BOX_TYPE] =
1009                     (*fp_gtk_handle_box_new)();
1010             }
1011             result = gtk3_widgets[_GTK_HANDLE_BOX_TYPE];
1012             break;
1013         case HSCROLL_BAR:
1014         case HSCROLL_BAR_BUTTON_LEFT:
1015         case HSCROLL_BAR_BUTTON_RIGHT:
1016         case HSCROLL_BAR_TRACK:
1017         case HSCROLL_BAR_THUMB:
1018             if (init_result = (NULL == gtk3_widgets[_GTK_HSCROLLBAR_TYPE]))

1019             {
1020                 gtk3_widgets[_GTK_HSCROLLBAR_TYPE] =
1021                     (*fp_gtk_hscrollbar_new)(create_adjustment());
1022             }
1023             result = gtk3_widgets[_GTK_HSCROLLBAR_TYPE];
1024             break;
1025         case HSEPARATOR:
1026             if (init_result = (NULL == gtk3_widgets[_GTK_HSEPARATOR_TYPE]))

1027             {
1028                 gtk3_widgets[_GTK_HSEPARATOR_TYPE] =
1029                     (*fp_gtk_hseparator_new)();
1030             }
1031             result = gtk3_widgets[_GTK_HSEPARATOR_TYPE];
1032             break;
1033         case HSLIDER:
1034         case HSLIDER_THUMB:
1035         case HSLIDER_TRACK:
1036             if (init_result = (NULL == gtk3_widgets[_GTK_HSCALE_TYPE]))

1037             {
1038                 gtk3_widgets[_GTK_HSCALE_TYPE] =
1039                     (*fp_gtk_scale_new)(GTK_ORIENTATION_HORIZONTAL, NULL);
1040             }
1041             result = gtk3_widgets[_GTK_HSCALE_TYPE];
1042             break;
1043         case HSPLIT_PANE_DIVIDER:
1044         case SPLIT_PANE:
1045             if (init_result = (NULL == gtk3_widgets[_GTK_HPANED_TYPE]))

1046             {
1047                 gtk3_widgets[_GTK_HPANED_TYPE] = (*fp_gtk_hpaned_new)();
1048             }
1049             result = gtk3_widgets[_GTK_HPANED_TYPE];
1050             break;
1051         case IMAGE:
1052             if (init_result = (NULL == gtk3_widgets[_GTK_IMAGE_TYPE]))

1053             {
1054                 gtk3_widgets[_GTK_IMAGE_TYPE] = (*fp_gtk_image_new)();
1055             }
1056             result = gtk3_widgets[_GTK_IMAGE_TYPE];
1057             break;
1058         case INTERNAL_FRAME:
1059             if (init_result = (NULL == gtk3_widgets[_GTK_WINDOW_TYPE]))

1060             {
1061                 gtk3_widgets[_GTK_WINDOW_TYPE] =
1062                     (*fp_gtk_window_new)(GTK_WINDOW_TOPLEVEL);
1063             }
1064             result = gtk3_widgets[_GTK_WINDOW_TYPE];
1065             break;
1066         case TOOL_TIP:
1067             if (init_result = (NULL == gtk3_widgets[_GTK_TOOLTIP_TYPE]))

1068             {
1069                 result = (*fp_gtk_window_new)(GTK_WINDOW_TOPLEVEL);
1070                 gtk3_widgets[_GTK_TOOLTIP_TYPE] = result;
1071             }
1072             result = gtk3_widgets[_GTK_TOOLTIP_TYPE];
1073             break;
1074         case LIST:
1075         case TABLE:
1076         case TREE:
1077         case TREE_CELL:
1078             if (init_result = (NULL == gtk3_widgets[_GTK_TREE_VIEW_TYPE]))

1079             {
1080                 gtk3_widgets[_GTK_TREE_VIEW_TYPE] =
1081                     (*fp_gtk_tree_view_new)();
1082             }
1083             result = gtk3_widgets[_GTK_TREE_VIEW_TYPE];
1084             break;
1085         case TITLED_BORDER:
1086             if (init_result = (NULL == gtk3_widgets[_GTK_FRAME_TYPE]))

1087             {
1088                 gtk3_widgets[_GTK_FRAME_TYPE] = fp_gtk_frame_new(NULL);
1089             }
1090             result = gtk3_widgets[_GTK_FRAME_TYPE];
1091             break;
1092         case POPUP_MENU:
1093             if (init_result = (NULL == gtk3_widgets[_GTK_MENU_TYPE]))

1094             {
1095                 gtk3_widgets[_GTK_MENU_TYPE] =
1096                     (*fp_gtk_menu_new)();
1097             }
1098             result = gtk3_widgets[_GTK_MENU_TYPE];
1099             break;
1100         case MENU:
1101         case MENU_ITEM:
1102         case MENU_ITEM_ACCELERATOR:
1103             if (init_result = (NULL == gtk3_widgets[_GTK_MENU_ITEM_TYPE]))

1104             {
1105                 gtk3_widgets[_GTK_MENU_ITEM_TYPE] =
1106                     (*fp_gtk_menu_item_new)();
1107             }
1108             result = gtk3_widgets[_GTK_MENU_ITEM_TYPE];
1109             break;
1110         case MENU_BAR:
1111             if (init_result = (NULL == gtk3_widgets[_GTK_MENU_BAR_TYPE]))

1112             {
1113                 gtk3_widgets[_GTK_MENU_BAR_TYPE] =
1114                     (*fp_gtk_menu_bar_new)();
1115             }
1116             result = gtk3_widgets[_GTK_MENU_BAR_TYPE];
1117             break;
1118         case COLOR_CHOOSER:
1119         case OPTION_PANE:
1120             if (init_result = (NULL == gtk3_widgets[_GTK_DIALOG_TYPE]))

1121             {
1122                 gtk3_widgets[_GTK_DIALOG_TYPE] =
1123                     (*fp_gtk_dialog_new)();
1124             }
1125             result = gtk3_widgets[_GTK_DIALOG_TYPE];
1126             break;
1127         case POPUP_MENU_SEPARATOR:
1128             if (init_result =
1129                     (NULL == gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE]))

1130             {
1131                 gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE] =
1132                     (*fp_gtk_separator_menu_item_new)();
1133             }
1134             result = gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE];
1135             break;
1136         case HPROGRESS_BAR:
1137             if (init_result = (NULL == gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE]))

1138             {
1139                 gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE] =
1140                     (*fp_gtk_progress_bar_new)();
1141             }
1142             result = gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE];
1143             break;
1144         case VPROGRESS_BAR:
1145             if (init_result = (NULL == gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE]))

1146             {
1147                 gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE] =
1148                     (*fp_gtk_progress_bar_new)();
1149                 /*
1150                  * Vertical JProgressBars always go bottom-to-top,
1151                  * regardless of the ComponentOrientation.
1152                  */
1153                 (*fp_gtk_progress_bar_set_orientation)(
1154                     (GtkProgressBar *)gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE],
1155                     GTK_PROGRESS_BOTTOM_TO_TOP);
1156             }
1157             result = gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE];
1158             break;
1159         case RADIO_BUTTON:
1160             if (init_result = (NULL == gtk3_widgets[_GTK_RADIO_BUTTON_TYPE]))

1161             {
1162                 gtk3_widgets[_GTK_RADIO_BUTTON_TYPE] =
1163                     (*fp_gtk_radio_button_new)(NULL);
1164             }
1165             result = gtk3_widgets[_GTK_RADIO_BUTTON_TYPE];
1166             break;
1167         case RADIO_BUTTON_MENU_ITEM:
1168             if (init_result =
1169                     (NULL == gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE]))

1170             {
1171                 gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE] =
1172                     (*fp_gtk_radio_menu_item_new)(NULL);
1173             }
1174             result = gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE];
1175             break;
1176         case SCROLL_PANE:
1177             if (init_result =
1178                     (NULL == gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE]))

1179             {
1180                 gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE] =
1181                     (*fp_gtk_scrolled_window_new)(NULL, NULL);
1182             }
1183             result = gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE];
1184             break;
1185         case SPINNER:
1186         case SPINNER_ARROW_BUTTON:
1187         case SPINNER_TEXT_FIELD:
1188             if (init_result = (NULL == gtk3_widgets[_GTK_SPIN_BUTTON_TYPE]))

1189             {
1190                 result = gtk3_widgets[_GTK_SPIN_BUTTON_TYPE] =
1191                     (*fp_gtk_spin_button_new)(NULL, 0, 0);
1192             }
1193             result = gtk3_widgets[_GTK_SPIN_BUTTON_TYPE];
1194             break;
1195         case TABBED_PANE:
1196         case TABBED_PANE_TAB_AREA:
1197         case TABBED_PANE_CONTENT:
1198         case TABBED_PANE_TAB:
1199             if (init_result = (NULL == gtk3_widgets[_GTK_NOTEBOOK_TYPE]))

1200             {
1201                 gtk3_widgets[_GTK_NOTEBOOK_TYPE] =
1202                     (*fp_gtk_notebook_new)(NULL);
1203             }
1204             result = gtk3_widgets[_GTK_NOTEBOOK_TYPE];
1205             break;
1206         case TOGGLE_BUTTON:
1207             if (init_result = (NULL == gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE]))

1208             {
1209                 gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE] =
1210                     (*fp_gtk_toggle_button_new)(NULL);
1211             }
1212             result = gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE];
1213             break;
1214         case TOOL_BAR:
1215         case TOOL_BAR_DRAG_WINDOW:
1216             if (init_result = (NULL == gtk3_widgets[_GTK_TOOLBAR_TYPE]))

1217             {
1218                 gtk3_widgets[_GTK_TOOLBAR_TYPE] =
1219                     (*fp_gtk_toolbar_new)(NULL);
1220             }
1221             result = gtk3_widgets[_GTK_TOOLBAR_TYPE];
1222             break;
1223         case TOOL_BAR_SEPARATOR:
1224             if (init_result =
1225                     (NULL == gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE]))

1226             {
1227                 gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE] =
1228                     (*fp_gtk_separator_tool_item_new)();
1229             }
1230             result = gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE];
1231             break;
1232         case VIEWPORT:
1233             if (init_result = (NULL == gtk3_widgets[_GTK_VIEWPORT_TYPE]))

1234             {
1235                 GtkAdjustment *adjustment = create_adjustment();
1236                 gtk3_widgets[_GTK_VIEWPORT_TYPE] =
1237                     (*fp_gtk_viewport_new)(adjustment, adjustment);
1238             }
1239             result = gtk3_widgets[_GTK_VIEWPORT_TYPE];
1240             break;
1241         case VSCROLL_BAR:
1242         case VSCROLL_BAR_BUTTON_UP:
1243         case VSCROLL_BAR_BUTTON_DOWN:
1244         case VSCROLL_BAR_TRACK:
1245         case VSCROLL_BAR_THUMB:
1246             if (init_result = (NULL == gtk3_widgets[_GTK_VSCROLLBAR_TYPE]))

1247             {
1248                 gtk3_widgets[_GTK_VSCROLLBAR_TYPE] =
1249                     (*fp_gtk_vscrollbar_new)(create_adjustment());
1250             }
1251             result = gtk3_widgets[_GTK_VSCROLLBAR_TYPE];
1252             break;
1253         case VSEPARATOR:
1254             if (init_result = (NULL == gtk3_widgets[_GTK_VSEPARATOR_TYPE]))

1255             {
1256                 gtk3_widgets[_GTK_VSEPARATOR_TYPE] =
1257                     (*fp_gtk_vseparator_new)();
1258             }
1259             result = gtk3_widgets[_GTK_VSEPARATOR_TYPE];
1260             break;
1261         case VSLIDER:
1262         case VSLIDER_THUMB:
1263         case VSLIDER_TRACK:
1264             if (init_result = (NULL == gtk3_widgets[_GTK_VSCALE_TYPE]))

1265             {
1266                 gtk3_widgets[_GTK_VSCALE_TYPE] =
1267                     (*fp_gtk_scale_new)(GTK_ORIENTATION_VERTICAL, NULL);
1268             }
1269             result = gtk3_widgets[_GTK_VSCALE_TYPE];
1270             /*
1271              * Vertical JSliders start at the bottom, while vertical
1272              * GtkVScale widgets start at the top (by default), so to fix
1273              * this we set the "inverted" flag to get the Swing behavior.
1274              */
1275              fp_gtk_range_set_inverted((GtkRange*)result, TRUE);
1276             break;
1277         case VSPLIT_PANE_DIVIDER:
1278             if (init_result = (NULL == gtk3_widgets[_GTK_VPANED_TYPE]))

1279             {
1280                 gtk3_widgets[_GTK_VPANED_TYPE] = (*fp_gtk_vpaned_new)();
1281             }
1282             result = gtk3_widgets[_GTK_VPANED_TYPE];
1283             break;
1284         default:
1285             result = NULL;
1286             break;
1287     }
1288 
1289     if (result != NULL && init_result)
1290     {
1291         if (widget_type == RADIO_BUTTON_MENU_ITEM ||
1292                 widget_type == CHECK_BOX_MENU_ITEM ||
1293                 widget_type == MENU_ITEM ||
1294                 widget_type == MENU ||
1295                 widget_type == POPUP_MENU_SEPARATOR)
1296         {
1297             GtkWidget *menu = gtk3_get_widget(POPUP_MENU);
1298             (*fp_gtk_menu_shell_append)((GtkMenuShell *)menu, result);


1972 }
1973 
1974 static gint gtk3_get_ythickness(JNIEnv *env, WidgetType widget_type)
1975 {
1976     init_containers();
1977 
1978     gtk3_widget = gtk3_get_widget(widget_type);
1979     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
1980     if (context) {
1981         GtkBorder padding;
1982         fp_gtk_style_context_get_padding(context, 0, &padding);
1983         return padding.top + 1;
1984     }
1985     return 0;
1986 }
1987 
1988 /*************************************************/
1989 static guint8 recode_color(gdouble channel)
1990 {
1991     guint16 result = (guint16)(channel * 65535);
1992     if (result < 0) {
1993         result = 0;
1994     } else if (result > 65535) {
1995         result = 65535;
1996     }
1997     return (guint8)( result >> 8);
1998 }
1999 
2000 static GtkStateFlags gtk3_get_state_flags(GtkStateType state_type) {
2001     switch (state_type)
2002     {
2003         case GTK_STATE_NORMAL:
2004             return GTK_STATE_FLAG_NORMAL;
2005         case GTK_STATE_ACTIVE:
2006             return GTK_STATE_FLAG_ACTIVE;
2007         case GTK_STATE_PRELIGHT:
2008             return GTK_STATE_FLAG_PRELIGHT;
2009         case GTK_STATE_SELECTED:
2010             return GTK_STATE_FLAG_SELECTED;
2011         case GTK_STATE_INSENSITIVE:
2012             return GTK_STATE_FLAG_INSENSITIVE;
2013         case GTK_STATE_INCONSISTENT:
2014             return GTK_STATE_FLAG_INCONSISTENT;
2015         case GTK_STATE_FOCUSED:
2016             return GTK_STATE_FLAG_FOCUSED;




 546 
 547         fp_g_list_append = dl_symbol("g_list_append");
 548         fp_g_list_free = dl_symbol("g_list_free");
 549         fp_g_list_free_full = dl_symbol("g_list_free_full");
 550     }
 551     /* Now we have only one kind of exceptions: NO_SYMBOL_EXCEPTION
 552      * Otherwise we can check the return value of setjmp method.
 553      */
 554     else
 555     {
 556         dlclose(gtk3_libhandle);
 557         gtk3_libhandle = NULL;
 558 
 559         return NULL;
 560     }
 561 
 562     /*
 563      * Strip the AT-SPI GTK_MODULEs if present
 564      */
 565     gtk_modules_env = getenv ("GTK_MODULES");
 566     if ((gtk_modules_env && strstr (gtk_modules_env, "atk-bridge")) ||
 567         (gtk_modules_env && strstr (gtk_modules_env, "gail")))
 568     {
 569         /* the new env will be smaller than the old one */
 570         gchar *s, *new_env = SAFE_SIZE_STRUCT_ALLOC(malloc,
 571                 sizeof(ENV_PREFIX), 1, strlen (gtk_modules_env));
 572 
 573         if (new_env != NULL )
 574         {
 575             /* careful, strtok modifies its args */
 576             gchar *tmp_env = strdup (gtk_modules_env);
 577             strcpy(new_env, ENV_PREFIX);
 578 
 579             /* strip out 'atk-bridge' and 'gail' */
 580             size_t PREFIX_LENGTH = strlen(ENV_PREFIX);
 581             while ((s = strtok(tmp_env, ":")))
 582             {
 583                 if ((!strstr (s, "atk-bridge")) && (!strstr (s, "gail")))
 584                 {
 585                     if (strlen (new_env) > PREFIX_LENGTH) {
 586                         new_env = strcat (new_env, ":");
 587                     }
 588                     new_env = strcat(new_env, s);
 589                 }
 590                 if (tmp_env)
 591                 {
 592                     free (tmp_env);
 593                     tmp_env = NULL; /* next call to strtok arg1==NULL */
 594                 }
 595             }
 596             putenv (new_env);
 597             free (new_env);
 598             free (tmp_env);
 599         }
 600     }
 601     /*


 880 }
 881 
 882 static GtkAdjustment* create_adjustment()
 883 {
 884     return (GtkAdjustment *)
 885             (*fp_gtk_adjustment_new)(50.0, 0.0, 100.0, 10.0, 20.0, 20.0);
 886 }
 887 
 888 /**
 889  * Returns a pointer to the cached native widget for the specified widget
 890  * type.
 891  */
 892 static GtkWidget *gtk3_get_widget(WidgetType widget_type)
 893 {
 894     gboolean init_result = FALSE;
 895     GtkWidget *result = NULL;
 896     switch (widget_type)
 897     {
 898         case BUTTON:
 899         case TABLE_HEADER:
 900             init_result = (NULL == gtk3_widgets[_GTK_BUTTON_TYPE]);
 901             if (init_result)
 902             {
 903                 gtk3_widgets[_GTK_BUTTON_TYPE] = (*fp_gtk_button_new)();
 904             }
 905             result = gtk3_widgets[_GTK_BUTTON_TYPE];
 906             break;
 907         case CHECK_BOX:
 908             init_result = (NULL == gtk3_widgets[_GTK_CHECK_BUTTON_TYPE]);
 909             if (init_result)
 910             {
 911                 gtk3_widgets[_GTK_CHECK_BUTTON_TYPE] =
 912                     (*fp_gtk_check_button_new)();
 913             }
 914             result = gtk3_widgets[_GTK_CHECK_BUTTON_TYPE];
 915             break;
 916         case CHECK_BOX_MENU_ITEM:
 917             init_result = (NULL == gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE]);
 918             if (init_result)
 919             {
 920                 gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE] =
 921                     (*fp_gtk_check_menu_item_new)();
 922             }
 923             result = gtk3_widgets[_GTK_CHECK_MENU_ITEM_TYPE];
 924             break;
 925         /************************************************************
 926          *    Creation a dedicated color chooser is dangerous because
 927          * it deadlocks the EDT
 928          ************************************************************/
 929 /*        case COLOR_CHOOSER:
 930             if (init_result =
 931                     (NULL == gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE]))
 932             {
 933                 gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE] =
 934                     (*fp_gtk_color_selection_dialog_new)(NULL);
 935             }
 936             result = gtk3_widgets[_GTK_COLOR_SELECTION_DIALOG_TYPE];
 937             break;*/
 938         case COMBO_BOX:
 939             init_result = (NULL == gtk3_widgets[_GTK_COMBO_BOX_TYPE]);
 940             if (init_result)
 941             {
 942                 gtk3_widgets[_GTK_COMBO_BOX_TYPE] =
 943                     (*fp_gtk_combo_box_new)();
 944             }
 945             result = gtk3_widgets[_GTK_COMBO_BOX_TYPE];
 946             break;
 947         case COMBO_BOX_ARROW_BUTTON:
 948             init_result = 
 949                 (NULL == gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE]);
 950             if (init_result)
 951             {
 952                 gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE] =
 953                      (*fp_gtk_toggle_button_new)();
 954             }
 955             result = gtk3_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE];
 956             break;
 957         case COMBO_BOX_TEXT_FIELD:
 958             init_result =
 959                 (NULL == gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE]);
 960             if (init_result)
 961             {
 962                 result = gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE] =
 963                      (*fp_gtk_entry_new)();
 964             }
 965             result = gtk3_widgets[_GTK_COMBO_BOX_TEXT_FIELD_TYPE];
 966             break;
 967         case DESKTOP_ICON:
 968         case INTERNAL_FRAME_TITLE_PANE:
 969         case LABEL:
 970             init_result = (NULL == gtk3_widgets[_GTK_LABEL_TYPE]);
 971             if (init_result)
 972             {
 973                 gtk3_widgets[_GTK_LABEL_TYPE] =
 974                     (*fp_gtk_label_new)(NULL);
 975             }
 976             result = gtk3_widgets[_GTK_LABEL_TYPE];
 977             break;
 978         case DESKTOP_PANE:
 979         case PANEL:
 980         case ROOT_PANE:
 981             init_result = (NULL == gtk3_widgets[_GTK_CONTAINER_TYPE]);
 982             if (init_result)
 983             {
 984                 /* There is no constructor for a container type.  I've
 985                  * chosen GtkFixed container since it has a default
 986                  * constructor.
 987                  */
 988                 gtk3_widgets[_GTK_CONTAINER_TYPE] =
 989                     (*fp_gtk_fixed_new)();
 990             }
 991             result = gtk3_widgets[_GTK_CONTAINER_TYPE];
 992             break;
 993         case EDITOR_PANE:
 994         case TEXT_AREA:
 995         case TEXT_PANE:
 996             init_result = (NULL == gtk3_widgets[_GTK_TEXT_VIEW_TYPE]);
 997             if (init_result)
 998             {
 999                 gtk3_widgets[_GTK_TEXT_VIEW_TYPE] =
1000                     (*fp_gtk_text_view_new)();
1001             }
1002             result = gtk3_widgets[_GTK_TEXT_VIEW_TYPE];
1003             break;
1004         case FORMATTED_TEXT_FIELD:
1005         case PASSWORD_FIELD:
1006         case TEXT_FIELD:
1007             init_result = (NULL == gtk3_widgets[_GTK_ENTRY_TYPE]);
1008             if (init_result)
1009             {
1010                 gtk3_widgets[_GTK_ENTRY_TYPE] =
1011                     (*fp_gtk_entry_new)();
1012             }
1013             result = gtk3_widgets[_GTK_ENTRY_TYPE];
1014             break;
1015         case HANDLE_BOX:
1016             init_result = (NULL == gtk3_widgets[_GTK_HANDLE_BOX_TYPE]);
1017             if (init_result)
1018             {
1019                 gtk3_widgets[_GTK_HANDLE_BOX_TYPE] =
1020                     (*fp_gtk_handle_box_new)();
1021             }
1022             result = gtk3_widgets[_GTK_HANDLE_BOX_TYPE];
1023             break;
1024         case HSCROLL_BAR:
1025         case HSCROLL_BAR_BUTTON_LEFT:
1026         case HSCROLL_BAR_BUTTON_RIGHT:
1027         case HSCROLL_BAR_TRACK:
1028         case HSCROLL_BAR_THUMB:
1029             init_result = (NULL == gtk3_widgets[_GTK_HSCROLLBAR_TYPE]);
1030             if (init_result)
1031             {
1032                 gtk3_widgets[_GTK_HSCROLLBAR_TYPE] =
1033                     (*fp_gtk_hscrollbar_new)(create_adjustment());
1034             }
1035             result = gtk3_widgets[_GTK_HSCROLLBAR_TYPE];
1036             break;
1037         case HSEPARATOR:
1038             init_result = (NULL == gtk3_widgets[_GTK_HSEPARATOR_TYPE]);
1039             if (init_result)
1040             {
1041                 gtk3_widgets[_GTK_HSEPARATOR_TYPE] =
1042                     (*fp_gtk_hseparator_new)();
1043             }
1044             result = gtk3_widgets[_GTK_HSEPARATOR_TYPE];
1045             break;
1046         case HSLIDER:
1047         case HSLIDER_THUMB:
1048         case HSLIDER_TRACK:
1049             init_result = (NULL == gtk3_widgets[_GTK_HSCALE_TYPE]);
1050             if (init_result)
1051             {
1052                 gtk3_widgets[_GTK_HSCALE_TYPE] =
1053                     (*fp_gtk_scale_new)(GTK_ORIENTATION_HORIZONTAL, NULL);
1054             }
1055             result = gtk3_widgets[_GTK_HSCALE_TYPE];
1056             break;
1057         case HSPLIT_PANE_DIVIDER:
1058         case SPLIT_PANE:
1059             init_result = (NULL == gtk3_widgets[_GTK_HPANED_TYPE]);
1060             if (init_result)
1061             {
1062                 gtk3_widgets[_GTK_HPANED_TYPE] = (*fp_gtk_hpaned_new)();
1063             }
1064             result = gtk3_widgets[_GTK_HPANED_TYPE];
1065             break;
1066         case IMAGE:
1067             init_result = (NULL == gtk3_widgets[_GTK_IMAGE_TYPE]);
1068             if (init_result)
1069             {
1070                 gtk3_widgets[_GTK_IMAGE_TYPE] = (*fp_gtk_image_new)();
1071             }
1072             result = gtk3_widgets[_GTK_IMAGE_TYPE];
1073             break;
1074         case INTERNAL_FRAME:
1075             init_result = (NULL == gtk3_widgets[_GTK_WINDOW_TYPE]);
1076             if (init_result)
1077             {
1078                 gtk3_widgets[_GTK_WINDOW_TYPE] =
1079                     (*fp_gtk_window_new)(GTK_WINDOW_TOPLEVEL);
1080             }
1081             result = gtk3_widgets[_GTK_WINDOW_TYPE];
1082             break;
1083         case TOOL_TIP:
1084             init_result = (NULL == gtk3_widgets[_GTK_TOOLTIP_TYPE]);
1085             if (init_result)
1086             {
1087                 result = (*fp_gtk_window_new)(GTK_WINDOW_TOPLEVEL);
1088                 gtk3_widgets[_GTK_TOOLTIP_TYPE] = result;
1089             }
1090             result = gtk3_widgets[_GTK_TOOLTIP_TYPE];
1091             break;
1092         case LIST:
1093         case TABLE:
1094         case TREE:
1095         case TREE_CELL:
1096             init_result = (NULL == gtk3_widgets[_GTK_TREE_VIEW_TYPE]);
1097             if (init_result)
1098             {
1099                 gtk3_widgets[_GTK_TREE_VIEW_TYPE] =
1100                     (*fp_gtk_tree_view_new)();
1101             }
1102             result = gtk3_widgets[_GTK_TREE_VIEW_TYPE];
1103             break;
1104         case TITLED_BORDER:
1105             init_result = (NULL == gtk3_widgets[_GTK_FRAME_TYPE]);
1106             if (init_result)
1107             {
1108                 gtk3_widgets[_GTK_FRAME_TYPE] = fp_gtk_frame_new(NULL);
1109             }
1110             result = gtk3_widgets[_GTK_FRAME_TYPE];
1111             break;
1112         case POPUP_MENU:
1113             init_result = (NULL == gtk3_widgets[_GTK_MENU_TYPE]);
1114             if (init_result)
1115             {
1116                 gtk3_widgets[_GTK_MENU_TYPE] =
1117                     (*fp_gtk_menu_new)();
1118             }
1119             result = gtk3_widgets[_GTK_MENU_TYPE];
1120             break;
1121         case MENU:
1122         case MENU_ITEM:
1123         case MENU_ITEM_ACCELERATOR:
1124             init_result = (NULL == gtk3_widgets[_GTK_MENU_ITEM_TYPE]);
1125             if (init_result)
1126             {
1127                 gtk3_widgets[_GTK_MENU_ITEM_TYPE] =
1128                     (*fp_gtk_menu_item_new)();
1129             }
1130             result = gtk3_widgets[_GTK_MENU_ITEM_TYPE];
1131             break;
1132         case MENU_BAR:
1133             init_result = (NULL == gtk3_widgets[_GTK_MENU_BAR_TYPE]);
1134             if (init_result)
1135             {
1136                 gtk3_widgets[_GTK_MENU_BAR_TYPE] =
1137                     (*fp_gtk_menu_bar_new)();
1138             }
1139             result = gtk3_widgets[_GTK_MENU_BAR_TYPE];
1140             break;
1141         case COLOR_CHOOSER:
1142         case OPTION_PANE:
1143             init_result = (NULL == gtk3_widgets[_GTK_DIALOG_TYPE]);
1144             if (init_result)
1145             {
1146                 gtk3_widgets[_GTK_DIALOG_TYPE] =
1147                     (*fp_gtk_dialog_new)();
1148             }
1149             result = gtk3_widgets[_GTK_DIALOG_TYPE];
1150             break;
1151         case POPUP_MENU_SEPARATOR:
1152             init_result =
1153                     (NULL == gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE]);
1154             if (init_result)
1155             {
1156                 gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE] =
1157                     (*fp_gtk_separator_menu_item_new)();
1158             }
1159             result = gtk3_widgets[_GTK_SEPARATOR_MENU_ITEM_TYPE];
1160             break;
1161         case HPROGRESS_BAR:
1162             init_result = (NULL == gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE]);
1163             if (init_result)
1164             {
1165                 gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE] =
1166                     (*fp_gtk_progress_bar_new)();
1167             }
1168             result = gtk3_widgets[_GTK_HPROGRESS_BAR_TYPE];
1169             break;
1170         case VPROGRESS_BAR:
1171             init_result = (NULL == gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE]);
1172             if (init_result)
1173             {
1174                 gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE] =
1175                     (*fp_gtk_progress_bar_new)();
1176                 /*
1177                  * Vertical JProgressBars always go bottom-to-top,
1178                  * regardless of the ComponentOrientation.
1179                  */
1180                 (*fp_gtk_progress_bar_set_orientation)(
1181                     (GtkProgressBar *)gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE],
1182                     GTK_PROGRESS_BOTTOM_TO_TOP);
1183             }
1184             result = gtk3_widgets[_GTK_VPROGRESS_BAR_TYPE];
1185             break;
1186         case RADIO_BUTTON:
1187             init_result = (NULL == gtk3_widgets[_GTK_RADIO_BUTTON_TYPE]);
1188             if (init_result)
1189             {
1190                 gtk3_widgets[_GTK_RADIO_BUTTON_TYPE] =
1191                     (*fp_gtk_radio_button_new)(NULL);
1192             }
1193             result = gtk3_widgets[_GTK_RADIO_BUTTON_TYPE];
1194             break;
1195         case RADIO_BUTTON_MENU_ITEM:
1196             init_result =
1197                     (NULL == gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE]);
1198             if (init_result)
1199             {
1200                 gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE] =
1201                     (*fp_gtk_radio_menu_item_new)(NULL);
1202             }
1203             result = gtk3_widgets[_GTK_RADIO_MENU_ITEM_TYPE];
1204             break;
1205         case SCROLL_PANE:
1206             init_result =
1207                     (NULL == gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE]);
1208             if (init_result)
1209             {
1210                 gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE] =
1211                     (*fp_gtk_scrolled_window_new)(NULL, NULL);
1212             }
1213             result = gtk3_widgets[_GTK_SCROLLED_WINDOW_TYPE];
1214             break;
1215         case SPINNER:
1216         case SPINNER_ARROW_BUTTON:
1217         case SPINNER_TEXT_FIELD:
1218             init_result = (NULL == gtk3_widgets[_GTK_SPIN_BUTTON_TYPE]);
1219             if (init_result)
1220             {
1221                 result = gtk3_widgets[_GTK_SPIN_BUTTON_TYPE] =
1222                     (*fp_gtk_spin_button_new)(NULL, 0, 0);
1223             }
1224             result = gtk3_widgets[_GTK_SPIN_BUTTON_TYPE];
1225             break;
1226         case TABBED_PANE:
1227         case TABBED_PANE_TAB_AREA:
1228         case TABBED_PANE_CONTENT:
1229         case TABBED_PANE_TAB:
1230             init_result = (NULL == gtk3_widgets[_GTK_NOTEBOOK_TYPE]);
1231             if (init_result)
1232             {
1233                 gtk3_widgets[_GTK_NOTEBOOK_TYPE] =
1234                     (*fp_gtk_notebook_new)(NULL);
1235             }
1236             result = gtk3_widgets[_GTK_NOTEBOOK_TYPE];
1237             break;
1238         case TOGGLE_BUTTON:
1239             init_result = (NULL == gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE]);
1240             if (init_result)
1241             {
1242                 gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE] =
1243                     (*fp_gtk_toggle_button_new)(NULL);
1244             }
1245             result = gtk3_widgets[_GTK_TOGGLE_BUTTON_TYPE];
1246             break;
1247         case TOOL_BAR:
1248         case TOOL_BAR_DRAG_WINDOW:
1249             init_result = (NULL == gtk3_widgets[_GTK_TOOLBAR_TYPE]);
1250             if (init_result)
1251             {
1252                 gtk3_widgets[_GTK_TOOLBAR_TYPE] =
1253                     (*fp_gtk_toolbar_new)(NULL);
1254             }
1255             result = gtk3_widgets[_GTK_TOOLBAR_TYPE];
1256             break;
1257         case TOOL_BAR_SEPARATOR:
1258             init_result =
1259                     (NULL == gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE]);
1260             if (init_result)
1261             {
1262                 gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE] =
1263                     (*fp_gtk_separator_tool_item_new)();
1264             }
1265             result = gtk3_widgets[_GTK_SEPARATOR_TOOL_ITEM_TYPE];
1266             break;
1267         case VIEWPORT:
1268             init_result = (NULL == gtk3_widgets[_GTK_VIEWPORT_TYPE]);
1269             if (init_result)
1270             {
1271                 GtkAdjustment *adjustment = create_adjustment();
1272                 gtk3_widgets[_GTK_VIEWPORT_TYPE] =
1273                     (*fp_gtk_viewport_new)(adjustment, adjustment);
1274             }
1275             result = gtk3_widgets[_GTK_VIEWPORT_TYPE];
1276             break;
1277         case VSCROLL_BAR:
1278         case VSCROLL_BAR_BUTTON_UP:
1279         case VSCROLL_BAR_BUTTON_DOWN:
1280         case VSCROLL_BAR_TRACK:
1281         case VSCROLL_BAR_THUMB:
1282             init_result = (NULL == gtk3_widgets[_GTK_VSCROLLBAR_TYPE]);
1283             if (init_result)
1284             {
1285                 gtk3_widgets[_GTK_VSCROLLBAR_TYPE] =
1286                     (*fp_gtk_vscrollbar_new)(create_adjustment());
1287             }
1288             result = gtk3_widgets[_GTK_VSCROLLBAR_TYPE];
1289             break;
1290         case VSEPARATOR:
1291             init_result = (NULL == gtk3_widgets[_GTK_VSEPARATOR_TYPE]);
1292             if (init_result)
1293             {
1294                 gtk3_widgets[_GTK_VSEPARATOR_TYPE] =
1295                     (*fp_gtk_vseparator_new)();
1296             }
1297             result = gtk3_widgets[_GTK_VSEPARATOR_TYPE];
1298             break;
1299         case VSLIDER:
1300         case VSLIDER_THUMB:
1301         case VSLIDER_TRACK:
1302             init_result = (NULL == gtk3_widgets[_GTK_VSCALE_TYPE]);
1303             if (init_result)
1304             {
1305                 gtk3_widgets[_GTK_VSCALE_TYPE] =
1306                     (*fp_gtk_scale_new)(GTK_ORIENTATION_VERTICAL, NULL);
1307             }
1308             result = gtk3_widgets[_GTK_VSCALE_TYPE];
1309             /*
1310              * Vertical JSliders start at the bottom, while vertical
1311              * GtkVScale widgets start at the top (by default), so to fix
1312              * this we set the "inverted" flag to get the Swing behavior.
1313              */
1314              fp_gtk_range_set_inverted((GtkRange*)result, TRUE);
1315             break;
1316         case VSPLIT_PANE_DIVIDER:
1317             init_result = (NULL == gtk3_widgets[_GTK_VPANED_TYPE]);
1318             if (init_result)
1319             {
1320                 gtk3_widgets[_GTK_VPANED_TYPE] = (*fp_gtk_vpaned_new)();
1321             }
1322             result = gtk3_widgets[_GTK_VPANED_TYPE];
1323             break;
1324         default:
1325             result = NULL;
1326             break;
1327     }
1328 
1329     if (result != NULL && init_result)
1330     {
1331         if (widget_type == RADIO_BUTTON_MENU_ITEM ||
1332                 widget_type == CHECK_BOX_MENU_ITEM ||
1333                 widget_type == MENU_ITEM ||
1334                 widget_type == MENU ||
1335                 widget_type == POPUP_MENU_SEPARATOR)
1336         {
1337             GtkWidget *menu = gtk3_get_widget(POPUP_MENU);
1338             (*fp_gtk_menu_shell_append)((GtkMenuShell *)menu, result);


2012 }
2013 
2014 static gint gtk3_get_ythickness(JNIEnv *env, WidgetType widget_type)
2015 {
2016     init_containers();
2017 
2018     gtk3_widget = gtk3_get_widget(widget_type);
2019     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
2020     if (context) {
2021         GtkBorder padding;
2022         fp_gtk_style_context_get_padding(context, 0, &padding);
2023         return padding.top + 1;
2024     }
2025     return 0;
2026 }
2027 
2028 /*************************************************/
2029 static guint8 recode_color(gdouble channel)
2030 {
2031     guint16 result = (guint16)(channel * 65535);
2032 




2033     return (guint8)( result >> 8);
2034 }
2035 
2036 static GtkStateFlags gtk3_get_state_flags(GtkStateType state_type) {
2037     switch (state_type)
2038     {
2039         case GTK_STATE_NORMAL:
2040             return GTK_STATE_FLAG_NORMAL;
2041         case GTK_STATE_ACTIVE:
2042             return GTK_STATE_FLAG_ACTIVE;
2043         case GTK_STATE_PRELIGHT:
2044             return GTK_STATE_FLAG_PRELIGHT;
2045         case GTK_STATE_SELECTED:
2046             return GTK_STATE_FLAG_SELECTED;
2047         case GTK_STATE_INSENSITIVE:
2048             return GTK_STATE_FLAG_INSENSITIVE;
2049         case GTK_STATE_INCONSISTENT:
2050             return GTK_STATE_FLAG_INCONSISTENT;
2051         case GTK_STATE_FOCUSED:
2052             return GTK_STATE_FLAG_FOCUSED;


< prev index next >