⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnd.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
📖 第 1 页 / 共 2 页
字号:
					jint x, jint y, jint width, jint height,					jint jCursor, jint clrBack ){  Window owner = UNVEIL_WND(nowner);  jobject w = createWindow( env, clazz, X->root, owner, NULL,			    x, y, width, height,			    jCursor, clrBack, JNI_TRUE);  DBG( AWT_WND, printf("createWindow( %p, %d,%d,%d,%d,..) -> %lx\n", owner,x,y,width,height, w));  if ( w )    registerSource( X, UNVEIL_WND(w), owner, WND_WINDOW);  return w;}jobjectJava_java_awt_Toolkit_wndCreateDialog ( JNIEnv* env, jclass clazz, jobject nowner, jstring jTitle,					jint x, jint y, jint width, jint height,					jint jCursor, jint clrBack, jboolean isResizable ){  Window owner = UNVEIL_WND(nowner);  jobject w = createWindow( env, clazz, DefaultRootWindow( X->dsp), owner, jTitle,			    x, y, width, height,			    jCursor, clrBack, isResizable);  DBG( AWT_WND, printf("createDialog( %p,%p, %d,%d,%d,%d,..) -> %lx\n", owner,jTitle,x,y,width,height,w));  if ( w )    registerSource( X, UNVEIL_WND(w), owner, WND_DIALOG);  return w;}voidJava_java_awt_Toolkit_wndDestroyWindow ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd ){  Window wnd = UNVEIL_WND(nwnd);  int i = getSourceIdx( X, wnd);  DBG( AWT_WND, printf("destroy window: %p (%d)\n", wnd, i));  if ( (i >= 0) && !(X->windows[i].flags & WND_DESTROYED) ) {	if ( wnd == X->focusFwd ) {	  /*	   * reset focus forwading NOW, we can't do it from a clientMessage, since any 	   * real focusLost notification would be scrubbed by the subsequent XDestroyWindow	   */	  resetFocusForwarding( X);	  if ( X->windows[i].owner && (X->windows[i].owner == X->focus) ) {		/*		 * This was a explicit dispose(), and the owner still is the real focus window.		 * Let's make it think it got back the focus		 */		forwardFocus( FWD_REVERT, X->windows[i].owner);	  }	}	X->windows[i].flags |= WND_DESTROYED;	X->windows[i].flags &= ~WND_MAPPED;	XSync( X->dsp, False); /* maybe we still have pending requests for wnd */	XDestroyWindow( X->dsp, wnd);  }}voidJava_java_awt_Toolkit_wndRequestFocus ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd ){  Window wnd = UNVEIL_WND(nwnd);  int     i = getSourceIdx( X, wnd);  DBG( AWT_WND, printf("request focus: %p (%d)\n", wnd, i));  if ( (i < 0) || (X->windows[i].flags & WND_DESTROYED) )	return;  if ( (X->windows[i].owner) && (X->windows[i].flags & WND_WINDOW) ) {	if ( X->focus != X->windows[i].owner ) {	  /* if our owner doesn't have it yet, make him the focus window */	  XSetInputFocus( X->dsp, X->windows[i].owner, RevertToParent, CurrentTime);	}	/*	 * This marks the beginning of a focus forward to a owned window	 * (which isn't allowed to get the real focus because it would	 * "shade" the titlebar of the owner)	 */	forwardFocus( FWD_SET, wnd);  }  else {	if ( (X->windows[i].flags & WND_MAPPED) == 0 ){	  /* If it's not mapped yet, try again later. Somebody might       * have been too fast with requesting the focus of a not yet visible	   * window, resulting in BadMatch errors	   */	  retryFocus( wnd, X->windows[i].owner, 5);	}	else if ( (X->focusFwd) && (wnd == X->focus) ) {	  /* We still have it in real life, but we have to pretend we re-gained it	   * from our ownee. Reset forwarding here (instead of in the ClientMessage),	   * because a subsequent destroy of the ownee otherwise might cause another	   * revert (with the Java keyTgtRequest already eaten up by this FWD_REVERT)	   */	  resetFocusForwarding( X);	  forwardFocus( FWD_REVERT, wnd);	}	else {	  /* we don't reset X->focusFwd here, that's done in the event handler */	  XSetInputFocus( X->dsp, wnd, RevertToParent, CurrentTime);	}  }}/* * We shift possible Frame / Dialog deco adaptions back to Java, because (in * order to get more compatible with JDK behavior) we not only have to apply * offsets in wndSetWindowBounds, but also when getting back via ComponentEvents * (ConfigureNotify), and during recursive child painting (to adapt the toplevel Graphics). * Since we don't have the window type info (frame / dialog / window) * in the native lib, this has to be done in the Java layer. In order to do it * all on one side, this means to shift the size adaption out of wndSetWindowBounds, too. * * Therefor Default frame/dialog Insets become the pivotal info, being passed into * the native lib as a (configurable 'Defaults') guess, turned into exact values * (of Frame.frameInsets, Dialog.dialogInsets) by means of native-to-Java callbacks, * computed during initial Frame/Dialog creation */voidJava_java_awt_Toolkit_wndSetFrameInsets ( JNIEnv* env UNUSED, jclass clazz UNUSED,					  jint top, jint left, jint bottom, jint right ){  X->frameInsets.top  = top;  X->frameInsets.left = left;  X->frameInsets.bottom = bottom;  X->frameInsets.right = right;  X->frameInsets.guess = 1;}voidJava_java_awt_Toolkit_wndSetDialogInsets ( JNIEnv* env UNUSED, jclass clazz UNUSED,					   jint top, jint left, jint bottom, jint right ){  X->dialogInsets.top  = top;  X->dialogInsets.left = left;  X->dialogInsets.bottom = bottom;  X->dialogInsets.right = right;  X->dialogInsets.guess = 1;}voidJava_java_awt_Toolkit_wndSetBounds ( JNIEnv* env, jclass clazz, jobject nwnd,				     jint x, jint y, jint width, jint height,				     jboolean isResizable ){  Window wnd = UNVEIL_WND(nwnd);  DBG( AWT_WND, printf("setBounds: %p %d,%d,%d,%d\n", wnd, x, y, width, height));  if ( width < 0 )  width = 1;  if ( height < 0 ) height = 1;  XMoveResizeWindow( X->dsp, wnd, x, y, width, height);  /*   * Our perspective of 'isResizable' is somewhat relaxed: we just disable   * "user-resizing" (like it is stated in the spec), i.e. a program is   * allowed to do setBounds on non-resizable Frames/Dialogs. This makes   * initial decoration size compensation easy, but it requires that we update   * the "lock" after a resize operation   */  if ( !isResizable ) {	Java_java_awt_Toolkit_wndSetResizable( env, clazz,					       nwnd, False, x, y, width, height);  }}voidJava_java_awt_Toolkit_wndRepaint ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd,								   jint x, jint y, jint width, jint height ){  Window wnd = UNVEIL_WND(nwnd);  DBG( AWT_WND, printf("wndRepaint: %p %d,%d,%d,%d\n", wnd, x, y, width, height));  XClearArea( X->dsp, wnd, x, y, width, height, True);}voidJava_java_awt_Toolkit_wndSetIcon ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd UNUSED, jobject nimg UNUSED ){}voidJava_java_awt_Toolkit_wndSetVisible ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd, jboolean showIt ){  Window wnd = UNVEIL_WND(nwnd);  int     i = getSourceIdx( X, wnd);  Window  owner;  DBG( AWT_WND, printf("setVisible: %p (%d) %d\n", wnd, i, showIt));  if ( (i < 0) || (X->windows[i].flags & WND_DESTROYED) )	return;  owner = X->windows[i].owner;  if ( showIt ){	X->windows[i].flags |= WND_MAPPED;	XMapRaised( X->dsp, wnd);	XSync( X->dsp, False);	/*	 * Don't automatically forward the focus for owned popups, the standard JDK behavior	 * is NOT to set the focus on them unless explicitly requested. It would break	 * Swing heavyweight popups (JWindowPopup, both keyboard input and the famous	 * "first on Solaris" jitter)	 */  }  else {	if ( wnd == X->focusFwd ) {	  forwardFocus( FWD_CLEAR, owner);	  forwardFocus( FWD_REVERT, owner);	}	X->windows[i].flags &= ~WND_MAPPED;	XUnmapWindow( X->dsp, wnd);	XSync( X->dsp, False);  }}voidJava_java_awt_Toolkit_wndToBack ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd ){  Window wnd = UNVEIL_WND(nwnd);  DBG( AWT_WND, printf("toBack: %p\n", wnd));  XLowerWindow( X->dsp, wnd);}voidJava_java_awt_Toolkit_wndToFront ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd ){  Window wnd = UNVEIL_WND(nwnd);  DBG( AWT_WND, printf("toFront: %p\n", wnd));  XRaiseWindow( X->dsp, wnd);}voidJava_java_awt_Toolkit_wndSetCursor ( JNIEnv* env UNUSED, jclass clazz UNUSED, jobject nwnd, jint jCursor ){  Window wnd = UNVEIL_WND(nwnd);  DBG( AWT_WND, printf("setCursor: %p, %d\n", wnd, jCursor));  XDefineCursor( X->dsp, wnd, getCursor( jCursor));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -