jdk/src/java.desktop/unix/native/libawt_xawt/xawt/awt_Taskbar.c
changeset 37711 972001566d66
parent 36903 addc2e9d4bd4
child 41797 901aa8f0c2ee
equal deleted inserted replaced
37710:8d246cbf84b1 37711:972001566d66
   107  * Class:     sun_awt_X11_XTaskbarPeer
   107  * Class:     sun_awt_X11_XTaskbarPeer
   108  * Method:    init
   108  * Method:    init
   109  * Signature: (Ljava/lang/String;)Z
   109  * Signature: (Ljava/lang/String;)Z
   110  */
   110  */
   111 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XTaskbarPeer_init
   111 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XTaskbarPeer_init
   112 (JNIEnv *env, jclass cls, jstring jname) {
   112 (JNIEnv *env, jclass cls, jstring jname, jint version, jboolean verbose) {
   113     jclass clazz;
   113     jclass clazz;
   114 
   114 
   115     jTaskbarCls = (*env)->NewGlobalRef(env, cls);
   115     jTaskbarCls = (*env)->NewGlobalRef(env, cls);
   116 
   116 
   117     CHECK_NULL_RETURN(jTaskbarCallback =
   117     CHECK_NULL_RETURN(jTaskbarCallback =
   119     CHECK_NULL_RETURN(
   119     CHECK_NULL_RETURN(
   120             clazz = (*env)->FindClass(env, "java/awt/MenuItem"), JNI_FALSE);
   120             clazz = (*env)->FindClass(env, "java/awt/MenuItem"), JNI_FALSE);
   121     CHECK_NULL_RETURN(
   121     CHECK_NULL_RETURN(
   122             jMenuItemGetLabel = (*env)->GetMethodID(env, clazz, "getLabel", "()Ljava/lang/String;"), JNI_FALSE);
   122             jMenuItemGetLabel = (*env)->GetMethodID(env, clazz, "getLabel", "()Ljava/lang/String;"), JNI_FALSE);
   123 
   123 
   124     if (gtk2_load(env) && unity_load()) {
   124     if (gtk_load(env, version, verbose) && unity_load()) {
   125         const gchar* name = (*env)->GetStringUTFChars(env, jname, NULL);
   125         const gchar* name = (*env)->GetStringUTFChars(env, jname, NULL);
   126         if (name) {
   126         if (name) {
   127             entry = fp_unity_launcher_entry_get_for_desktop_file(name);
   127             entry = fp_unity_launcher_entry_get_for_desktop_file(name);
   128             (*env)->ReleaseStringUTFChars(env, jname, name);
   128             (*env)->ReleaseStringUTFChars(env, jname, name);
   129             return JNI_TRUE;
   129             return JNI_TRUE;
   137  * Method:    runloop
   137  * Method:    runloop
   138  * Signature: ()V
   138  * Signature: ()V
   139  */
   139  */
   140 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_runloop
   140 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_runloop
   141 (JNIEnv *env, jclass cls) {
   141 (JNIEnv *env, jclass cls) {
   142     fp_gdk_threads_enter();
   142     gtk->gdk_threads_enter();
   143     fp_gtk_main();
   143     gtk->gtk_main();
   144     fp_gdk_threads_leave();
   144     gtk->gdk_threads_leave();
   145 }
   145 }
   146 
   146 
   147 /*
   147 /*
   148  * Class:     sun_awt_X11_XTaskbarPeer
   148  * Class:     sun_awt_X11_XTaskbarPeer
   149  * Method:    setBadge
   149  * Method:    setBadge
   150  * Signature: (JZ)V
   150  * Signature: (JZ)V
   151  */
   151  */
   152 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setBadge
   152 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setBadge
   153 (JNIEnv *env, jobject obj, jlong value, jboolean visible) {
   153 (JNIEnv *env, jobject obj, jlong value, jboolean visible) {
   154     fp_gdk_threads_enter();
   154     gtk->gdk_threads_enter();
   155     fp_unity_launcher_entry_set_count(entry, value);
   155     fp_unity_launcher_entry_set_count(entry, value);
   156     fp_unity_launcher_entry_set_count_visible(entry, visible);
   156     fp_unity_launcher_entry_set_count_visible(entry, visible);
   157     DbusmenuMenuitem* m;
   157     DbusmenuMenuitem* m;
   158     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   158     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   159         fp_unity_launcher_entry_set_quicklist(entry, m);
   159         fp_unity_launcher_entry_set_quicklist(entry, m);
   160     }
   160     }
   161     fp_gdk_threads_leave();
   161     gtk->gdk_threads_leave();
   162 }
   162 }
   163 
   163 
   164 /*
   164 /*
   165  * Class:     sun_awt_X11_XTaskbarPeer
   165  * Class:     sun_awt_X11_XTaskbarPeer
   166  * Method:    setUrgent
   166  * Method:    setUrgent
   167  * Signature: (Z)V
   167  * Signature: (Z)V
   168  */
   168  */
   169 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setUrgent
   169 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setUrgent
   170 (JNIEnv *env, jobject obj, jboolean urgent) {
   170 (JNIEnv *env, jobject obj, jboolean urgent) {
   171     fp_gdk_threads_enter();
   171     gtk->gdk_threads_enter();
   172     fp_unity_launcher_entry_set_urgent(entry, urgent);
   172     fp_unity_launcher_entry_set_urgent(entry, urgent);
   173     DbusmenuMenuitem* m;
   173     DbusmenuMenuitem* m;
   174     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   174     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   175         fp_unity_launcher_entry_set_quicklist(entry, m);
   175         fp_unity_launcher_entry_set_quicklist(entry, m);
   176     }
   176     }
   177     fp_gdk_threads_leave();
   177     gtk->gdk_threads_leave();
   178 }
   178 }
   179 
   179 
   180 /*
   180 /*
   181  * Class:     sun_awt_X11_XTaskbarPeer
   181  * Class:     sun_awt_X11_XTaskbarPeer
   182  * Method:    updateProgress
   182  * Method:    updateProgress
   183  * Signature: (DZ)V
   183  * Signature: (DZ)V
   184  */
   184  */
   185 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_updateProgress
   185 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_updateProgress
   186 (JNIEnv *env, jobject obj, jdouble value, jboolean visible) {
   186 (JNIEnv *env, jobject obj, jdouble value, jboolean visible) {
   187     fp_gdk_threads_enter();
   187     gtk->gdk_threads_enter();
   188     fp_unity_launcher_entry_set_progress(entry, value);
   188     fp_unity_launcher_entry_set_progress(entry, value);
   189     fp_unity_launcher_entry_set_progress_visible(entry, visible);
   189     fp_unity_launcher_entry_set_progress_visible(entry, visible);
   190     DbusmenuMenuitem* m;
   190     DbusmenuMenuitem* m;
   191     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   191     if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
   192         fp_unity_launcher_entry_set_quicklist(entry, m);
   192         fp_unity_launcher_entry_set_quicklist(entry, m);
   193     }
   193     }
   194     fp_gdk_threads_leave();
   194     gtk->gdk_threads_leave();
   195 }
   195 }
   196 
   196 
   197 void deleteGlobalRef(gpointer data) {
   197 void deleteGlobalRef(gpointer data) {
   198     JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2);
   198     JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2);
   199     (*env)->DeleteGlobalRef(env, data);
   199     (*env)->DeleteGlobalRef(env, data);
   207         if ((*env)->ExceptionCheck(env)) {
   207         if ((*env)->ExceptionCheck(env)) {
   208             break;
   208             break;
   209         }
   209         }
   210         elem = (*env)->NewGlobalRef(env, elem);
   210         elem = (*env)->NewGlobalRef(env, elem);
   211 
   211 
   212         globalRefs = fp_g_list_append(globalRefs, elem);
   212         globalRefs = gtk->g_list_append(globalRefs, elem);
   213 
   213 
   214         jstring jlabel = (jstring) (*env)->CallObjectMethod(env, elem, jMenuItemGetLabel);
   214         jstring jlabel = (jstring) (*env)->CallObjectMethod(env, elem, jMenuItemGetLabel);
   215         if (!(*env)->ExceptionCheck(env) && jlabel) {
   215         if (!(*env)->ExceptionCheck(env) && jlabel) {
   216             const gchar* label = (*env)->GetStringUTFChars(env, jlabel, NULL);
   216             const gchar* label = (*env)->GetStringUTFChars(env, jlabel, NULL);
   217             if (label) {
   217             if (label) {
   222                     fp_dbusmenu_menuitem_property_set(mi, "label", label);
   222                     fp_dbusmenu_menuitem_property_set(mi, "label", label);
   223                 }
   223                 }
   224 
   224 
   225                 (*env)->ReleaseStringUTFChars(env, jlabel, label);
   225                 (*env)->ReleaseStringUTFChars(env, jlabel, label);
   226                 fp_dbusmenu_menuitem_child_append(menu, mi);
   226                 fp_dbusmenu_menuitem_child_append(menu, mi);
   227                 fp_g_signal_connect(mi, "item_activated", G_CALLBACK(callback), elem);
   227                 gtk->g_signal_connect_data(mi, "item_activated",
       
   228                                            G_CALLBACK(callback), elem, NULL, 0);
   228             }
   229             }
   229         }
   230         }
   230     }
   231     }
   231 }
   232 }
   232 
   233 
   236  * Signature: ([Ljava/awt/MenuItem;)V
   237  * Signature: ([Ljava/awt/MenuItem;)V
   237  */
   238  */
   238 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setNativeMenu
   239 JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setNativeMenu
   239 (JNIEnv *env, jobject obj, jobjectArray items) {
   240 (JNIEnv *env, jobject obj, jobjectArray items) {
   240 
   241 
   241     fp_gdk_threads_enter();
   242     gtk->gdk_threads_enter();
   242 
   243 
   243     if (!menu) {
   244     if (!menu) {
   244         menu = fp_dbusmenu_menuitem_new();
   245         menu = fp_dbusmenu_menuitem_new();
   245     }
   246     }
   246 
   247 
   247     fp_unity_launcher_entry_set_quicklist(entry, menu);
   248     fp_unity_launcher_entry_set_quicklist(entry, menu);
   248 
   249 
   249     GList* list = fp_dbusmenu_menuitem_take_children(menu);
   250     GList* list = fp_dbusmenu_menuitem_take_children(menu);
   250     fp_g_list_free_full(list, fp_g_object_unref);
   251     gtk->g_list_free_full(list, gtk->g_object_unref);
   251 
   252 
   252     fp_g_list_free_full(globalRefs, deleteGlobalRef);
   253     gtk->g_list_free_full(globalRefs, deleteGlobalRef);
   253     globalRefs = NULL;
   254     globalRefs = NULL;
   254 
   255 
   255     if (items) {
   256     if (items) {
   256         fill_menu(env, items);
   257         fill_menu(env, items);
   257     }
   258     }
   258 
   259 
   259     fp_gdk_threads_leave();
   260     gtk->gdk_threads_leave();
   260 }
   261 }