ログイン
編集不可のページディスカッション情報添付ファイル
"clear/note/2011-04"の差分

MMA
5と6のリビジョン間の差分
2011-04-01 23:52:45時点のリビジョン5
サイズ: 3502
編集者: clear
コメント:
2011-04-02 00:16:38時点のリビジョン6
サイズ: 4004
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 59: 行 59:
   * 個人的には、それをやるなら以下のようにするかなあと思うけど、まあ面倒になるだけか
   {{{#!highlight c numbers=no
typedef struct _XEvent {
    int type;
    union {
        XAnyEvent xany;
        /* ... */
        long pad[24];
    } u;
} XEvent;
}}}
  * `long pad[24];`は境界整合性を確保するための詰め物か。`union`なので、他のメンバが`pad`より小さければ`XEvent`のサイズは`pad`のサイズに従うはず

2011/04/01

  • 4月になってしまった
  • kagisysは私がモタモタしているうちにハードウェアの方が進んできているので、そちらに歩調を合わせます
  • いい加減勉強する。コードを書く。
    • socket programming
    • X11 programming

Synaptics touchpad driver

タッチパッドのレスポンスが以前からよろしくない気がしていたので、synapticsのmanを読んだりここを読んだりしていた。MinSpeedMaxSpeedの値をいじれば良さそうな気がするが、試しに適当に変えてみてもあまり変わった気がしない。静的なパラメータの変更はxorg.conf.d/10-synaptics.confに書けばできる。またsynclientコマンドを使えば動的に設定可能。もう少しパラメータの意味を探る必要あり。

X11、はじめました

とりあえずウィンドウを出す所までは行った。Win32APIを叩いていた頃の記憶がよみがえるような気がする。手始めに練習として、xmma(MMAのロゴを表示する。元ネタは言うまでもなくxlogo)を作ろうと思う。

  • どうやら、Win32APIの勘が結構生かせそうなので対比で学んでいくことにする
  • 何よりも最初にXサーバとの接続を行う。XOpenDisplay() <-> XCloseDisplay()

  • とりあえず何でも送られてくるWin32とは違って、欲しいイベントを最初に通知しておく
    • 拾わなかったものはどうやら祖先に送られるらしい
    • MappingNotifyイベントは問答無用で全てのクライアントに届くらしい。これがどういうものかはまだ分からない

  • XEvent共用体というのがWin32でいうところのMSG構造体に当たるようだ。何か凄まじい宣言がなされている。以下Xlib.hから引用

    typedef union _XEvent {
            int type;               /* must not be changed; first element */
            XAnyEvent xany;
            XKeyEvent xkey;
            XButtonEvent xbutton;
            XMotionEvent xmotion;
            XCrossingEvent xcrossing;
            XFocusChangeEvent xfocus;
            XExposeEvent xexpose;
            XGraphicsExposeEvent xgraphicsexpose;
            XNoExposeEvent xnoexpose;
            XVisibilityEvent xvisibility;
            XCreateWindowEvent xcreatewindow;
            XDestroyWindowEvent xdestroywindow;
            XUnmapEvent xunmap;
            XMapEvent xmap;
            XMapRequestEvent xmaprequest;
            XReparentEvent xreparent;
            XConfigureEvent xconfigure;
            XGravityEvent xgravity;
            XResizeRequestEvent xresizerequest;
            XConfigureRequestEvent xconfigurerequest;
            XCirculateEvent xcirculate;
            XCirculateRequestEvent xcirculaterequest;
            XPropertyEvent xproperty;
            XSelectionClearEvent xselectionclear;
            XSelectionRequestEvent xselectionrequest;
            XSelectionEvent xselection;
            XColormapEvent xcolormap;
            XClientMessageEvent xclient;
            XMappingEvent xmapping;
            XErrorEvent xerror;
            XKeymapEvent xkeymap;
            XGenericEvent xgeneric;
            XGenericEventCookie xcookie;
            long pad[24];
    } XEvent;
    
    • XなになにEvent構造体はすべて先頭の要素にtypeを持っているために、typeを見ることでどのイベントか判別できるようだ

      • 個人的には、それをやるなら以下のようにするかなあと思うけど、まあ面倒になるだけか
        typedef struct _XEvent {
            int type;
            union {
                XAnyEvent xany;
                /* ... */
                long pad[24];
            } u;
        } XEvent;
        
    • long pad[24];は境界整合性を確保するための詰め物か。unionなので、他のメンバがpadより小さければXEventのサイズはpadのサイズに従うはず

clear/note/2011-04 (最終更新日時 2011-04-30 19:17:27 更新者 clear)