/* * Copyright (c) 1991 David A. Curry * Copyright (c) 1996 Michael J. Hammel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * confirm.c - handle confirming requests made by the user. * * You can get David A. Curry's original public domain version on : * ftp://ftp.ers.ibm.com/pub/davy/xpostit3.3.2.tar.gz * */ #include #include #include #include #include #include #include "xpostit.h" static Widget confirmwidget; /* * ConfirmIt - put up a window asking for confirmation. */ void ConfirmIt(confirm_callbacks, cancel_callbacks) XtCallbackRec *confirm_callbacks, *cancel_callbacks; { Arg args[4]; Window root, child; unsigned int buttons; register int nargs, nwidgets; static Boolean inited = False; static Widget form, widgets[3]; int root_x, root_y, child_x, child_y; /* * Find out where the mouse is, so we can put the confirmation * box right there. */ XQueryPointer(display, XtWindow(toplevel), &root, &child, &root_x, &root_y, &child_x, &child_y, &buttons); /* * If we need to construct the confirmation box do that, * otherwise just reset the position and callbacks and * put it up again. */ if (!inited) { nargs = 0; SetArg(XtNx, root_x); SetArg(XtNy, root_y); /* * The confirmation box will be a pop-up widget. */ confirmwidget = XtCreatePopupShell("Confirm", overrideShellWidgetClass, toplevel, args, nargs); /* * Make a form to put the buttons in. */ form = XtCreateWidget("Buttons", formWidgetClass, confirmwidget, NULL, 0); nwidgets = -1; /* * Confirmation button. */ nargs = 0; SetArg(XtNcallback, confirm_callbacks); widgets[++nwidgets] = XtCreateWidget("Confirm", commandWidgetClass, form, args, nargs); /* * Cancellation button. */ nargs = 0; SetArg(XtNcallback, cancel_callbacks); SetArg(XtNfromHoriz, widgets[nwidgets]); widgets[++nwidgets] = XtCreateWidget("Cancel", commandWidgetClass, form, args, nargs); /* * Let the shell widget know we're here. */ /* XtManageChildren(widgets, XtNumber(widgets)); */ XtManageChildren(widgets, nwidgets+1); XtManageChild(form); XtRealizeWidget(confirmwidget); inited = True; } else { /* * Reset the confirmation box position. */ nargs = 0; SetArg(XtNx, root_x); SetArg(XtNy, root_y); XtSetValues(confirmwidget, args, nargs); /* * Reset the callbacks. */ nargs = 0; SetArg(XtNcallback, confirm_callbacks); XtSetValues(widgets[0], args, nargs); nargs = 0; SetArg(XtNcallback, cancel_callbacks); XtSetValues(widgets[1], args, nargs); } /* * Pop up the confirmation box. */ XtPopup(confirmwidget, XtGrabExclusive); } /* * ClearConfirm - get rid of the confirmation box. */ void ClearConfirm() { XtPopdown(confirmwidget); }