subtitle upgrades, textbox fixes/upgrades
[goodguy/history.git] / cinelerra-5.1 / guicast / bcwindowbase.C
index 67226174a93a34ddf2f8514ad3f0ffba04b5fc90..96e71f39ee3bfe27e3f7a03e6a158540df13ccfd 100644 (file)
@@ -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)