void mouse_clickfunc(int button, int state, int x, int y) { if (is_dialog()) { dialog_click(button,state,x,y); return; } // test global ui elements if (button==GLUT_LEFT_BUTTON) { if (state==GLUT_DOWN) { if (main_ui[MAIN_PAGE1]) { console_post("Synthesizers"); cpage=1; return; } if (main_ui[MAIN_PAGE2]) { console_post("Patches"); cpage=2; return; } if (main_ui[MAIN_PAGE3]) { console_post("Patterns"); cpage=3; return; } if (main_ui[MAIN_PAGE4]) { console_post("Sequencer"); cpage=4; return; } if (main_ui[MAIN_ABOUT]) { dialog_open(&about_draw, &about_hover, &about_click); return; } if (main_ui[MAIN_VU]) { audio_peak=0.0f; console_post("VU meter peak reset"); return; } } } switch (cpage) { case MAIN_PAGE1: synth_mouse_click(button, state, x, y); break; case MAIN_PAGE2: patch_mouse_click(button, state, x, y); break; case MAIN_PAGE3: pattern_mouse_click(button, state, x, y); break; case MAIN_PAGE4: sequencer_mouse_click(button, state, x, y); break; default: break; } }
int handle_xdlg_event (Display *dpy, XEvent *event) { if (!_dlg_mwin) return 0; assert(event->xany.window); if (event->xany.window != _dlg_mwin && event->xany.window != _dlg_swin) { switch (event->type) { case ButtonRelease: case KeyRelease: close_x_dialog (dpy); break; default: break; } return 0; } switch (event->type) { case ConfigureNotify: //printf("DLG ConfigureNotify %dx%d\n", event->xconfigure.width, event->xconfigure.height); break; case LeaveNotify: { struct XJDialog *dlg = NULL; XFindContext (dpy, event->xany.window, _dlg_ctx, (XPointer*)&dlg); if (dlg && dlg->menu_hover >= 0 && dlg->menu_hover < dlg->menu_count && !dlg->menu_items[dlg->menu_hover].submenu) { dlg->menu_hover = -1; dialog_expose (dpy, event->xany.window); } } break; case Expose: if (event->xexpose.count == 0) { dialog_expose (dpy, event->xany.window); } break; case MotionNotify: dialog_motion (dpy, event->xany.window, event->xmotion.x_root, event->xmotion.y_root); if (event->xmotion.is_hint == NotifyHint) { XGetMotionEvents (dpy, event->xany.window, CurrentTime, CurrentTime, NULL); } break; case ButtonPress: break; case ButtonRelease: if (dialog_click(dpy, event->xany.window, event->xbutton.x_root, event->xbutton.y_root, event->xbutton.button)) { close_x_dialog (dpy); } break; case KeyRelease: close_x_dialog (dpy); break; } return 1; }