iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Software Development

用python做一個X11 WM系列 第 19 篇

試試看用C寫

  • 分享至 

  • xImage
  •  

repo在這裡
因為C Xlib的文檔是最完整的,之前不用C是因為害怕指針和記憶體,但我覺得可以邊寫邊學,所以就試試看用C做,有文檔就比較少問AI問題,一直問AI讓我感覺我都沒做事,我希望我是自己做的不要一直依賴AI

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
/*
header at  /usr/include/X11/Xlib.h
install libx11-doc can see man page
API reference:https://tronche.com/gui/x/xlib/function-index.html
*/
int main(){
	Display * dpy;
	dpy=XOpenDisplay(NULL);
	XEvent ev;
	Cursor cursor=XCreateFontCursor(dpy,XC_left_ptr);
	KeyCode q_code=XKeysymToKeycode(dpy, XStringToKeysym("q"));
	
	XGrabKey(dpy,q_code,Mod1Mask,DefaultRootWindow(dpy),True,GrabModeAsync,GrabModeAsync);
    XGrabButton(dpy, 1, Mod4Mask, DefaultRootWindow(dpy), True,
            ButtonPressMask|ButtonReleaseMask|PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None);
    XGrabButton(dpy, 3, Mod4Mask, DefaultRootWindow(dpy), True,
            ButtonPressMask|ButtonReleaseMask|PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None);
    
	XDefineCursor(dpy,DefaultRootWindow(dpy),cursor);
	while(True){
		XNextEvent(dpy,&ev);
		if(ev.type==KeyPress){
			/*
			if(ev.xkey==q_code){
				XInternAtom(dpy,"WM_DELETE_WINDOW",False);
				
			}
			*/
			if(ev.xkey.keycode==q_code && ev.xkey.subwindow!=None){
				XKillClient(dpy,ev.xkey.subwindow);
			}
		}
		/*
		else if(ev.type==ButtonPress){
			int mc_origin_x=ev.xbutton.x_root;
			int mc_origin_y=ev.xbutton.y_root;
			if(ev.xbutton.button==1){
				int win_origin_x=ev.xbutton.subwindow.XGetGeometry.x_return;
			}
			
		}
		*/
		else if(ev.type==EnterNotify && ev.xbutton.subwindow!=None){
			XRaiseWindow(dpy,ev.xbutton.subwindow);
		}
	}
	return 0;
}

目前寫到一半,明天應該可以把之前python的內容都搬過來


上一篇
Day 18|今天沒時間
下一篇
Day 20|把py內容搬到C
系列文
用python做一個X11 WM 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言