findobj mode/xlat/scale/rotate, save backup shortcut, undo limit bug, title boundary...
[goodguy/history.git] / cinelerra-5.1 / guicast / bcwindowbase.C
index 3823853a9c43f03b97fdaa3f7c30e71b685b46ab..5b1331061d321bfb3dec45a55a8bacef288ff9fd 100644 (file)
@@ -255,6 +255,7 @@ int BC_WindowBase::initialize()
        keys_return[0] = 0;
        is_deleting = 0;
        window_lock = 0;
+       resend_event_window = 0;
        x = 0;
        y = 0;
        w = 0;
@@ -1254,6 +1255,18 @@ locking_message = event->xclient.message_type;
                case XK_KP_Insert:      key_pressed = KPINS;    break;
                case XK_KP_Decimal:
                case XK_KP_Delete:      key_pressed = KPDEL;    break;
+
+               case XK_F1:             key_pressed = KEY_F1;   break;
+               case XK_F2:             key_pressed = KEY_F2;   break;
+               case XK_F3:             key_pressed = KEY_F3;   break;
+               case XK_F4:             key_pressed = KEY_F4;   break;
+               case XK_F5:             key_pressed = KEY_F5;   break;
+               case XK_F6:             key_pressed = KEY_F6;   break;
+               case XK_F7:             key_pressed = KEY_F7;   break;
+               case XK_F8:             key_pressed = KEY_F8;   break;
+               case XK_F9:             key_pressed = KEY_F9;   break;
+               case XK_F10:            key_pressed = KEY_F10;  break;
+
                case XK_Menu:           key_pressed = KPMENU;   break;  /* menu */
 // remote control
 // above       case XK_KP_Enter:       key_pressed = KPENTER;  break;  /* check */
@@ -1351,7 +1364,14 @@ locking_message = event->xclient.message_type;
 
 #ifndef SINGLE_THREAD
        unlock_window();
-       if(event) delete event;
+       if(event) {
+               if( resend_event_window ) {
+                       resend_event_window->put_event(event);
+                       resend_event_window = 0;
+               }
+               else
+                       delete event;
+       }
 #else
 //     if(done) completion_lock->unlock();
 #endif
@@ -3431,6 +3451,8 @@ BC_WindowBase::get_xinerama_info(int screen)
                return 0;
        }
        int top_x = get_x(), top_y = get_y();
+       if(  BC_DisplayInfo::left_border >= 0 ) top_x +=  BC_DisplayInfo::left_border;
+       if(  BC_DisplayInfo::top_border >= 0 ) top_y +=  BC_DisplayInfo::top_border;
        for( int i=0; i<xinerama_screens; ++i ) {
                int scr_y = top_y - xinerama_info[i].y_org;
                if( scr_y < 0 || scr_y >= xinerama_info[i].height ) continue;
@@ -4471,6 +4493,20 @@ void BC_WindowBase::dequeue_events(Window win)
        event_lock->unlock();
 }
 
+int BC_WindowBase::resend_event(BC_WindowBase *window)
+{
+       if( resend_event_window ) return 1;
+       resend_event_window = window;
+       return 0;
+}
+
+#else
+
+int BC_WindowBase::resend_event(BC_WindowBase *window)
+{
+       return 1;
+}
+
 #endif // SINGLE_THREAD
 
 int BC_WindowBase::get_id()