bool send_mozilla(const char *html_viewer, const char *url) { Window window; Display *dpy; char *command; dpy = MAIN_DISPLAY(ss); command = (char *)CALLOC(snd_strlen(url) + snd_strlen(html_viewer) + 32, sizeof(char)); window = find_window(dpy, DefaultRootWindow(dpy), NS_VERSION, compare_window); if (window) { sprintf(command, "openURL(file:%s)", url); XChangeProperty(dpy, window, XInternAtom(dpy, NS_COMMAND, 0), XA_STRING, 8, PropModeReplace, (unsigned char *)command, strlen(command) + 1); XFlush(dpy); } else { if (!(fork())) { sprintf(command, "%s file:%s", html_viewer, url); if (execl("/bin/sh", "/bin/sh", "-c", command, NULL) == -1) { FREE(command); return(false); } } } FREE(command); return(true); }
static XEN g_window_property(XEN winat, XEN name) { #define H_window_property "(" S_window_property " win-name name): get or set the window property." Window window; Display *dpy; Atom type = None; int format; unsigned long len, bytesafter; unsigned char *data[1]; XEN result = XEN_FALSE; XEN_ASSERT_TYPE(XEN_STRING_P(winat), winat, XEN_ARG_1, S_window_property, "a string"); XEN_ASSERT_TYPE(XEN_STRING_P(name), name, XEN_ARG_2, S_window_property, "a string"); dpy = MAIN_DISPLAY(ss); if (((window = find_window(dpy, DefaultRootWindow(dpy), XEN_TO_C_STRING(winat), compare_window))) && ((XGetWindowProperty(dpy, window, XInternAtom(dpy, XEN_TO_C_STRING(name), 0), 0L, (long)BUFSIZ, False, XA_STRING, &type, &format, &len, &bytesafter, (unsigned char **)data)) == Success) && (type != None) && (len > 0)) { if (type == XA_STRING) result = C_TO_XEN_STRING((char *)data[0]); else result = C_TO_XEN_STRINGN((char *)data[0], len * format / 8); if (data[0]) XFree((char *)(data[0])); } return(result); }
static void change_window_property(char *winat, char *name, char *command) { Window window; Display *dpy; dpy = MAIN_DISPLAY(ss); window = find_window(dpy, DefaultRootWindow(dpy), winat, compare_window); if (window) { XChangeProperty(dpy, window, XInternAtom(dpy, name, 0), XA_STRING, 8, PropModeReplace, (unsigned char *)command, strlen(command) + 1); XFlush(dpy); } }
static void make_edit_find_dialog(bool managed) { if (!edit_find_dialog) { Widget dl, rc; Arg args[20]; int n; XmString xmstr1, xmstr3, titlestr; n = 0; XtSetArg(args[n], XmNbackground, ss->basic_color); n++; xmstr1 = XmStringCreateLocalized((char *)"Go Away"); xmstr3 = XmStringCreateLocalized((char *)"Previous"); titlestr = XmStringCreateLocalized((char *)"Find"); XtSetArg(args[n], XmNokLabelString, xmstr1); n++; XtSetArg(args[n], XmNcancelLabelString, xmstr3); n++; XtSetArg(args[n], XmNautoUnmanage, false); n++; XtSetArg(args[n], XmNdialogTitle, titlestr); n++; XtSetArg(args[n], XmNresizePolicy, XmRESIZE_GROW); n++; XtSetArg(args[n], XmNnoResize, false); n++; XtSetArg(args[n], XmNtransient, false); n++; edit_find_dialog = XmCreateMessageDialog(MAIN_SHELL(ss), (char *)"find", args, n); XmStringFree(xmstr1); XmStringFree(xmstr3); XmStringFree(titlestr); XtUnmanageChild(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_SYMBOL_LABEL)); XtUnmanageChild(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_MESSAGE_LABEL)); XtAddCallback(edit_find_dialog, XmNhelpCallback, edit_find_help_callback, NULL); XtAddCallback(edit_find_dialog, XmNcancelCallback, edit_find_previous_callback, NULL); XtAddCallback(edit_find_dialog, XmNokCallback, edit_find_cancel_callback, NULL); n = 0; XtSetArg(args[n], XmNbackground, ss->highlight_color); n++; XtSetArg(args[n], XmNarmColor, ss->selection_color); n++; findnextB = XtCreateManagedWidget("Next", xmPushButtonGadgetClass, edit_find_dialog, args, n); XtAddCallback(findnextB, XmNactivateCallback, edit_find_next_callback, NULL); rc = XtCreateManagedWidget("row", xmFormWidgetClass, edit_find_dialog, NULL, 0); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++; dl = XtCreateManagedWidget("find:", xmLabelWidgetClass, rc, args, n); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNleftWidget, dl); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; edit_find_text = make_textfield_widget("text", rc, args, n, ACTIVATABLE, add_completer_func(expression_completer, NULL)); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, edit_find_text); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNmarginHeight, 10); n++; edit_find_label = XtCreateManagedWidget(" ", xmLabelWidgetClass, rc, args, n); n = 0; XtSetArg(args[n], XmNbackground, ss->basic_color); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, edit_find_label); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNallowResize, true); n++; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNshadowThickness, 2); n++; find_error_frame = XtCreateManagedWidget("find-error-frame", xmFrameWidgetClass, rc, args, n); n = 0; XtSetArg(args[n], XmNbackground, ss->highlight_color); n++; find_error_label = XtCreateManagedWidget("", xmLabelWidgetClass, find_error_frame, args, n); map_over_children(edit_find_dialog, set_main_color_of_widget); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_OK_BUTTON), XmNarmColor, ss->selection_color, NULL); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_CANCEL_BUTTON), XmNarmColor, ss->selection_color, NULL); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_HELP_BUTTON), XmNarmColor, ss->selection_color, NULL); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_OK_BUTTON), XmNbackground, ss->highlight_color, NULL); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_CANCEL_BUTTON), XmNbackground, ss->highlight_color, NULL); XtVaSetValues(XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_HELP_BUTTON), XmNbackground, ss->highlight_color, NULL); cancelB = XmMessageBoxGetChild(edit_find_dialog, XmDIALOG_OK_BUTTON); set_dialog_widget(FIND_DIALOG, edit_find_dialog); XtUnmanageChild(find_error_frame); if (managed) XtManageChild(edit_find_dialog); { Atom wm_delete_window; wm_delete_window = XmInternAtom(MAIN_DISPLAY(ss), (char *)"WM_DELETE_WINDOW", false); XmAddWMProtocolCallback(XtParent(edit_find_dialog), wm_delete_window, find_dialog_close, NULL); } } else { if (managed) { if (!XtIsManaged(edit_find_dialog)) XtManageChild(edit_find_dialog); raise_dialog(edit_find_dialog); } } }