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) { |
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 } |