void KXtApplication::init() { Q_ASSERT(qxtapp==0); qxtapp = this; installXtEventFilters(); qt_np_add_timeoutcb(np_do_timers); qt_np_add_timer_setter(np_set_timer); qt_np_add_event_proc(np_event_proc); qt_np_count++; /* QTimer *timer = new QTimer( this ); timer->start(500);*/ }
extern "C" NPError NPP_SetWindow(NPP instance, NPWindow* window) { if (!qNP) qNP = QNPlugin::create(); NPError result = NPERR_NO_ERROR; _NPInstance* This; if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; This = (_NPInstance*) instance->pdata; if (!window) { if (This->widget) { This->widget->unsetWindow(); This->window = 0; delete This->widget; This->widget = 0; } #ifdef _WS_X11_ } else if (This->window != (Window) window->window) { if (This->window) NPP_SetWindow( instance, 0 ); // unset This->window = (Window) window->window; #endif #ifdef _WS_WIN_ } else if (This->window != (HWND) window->window) { if (This->window) SetWindowLong( This->window, GWL_WNDPROC, (LONG)This->fDefaultWindowProc ); This->fDefaultWindowProc = (WNDPROC)GetWindowLong( (HWND)window->window, GWL_WNDPROC); This->window = (HWND) window->window; #endif This->x = window->x; This->y = window->y; This->width = window->width; This->height = window->height; #ifdef _WS_X11_ This->display = ((NPSetWindowCallbackStruct *)window->ws_info)->display; #endif if (!piApp) { #ifdef _WS_X11_ if (!qApp) { // Thou Shalt Not Unload Qt // Increment the reference count... // dlopen("libqt.so.1", RTLD_LAZY); // ... and never close it. // Nice try. Can't get that to work. // We are the first Qt-based plugin to arrive new QApplication(This->display); //XSynchronize(This->display,True); // Helps debugging ASSERT(qt_np_count == 0); } installXtEventFilters(Safe); qt_np_add_timeoutcb(np_do_timers); qt_np_add_timer_setter(np_set_timer); qt_np_add_event_proc(np_event_proc); qt_np_count++; appcon = XtDisplayToApplicationContext(This->display); #endif piApp = new PluginSDK_QApplication(); } if (!This->widget) { #ifdef _WS_WIN_ This->window = (HWND) window->window; InvalidateRect( This->window, NULL, TRUE ); UpdateWindow( This->window ); #endif // New widget on this new window. next_pi = This; /* This->widget = */ // (happens sooner - in QNPWidget constructor) This->instance->newWindow(); This->widget->show(); } else { // New window for existing widget, and all its children. This->widget->setWindow(FALSE); } } else if (This->widget) { // ### Maybe need a geometry setter that bypasses some Qt code? // ### position is always (0,0), so we get by by ignoring it. //This->widget->setGeometry(window->x,window->y, window->width, window->height); if ( This->widget->width() != (int)window->width || This->widget->height() != (int)window->height ) { //#ifdef _WS_WIN_ //This->widget->setGeometry(window->x, window->y, window->width, window->height); //#else This->widget->resize(window->width, window->height); //#endif } else { This->widget->update(); } } This->fWindow = window; return result; }