X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d48b06bd9039597545de9a862501d57c5f9ec1ea..55410bb4f67febe1ca20654f078ea4fb9a6223ae:/src/gtk/app.cpp diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index a7c984dd3b..18c05dda50 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -44,167 +44,6 @@ wxFORCE_LINK_MODULE(gnome_vfs) #endif -//----------------------------------------------------------------------------- -// global data -//----------------------------------------------------------------------------- - -static GtkWidget *gs_RootWindow = NULL; -static wxArrayPtrVoid g_arrGdkEvents; - -//----------------------------------------------------------------------------- -// wxYield -//----------------------------------------------------------------------------- - -bool wxApp::DoYield(bool onlyIfNeeded, long eventsToProcess) -{ - if ( m_isInsideYield ) - { - if ( !onlyIfNeeded ) - { - wxFAIL_MSG( wxT("wxYield called recursively" ) ); - } - - return false; - } - -#if wxUSE_THREADS - if ( !wxThread::IsMain() ) - { - // can't call gtk_main_iteration() from other threads like this - return true; - } -#endif // wxUSE_THREADS - - m_isInsideYield = true; - m_eventsToProcessInsideYield = eventsToProcess; - -#if wxUSE_LOG - // disable log flushing from here because a call to wxYield() shouldn't - // normally result in message boxes popping up &c - wxLog::Suspend(); -#endif - - // NOTE: gtk_main_iteration() doesn't allow us to filter events, so we - // rather use gtk_main_do_event() after filtering the events at - // GDK level - - GdkDisplay* disp = gtk_widget_get_display(gs_RootWindow); - - // gdk_display_get_event() will transform X11 events into GDK events - // and will queue all of them in the display (private) structure; - // finally it will "unqueue" the last one and return it to us - GdkEvent* event = gdk_display_get_event(disp); - while (event) - { - // categorize the GDK event according to wxEventCategory. - // See http://library.gnome.org/devel/gdk/unstable/gdk-Events.html#GdkEventType - // for more info. - - wxEventCategory cat = wxEVT_CATEGORY_UNKNOWN; - switch (event->type) - { - case GDK_SELECTION_REQUEST: - case GDK_SELECTION_NOTIFY: - case GDK_SELECTION_CLEAR: - case GDK_OWNER_CHANGE: - cat = wxEVT_CATEGORY_CLIPBOARD; - break; - - - case GDK_KEY_PRESS: - case GDK_KEY_RELEASE: - case GDK_BUTTON_PRESS: - case GDK_2BUTTON_PRESS: - case GDK_3BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - case GDK_SCROLL: // generated from mouse buttons - case GDK_CLIENT_EVENT: - cat = wxEVT_CATEGORY_USER_INPUT; - break; - - - case GDK_PROXIMITY_IN: - case GDK_PROXIMITY_OUT: - - case GDK_MOTION_NOTIFY: - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: - case GDK_VISIBILITY_NOTIFY: - case GDK_PROPERTY_NOTIFY: - - case GDK_FOCUS_CHANGE: - case GDK_CONFIGURE: - case GDK_WINDOW_STATE: - case GDK_SETTING: - case GDK_DELETE: - case GDK_DESTROY: - - case GDK_EXPOSE: - case GDK_NO_EXPOSE: - case GDK_MAP: - case GDK_UNMAP: - //case GDK_DAMAGE: - - case GDK_DRAG_ENTER: - case GDK_DRAG_LEAVE: - case GDK_DRAG_MOTION: - case GDK_DRAG_STATUS: - case GDK_DROP_START: - case GDK_DROP_FINISHED: - case GDK_GRAB_BROKEN: - cat = wxEVT_CATEGORY_UI; - break; - - default: - cat = wxEVT_CATEGORY_UNKNOWN; - break; - } - - if (eventsToProcess & cat) - gtk_main_do_event(event); // process it now - else - g_arrGdkEvents.Add(event); // process it later - - // get next event - event = gdk_display_get_event(disp); - } - - if (eventsToProcess != wxEVT_CATEGORY_CLIPBOARD) - { - // It's necessary to call ProcessIdle() to update the frames sizes which - // might have been changed (it also will update other things set from - // OnUpdateUI() which is a nice (and desired) side effect). But we - // call ProcessIdle() only once since this is not meant for longish - // background jobs (controlled by wxIdleEvent::RequestMore() and the - // return value of Processidle(). - ProcessIdle(); // ProcessIdle() also calls ProcessPendingEvents() - } - //else: if we are inside ~wxClipboardSync() and we call ProcessIdle() and - // the user app contains an UI update handler which calls wxClipboard::IsSupported, - // then we fall into a never-ending loop... - - // put all unprocessed GDK events back in the queue - for (size_t i=0; i