src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.c
changeset 58319 18e7ed2cd7d1
parent 49301 3e3696a308e1
equal deleted inserted replaced
58318:f39420849ae9 58319:18e7ed2cd7d1
     1 /*
     1 /*
     2  * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     7  * published by the Free Software Foundation.  Oracle designates this
    64     static GtkLib** load_order;
    64     static GtkLib** load_order;
    65     static int n_libs = 0;
    65     static int n_libs = 0;
    66     if (!n_libs) {
    66     if (!n_libs) {
    67         n_libs = sizeof(gtk_libs) / sizeof(GtkLib);
    67         n_libs = sizeof(gtk_libs) / sizeof(GtkLib);
    68         load_order = calloc(n_libs + 1, sizeof(GtkLib *));
    68         load_order = calloc(n_libs + 1, sizeof(GtkLib *));
       
    69         if (load_order == NULL) {
       
    70           return NULL;
       
    71         }
    69     }
    72     }
    70     int i, first = 0;
    73     int i, first = 0;
    71     for (i = 0; i < n_libs; i++) {
    74     for (i = 0; i < n_libs; i++) {
    72         load_order[i] = &gtk_libs[i];
    75         load_order[i] = &gtk_libs[i];
    73         if (load_order[i]->version == version) {
    76         if (load_order[i]->version == version) {
    83     return load_order;
    86     return load_order;
    84 }
    87 }
    85 
    88 
    86 static GtkLib* get_loaded() {
    89 static GtkLib* get_loaded() {
    87     GtkLib** libs = get_libs_order(GTK_ANY);
    90     GtkLib** libs = get_libs_order(GTK_ANY);
       
    91     if (libs == NULL) return NULL;
    88     while(!gtk && *libs) {
    92     while(!gtk && *libs) {
    89         GtkLib* lib = *libs++;
    93         GtkLib* lib = *libs++;
    90         if (lib->check(lib->vname, /* load = */FALSE)) {
    94         if (lib->check(lib->vname, /* load = */FALSE)) {
    91             return lib;
    95             return lib;
    92         }
    96         }
   109             if (!gtk) {
   113             if (!gtk) {
   110                 gtk = lib->load(env, lib->name);
   114                 gtk = lib->load(env, lib->name);
   111             }
   115             }
   112         } else {
   116         } else {
   113             GtkLib** libs = get_libs_order(version);
   117             GtkLib** libs = get_libs_order(version);
   114             while (!gtk && *libs) {
   118             while (!gtk && libs && *libs) {
   115                 lib = *libs++;
   119                 lib = *libs++;
   116                 if (version == GTK_ANY || lib->version == version) {
   120                 if (version == GTK_ANY || lib->version == version) {
   117                     if (verbose) {
   121                     if (verbose) {
   118                         fprintf(stderr, "Looking for GTK%d library...\n",
   122                         fprintf(stderr, "Looking for GTK%d library...\n",
   119                                                                   lib->version);
   123                                                                   lib->version);
   139     return gtk != NULL;
   143     return gtk != NULL;
   140 }
   144 }
   141 
   145 
   142 static gboolean check_version(GtkVersion version) {
   146 static gboolean check_version(GtkVersion version) {
   143     GtkLib** libs = get_libs_order(version);
   147     GtkLib** libs = get_libs_order(version);
       
   148     if (libs == NULL) return FALSE;
   144     while (*libs) {
   149     while (*libs) {
   145         GtkLib* lib = *libs++;
   150         GtkLib* lib = *libs++;
   146         if (lib->check(lib->vname, /* load = */TRUE)) {
   151         if (lib->check(lib->vname, /* load = */TRUE)) {
   147             return TRUE;
   152             return TRUE;
   148         }
   153         }