2 つのボタン ( A、B ) と描画領域 ( C )を備えた小さな GTK アプリケーションがあります。Aをクリックすると、Cのサイズが再計算され、gtk_widget_set_size_request() で設定されます。これにより、エクスポーズ イベントが発生し、そのハンドラーがデータを計算します。さらに、Aをクリックすると、 Bでクリックされたシグナルが発せられ、そのハンドラーはCのエクスポーズイベントによって計算されたデータを必要とします。
実際にはすべて正常に動作しますが、expose-eventが何らかの形で遅延し、クリックされたハンドラーが前に呼び出され、データ (ご想像のとおり) が欠落しています。
a_handler() {
new_size = calculate_size();
gtk_widget_set_size_request(C, new_size); //Will cause expose-event
g_signal_emit_by_name(B, "clicked");
}
b_handler() {
calculate_something(data); //Error
}
c_handler() {
draw_something();
data = calcluate_data();
}
私に何ができる?