static void handle_xev(void) { XEvent ev; int i, sa_clicked=0; char buf[32]; KeySym ksym; XNextEvent(dzen.dpy, &ev); switch(ev.type) { case Expose: if(ev.xexpose.count == 0) x_redraw(ev.xexpose.window); break; case EnterNotify: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xcrossing.window == dzen.slave_win.line[i]) x_hilight_line(i); } if(!dzen.slave_win.ishmenu && ev.xcrossing.window == dzen.title_win.win) do_action(entertitle); if(ev.xcrossing.window == dzen.slave_win.win) do_action(enterslave); break; case LeaveNotify: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xcrossing.window == dzen.slave_win.line[i]) x_unhilight_line(i); } if(!dzen.slave_win.ishmenu && ev.xcrossing.window == dzen.title_win.win) do_action(leavetitle); if(ev.xcrossing.window == dzen.slave_win.win) { do_action(leaveslave); } break; case ButtonRelease: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xbutton.window == dzen.slave_win.line[i]) dzen.slave_win.sel_line = i; } /* clickable areas */ int w_id = ev.xbutton.window == dzen.title_win.win ? 0 : 1; sens_w w = window_sens[w_id]; for(i=w.sens_areas_cnt; i>=0; i--) { if(ev.xbutton.window == w.sens_areas[i].win && ev.xbutton.button == w.sens_areas[i].button && (ev.xbutton.x >= w.sens_areas[i].start_x+xorig[w_id] && ev.xbutton.x <= w.sens_areas[i].end_x+xorig[w_id]) && (ev.xbutton.y >= w.sens_areas[i].start_y && ev.xbutton.y <= w.sens_areas[i].end_y) && w.sens_areas[i].active) { spawn(w.sens_areas[i].cmd); sa_clicked++; break; } } if(!sa_clicked) { switch(ev.xbutton.button) { case Button1: do_action(button1); break; case Button2: do_action(button2); break; case Button3: do_action(button3); break; case Button4: do_action(button4); break; case Button5: do_action(button5); break; case Button6: do_action(button6); break; case Button7: do_action(button7); break; } } break; case KeyPress: XLookupString(&ev.xkey, buf, sizeof buf, &ksym, 0); do_action(ksym+keymarker); break; /* TODO: XRandR rotation and size */ } }
static void handle_xev(void) { XEvent ev; int i; char buf[32]; KeySym ksym; XNextEvent(dzen.dpy, &ev); switch(ev.type) { case Expose: if(ev.xexpose.count == 0) x_redraw(ev); break; case EnterNotify: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xcrossing.window == dzen.slave_win.line[i]) x_hilight_line(i); } if(!dzen.slave_win.ishmenu && ev.xcrossing.window == dzen.title_win.win) do_action(entertitle); if(ev.xcrossing.window == dzen.slave_win.win) do_action(enterslave); break; case LeaveNotify: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xcrossing.window == dzen.slave_win.line[i]) x_unhilight_line(i); } if(!dzen.slave_win.ishmenu && ev.xcrossing.window == dzen.title_win.win) do_action(leavetitle); if(ev.xcrossing.window == dzen.slave_win.win) { do_action(leaveslave); } break; case ButtonRelease: if(dzen.slave_win.ismenu) { for(i=0; i < dzen.slave_win.max_lines; i++) if(ev.xbutton.window == dzen.slave_win.line[i]) dzen.slave_win.sel_line = i; } switch(ev.xbutton.button) { case Button1: do_action(button1); break; case Button2: do_action(button2); break; case Button3: do_action(button3); break; case Button4: do_action(button4); break; case Button5: do_action(button5); break; } break; case KeyPress: XLookupString(&ev.xkey, buf, sizeof buf, &ksym, 0); do_action(ksym+keymarker); break; /* TODO: XRandR rotation and size chnages */ #if 0 #ifdef DZEN_XRANDR case RRScreenChangeNotify: handle_xrandr(); #endif #endif } }