[aquaskk-changes 433] CVS update: AquaSKK

Back to archive index

t-suw****@users***** t-suw****@users*****
2007年 11月 11日 (日) 01:54:25 JST


Index: AquaSKK/ChangeLog
diff -u AquaSKK/ChangeLog:1.52 AquaSKK/ChangeLog:1.53
--- AquaSKK/ChangeLog:1.52	Sat Nov 10 20:05:05 2007
+++ AquaSKK/ChangeLog	Sun Nov 11 01:54:24 2007
@@ -1,3 +1,8 @@
+2007-11-11  Tomotaka SUWA  <t.suw****@mac*****>
+
+	* KanjiConversionMode.cpp: ヘルプ検索と Spotlight 検索で候補ウィン
+	ドウが前面に表示されない不具合を修正。
+
 2007-11-10  Tomotaka SUWA  <t.suw****@mac*****>
 
 	* CandidatesManager.mm: ウィンドウレベルに対応。
Index: AquaSKK/KanjiConversionMode.cpp
diff -u AquaSKK/KanjiConversionMode.cpp:1.16 AquaSKK/KanjiConversionMode.cpp:1.17
--- AquaSKK/KanjiConversionMode.cpp:1.16	Sat Nov 10 20:05:05 2007
+++ AquaSKK/KanjiConversionMode.cpp	Sun Nov 11 01:54:25 2007
@@ -1,5 +1,5 @@
 /*
-  $Id: KanjiConversionMode.cpp,v 1.16 2007/11/10 11:05:05 t-suwa Exp $
+  $Id: KanjiConversionMode.cpp,v 1.17 2007/11/10 16:54:25 t-suwa Exp $
 
   MacOS X implementation of the SKK input method.
 
@@ -1147,6 +1147,42 @@
 			   current_candidate_index, candidates.size(), mode);
 }
 
+SInt32 getCandidatesWindowLevel(const Point& pt) {
+    WindowRef active;
+    SInt32 level;
+
+    // カーソル位置のウィンドウを取得
+    switch(FindWindow(pt, &active)) {
+    case inMenuBar:		// ヘルプ検索
+	return kCGMainMenuWindowLevel + 1;
+
+    case inContent:		// Carbon ウィンドウ
+	GetWindowGroupLevel(GetWindowGroup(active), &level);
+	return level + 1;
+    }
+
+    // デフォルトのウィンドウレベル
+    level = kCGFloatingWindowLevel;
+
+    // Spotlight の場合は特別に処理
+    CFBundleRef mainBundle = CFBundleGetMainBundle();
+    if(mainBundle) {
+	CFRetain(mainBundle);
+	CFStringRef id = CFBundleGetIdentifier(mainBundle);
+	CFRelease(mainBundle);
+
+	if(id) {
+	    CFRetain(id);
+	    if(CFStringCompare(id, CFSTR("com.apple.spotlight"), kCFCompareCaseInsensitive) == 0) {
+		level = kCGPopUpMenuWindowLevel;
+	    }
+	    CFRelease(id);
+	}
+    }
+
+    return level;
+}
+
 // 非メンバ
 void openCandidatesWindow(const CppCFString& str_candidates,
 			  unsigned& window_id,
@@ -1167,15 +1203,9 @@
     SInt16 qd_x = offset_to_pos_params.fReplyPoint.h;
     SInt16 qd_y = offset_to_pos_params.fReplyPoint.v;
 
-    // Carbon アプリで候補ウィンドウが後ろに回るのを防ぐ
-    SInt32 level;
-    if(WindowRef active = ActiveNonFloatingWindow()) {
-	GetWindowGroupLevel(GetWindowGroup(active), &level);
-	++ level;
-    } else {
-	level = kCGFloatingWindowLevel;
-    }
-
+    // 候補ウィンドウのレベルを取得
+    SInt32 level = getCandidatesWindowLevel(offset_to_pos_params.fReplyPoint);
+ 
     // サーバーに送り付けるCFDataを作成。
     CppCFData cands_to_be_attached;
     cands_to_be_attached.own(str_candidates.toCFData());


aquaskk-changes メーリングリストの案内
Back to archive index