123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- /* $OpenBSD: interface.c,v 1.1.1.1 2006/11/26 10:58:43 matthieu Exp $ */
- /*
- * Copyright (c) 2002 Matthieu Herrb and Niels Provos
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
- #include <X11/Intrinsic.h>
- #include <X11/Shell.h>
- #include <X11/StringDefs.h>
- #include <X11/Xatom.h>
- #include <X11/Xaw/Form.h>
- #include <X11/Xaw/Label.h>
- #include <X11/Xaw/Command.h>
- #include <X11/Xaw/AsciiText.h>
- #include <X11/Xaw/Box.h>
- #include <X11/Xaw/MenuButton.h>
- #include <X11/Xaw/SmeBSB.h>
- #include <X11/Xaw/SimpleMenu.h>
- #include <time.h>
- #include "callbacks.h"
- #include "interface.h"
- static String formNames[] = {
- "title-form",
- "processInfo-form",
- "syscallInfo-form",
- "status-form",
- "errorCode-form",
- "specialProc-form",
- "buttons-form",
- };
- #define NUM_FORMS (sizeof(formNames)/sizeof(char *))
- XtAppContext appContext;
- Atom wm_delete_window;
- Widget forms[NUM_FORMS], errorCodeMenu, errorCodeText,
- filterText, filterMenu, filterPopup,
- wizardButton, timeline, pName,
- pId, policyName, syscallName, status, reviewButton;
- volatile Boolean done;
- Widget
- makeForm(Widget parent)
- {
- Widget form;
- Widget errorCodePopup, sme, w;
- time_t when;
- int i;
- form = XtVaCreateWidget("form", formWidgetClass, parent, NULL);
- for (i = 0; i < NUM_FORMS; i++) {
- forms[i] = XtCreateManagedWidget(formNames[i],
- formWidgetClass, form, NULL, 0);
- }
- XtVaCreateManagedWidget("title-label", labelWidgetClass,
- forms[0], NULL);
- when = time(NULL);
- timeline = XtVaCreateManagedWidget("date-label", labelWidgetClass,
- forms[0], NULL);
- XtVaCreateManagedWidget("processInfo-label", labelWidgetClass,
- forms[1], NULL);
- XtVaCreateManagedWidget("processName-label", labelWidgetClass,
- forms[1], NULL);
- pName = XtVaCreateManagedWidget("processName-value", labelWidgetClass,
- forms[1], NULL);
- XtVaCreateManagedWidget("processPid-label", labelWidgetClass,
- forms[1], NULL);
- pId = XtVaCreateManagedWidget("processPid-value", labelWidgetClass,
- forms[1], NULL);
- XtVaCreateManagedWidget("policyName-label", labelWidgetClass,
- forms[1], NULL);
- policyName = XtVaCreateManagedWidget("policyName-value",
- labelWidgetClass, forms[1], NULL);
- XtVaCreateManagedWidget("syscallInfo-label", labelWidgetClass,
- forms[2], NULL);
- syscallName = XtVaCreateManagedWidget("syscallInfo-value",
- labelWidgetClass, forms[2], NULL);
- XtVaCreateManagedWidget("filter-label", labelWidgetClass,
- forms[2], NULL);
- filterText = XtVaCreateManagedWidget("filter-text",
- asciiTextWidgetClass, forms[2], XtNeditType, XawtextEdit,
- NULL, 0);
- filterMenu = XtCreateManagedWidget("filter-menu-button",
- menuButtonWidgetClass, forms[2], NULL, 0);
- filterPopup = XtCreatePopupShell("filter-menu", simpleMenuWidgetClass,
- forms[2], NULL, 0);
- wizardButton = XtVaCreateManagedWidget("filter-button",
- commandWidgetClass, forms[2], NULL, 0);
- XtAddCallback(wizardButton, XtNcallback, on_wizard_clicked, NULL);
- XtVaCreateManagedWidget("status-label", labelWidgetClass,
- forms[3], NULL);
- status = XtVaCreateManagedWidget("status-value", labelWidgetClass,
- forms[3], NULL);
- XtVaCreateManagedWidget("errorCode-label", labelWidgetClass,
- forms[4], NULL);
- errorCodeText = XtVaCreateManagedWidget("errorCode-text",
- asciiTextWidgetClass, forms[4], XtNeditType, XawtextEdit,
- NULL, 0);
- errorCodeMenu = XtCreateManagedWidget("errorCode-button",
- menuButtonWidgetClass, forms[4], NULL, 0);
- errorCodePopup = XtCreatePopupShell("menu", simpleMenuWidgetClass,
- forms[4], NULL, 0);
- sme = XtCreateManagedWidget("eperm", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"eperm");
- sme = XtCreateManagedWidget("enoent", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"enoent");
- sme = XtCreateManagedWidget("einval", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"einval");
- sme = XtCreateManagedWidget("enotdir", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"enotdir");
- sme = XtCreateManagedWidget("eio", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"eio");
- sme = XtCreateManagedWidget("enxio", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"enxio");
- sme = XtCreateManagedWidget("eaccess", smeBSBObjectClass,
- errorCodePopup, NULL, 0);
- XtAddCallback(sme, XtNcallback, on_error_select, (XtPointer)"eaccess");
- /* Initial value */
- on_error_select(errorCodeMenu, "eperm", NULL);
- XtVaCreateManagedWidget("specialProc-label", labelWidgetClass,
- forms[5], NULL);
- w = XtVaCreateManagedWidget("kill-button", commandWidgetClass,
- forms[5], NULL);
- XtAddCallback(w, XtNcallback, on_killbutton_clicked, NULL);
- reviewButton = XtVaCreateManagedWidget("review-button",
- commandWidgetClass, forms[5], NULL);
- XtAddCallback(reviewButton, XtNcallback, on_reviewbutton_clicked,
- (XtPointer)parent);
- w = XtVaCreateManagedWidget("auto-button", commandWidgetClass,
- forms[5], NULL);
- XtAddCallback(w, XtNcallback, on_detachbutton_clicked, NULL);
- w = XtVaCreateManagedWidget("deny-button", commandWidgetClass,
- forms[6], NULL);
- XtAddCallback(w, XtNcallback, on_denyone_clicked, NULL);
- w = XtVaCreateManagedWidget("allow-button", commandWidgetClass,
- forms[6], NULL);
- XtAddCallback(w, XtNcallback, on_permitonce_clicked, NULL);
- w = XtVaCreateManagedWidget("deny-all-button", commandWidgetClass,
- forms[6], NULL);
- XtAddCallback(w, XtNcallback, on_deny_clicked, NULL);
- w = XtVaCreateManagedWidget("allow-all-button", commandWidgetClass,
- forms[6], NULL);
- XtAddCallback(w, XtNcallback, on_permit_clicked, NULL);
- XtManageChild(form);
- return form;
- }
- /*
- * Widget positionning
- */
- static void
- position_near(Widget shell, int x, int y)
- {
- int max_x, max_y;
- Dimension width, height, border;
- int gravity;
- /* some of this is copied from CenterWidgetOnPoint in Xaw/TextPop.c */
- XtVaGetValues(shell, XtNwidth, &width, XtNheight, &height,
- XtNborderWidth, &border, NULL);
- width += 2 * border;
- height += 2 * border;
- max_x = WidthOfScreen(XtScreen(shell));
- max_y = HeightOfScreen(XtScreen(shell));
- /* set gravity hint based on position on screen */
- gravity = 1;
- if (x > max_x/3) gravity += 1;
- if (x > max_x*2/3) gravity += 1;
- if (y > max_y/3) gravity += 3;
- if (y > max_y*2/3) gravity += 3;
- max_x -= width;
- max_y -= height;
- x -= ( (Position) width/2 );
- if (x < 0) x = 0;
- if (x > max_x) x = max_x;
- y -= ( (Position) height/2 );
- if (y < 0) y = 0;
- if ( y > max_y ) y = max_y;
- XtVaSetValues(shell, XtNx, (Position)x, XtNy, (Position)y,
- XtNwinGravity, gravity, NULL);
- }
- void
- position_near_mouse(Widget shell)
- {
- int x, y;
- Window root, child;
- int winx, winy;
- unsigned int mask;
- XQueryPointer(XtDisplay(shell), XtWindow(shell),
- &root, &child, &x, &y, &winx, &winy, &mask);
- position_near(shell, x, y);
- }
- void
- position_near_center(Widget shell)
- {
- position_near(shell, WidthOfScreen(XtScreen(shell))/2,
- HeightOfScreen(XtScreen(shell))/2);
- }
|