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

📄 tkwindow.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (winPtr->flags & TK_MAPPED) {	return;    }    if (winPtr->window == None) {	Tk_MakeWindowExist(tkwin);    }    if (winPtr->flags & TK_TOP_LEVEL) {	/*	 * Lots of special processing has to be done for top-level	 * windows.  Let tkWm.c handle everything itself.	 */	TkWmMapWindow(winPtr);	return;    }    winPtr->flags |= TK_MAPPED;    XMapWindow(winPtr->display, winPtr->window);    event.type = MapNotify;    event.xmap.serial = LastKnownRequestProcessed(winPtr->display);    event.xmap.send_event = False;    event.xmap.display = winPtr->display;    event.xmap.event = winPtr->window;    event.xmap.window = winPtr->window;    event.xmap.override_redirect = winPtr->atts.override_redirect;    Tk_HandleEvent(&event);}/* *-------------------------------------------------------------- * * Tk_MakeWindowExist -- * *	Ensure that a particular window actually exists.  This *	procedure shouldn't normally need to be invoked from *	outside the Tk package, but may be needed if someone *	wants to manipulate a window before mapping it. * * Results: *	None. * * Side effects: *	When the procedure returns, the X window associated with *	tkwin is guaranteed to exist.  This may require the *	window's ancestors to be created also. * *-------------------------------------------------------------- */voidTk_MakeWindowExist(tkwin)    Tk_Window tkwin;		/* Token for window. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    TkWindow *winPtr2;    Window parent;    Tcl_HashEntry *hPtr;    int new;    if (winPtr->window != None) {	return;    }    if ((winPtr->parentPtr == NULL) || (winPtr->flags & TK_TOP_LEVEL)) {	parent = XRootWindow(winPtr->display, winPtr->screenNum);    } else {	if (winPtr->parentPtr->window == None) {	    Tk_MakeWindowExist((Tk_Window) winPtr->parentPtr);	}	parent = winPtr->parentPtr->window;    }    if (winPtr->classProcsPtr != NULL	    && winPtr->classProcsPtr->createProc != NULL) {	winPtr->window = (*winPtr->classProcsPtr->createProc)(tkwin, parent,		winPtr->instanceData);    } else {	winPtr->window = TkpMakeWindow(winPtr, parent);    }    hPtr = Tcl_CreateHashEntry(&winPtr->dispPtr->winTable,	    (char *) winPtr->window, &new);    Tcl_SetHashValue(hPtr, winPtr);    winPtr->dirtyAtts = 0;    winPtr->dirtyChanges = 0;#ifdef TK_USE_INPUT_METHODS    winPtr->inputContext = NULL;#endif /* TK_USE_INPUT_METHODS */    if (!(winPtr->flags & TK_TOP_LEVEL)) {	/*	 * If any siblings higher up in the stacking order have already	 * been created then move this window to its rightful position	 * in the stacking order.	 *	 * NOTE: this code ignores any changes anyone might have made	 * to the sibling and stack_mode field of the window's attributes,	 * so it really isn't safe for these to be manipulated except	 * by calling Tk_RestackWindow.	 */	for (winPtr2 = winPtr->nextPtr; winPtr2 != NULL;		winPtr2 = winPtr2->nextPtr) {	    if ((winPtr2->window != None)		    && !(winPtr2->flags & (TK_TOP_LEVEL|TK_REPARENTED))) {		XWindowChanges changes;		changes.sibling = winPtr2->window;		changes.stack_mode = Below;		XConfigureWindow(winPtr->display, winPtr->window,			CWSibling|CWStackMode, &changes);		break;	    }	}	/*	 * If this window has a different colormap than its parent, add	 * the window to the WM_COLORMAP_WINDOWS property for its top-level.	 */	if ((winPtr->parentPtr != NULL) &&		(winPtr->atts.colormap != winPtr->parentPtr->atts.colormap)) {	    TkWmAddToColormapWindows(winPtr);	    winPtr->flags |= TK_WM_COLORMAP_WINDOW;	}    }    /*     * Issue a ConfigureNotify event if there were deferred configuration     * changes (but skip it if the window is being deleted;  the     * ConfigureNotify event could cause problems if we're being called     * from Tk_DestroyWindow under some conditions).     */    if ((winPtr->flags & TK_NEED_CONFIG_NOTIFY)	    && !(winPtr->flags & TK_ALREADY_DEAD)){	winPtr->flags &= ~TK_NEED_CONFIG_NOTIFY;	TkDoConfigureNotify(winPtr);    }}/* *-------------------------------------------------------------- * * Tk_UnmapWindow, etc. -- * *	There are several procedures under here, each of which *	mirrors an existing X procedure.  In addition to performing *	the functions of the corresponding procedure, each *	procedure also updates the local window structure and *	synthesizes an X event (if the window's structure is being *	managed internally). * * Results: *	See the manual entries. * * Side effects: *	See the manual entries. * *-------------------------------------------------------------- */voidTk_UnmapWindow(tkwin)    Tk_Window tkwin;		/* Token for window to unmap. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    if (!(winPtr->flags & TK_MAPPED) || (winPtr->flags & TK_ALREADY_DEAD)) {	return;    }    if (winPtr->flags & TK_TOP_LEVEL) {	/*	 * Special processing has to be done for top-level windows.  Let	 * tkWm.c handle everything itself.	 */	TkWmUnmapWindow(winPtr);	return;    }    winPtr->flags &= ~TK_MAPPED;    XUnmapWindow(winPtr->display, winPtr->window);    if (!(winPtr->flags & TK_TOP_LEVEL)) {	XEvent event;	event.type = UnmapNotify;	event.xunmap.serial = LastKnownRequestProcessed(winPtr->display);	event.xunmap.send_event = False;	event.xunmap.display = winPtr->display;	event.xunmap.event = winPtr->window;	event.xunmap.window = winPtr->window;	event.xunmap.from_configure = False;	Tk_HandleEvent(&event);    }}voidTk_ConfigureWindow(tkwin, valueMask, valuePtr)    Tk_Window tkwin;		/* Window to re-configure. */    unsigned int valueMask;	/* Mask indicating which parts of				 * *valuePtr are to be used. */    XWindowChanges *valuePtr;	/* New values. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    if (valueMask & CWX) {	winPtr->changes.x = valuePtr->x;    }    if (valueMask & CWY) {	winPtr->changes.y = valuePtr->y;    }    if (valueMask & CWWidth) {	winPtr->changes.width = valuePtr->width;    }    if (valueMask & CWHeight) {	winPtr->changes.height = valuePtr->height;    }    if (valueMask & CWBorderWidth) {	winPtr->changes.border_width = valuePtr->border_width;    }    if (valueMask & (CWSibling|CWStackMode)) {	panic("Can't set sibling or stack mode from Tk_ConfigureWindow.");    }    if (winPtr->window != None) {	XConfigureWindow(winPtr->display, winPtr->window,		valueMask, valuePtr);        TkDoConfigureNotify(winPtr);    } else {	winPtr->dirtyChanges |= valueMask;	winPtr->flags |= TK_NEED_CONFIG_NOTIFY;    }}voidTk_MoveWindow(tkwin, x, y)    Tk_Window tkwin;		/* Window to move. */    int x, y;			/* New location for window (within				 * parent). */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->changes.x = x;    winPtr->changes.y = y;    if (winPtr->window != None) {	XMoveWindow(winPtr->display, winPtr->window, x, y);        TkDoConfigureNotify(winPtr);    } else {	winPtr->dirtyChanges |= CWX|CWY;	winPtr->flags |= TK_NEED_CONFIG_NOTIFY;    }}voidTk_ResizeWindow(tkwin, width, height)    Tk_Window tkwin;		/* Window to resize. */    int width, height;		/* New dimensions for window. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->changes.width = (unsigned) width;    winPtr->changes.height = (unsigned) height;    if (winPtr->window != None) {	XResizeWindow(winPtr->display, winPtr->window, (unsigned) width,		(unsigned) height);        TkDoConfigureNotify(winPtr);    } else {	winPtr->dirtyChanges |= CWWidth|CWHeight;	winPtr->flags |= TK_NEED_CONFIG_NOTIFY;    }}voidTk_MoveResizeWindow(tkwin, x, y, width, height)    Tk_Window tkwin;		/* Window to move and resize. */    int x, y;			/* New location for window (within				 * parent). */    int width, height;		/* New dimensions for window. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->changes.x = x;    winPtr->changes.y = y;    winPtr->changes.width = (unsigned) width;    winPtr->changes.height = (unsigned) height;    if (winPtr->window != None) {	XMoveResizeWindow(winPtr->display, winPtr->window, x, y,		(unsigned) width, (unsigned) height);        TkDoConfigureNotify(winPtr);    } else {	winPtr->dirtyChanges |= CWX|CWY|CWWidth|CWHeight;	winPtr->flags |= TK_NEED_CONFIG_NOTIFY;    }}voidTk_SetWindowBorderWidth(tkwin, width)    Tk_Window tkwin;		/* Window to modify. */    int width;			/* New border width for window. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->changes.border_width = width;    if (winPtr->window != None) {	XSetWindowBorderWidth(winPtr->display, winPtr->window,		(unsigned) width);        TkDoConfigureNotify(winPtr);    } else {	winPtr->dirtyChanges |= CWBorderWidth;	winPtr->flags |= TK_NEED_CONFIG_NOTIFY;    }}voidTk_ChangeWindowAttributes(tkwin, valueMask, attsPtr)    Tk_Window tkwin;		/* Window to manipulate. */    unsigned long valueMask;	/* OR'ed combination of bits,				 * indicating which fields of				 * *attsPtr are to be used. */    register XSetWindowAttributes *attsPtr;				/* New values for some attributes. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    if (valueMask & CWBackPixmap) {	winPtr->atts.background_pixmap = attsPtr->background_pixmap;    }    if (valueMask & CWBackPixel) {	winPtr->atts.background_pixel = attsPtr->background_pixel;    }    if (valueMask & CWBorderPixmap) {	winPtr->atts.border_pixmap = attsPtr->border_pixmap;    }    if (valueMask & CWBorderPixel) {	winPtr->atts.border_pixel = attsPtr->border_pixel;    }    if (valueMask & CWBitGravity) {	winPtr->atts.bit_gravity = attsPtr->bit_gravity;    }    if (valueMask & CWWinGravity) {	winPtr->atts.win_gravity = attsPtr->win_gravity;    }    if (valueMask & CWBackingStore) {	winPtr->atts.backing_store = attsPtr->backing_store;    }    if (valueMask & CWBackingPlanes) {	winPtr->atts.backing_planes = attsPtr->backing_planes;    }    if (valueMask & CWBackingPixel) {	winPtr->atts.backing_pixel = attsPtr->backing_pixel;    }    if (valueMask & CWOverrideRedirect) {	winPtr->atts.override_redirect = attsPtr->override_redirect;    }    if (valueMask & CWSaveUnder) {	winPtr->atts.save_under = attsPtr->save_under;    }    if (valueMask & CWEventMask) {	winPtr->atts.event_mask = attsPtr->event_mask;    }    if (valueMask & CWDontPropagate) {	winPtr->atts.do_not_propagate_mask		= attsPtr->do_not_propagate_mask;    }    if (valueMask & CWColormap) {	winPtr->atts.colormap = attsPtr->colormap;    }    if (valueMask & CWCursor) {	winPtr->atts.cursor = attsPtr->cursor;    }    if (winPtr->window != None) {	XChangeWindowAttributes(winPtr->display, winPtr->window,		valueMask, attsPtr);    } else {	winPtr->dirtyAtts |= valueMask;    }}voidTk_SetWindowBackground(tkwin, pixel)    Tk_Window tkwin;		/* Window to manipulate. */    unsigned long pixel;	/* Pixel value to use for				 * window's background. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->atts.background_pixel = pixel;    if (winPtr->window != None) {	XSetWindowBackground(winPtr->display, winPtr->window, pixel);    } else {	winPtr->dirtyAtts = (winPtr->dirtyAtts & (unsigned) ~CWBackPixmap)		| CWBackPixel;    }}voidTk_SetWindowBackgroundPixmap(tkwin, pixmap)    Tk_Window tkwin;		/* Window to manipulate. */    Pixmap pixmap;		/* Pixmap to use for window's				 * background. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->atts.background_pixmap = pixmap;    if (winPtr->window != None) {	XSetWindowBackgroundPixmap(winPtr->display,		winPtr->window, pixmap);    } else {	winPtr->dirtyAtts = (winPtr->dirtyAtts & (unsigned) ~CWBackPixel)		| CWBackPixmap;    }}voidTk_SetWindowBorder(tkwin, pixel)    Tk_Window tkwin;		/* Window to manipulate. */    unsigned long pixel;	/* Pixel value to use for				 * window's border. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->atts.border_pixel = pixel;    if (winPtr->window != None) {	XSetWindowBorder(winPtr->display, winPtr->window, pixel);    } else {	winPtr->dirtyAtts = (winPtr->dirtyAtts & (unsigned) ~CWBorderPixmap)		| CWBorderPixel;    }}voidTk_SetWindowBorderPixmap(tkwin, pixmap)    Tk_Window tkwin;		/* Window to manipulate. */    Pixmap pixmap;		/* Pixmap to use for window's				 * border. */{    register TkWindow *winPtr = (TkWindow *) tkwin;    winPtr->atts.border_pixmap = pixmap;    if (winPtr->window != None) {

⌨️ 快捷键说明

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