X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.C;h=96e71f39ee3bfe27e3f7a03e6a158540df13ccfd;hb=318256a48938064b695268d03396977739ef4724;hp=67226174a93a34ddf2f8514ad3f0ffba04b5fc90;hpb=3ec3a9cc6afc6561311686b3ec597ee3c1d80d6f;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index 67226174..96e71f39 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -113,8 +113,9 @@ BC_WindowBase::~BC_WindowBase() // stop event input XSelectInput(top_level->display, this->win, 0); motion_events = resize_events = translation_events = 0; +#ifndef SINGLE_THREAD top_level->dequeue_events(win); - +#endif if(top_level->active_menubar == this) top_level->active_menubar = 0; if(top_level->active_popup_menu == this) top_level->active_popup_menu = 0; if(top_level->active_subwindow == this) top_level->active_subwindow = 0; @@ -887,7 +888,7 @@ int BC_WindowBase::keysym_lookup(XEvent *event) return ret; } -pthread_t locking_task = -1; +pthread_t locking_task = (pthread_t)-1L; int locking_event = -1; int locking_message = -1; @@ -1920,11 +1921,17 @@ int BC_WindowBase::unset_all_repeaters() // return top_level->next_repeat_id++; // } +XEvent *BC_WindowBase::new_xevent() +{ + XEvent *event = new XEvent; + memset(event, 0, sizeof(*event)); + return event; +} #ifndef SINGLE_THREAD int BC_WindowBase::arm_repeat(int64_t duration) { - XEvent *event = new XEvent; + XEvent *event = new_xevent(); XClientMessageEvent *ptr = (XClientMessageEvent*)event; ptr->type = ClientMessage; ptr->message_type = RepeaterXAtom; @@ -1944,7 +1951,8 @@ int BC_WindowBase::recieve_custom_xatoms(xatom_event *event) int BC_WindowBase::send_custom_xatom(xatom_event *event) { - XEvent *myevent = new XEvent; +#ifndef SINGLE_THREAD + XEvent *myevent = new_xevent(); XClientMessageEvent *ptr = (XClientMessageEvent*)myevent; ptr->type = ClientMessage; ptr->message_type = event->message_type; @@ -1956,6 +1964,7 @@ int BC_WindowBase::send_custom_xatom(xatom_event *event) ptr->data.l[4] = event->data.l[4]; put_event(myevent); +#endif return 0; } @@ -3307,7 +3316,7 @@ void BC_WindowBase::set_done(int return_value) #else // SINGLE_THREAD init_wait(); if( !event_thread ) return; - XEvent *event = new XEvent; + XEvent *event = new_xevent(); XClientMessageEvent *ptr = (XClientMessageEvent*)event; event->type = ClientMessage; ptr->message_type = SetDoneXAtom; @@ -3319,8 +3328,8 @@ void BC_WindowBase::set_done(int return_value) // it is deleted. // Deletion of event_thread is done at the end of BC_WindowBase::run_window() - by calling the destructor put_event(event); - } #endif + } } void BC_WindowBase::close(int return_value)