| |||||||
adm | Find | login register |
完全不需要 rebuild GTK+ 的解法。 1. 下載 thaw.tar.gz 2. 進到目錄後,執行 make 3. 在使用 gcin 前,或測試小灰的 testcase 前執行 export LD_PRELOAD=/PATH/TO/YOUR/thaw/thaw.so 4. 執行 gcin 或測試小灰的 testcase 應該是沒大問題了,使用 thaw.so 之後,所有必灰技都無法製造出小灰。 剩下的「不同 distro 間」可能出現的相容性問題之類的 (目前是寫死 libgdk-x11-2.0.so.0), 需要其它高手出馬了。 code 是在網路上到處 copy and paste 來的,有啥疑問不要問我… 因為 code 過短,顯然沒資格擁有 copyright,應該算 public domain 吧。 此程式適用所有 GTK+ 及 gcin 版本,各大 distro 只要預設連結 libgdk-x11-2.0.so.0 的應該都可用。 Update: 已更新成最簡版本的 3 行 thaw.c | |||||||||||||
| |||||||||||||
用 LD_PRELOAD 把那兩個 function 變成空的。看起來 wrap_init 那個 function 是不需要的。.so 的 init 可以看這一篇 那變成還要用 script 把 gcin 包起來。 edited: 2
| |||||||||||||
弄了 1.4.5.pre2,改成用直接 link .so 的方式,這樣也不用弄 script 來設定 LD_PRELOAD 了。試試看有沒有問題。 | |||||||||||||
很棒。我還在想說能不能弄進 gcin 裡頭說。
因為一直以為弄進 gcin 的話會慢 gtk 一步。 | |||||||||||||
caleb兄: ERROR: ld.so: object '/home/user/.gcin/libfreezethaw.so;' from LD_PRELOAD cannot be preloaded: ignored. 請問有解否?感謝~
註: | |||||||||||||
會不會是 gcin 是 32-bit 的?
| |||||||||||||
我用 64bit kernel + 64bit userland 測試 libfreezethaw.tar.gz + gcin 完全正常。
| |||||||||||||
我那位朋友是用archlinux,不知道和這個有沒有關係? | |||||||||||||
剛剛問了一下,是64bit的gcin, edited: 1
| |||||||||||||
gtk win32 沒辦法用 preload or override 的方式,Windows gtab 時輸入幾個字 window 就死了。 看有沒有人要幫忙 build 沒有 bug 的 gtk win32,把底下的 function 變空的 void gdk_window_freeze_toplevel_updates_libgtk_only(GdkWindow *window){} void gdk_window_thaw_toplevel_updates_libgtk_only(GdkWindow *window){} edited: 3
| |||||||||||||
Windows其實也可以dll hijack http://www.codeproject.com/KB/DLL/apihijack.aspx 這應該也是 http://www.codeproject.com/KB/DLL/hooks.aspx |
| |||||||
adm | Find | login register |