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

📄 tkwinwm.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
				 * be unmapped. */{    TkpWmSetState(winPtr, WithdrawnState);}/* *---------------------------------------------------------------------- * * TkpWmSetState -- * *	Sets the window manager state for the wrapper window of a *	given toplevel window. * * Results: *	None. * * Side effects: *	May maximize, minimize, restore, or withdraw a window. * *---------------------------------------------------------------------- */voidTkpWmSetState(winPtr, state)     TkWindow *winPtr;		/* Toplevel window to operate on. */     int state;			/* One of IconicState, ZoomState, NormalState,				 * or WithdrawnState. */{    WmInfo *wmPtr = winPtr->wmInfoPtr;    int cmd;        if (wmPtr->flags & WM_NEVER_MAPPED) {	wmPtr->hints.initial_state = state;	return;    }    wmPtr->flags |= WM_SYNC_PENDING;    if (state == WithdrawnState) {	cmd = SW_HIDE;    } else if (state == IconicState) {	cmd = SW_SHOWMINNOACTIVE;    } else if (state == NormalState) {	cmd = SW_SHOWNOACTIVATE;    } else if (state == ZoomState) {	cmd = SW_SHOWMAXIMIZED;    }    ShowWindow(wmPtr->wrapper, cmd);    wmPtr->flags &= ~WM_SYNC_PENDING;}/* *-------------------------------------------------------------- * * TkWmDeadWindow -- * *	This procedure is invoked when a top-level window is *	about to be deleted.  It cleans up the wm-related data *	structures for the window. * * Results: *	None. * * Side effects: *	The WmInfo structure for winPtr gets freed up. * *-------------------------------------------------------------- */voidTkWmDeadWindow(winPtr)    TkWindow *winPtr;		/* Top-level window that's being deleted. */{    register WmInfo *wmPtr = winPtr->wmInfoPtr;    WmInfo *wmPtr2;    if (wmPtr == NULL) {	return;    }    /*     * Clean up event related window info.     */    if (firstWmPtr == wmPtr) {	firstWmPtr = wmPtr->nextPtr;    } else {	register WmInfo *prevPtr;	for (prevPtr = firstWmPtr; ; prevPtr = prevPtr->nextPtr) {	    if (prevPtr == NULL) {		panic("couldn't unlink window in TkWmDeadWindow");	    }	    if (prevPtr->nextPtr == wmPtr) {		prevPtr->nextPtr = wmPtr->nextPtr;		break;	    }	}    }    /*     * Reset all transient windows whose master is the dead window.     */    for (wmPtr2 = firstWmPtr; wmPtr2 != NULL; wmPtr2 = wmPtr2->nextPtr) {	if (wmPtr2->masterPtr == winPtr) {	    wmPtr2->masterPtr = NULL;	    if ((wmPtr2->wrapper != None)		    && !(wmPtr2->flags & (WM_NEVER_MAPPED))) {		UpdateWrapper(wmPtr2->winPtr);	    }	}    }        if (wmPtr->hints.flags & IconPixmapHint) {	Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_pixmap);    }    if (wmPtr->hints.flags & IconMaskHint) {	Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_mask);    }    if (wmPtr->leaderName != NULL) {	ckfree(wmPtr->leaderName);    }    if (wmPtr->icon != NULL) {	wmPtr2 = ((TkWindow *) wmPtr->icon)->wmInfoPtr;	wmPtr2->iconFor = NULL;    }    if (wmPtr->iconFor != NULL) {	wmPtr2 = ((TkWindow *) wmPtr->iconFor)->wmInfoPtr;	wmPtr2->icon = NULL;	wmPtr2->hints.flags &= ~IconWindowHint;    }    while (wmPtr->protPtr != NULL) {	ProtocolHandler *protPtr;	protPtr = wmPtr->protPtr;	wmPtr->protPtr = protPtr->nextPtr;	Tcl_EventuallyFree((ClientData) protPtr, TCL_DYNAMIC);    }    if (wmPtr->cmdArgv != NULL) {	ckfree((char *) wmPtr->cmdArgv);    }    if (wmPtr->clientMachine != NULL) {	ckfree((char *) wmPtr->clientMachine);    }    if (wmPtr->flags & WM_UPDATE_PENDING) {	Tcl_CancelIdleCall(UpdateGeometryInfo, (ClientData) winPtr);    }    /*     * Destroy the decorative frame window.     */    if (!(winPtr->flags & TK_EMBEDDED)) {	if (wmPtr->wrapper != NULL) {	    DestroyWindow(wmPtr->wrapper);	} else {	    DestroyWindow(Tk_GetHWND(winPtr->window));	}    }    ckfree((char *) wmPtr);    winPtr->wmInfoPtr = NULL;}/* *-------------------------------------------------------------- * * TkWmSetClass -- * *	This procedure is invoked whenever a top-level window's *	class is changed.  If the window has been mapped then this *	procedure updates the window manager property for the *	class.  If the window hasn't been mapped, the update is *	deferred until just before the first mapping. * * Results: *	None. * * Side effects: *	A window property may get updated. * *-------------------------------------------------------------- */voidTkWmSetClass(winPtr)    TkWindow *winPtr;		/* Newly-created top-level window. */{    return;}/* *---------------------------------------------------------------------- * * Tk_WmCmd -- * *	This procedure is invoked to process the "wm" Tcl command. *	See the user documentation for details on what it does. * * Results: *	A standard Tcl result. * * Side effects: *	See the user documentation. * *---------------------------------------------------------------------- */	/* ARGSUSED */intTk_WmCmd(clientData, interp, argc, argv)    ClientData clientData;	/* Main window associated with				 * interpreter. */    Tcl_Interp *interp;		/* Current interpreter. */    int argc;			/* Number of arguments. */    char **argv;		/* Argument strings. */{    Tk_Window tkwin = (Tk_Window) clientData;    TkWindow *winPtr;    register WmInfo *wmPtr;    int c;    size_t length;    if (argc < 2) {	wrongNumArgs:	Tcl_AppendResult(interp, "wrong # args: should be \"",		argv[0], " option window ?arg ...?\"", (char *) NULL);	return TCL_ERROR;    }    c = argv[1][0];    length = strlen(argv[1]);    if ((c == 't') && (strncmp(argv[1], "tracing", length) == 0)	    && (length >= 3)) {	if ((argc != 2) && (argc != 3)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " tracing ?boolean?\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 2) {	    interp->result = (wmTracing) ? "on" : "off";	    return TCL_OK;	}	return Tcl_GetBoolean(interp, argv[2], &wmTracing);    }    if (argc < 3) {	goto wrongNumArgs;    }    winPtr = (TkWindow *) Tk_NameToWindow(interp, argv[2], tkwin);    if (winPtr == NULL) {	return TCL_ERROR;    }    if (!(winPtr->flags & TK_TOP_LEVEL)) {	Tcl_AppendResult(interp, "window \"", winPtr->pathName,		"\" isn't a top-level window", (char *) NULL);	return TCL_ERROR;    }    wmPtr = winPtr->wmInfoPtr;    if ((c == 'a') && (strncmp(argv[1], "aspect", length) == 0)) {	int numer1, denom1, numer2, denom2;	if ((argc != 3) && (argc != 7)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " aspect window ?minNumer minDenom ",		    "maxNumer maxDenom?\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->sizeHintsFlags & PAspect) {		sprintf(interp->result, "%d %d %d %d", wmPtr->minAspect.x,			wmPtr->minAspect.y, wmPtr->maxAspect.x,			wmPtr->maxAspect.y);	    }	    return TCL_OK;	}	if (*argv[3] == '\0') {	    wmPtr->sizeHintsFlags &= ~PAspect;	} else {	    if ((Tcl_GetInt(interp, argv[3], &numer1) != TCL_OK)		    || (Tcl_GetInt(interp, argv[4], &denom1) != TCL_OK)		    || (Tcl_GetInt(interp, argv[5], &numer2) != TCL_OK)		    || (Tcl_GetInt(interp, argv[6], &denom2) != TCL_OK)) {		return TCL_ERROR;	    }	    if ((numer1 <= 0) || (denom1 <= 0) || (numer2 <= 0) ||		    (denom2 <= 0)) {		interp->result = "aspect number can't be <= 0";		return TCL_ERROR;	    }	    wmPtr->minAspect.x = numer1;	    wmPtr->minAspect.y = denom1;	    wmPtr->maxAspect.x = numer2;	    wmPtr->maxAspect.y = denom2;	    wmPtr->sizeHintsFlags |= PAspect;	}	goto updateGeom;    } else if ((c == 'c') && (strncmp(argv[1], "client", length) == 0)	    && (length >= 2)) {	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " client window ?name?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->clientMachine != NULL) {		interp->result = wmPtr->clientMachine;	    }	    return TCL_OK;	}	if (argv[3][0] == 0) {	    if (wmPtr->clientMachine != NULL) {		ckfree((char *) wmPtr->clientMachine);		wmPtr->clientMachine = NULL;		if (!(wmPtr->flags & WM_NEVER_MAPPED)) {		    XDeleteProperty(winPtr->display, winPtr->window,			    Tk_InternAtom((Tk_Window) winPtr,			    "WM_CLIENT_MACHINE"));		}	    }	    return TCL_OK;	}	if (wmPtr->clientMachine != NULL) {	    ckfree((char *) wmPtr->clientMachine);	}	wmPtr->clientMachine = (char *)		ckalloc((unsigned) (strlen(argv[3]) + 1));	strcpy(wmPtr->clientMachine, argv[3]);	if (!(wmPtr->flags & WM_NEVER_MAPPED)) {	    XTextProperty textProp;	    if (XStringListToTextProperty(&wmPtr->clientMachine, 1, &textProp)		    != 0) {		XSetWMClientMachine(winPtr->display, winPtr->window,			&textProp);		XFree((char *) textProp.value);	    }	}    } else if ((c == 'c') && (strncmp(argv[1], "colormapwindows", length) == 0)	    && (length >= 3)) {	TkWindow **cmapList;	TkWindow *winPtr2;	int i, windowArgc, gotToplevel;	char **windowArgv;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " colormapwindows window ?windowList?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    Tk_MakeWindowExist((Tk_Window) winPtr);	    for (i = 0; i < wmPtr->cmapCount; i++) {		if ((i == (wmPtr->cmapCount-1))			&& (wmPtr->flags & WM_ADDED_TOPLEVEL_COLORMAP)) {		    break;		}		Tcl_AppendElement(interp, wmPtr->cmapList[i]->pathName);	    }	    return TCL_OK;	}	if (Tcl_SplitList(interp, argv[3], &windowArgc, &windowArgv)		!= TCL_OK) {	    return TCL_ERROR;	}	cmapList = (TkWindow **) ckalloc((unsigned)		((windowArgc+1)*sizeof(TkWindow*)));	for (i = 0; i < windowArgc; i++) {	    winPtr2 = (TkWindow *) Tk_NameToWindow(interp, windowArgv[i],		    tkwin);	    if (winPtr2 == NULL) {		ckfree((char *) cmapList);		ckfree((char *) windowArgv);		return TCL_ERROR;	    }	    if (winPtr2 == winPtr) {		gotToplevel = 1;	    }	    if (winPtr2->window == None) {		Tk_MakeWindowExist((Tk_Window) winPtr2);	    }	    cmapList[i] = winPtr2;	}	if (!gotToplevel) {	    wmPtr->flags |= WM_ADDED_TOPLEVEL_COLORMAP;	    cmapList[windowArgc] = winPtr;	    windowArgc++;	} else {	    wmPtr->flags &= ~WM_ADDED_TOPLEVEL_COLORMAP;	}	wmPtr->flags |= WM_COLORMAPS_EXPLICIT;	if (wmPtr->cmapList != NULL) {	    ckfree((char *)wmPtr->cmapList);	}	wmPtr->cmapList = cmapList;	wmPtr->cmapCount = windowArgc;	ckfree((char *) windowArgv);	/*	 * Now we need to force the updated colormaps to be installed.	 */	if (wmPtr == foregroundWmPtr) {	    InstallColormaps(wmPtr->wrapper, WM_QUERYNEWPALETTE, 1);	} else {	    InstallColormaps(wmPtr->wrapper, WM_PALETTECHANGED, 0);	}	return TCL_OK;    } else if ((c == 'c') && (strncmp(argv[1], "command", length) == 0)	    && (length >= 3)) {	int cmdArgc;	char **cmdArgv;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " command window ?value?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->cmdArgv != NULL) {		interp->result = Tcl_Merge(wmPtr->cmdArgc, wmPtr->cmdArgv);		interp->freeProc = TCL_DYNAMIC;	    }	    return TCL_OK;	}	if (argv[3][0] == 0) {	    if (wmPtr->cmdArgv != NULL) {		ckfree((char *) wmPtr->cmdArgv);		wmPtr->cmdArgv = NULL;		if (!(wmPtr->flags & WM_NEVER_MAPPED)) {		    XDeleteProperty(winPtr->display, winPtr->window,			    Tk_InternAtom((Tk_Window) winPtr, "WM_COMMAND"));		}	    }	    return TCL_OK;	}	if (Tcl_SplitList(interp, argv[3], &cmdArgc, &cmdArgv) != TCL_OK) {	    return TCL_ERROR;	}	if (wmPtr->cmdArgv != NULL) {	    ckfree((char *) wmPtr->cmdArgv);	}

⌨️ 快捷键说明

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