2

通常、ポップアップメニューを表示するには(ボタンの横に表示されます)、ユーザーがボタンをクリックする必要があるコードをリファクタリングしています。ユーザーがボタンの上にマウスを置いた場合にポップアップメニューを表示しようとしています。事前設定された期間アイコンを表示し、ユーザーが別のボタンアイコンに移動した場合は再び非表示にします。

ただし、マウスとキーボードのフォーカスを盗むことでメニューをアクティブにするgtk_menu_popupと、ボタンウィジェットのフォーカスを取得しようとしてもほとんど進歩していません。

ボタンアイコンにフォーカスを戻すことはできますか?

4

1 に答える 1

2

これをデバッグするのは非常に面倒であることが判明しましgtk_menu_popupた。gdkキーボードとポインターフォーカスを取得すると、gdbでコードをステップ実行できなくなり、最終的にはVMでコードを実行し、SSH経由でgdbを使用してリモートデバッグセッションを使用して管理しました。 。

ポップアップが元のウィジェットからフォーカスを奪う可能性のあるいくつかの異なるメカニズムがあります

  1. 一時的なウィンドウ関係を介して(合格した場合のみparent_menu_shell
  2. 経由gdk_pointer_grab
  3. 経由gtk_grab_add

シェルパラメータをNULLに設定するparent_menu_shellと、次のように、最後の2つの「グラブ」を元に戻す必要がありました。

gdk_pointer_ungrab(GDK_CURRENT_TIME);
gdk_keyboard_ungrab(GDK_CURRENT_TIME);
gtk_grab_remove(menu);

これでうまくいきましたが、ポップアップによってフォーカスが一時的に盗まれ、問題も発生します

于 2012-10-07T15:08:52.007 に答える