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

📄 tkunixwm.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) {	    Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName,		    "\": override-redirect flag is set", (char *) NULL);	    return TCL_ERROR;	}	if (wmPtr->master != None) {	    Tcl_AppendResult(interp, "can't iconify \"", winPtr->pathName,		    "\": it is a transient", (char *) NULL);	    return TCL_ERROR;	}	if (wmPtr->iconFor != NULL) {	    Tcl_AppendResult(interp, "can't iconify ", argv[2],		    ": it is an icon for ", Tk_PathName(wmPtr->iconFor),		   (char *) NULL);	    return TCL_ERROR;	}	wmPtr->hints.initial_state = IconicState;	if (wmPtr->flags & WM_NEVER_MAPPED) {	    return TCL_OK;	}	if (wmPtr->withdrawn) {	    UpdateHints(winPtr);	    Tk_MapWindow((Tk_Window) winPtr);	    wmPtr->withdrawn = 0;	} else {	    if (XIconifyWindow(winPtr->display, wmPtr->wrapperPtr->window,		    winPtr->screenNum) == 0) {		interp->result =			"couldn't send iconify message to window manager";		return TCL_ERROR;	    }	    WaitForMapNotify(winPtr, 0);	}    } else if ((c == 'i') && (strncmp(argv[1], "iconmask", length) == 0)	    && (length >= 5)) {	Pixmap pixmap;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " iconmask window ?bitmap?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->hints.flags & IconMaskHint) {		interp->result = Tk_NameOfBitmap(winPtr->display,			wmPtr->hints.icon_mask);	    }	    return TCL_OK;	}	if (*argv[3] == '\0') {	    if (wmPtr->hints.icon_mask != None) {		Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_mask);	    }	    wmPtr->hints.flags &= ~IconMaskHint;	} else {	    pixmap = Tk_GetBitmap(interp, tkwin, Tk_GetUid(argv[3]));	    if (pixmap == None) {		return TCL_ERROR;	    }	    wmPtr->hints.icon_mask = pixmap;	    wmPtr->hints.flags |= IconMaskHint;	}	UpdateHints(winPtr);    } else if ((c == 'i') && (strncmp(argv[1], "iconname", length) == 0)	    && (length >= 5)) {	if (argc > 4) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " iconname window ?newName?\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    interp->result = (wmPtr->iconName != NULL) ? wmPtr->iconName : "";	    return TCL_OK;	} else {	    wmPtr->iconName = ckalloc((unsigned) (strlen(argv[3]) + 1));	    strcpy(wmPtr->iconName, argv[3]);	    if (!(wmPtr->flags & WM_NEVER_MAPPED)) {		XSetIconName(winPtr->display, wmPtr->wrapperPtr->window,			wmPtr->iconName);	    }	}    } else if ((c == 'i') && (strncmp(argv[1], "iconposition", length) == 0)	    && (length >= 5)) {	int x, y;	if ((argc != 3) && (argc != 5)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " iconposition window ?x y?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->hints.flags & IconPositionHint) {		sprintf(interp->result, "%d %d", wmPtr->hints.icon_x,			wmPtr->hints.icon_y);	    }	    return TCL_OK;	}	if (*argv[3] == '\0') {	    wmPtr->hints.flags &= ~IconPositionHint;	} else {	    if ((Tcl_GetInt(interp, argv[3], &x) != TCL_OK)		    || (Tcl_GetInt(interp, argv[4], &y) != TCL_OK)){		return TCL_ERROR;	    }	    wmPtr->hints.icon_x = x;	    wmPtr->hints.icon_y = y;	    wmPtr->hints.flags |= IconPositionHint;	}	UpdateHints(winPtr);    } else if ((c == 'i') && (strncmp(argv[1], "iconwindow", length) == 0)	    && (length >= 5)) {	Tk_Window tkwin2;	WmInfo *wmPtr2;	XSetWindowAttributes atts;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " iconwindow window ?pathName?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->icon != NULL) {		interp->result = Tk_PathName(wmPtr->icon);	    }	    return TCL_OK;	}	if (*argv[3] == '\0') {	    wmPtr->hints.flags &= ~IconWindowHint;	    if (wmPtr->icon != NULL) {		/*		 * Remove the icon window relationship.  In principle we		 * should also re-enable button events for the window, but		 * this doesn't work in general because the window manager		 * is probably selecting on them (we'll get an error if		 * we try to re-enable the events).  So, just leave the		 * icon window event-challenged;  the user will have to		 * recreate it if they want button events.		 */		wmPtr2 = ((TkWindow *) wmPtr->icon)->wmInfoPtr;		wmPtr2->iconFor = NULL;		wmPtr2->withdrawn = 1;		wmPtr2->hints.initial_state = WithdrawnState;	    }	    wmPtr->icon = NULL;	} else {	    tkwin2 = Tk_NameToWindow(interp, argv[3], tkwin);	    if (tkwin2 == NULL) {		return TCL_ERROR;	    }	    if (!Tk_IsTopLevel(tkwin2)) {		Tcl_AppendResult(interp, "can't use ", argv[3],			" as icon window: not at top level", (char *) NULL);		return TCL_ERROR;	    }	    wmPtr2 = ((TkWindow *) tkwin2)->wmInfoPtr;	    if (wmPtr2->iconFor != NULL) {		Tcl_AppendResult(interp, argv[3], " is already an icon for ",			Tk_PathName(wmPtr2->iconFor), (char *) NULL);		return TCL_ERROR;	    }	    if (wmPtr->icon != NULL) {		WmInfo *wmPtr3 = ((TkWindow *) wmPtr->icon)->wmInfoPtr;		wmPtr3->iconFor = NULL;		wmPtr3->withdrawn = 1;		wmPtr3->hints.initial_state = WithdrawnState;	    }	    /*	     * Disable button events in the icon window:  some window	     * managers (like olvwm) want to get the events themselves,	     * but X only allows one application at a time to receive	     * button events for a window.	     */	    atts.event_mask = Tk_Attributes(tkwin2)->event_mask		    & ~ButtonPressMask;	    Tk_ChangeWindowAttributes(tkwin2, CWEventMask, &atts);	    Tk_MakeWindowExist(tkwin2);	    if (wmPtr2->wrapperPtr == NULL) {		CreateWrapper(wmPtr2);	    }	    wmPtr->hints.icon_window = Tk_WindowId(wmPtr2->wrapperPtr);	    wmPtr->hints.flags |= IconWindowHint;	    wmPtr->icon = tkwin2;	    wmPtr2->iconFor = (Tk_Window) winPtr;	    if (!wmPtr2->withdrawn && !(wmPtr2->flags & WM_NEVER_MAPPED)) {		wmPtr2->withdrawn = 0;		if (XWithdrawWindow(Tk_Display(tkwin2),			Tk_WindowId(wmPtr2->wrapperPtr),			Tk_ScreenNumber(tkwin2)) == 0) {		    interp->result =			    "couldn't send withdraw message to window manager";		    return TCL_ERROR;		}		WaitForMapNotify((TkWindow *) tkwin2, 0);	    }	}	UpdateHints(winPtr);    } else if ((c == 'm') && (strncmp(argv[1], "maxsize", length) == 0)	    && (length >= 2)) {	int width, height;	if ((argc != 3) && (argc != 5)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " maxsize window ?width height?\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    GetMaxSize(wmPtr, &width, &height);	    sprintf(interp->result, "%d %d", width, height);	    return TCL_OK;	}	if ((Tcl_GetInt(interp, argv[3], &width) != TCL_OK)		|| (Tcl_GetInt(interp, argv[4], &height) != TCL_OK)) {	    return TCL_ERROR;	}	wmPtr->maxWidth = width;	wmPtr->maxHeight = height;	wmPtr->flags |= WM_UPDATE_SIZE_HINTS;	goto updateGeom;    } else if ((c == 'm') && (strncmp(argv[1], "minsize", length) == 0)	    && (length >= 2)) {	int width, height;	if ((argc != 3) && (argc != 5)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " minsize window ?width height?\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    sprintf(interp->result, "%d %d", wmPtr->minWidth,		    wmPtr->minHeight);	    return TCL_OK;	}	if ((Tcl_GetInt(interp, argv[3], &width) != TCL_OK)		|| (Tcl_GetInt(interp, argv[4], &height) != TCL_OK)) {	    return TCL_ERROR;	}	wmPtr->minWidth = width;	wmPtr->minHeight = height;	wmPtr->flags |= WM_UPDATE_SIZE_HINTS;	goto updateGeom;    } else if ((c == 'o')	    && (strncmp(argv[1], "overrideredirect", length) == 0)) {	int boolean;	XSetWindowAttributes atts;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " overrideredirect window ?boolean?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) {		interp->result = "1";	    } else {		interp->result = "0";	    }	    return TCL_OK;	}	if (Tcl_GetBoolean(interp, argv[3], &boolean) != TCL_OK) {	    return TCL_ERROR;	}	atts.override_redirect = (boolean) ? True : False;	Tk_ChangeWindowAttributes((Tk_Window) winPtr, CWOverrideRedirect,		&atts);	if (winPtr->wmInfoPtr->wrapperPtr != NULL) {	    Tk_ChangeWindowAttributes(		    (Tk_Window) winPtr->wmInfoPtr->wrapperPtr,		    CWOverrideRedirect, &atts);	}    } else if ((c == 'p') && (strncmp(argv[1], "positionfrom", length) == 0)	    && (length >= 2)) {	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " positionfrom window ?user/program?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    if (wmPtr->sizeHintsFlags & USPosition) {		interp->result = "user";	    } else if (wmPtr->sizeHintsFlags & PPosition) {		interp->result = "program";	    }	    return TCL_OK;	}	if (*argv[3] == '\0') {	    wmPtr->sizeHintsFlags &= ~(USPosition|PPosition);	} else {	    c = argv[3][0];	    length = strlen(argv[3]);	    if ((c == 'u') && (strncmp(argv[3], "user", length) == 0)) {		wmPtr->sizeHintsFlags &= ~PPosition;		wmPtr->sizeHintsFlags |= USPosition;	    } else if ((c == 'p') && (strncmp(argv[3], "program", length) == 0)) {		wmPtr->sizeHintsFlags &= ~USPosition;		wmPtr->sizeHintsFlags |= PPosition;	    } else {		Tcl_AppendResult(interp, "bad argument \"", argv[3],			"\": must be program or user", (char *) NULL);		return TCL_ERROR;	    }	}	wmPtr->flags |= WM_UPDATE_SIZE_HINTS;	goto updateGeom;    } else if ((c == 'p') && (strncmp(argv[1], "protocol", length) == 0)	    && (length >= 2)) {	register ProtocolHandler *protPtr, *prevPtr;	Atom protocol;	int cmdLength;	if ((argc < 3) || (argc > 5)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " protocol window ?name? ?command?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    /*	     * Return a list of all defined protocols for the window.	     */	    for (protPtr = wmPtr->protPtr; protPtr != NULL;		    protPtr = protPtr->nextPtr) {		Tcl_AppendElement(interp,			Tk_GetAtomName((Tk_Window) winPtr, protPtr->protocol));	    }	    return TCL_OK;	}	protocol = Tk_InternAtom((Tk_Window) winPtr, argv[3]);	if (argc == 4) {	    /*	     * Return the command to handle a given protocol.	     */	    for (protPtr = wmPtr->protPtr; protPtr != NULL;		    protPtr = protPtr->nextPtr) {		if (protPtr->protocol == protocol) {		    interp->result = protPtr->command;		    return TCL_OK;		}	    }	    return TCL_OK;	}	/*	 * Delete any current protocol handler, then create a new	 * one with the specified command, unless the command is	 * empty.	 */	for (protPtr = wmPtr->protPtr, prevPtr = NULL; protPtr != NULL;		prevPtr = protPtr, protPtr = protPtr->nextPtr) {	    if (protPtr->protocol == protocol) {		if (prevPtr == NULL) {		    wmPtr->protPtr = protPtr->nextPtr;		} else {		    prevPtr->nextPtr = protPtr->nextPtr;		}		Tcl_EventuallyFree((ClientData) protPtr, TCL_DYNAMIC);		break;	    }	}	cmdLength = strlen(argv[4]);	if (cmdLength > 0) {	    protPtr = (ProtocolHandler *) ckalloc(HANDLER_SIZE(cmdLength));	    protPtr->protocol = protocol;	    protPtr->nextPtr = wmPtr->protPtr;	    wmPtr->protPtr = protPtr;	    protPtr->interp = interp;	    strcpy(protPtr->command, argv[4]);	}	if (!(wmPtr->flags & WM_NEVER_MAPPED)) {	    UpdateWmProtocols(wmPtr);	}    } else if ((c == 'r') && (strncmp(argv[1], "resizable", length) == 0)) {	int width, height;	if ((argc != 3) && (argc != 5)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " resizable window ?width height?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {	    sprintf(interp->result, "%d %d",		    (wmPtr->flags  & WM_WIDTH_NOT_RESIZABLE) ? 0 : 1,		    (wmPtr->flags  & WM_HEIGHT_NOT_RESIZABLE) ? 0 : 1);	    return TCL_OK;	}	if ((Tcl_GetBoolean(interp, argv[3], &width) != TCL_OK)		|| (Tcl_GetBoolean(interp, argv[4], &height) != TCL_OK)) {	    return TCL_ERROR;	}	if (width) {	    wmPtr->flags &= ~WM_WIDTH_NOT_RESIZABLE;	} else {	    wmPtr->flags |= WM_WIDTH_NOT_RESIZABLE;	}	if (height) {	    wmPtr->flags &= ~WM_HEIGHT_NOT_RESIZABLE;	} else {	    wmPtr->flags |= WM_HEIGHT_NOT_RESIZABLE;	}	wmPtr->flags |= WM_UPDATE_SIZE_HINTS;	goto updateGeom;    } else if ((c == 's') && (strncmp(argv[1], "sizefrom", length) == 0)	    && (length >= 2)) {	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # arguments: must be \"",		    argv[0], " sizefrom window ?user|program?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (argc == 3) {

⌨️ 快捷键说明

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