2010-02-13 114 views
1

我在GLFW中編寫了一個MacOSX捆綁應用程序。強制窗口前/聚焦?

當窗口彈出時,我希望它是頂部所有其他窗口。我也希望它抓住焦點(我在vim中編寫代碼,然後輸入「:make run」 - 之後我想與應用程序進行交互)。

問題:

1)是否有一些API調用可用於實現此目的? 2)有什麼配置我可以在MacOSX上做一些類似於「程序名爲blah,讓它專注於啓動」的配置嗎?

謝謝!

回答

1

可可API是[NSWindow makeKeyAndOrderFront:]這可能類似於你的圖書館。

0

如果將構建的可執行文件封裝在應用程序包中,則應該可以在終端中打開它(例如,通過open命令),並且焦點將自動切換到它。

請注意,您可能需要將您的應用程序打包在一個包中。

  1. 首先,您需要打包它,因爲那是GLFW FAQ says

  2. 我個人認爲,因爲,至少在GLFW目前可在github上(commit 3e78),頂上的Mac OS X 10.7.5,鍵盤處理是終端被盜如果你沒有這是必要的該可執行文件位於應用程序包中。


我目睹甚至出現的鍵盤輸入竊取的行爲,當我手動切換鼠標焦點到該彈出當我跑二進制窗口。也就是說,我輸入的擊鍵仍然在終端窗口中結束。

您可以自己在自己的系統上測試這種行爲,方法是將GLFW的一個示例應用程序(如Triangle.app)複製到其他目錄(如/tmp/),然後從那裏運行二進制文件。這是我正在做出的區分的一個示例。

% pwd 
/Users/pnkfelix/Dev/OpenGL/glfw/objdir/examples/Triangle.app/Contents/MacOS 
% ./Triangle 

(該open命令的工作太:)

% open ../../../Triangle.app 

在上述情況下,按Esc鍵與集中的三角窗使其退出,符合市場預期。

% cp ./Triangle /tmp 
% /tmp/Triangle 
^[^[^[^[^[^[^ 

在這種情況下,擊中集中的三角窗ESC通過按鍵來啓動這個程序的終端窗口:

然而,當程序沒有正坐在一個包中的問題就來了。 (這就是^[字形 - 終端響應它收到的ESC鍵擊。)


好消息是,將一個構建的可執行文件包裝在一個包中比較容易。

例如,當我在做其他實驗用結合的GLFW庫,我發現足以用於從可執行構建臨時束下面的Makefile規則:

test: Triangle.app 
     open Triangle.app 

Triangle.app: Triangle.app/Contents/MacOS/Triangle 

Triangle.app/Contents/MacOS/Triangle: triangle 
     mkdir -p Triangle.app/Contents/MacOS 
     cp $< [email protected] 

(注意8個空格縮進上面的命令不應該被逐字複製,而是根據Makefile的需要重寫爲製表符)。

但是,請注意,上述Makefile規則是而不是應用程序包的官方結構,除個人實驗外不應信任任何其他內容。蘋果有documentation on how to officially package your application in a bundle,所以你應該花時間做任何他們描述的步驟,然後再釋放你生產的任何東西。 (例如,上面列出的Makefile規則不會嘗試生成Info.plist文件,這是根據Apple文檔所要求的組件之一。)