void BC_Display::new_window(BC_WindowBase *window)
{
-//printf("BC_Display::new_window %d\n", __LINE__);
- if(!clipboard)
- {
+ if( !clipboard ) {
clipboard = new BC_Clipboard(window);
clipboard->start_clipboard();
}
-//printf("BC_Display::new_window %d\n", __LINE__);
windows.append(window);
// dump_windows();
-//printf("BC_Display::new_window %d\n", __LINE__);
}
void BC_Display::delete_window(BC_WindowBase *window)
{
-//printf("BC_Display::delete_window %d\n", __LINE__);
windows.remove(window);
-//printf("BC_Display::delete_window %d\n", __LINE__);
}
// If the event happened in any subwindow
int BC_Display::is_event_win(XEvent *event, BC_WindowBase *window)
{
Window event_win = event->xany.window;
-//printf("BC_Display::is_event_win %d\n", __LINE__);
if(event_win == 0 || window->win == event_win) return 1;
-//printf("BC_Display::is_event_win %d\n", __LINE__);
- for(int i = 0; i < window->subwindows->size(); i++)
- {
- if(is_event_win(event, window->subwindows->get(i)))
- {
-//printf("BC_Display::is_event_win %d\n", __LINE__);
+ for(int i = 0; i < window->subwindows->size(); i++) {
+ if(is_event_win(event, window->subwindows->get(i))) {
return 1;
}
}
void BC_Display::loop()
{
- const int debug = 0;
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
while(!done)
{
// If an event is waiting, process it now.
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
if(get_event_count())
{
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
handle_event();
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
}
else
// Otherwise, process all compressed events & get the next event.
{
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
lock_display("BC_Display::loop");
for(int i = 0; i < windows.size(); i++)
{
BC_WindowBase *window = windows.get(i);
-if(debug) printf("BC_Display::loop %d %d %d %d\n",
-__LINE__,
-window->resize_events,
-window->motion_events,
-window->translation_events);
+// printf("BC_Display::loop %d %d %d %d\n", __LINE__,
+// window->resize_events, window->motion_events, window->translation_events);
if(window->resize_events)
window->dispatch_resize_event(window->last_resize_w,
window->last_resize_h);
if(window->motion_events)
window->dispatch_motion_event();
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
if(window->translation_events)
window->dispatch_translation_event();
}
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
unlock_display();
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
handle_event();
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
}
}
-if(debug) printf("BC_Display::loop %d\n", __LINE__);
}
void BC_Display::handle_event()
{
-const int debug = 0;
XEvent *event = get_event();
-if(debug) printf("BC_Display::handle_event %d type=%d\n",
-__LINE__,
-event->type);
+// printf("BC_Display::handle_event %d type=%d\n", __LINE__, event->type);
lock_display("BC_Display::handle_event");
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
for(int i = 0; i < windows.size(); i++)
{
// Test if event was inside window
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
BC_WindowBase *window = windows.get(i);
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
if(is_event_win(event, window))
// Dispatch event
window->dispatch_event(event);
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
}
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
unlock_display();
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
delete event;
-if(debug) printf("BC_Display::handle_event %d\n", __LINE__);
}
// Get pending events for the given window
XEvent* BC_Display::get_event()
{
XEvent *result = 0;
- while(!done && !result)
- {
-//printf("BC_Display::get_event %d\n", __LINE__);
+ while(!done && !result) {
event_condition->lock("BC_WindowBase::get_event");
-//printf("BC_Display::get_event %d\n", __LINE__);
event_lock->lock("BC_WindowBase::get_event");
-//printf("BC_Display::get_event %d\n", __LINE__);
if(common_events.total && !done)
{