< prev index next >

modules/graphics/src/main/native-glass/gtk/GlassApplication.cpp

Print this page




  47 GdkEventFunc process_events_prev;
  48 static void process_events(GdkEvent*, gpointer);
  49 
  50 JNIEnv* mainEnv; // Use only with main loop thread!!!
  51 
  52 extern gboolean disableGrab;
  53 
  54 static gboolean call_runnable (gpointer data)
  55 {
  56     RunnableContext* context = reinterpret_cast<RunnableContext*>(data);
  57 
  58     mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL);
  59     LOG_EXCEPTION(mainEnv);
  60     mainEnv->DeleteGlobalRef(context->runnable);
  61     free(context);
  62     return FALSE;
  63 }
  64 
  65 extern "C" {
  66 









































  67 /*
  68  * Class:     com_sun_glass_ui_gtk_GtkApplication
  69  * Method:    _isDisplayValid
  70  * Signature: ()Z
  71  */
  72 JNIEXPORT jboolean JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1isDisplayValid
  73   (JNIEnv * env, jclass clazz)
  74 {







  75     (void)env;
  76     (void)clazz;








  77 
  78     return is_display_valid();
  79 }
  80 
  81 /*
  82  * Class:     com_sun_glass_ui_gtk_GtkApplication
  83  * Method:    _init
  84  * Signature: ()V
  85  */
  86 JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1init
  87   (JNIEnv * env, jobject obj, jlong handler, jboolean _disableGrab)
  88 {
  89     (void)obj;
  90 
  91     mainEnv = env;
  92     process_events_prev = (GdkEventFunc) handler;
  93     disableGrab = (gboolean) _disableGrab;
  94 

  95     gdk_event_handler_set(process_events, NULL, NULL);
  96 
  97     GdkScreen *default_gdk_screen = gdk_screen_get_default();
  98     if (default_gdk_screen != NULL) {
  99         g_signal_connect(G_OBJECT(default_gdk_screen), "monitors-changed",
 100                          G_CALLBACK(screen_settings_changed), NULL);
 101         g_signal_connect(G_OBJECT(default_gdk_screen), "size-changed",
 102                          G_CALLBACK(screen_settings_changed), NULL);
 103     }
 104 
 105     GdkWindow *root = gdk_screen_get_root_window(default_gdk_screen);
 106     gdk_window_set_events(root, static_cast<GdkEventMask>(gdk_window_get_events(root) | GDK_PROPERTY_CHANGE_MASK));
 107 }
 108 
 109 /*
 110  * Class:     com_sun_glass_ui_gtk_GtkApplication
 111  * Method:    _runLoop
 112  * Signature: (Ljava/lang/Runnable;Z)V
 113  */
 114 JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1runLoop




  47 GdkEventFunc process_events_prev;
  48 static void process_events(GdkEvent*, gpointer);
  49 
  50 JNIEnv* mainEnv; // Use only with main loop thread!!!
  51 
  52 extern gboolean disableGrab;
  53 
  54 static gboolean call_runnable (gpointer data)
  55 {
  56     RunnableContext* context = reinterpret_cast<RunnableContext*>(data);
  57 
  58     mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL);
  59     LOG_EXCEPTION(mainEnv);
  60     mainEnv->DeleteGlobalRef(context->runnable);
  61     free(context);
  62     return FALSE;
  63 }
  64 
  65 extern "C" {
  66 
  67 
  68 #pragma GCC diagnostic push
  69 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  70 static void init_threads() {
  71     gboolean is_g_thread_get_initialized = FALSE;
  72     if (glib_check_version(2, 32, 0)) { // < 2.32
  73         if (!glib_check_version(2, 20, 0)) {
  74             is_g_thread_get_initialized = g_thread_get_initialized();
  75         }
  76         if (!is_g_thread_get_initialized) {
  77             g_thread_init(NULL);
  78         }
  79     }
  80     gdk_threads_init();
  81 }
  82 #pragma GCC diagnostic pop
  83 
  84 jboolean gtk_verbose = JNI_FALSE;
  85 
  86 /*
  87  * Class:     com_sun_glass_ui_gtk_GtkApplication
  88  * Method:    _initGTK
  89  * Signature: (IZ)I
  90  */
  91 JNIEXPORT jint JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1initGTK
  92   (JNIEnv *env, jclass clazz, jint version, jboolean verbose)
  93 {
  94     (void) clazz;
  95     (void) version;
  96 
  97     gtk_verbose = verbose;
  98 
  99     env->ExceptionClear();
 100     init_threads();
 101 
 102     gdk_threads_enter();
 103     gtk_init(NULL, NULL);
 104 
 105     return JNI_TRUE;
 106 }
 107 
 108 /*
 109  * Class:     com_sun_glass_ui_gtk_GtkApplication
 110  * Method:    _queryLibrary
 111  * Signature: Signature: (IZ)I
 112  */
 113 JNIEXPORT jint JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1queryLibrary
 114   (JNIEnv *env, jclass clazz, jint suggestedVersion, jboolean verbose)
 115 {
 116     // If we are being called, then the launcher is
 117     // not in use, and we are in the proper glass library already.
 118     // This can be done by renaming the gtk versioned native
 119     // libraries to be libglass.so
 120     // Note: we will make no effort to complain if the suggestedVersion
 121     // is out of phase.
 122 
 123     (void)env;
 124     (void)clazz;
 125     (void)suggestedVersion;
 126     (void)verbose;
 127 
 128     Display *display = XOpenDisplay(NULL);
 129     if (display == NULL) {
 130         return com_sun_glass_ui_gtk_GtkApplication_QUERY_NO_DISPLAY;
 131     }
 132     XCloseDisplay(display);
 133 
 134     return com_sun_glass_ui_gtk_GtkApplication_QUERY_USE_CURRENT;
 135 }
 136 
 137 /*
 138  * Class:     com_sun_glass_ui_gtk_GtkApplication
 139  * Method:    _init
 140  * Signature: ()V
 141  */
 142 JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1init
 143   (JNIEnv * env, jobject obj, jlong handler, jboolean _disableGrab)
 144 {
 145     (void)obj;
 146 
 147     mainEnv = env;
 148     process_events_prev = (GdkEventFunc) handler;
 149     disableGrab = (gboolean) _disableGrab;
 150 
 151     glass_gdk_x11_display_set_window_scale(gdk_display_get_default(), 1);
 152     gdk_event_handler_set(process_events, NULL, NULL);
 153 
 154     GdkScreen *default_gdk_screen = gdk_screen_get_default();
 155     if (default_gdk_screen != NULL) {
 156         g_signal_connect(G_OBJECT(default_gdk_screen), "monitors-changed",
 157                          G_CALLBACK(screen_settings_changed), NULL);
 158         g_signal_connect(G_OBJECT(default_gdk_screen), "size-changed",
 159                          G_CALLBACK(screen_settings_changed), NULL);
 160     }
 161 
 162     GdkWindow *root = gdk_screen_get_root_window(default_gdk_screen);
 163     gdk_window_set_events(root, static_cast<GdkEventMask>(gdk_window_get_events(root) | GDK_PROPERTY_CHANGE_MASK));
 164 }
 165 
 166 /*
 167  * Class:     com_sun_glass_ui_gtk_GtkApplication
 168  * Method:    _runLoop
 169  * Signature: (Ljava/lang/Runnable;Z)V
 170  */
 171 JNIEXPORT void JNICALL Java_com_sun_glass_ui_gtk_GtkApplication__1runLoop


< prev index next >