コード例 #1
0
ファイル: main.c プロジェクト: SparklePigBang/dzen
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  */
	}
}
コード例 #2
0
ファイル: main.c プロジェクト: itdaniher/SucklessDebXO
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
		
	}
}