[Obj-C++] 14 NSWindowの重複 : 不具合発覚

[M1 Mac, Big Sur 11.6.5, clang 13.0.0, noXcode]

開発中のアプリについてmainクラスと他のクラスでNSWindowの初期化を設定しているため、一定条件で重複表示になることが発覚しました。

コードを書きながら矛盾を感じていたのですが、見た目には問題がなかったのでそのままにしていました。macOS Montereyでも動作を確認しようとアプリを起動してファイルをDrag & Dropすると新しいNSWindowがずれて表示されたために気付いたという次第です。なおファイルパスを貼り付ける場合はダブりにはなりません。

この部分の修正には1日半かかりました。解決してホッとすると同時に言語仕様に対する違和感が残りました。たまたまかもしれませんが、JavaやC++(FLTK)ではこんなところで詰まることはありませんでした。アクセス修飾子やstatic修飾子を駆使して対処してきました。

次回以降の記事で対策を紹介します。

[Obj-C++] 13 NSDragOperationCopyの緑アイコン表示について

[M1 Mac, Big Sur 11.6.5, clang 13.0.0]

前回の続きです。

XCodeにプロジェクトをコピーして動作確認してみましたが、やはりNSView(=NSWindow)に入るとカーソル右下の緑アイコンが非表示になりました。これが仕様なのでしょう。

NSWindowの下の方はTextViewなのでそこにはドロップしないという意味では正しい挙動です。自製Makefileで作成した実行ファイルではホバーするウィジェットに関係なく常時表示し続けるという方がむしろ異常に思えてきました。

緑アイコンの役割を考えるとドロップと無関係なウィジェット上ではアイコン表示しないというのが正しいかと思います。

NSViewとNSWindowの座標・サイズが一致しているという今回の設定が特殊ということでしょう。NSView領域にカーソルが入っているから本来は緑アイコン表示すべきところですが、配置されているウィジェットとの兼ね合いがあるので基本非表示になるということです。