button.signal_clicked.connect(sigc::bind(sigc::mem_fun(this, &Dialog::response), code));
}
+void Dialog::set_modal(bool m)
+{
+ if(m)
+ {
+ set_focus();
+ if(state&FOCUS)
+ signal_grab_pointer.emit();
+ }
+ else
+ signal_ungrab_pointer.emit();
+}
+
void Dialog::button_release(int x, int y, unsigned button)
{
Panel::button_release(x, y, button);
- if(stale)
- delete this;
+ check_stale();
}
-void Dialog::key_release(unsigned key, unsigned mod)
+bool Dialog::key_release(unsigned key, unsigned mod)
{
- Panel::key_release(key, mod);
- if(stale)
- delete this;
+ bool result = Panel::key_release(key, mod);
+ check_stale();
+ return result;
+}
+
+bool Dialog::navigate(Navigation nav)
+{
+ bool result = Panel::navigate(nav);
+ check_stale();
+ return result;
}
void Dialog::response(int code)
stale = true;
}
+void Dialog::check_stale()
+{
+ if(stale)
+ delete this;
+}
+
Dialog::Loader::Loader(Dialog &d, WidgetMap &wm):
DerivedObjectLoader<Dialog, Panel::Loader>(d, wm)
RefPtr<Button> btn = new Button();
load_sub(*btn);
obj.add_button(*btn.get(), c);
- wdg_map[n] = btn.release();
+ last_widget = wdg_map[n] = btn.release();
}
} // namespace GLtk