keys_return[0] = 0;
is_deleting = 0;
window_lock = 0;
+ resend_event_window = 0;
x = 0;
y = 0;
w = 0;
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_F11: key_pressed = KEY_F11; break;
+ case XK_F12: key_pressed = KEY_F12; break;
+
case XK_Menu: key_pressed = KPMENU; break; /* menu */
// remote control
// above case XK_KP_Enter: key_pressed = KPENTER; break; /* check */
#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
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;
if( ret && win != child_return )
ret = top_level->match_window(child_return);
// query pointer can return a window manager window with this top_level as a child
- if( !ret ) {
- unsigned int nchildren_return = 0;
- Window parent_return, *children_return = 0;
- XQueryTree(top_level->display, child_return, &root_return,
- &parent_return, &children_return, &nchildren_return);
- if( children_return ) {
- if( nchildren_return==1 && children_return[0]==top_level->win )
- ret = 1;
- XFree(children_return);
- }
+// for kde this can be two levels deep
+ unsigned int nchildren_return = 0;
+ Window parent_return, *children_return = 0;
+ Window top_win = top_level->win;
+ while( !ret && top_win != top_level->rootwin && top_win != root_return &&
+ XQueryTree(top_level->display, top_win, &root_return,
+ &parent_return, &children_return, &nchildren_return) ) {
+ if( children_return ) XFree(children_return);
+ if( (top_win=parent_return) == child_return ) ret = 1;
}
return ret;
}
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()