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

📄 functions.c

📁 安装DDD之前
💻 C
📖 第 1 页 / 共 3 页
字号:
    *((Boolean *)calldata) = True;}static voidrestart_cb(Widget w, XtPointer calldata, XtPointer cbs){    MWM_Done(1, g_argv[0]);}static voidrestart(ScreenInfo *scr){    static Widget restart_mb = NULL;    Boolean finished = False;    Dimension wd, ht;    MISC_Ungrab(scr);    if (restart_mb == NULL)    {	Widget tmp;	XmString lab;	Arg args[4];	XtSetArg(args[0], XmNmwmDecorations, MWM_DECOR_BORDER);	XtSetArg(args[1], XmNmwmFunctions, 0);	XtSetArg(args[2], XmNdialogStyle, XmDIALOG_SYSTEM_MODAL);	XtSetArg(args[3], XmNdefaultPosition, False);	restart_mb = XmCreateQuestionDialog(toplevel, "restart_question",					    args, 4);	if (!restart_mb)	    MWM_Done(0, NULL);	tmp = XmMessageBoxGetChild(restart_mb, XmDIALOG_HELP_BUTTON);	XtUnmanageChild(tmp);	tmp = XmMessageBoxGetChild(restart_mb, XmDIALOG_OK_BUTTON);	XtAddCallback(tmp, XmNactivateCallback,		      restart_cb, NULL);	tmp = XmMessageBoxGetChild(restart_mb, XmDIALOG_CANCEL_BUTTON);	XtAddCallback(tmp, XmNactivateCallback,		      cancel_cb, (XtPointer)&finished);	lab = XmStringCreateSimple("Restart Mwm?");	XtVaSetValues(restart_mb, XmNmessageString, lab, NULL);	XmStringFree(lab);	XtRealizeWidget(restart_mb);	XtVaGetValues(restart_mb,		      XmNwidth, &wd, XmNheight, &ht, NULL);	XtVaSetValues(XtParent(restart_mb),		      XmNx, (scr->d_width - wd) / 2 - scr->frame_border_width,		      XmNy, (scr->d_height - ht) / 2 - scr->frame_border_width,		      NULL);    }    XtManageChild(restart_mb);    scr->restart_win = XtWindow(XtParent(restart_mb));    while (!finished)    {	XEvent event;	if (EVENT_Next(&event))	    EVENT_Dispatch(&event);    }}static voidquit_cb(Widget w, XtPointer calldata, XtPointer cbs){    MWM_Done(0, NULL);}static voidquit(ScreenInfo *scr){    static Widget quit_mb = NULL;    Boolean finished = False;    Dimension wd, ht;    MISC_Ungrab(scr);    if (quit_mb == NULL)    {	Widget tmp;	XmString lab;	Arg args[4];	XtSetArg(args[0], XmNmwmDecorations, MWM_DECOR_BORDER);	XtSetArg(args[1], XmNmwmFunctions, 0);	XtSetArg(args[2], XmNdialogStyle, XmDIALOG_SYSTEM_MODAL);	XtSetArg(args[3], XmNdefaultPosition, False);	quit_mb = XmCreateQuestionDialog(toplevel, "quit_question",					 args, 4);	if (!quit_mb)	    MWM_Done(0, NULL);	tmp = XmMessageBoxGetChild(quit_mb, XmDIALOG_HELP_BUTTON);	if (tmp)	    XtUnmanageChild(tmp);	tmp = XmMessageBoxGetChild(quit_mb, XmDIALOG_OK_BUTTON);	XtAddCallback(tmp, XmNactivateCallback, quit_cb, NULL);	tmp = XmMessageBoxGetChild(quit_mb, XmDIALOG_CANCEL_BUTTON);	XtAddCallback(tmp, XmNactivateCallback,		      cancel_cb, (XtPointer)&finished);	lab = XmStringCreateSimple("QUIT Mwm?");	XtVaSetValues(quit_mb, XmNmessageString, lab, NULL);	XmStringFree(lab);	XtRealizeWidget(quit_mb);	XtVaGetValues(quit_mb, XmNwidth, &wd, XmNheight, &ht, NULL);	XtVaSetValues(XtParent(quit_mb),		      XmNx, (scr->d_width - wd) / 2 - scr->frame_border_width,		      XmNy, (scr->d_height - ht) / 2 - scr->frame_border_width,		      NULL);    }    XtManageChild(quit_mb);    scr->quit_win = XtWindow(XtParent(quit_mb));    while (!finished)    {	XEvent event;	if (EVENT_Next(&event))	    EVENT_Dispatch(&event);    }}static voidnoset_cb(Widget w, XtPointer calldata, XtPointer cbs){    *((Boolean *)calldata) = True;}static voidtoggle_behavior(Widget w, XtPointer calldata, XtPointer cbs){    ScreenInfo *scr = (ScreenInfo *)calldata;    if (PROP_GetBehavior(scr) & MWM_INFO_STARTUP_STANDARD)	PROP_SetBehavior(scr, True);    else	PROP_SetBehavior(scr, False);    XSync(dpy, 0);    MWM_Done(1, g_argv[0]);}static voidset_behavior(ScreenInfo *scr){    static Widget toggle_mb = NULL;    Boolean finished = False;    Dimension wd, ht;    MISC_Ungrab(scr);    if (toggle_mb == NULL)    {	Widget tmp;	XmString lab;	Arg args[4];	XtSetArg(args[0], XmNmwmDecorations, MWM_DECOR_BORDER);	XtSetArg(args[1], XmNmwmFunctions, 0);	XtSetArg(args[2], XmNdialogStyle, XmDIALOG_SYSTEM_MODAL);	XtSetArg(args[3], XmNdefaultPosition, False);	toggle_mb = XmCreateQuestionDialog(toplevel, "toggle_question",					   args, 4);	if (!toggle_mb)	    MWM_Done(0, NULL);	tmp = XmMessageBoxGetChild(toggle_mb, XmDIALOG_HELP_BUTTON);	XtUnmanageChild(tmp);	tmp = XmMessageBoxGetChild(toggle_mb, XmDIALOG_OK_BUTTON);	XtAddCallback(tmp, XmNactivateCallback,		      toggle_behavior, scr);	tmp = XmMessageBoxGetChild(toggle_mb, XmDIALOG_CANCEL_BUTTON);	XtAddCallback(tmp, XmNactivateCallback,		      noset_cb, (XtPointer)&finished);	tmp = XmMessageBoxGetChild(toggle_mb, XmDIALOG_MESSAGE_LABEL);	if (PROP_GetBehavior(scr) & MWM_INFO_STARTUP_STANDARD)	    lab = XmStringCreateSimple("Toggle to Custom Behavior?");	else	    lab = XmStringCreateSimple("Toggle to Default Behavior?");	XtVaSetValues(toggle_mb, XmNmessageString, lab, NULL);	XmStringFree(lab);	XtRealizeWidget(toggle_mb);	XtVaGetValues(toggle_mb,		      XmNwidth, &wd, XmNheight, &ht, NULL);	XtVaSetValues(XtParent(toggle_mb),		      XmNx, (scr->d_width - wd) / 2 - scr->frame_border_width,		      XmNy, (scr->d_height - ht) / 2 - scr->frame_border_width,		      NULL);    }    XtManageChild(toggle_mb);    scr->toggle_win = XtWindow(XtParent(toggle_mb));    while (!finished)    {	XEvent event;	if (EVENT_Next(&event))	    EVENT_Dispatch(&event);    }}/* * Change by PRB (pete@tecc.co.uk), 31/10/93.  Prepend a hot key * specifier to each item in the list.  This means allocating the * memory for each item (& freeing it) rather than just using the window * title directly. */static voidwin_list(ScreenInfo *scr, int val1, int val2){    MenuRoot *mr;    MenuItem *mi, *tmp;    MwmWindow *t;    char *tname;    char loc[40], *name = NULL;    int dwidth, dheight;    char tlabel[50];    int last_desk_done = INT_MIN;    int next_desk;    char *t_hot;		/* Menu label with hotkey added */    char scut = '0';		/* Current short cut key */    sprintf(tlabel, "CurrentDesk: %d", scr->current_desk);    mr = MENU_Create(tlabel);    MENU_AddItem(scr, mr, tlabel, "Geometry", NULL, F_TITLE, 0, 0, 's', 's');    next_desk = 0;    while (next_desk != INT_MAX)    {	/* Sort window list by desktop number */	if ((val1 < 2) && (val1 > -2))	{	    next_desk = INT_MAX;	    for (t = scr->mwm_root.next; t != NULL; t = t->next)	    {		if ((t->Desk > last_desk_done) && (t->Desk < next_desk))		    next_desk = t->Desk;	    }	}	else if ((val1 < 4) && (val1 > -4))	{	    if (last_desk_done == INT_MIN)		next_desk = scr->current_desk;	    else		next_desk = INT_MAX;	}	else	{	    if (last_desk_done == INT_MIN)		next_desk = val2;	    else		next_desk = INT_MAX;	}	last_desk_done = next_desk;	for (t = scr->mwm_root.next; t != NULL; t = t->next)	{	    if ((t->Desk == next_desk) &&		(!(t->flags & WINDOWLISTSKIP)))	    {		if (++scut == ('9' + 1))		    scut = 'A';	/* Next shortcut key */		if (val1 % 2 != 0)		    name = t->icon_label;		else		    name = t->name;		t_hot = XtMalloc(strlen(name) + 8);		sprintf(t_hot, "%c.  %s", scut, name);	/* Generate label */		tname = XtMalloc(40);		tname[0] = 0;		if (t->flags & ICONIFIED)		    strcpy(tname, "(");		sprintf(loc, "%d:", t->Desk);		strcat(tname, loc);		if (t->frame_x >= 0)		    sprintf(loc, "+%d", t->frame_x);		else		    sprintf(loc, "%d", t->frame_x);		strcat(tname, loc);		if (t->frame_y >= 0)		    sprintf(loc, "+%d", t->frame_y);		else		    sprintf(loc, "%d", t->frame_y);		strcat(tname, loc);		dheight = t->frame_height - t->title_height -		    2 * t->boundary_width -		    2 * t->matte_width;		dwidth = t->frame_width -		    2 * t->boundary_width -		    2 * t->matte_width;		dwidth -= t->hints.base_width;		dheight -= t->hints.base_height;		dwidth /= t->hints.width_inc;		dheight /= t->hints.height_inc;		sprintf(loc, "x%d", dwidth);		strcat(tname, loc);		sprintf(loc, "x%d", dheight);		strcat(tname, loc);		if (t->flags & ICONIFIED)		    strcat(tname, ")");		MENU_AddItem(scr, mr, t_hot, tname, NULL, F_RAISE_IT,			     (long)t, (long)(t->w), 's', 's');	    }	}    }    MENU_Realize(scr, mr);    MENU_PopupMenu(scr, mr);    XDestroyWindow(dpy, mr->w);    XDeleteContext(dpy, mr->w, MenuContext);    /* need to free the window list ? */    mi = mr->first;    while (mi != NULL)    {	tmp = mi->next;	if (mi->func != F_TITLE)	{	    if (mi->item != NULL)		XtFree(mi->item);	    if (mi->item2 != NULL)		XtFree(mi->item2);	}	XtFree((char *)mi);	mi = tmp;    }    XtFree((char *)mr);}/* * Explicit focus : move focus */static voidExplicitMoveFocus(ScreenInfo *scr, MwmWindow *win, XEvent *event){    if (Mwm.keyboard_focus_policy != XmEXPLICIT) {	fprintf(stderr, "ExplicitMoveFocus(_,%p,_) pointer mode\n", win);	return;    }    fprintf(stderr, "ExplicitMoveFocus(_, %p, _)\n", win);    if (win) {	/* FIX ME move code from circulate() in here to make it work */    }}/*********************************************************************** * *  Procedure: *	(Un)normalize a window. * ***********************************************************************/static voidnormalize(ScreenInfo *scr, MwmWindow *tmp_win, int val1, int val2,	 int val1_unit, int val2_unit){   /* Deiconify if iconified */   if (tmp_win->flags & ICONIFIED)   {      if (val1 <= 0)         ICON_DeIconify(scr, tmp_win);   } else      /* DeMaximize if maximized */      if (tmp_win->flags & MAXIMIZED) {         /* Taken from maximize() */         tmp_win->flags &= ~MAXIMIZED;         DEC_ConfigureDecorations(scr, tmp_win, tmp_win->orig_x, tmp_win->orig_y,               tmp_win->orig_wd, tmp_win->orig_ht, True);         DEC_DrawDecorations(scr, tmp_win, True, True, True, None);      }}/* * execute a mwm built in function */voidFUNC_Execute(ScreenInfo *scr, int func, char *action, Window in_w,	     MwmWindow *tmp_win, XEvent *eventp, unsigned long context,	   long val1, long val2, int val1_unit, int val2_unit, MenuRoot * menu){    MwmWindow *t, *temp;    int x, y;    Window w;    int delta_x, delta_y;    int warp_x = 0, warp_y = 0;    Pixel TextColor, BackColor;    Pixmap BackPixmap;    static int prev_screen = -1;    int scrno;    if (debugging) {       fprintf(stderr,             "FUNC_Execute: func %d %s context %s menu %s (%s)\n",             func, _MwmPrintF(func),             _MwmPrintC(context),              menu ? menu->name : "(none)",             action);    }    /* Defer Execution may wish to alter this value */    w = in_w;    switch (func)    {    case F_NOP:    case F_TITLE:	break;    case F_BEEP:	XBell(dpy, scr->screen);	break;    case F_CHANGE_WINDOWS_DESK:	if (tmp_win == NULL)	    break;	DT_WindowChangingDesks(scr, tmp_win, val1);	break;    case F_CIRCULATE_UP:	t = circulate(scr, tmp_win, action, UP);	if (t)	    WIN_ChangeFocus(scr, t, 0);	break;    case F_CIRCULATE_DOWN:	t = circulate(scr, tmp_win, action, DOWN);	if (t)	    WIN_ChangeFocus(scr, t, 0);	break;    case F_CLOSE:	if (tmp_win == NULL)	    break;	if (function_allowed(func, tmp_win) == 0)	{	    XBell(dpy, scr->screen);	    break;	}	/* Dont delete the pager - it crashes the program! */	if ((tmp_win->w == scr->pager_win) || (tmp_win == scr->mwm_pager))	    break;	if (tmp_win->flags & WM_DELS_WINDOW || tmp_win->flags & WM_SAVE_SELF)	{	    if (tmp_win->flags & WM_DELS_WINDOW)		PROP_SendClientMessage(tmp_win->w, XA_WM_DELETE_WINDOW, CurrentTime);	    else if (tmp_win->flags & WM_SAVE_SELF)		PROP_SendClientMessage(tmp_win->w, XA_WM_SAVE_YOURSELF, CurrentTime);	    wait_quit_timeout(scr, tmp_win);	    break;	}	if (XGetGeometry(dpy, tmp_win->w, &JunkRoot, &JunkX, &JunkY,			 &JunkWidth, &JunkHeight, &JunkBW, &JunkDepth) == 0)	    WIN_DestroyWindow(scr, tmp_win);	else	    XKillClient(dpy, tmp_win->w);	XSync(dpy, 0);	break;    case F_DESK:	DT_ChangeDesks(scr, val1, val2);	break;    case F_EXEC:	{#ifndef __EMX__	    char *shell;	    if ((shell = getenv(MWM_SHELL_NAME)) == NULL)	    {		if ((shell = getenv(SHELL_NAME)) == NULL)		{		    shell = DEFAULT_SHELL;		}	    }#endif	    XGrabPointer(dpy, scr->root_win, True,			 ButtonPressMask | ButtonReleaseMask,			 GrabModeAsync, GrabModeAsync,			 scr->root_win, scr->cursors[WAIT_CURS], CurrentTime);	    XSync(dpy, 0);#ifndef __EMX__	    if (!fork())

⌨️ 快捷键说明

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