void wxTopLevelWindowGTK::GTKHandleRealized() { wxNonOwnedWindow::GTKHandleRealized(); GdkWindow* window = gtk_widget_get_window(m_widget); gdk_window_set_decorations(window, (GdkWMDecoration)m_gdkDecor); gdk_window_set_functions(window, (GdkWMFunction)m_gdkFunc); const wxIconBundle& icons = GetIcons(); if (icons.GetIconCount()) SetIcons(icons); GdkCursor* cursor = g_globalCursor.GetCursor(); if (wxIsBusy() && !gtk_window_get_modal(GTK_WINDOW(m_widget))) cursor = g_busyCursor.GetCursor(); if (cursor) gdk_window_set_cursor(window, cursor); #ifdef __WXGTK3__ if (gtk_window_get_has_resize_grip(GTK_WINDOW(m_widget))) { // Grip window can end up obscured, probably due to deferred show. // Reset grip to ensure it is visible. gtk_window_set_has_resize_grip(GTK_WINDOW(m_widget), false); gtk_window_set_has_resize_grip(GTK_WINDOW(m_widget), true); } #endif }
DLL_LOCAL VALUE _isBusy(VALUE self) { app_protected(); return wrap(wxIsBusy()); }
void wxTopLevelWindowMac::MacFireMouseEvent( wxUint16 kind , wxInt32 x , wxInt32 y ,wxUint32 modifiers , long timestamp ) { wxMouseEvent event(wxEVT_LEFT_DOWN); bool isDown = !(modifiers & btnState) ; // 1 is for up bool controlDown = modifiers & controlKey ; // for simulating right mouse event.m_leftDown = isDown && !controlDown; event.m_middleDown = FALSE; event.m_rightDown = isDown && controlDown; if ( kind == mouseDown ) { if ( controlDown ) event.SetEventType(wxEVT_RIGHT_DOWN ) ; else event.SetEventType(wxEVT_LEFT_DOWN ) ; } else if ( kind == mouseUp ) { if ( controlDown ) event.SetEventType(wxEVT_RIGHT_UP ) ; else event.SetEventType(wxEVT_LEFT_UP ) ; } else { event.SetEventType(wxEVT_MOTION ) ; } event.m_shiftDown = modifiers & shiftKey; event.m_controlDown = modifiers & controlKey; event.m_altDown = modifiers & optionKey; event.m_metaDown = modifiers & cmdKey; Point localwhere ; localwhere.h = x ; localwhere.v = y ; GrafPtr port ; ::GetPort( &port ) ; ::SetPort( UMAGetWindowPort( (WindowRef)m_macWindow ) ) ; ::GlobalToLocal( &localwhere ) ; ::SetPort( port ) ; if ( kind == mouseDown ) { if ( timestamp - gs_lastWhen <= (long) GetDblTime() ) { if ( abs( localwhere.h - gs_lastWhere.h ) < 3 && abs( localwhere.v - gs_lastWhere.v ) < 3 ) { // This is not right if the second mouse down // event occurred in a different window. We // correct this in MacDispatchMouseEvent. if ( controlDown ) event.SetEventType(wxEVT_RIGHT_DCLICK ) ; else event.SetEventType(wxEVT_LEFT_DCLICK ) ; } gs_lastWhen = 0 ; } else { gs_lastWhen = timestamp ; } gs_lastWhere = localwhere ; } event.m_x = localwhere.h; event.m_y = localwhere.v; event.m_x += m_x; event.m_y += m_y; event.SetTimestamp(timestamp); event.SetEventObject(this); if ( wxTheApp->s_captureWindow ) { int x = event.m_x ; int y = event.m_y ; wxTheApp->s_captureWindow->ScreenToClient( &x , &y ) ; event.m_x = x ; event.m_y = y ; event.SetEventObject( wxTheApp->s_captureWindow ) ; wxTheApp->s_captureWindow->GetEventHandler()->ProcessEvent( event ) ; if ( kind == mouseUp ) { wxTheApp->s_captureWindow = NULL ; if ( !wxIsBusy() ) { m_cursor.MacInstall() ; } } } else { MacDispatchMouseEvent( event ) ; } }
WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { WXLRESULT rc = 0; bool processed = false; switch ( message ) { #ifdef __WXWINCE__ // react to pressing the OK button in the title case WM_COMMAND: { switch ( LOWORD(wParam) ) { #ifdef __POCKETPC__ case IDOK: processed = DoOK(); if (!processed) processed = !Close(); #endif #ifdef __SMARTPHONE__ case IDM_LEFT: case IDM_RIGHT: processed = HandleCommand( LOWORD(wParam) , 0 , NULL ); break; #endif // __SMARTPHONE__ } break; } #endif case WM_CLOSE: // if we can't close, tell the system that we processed the // message - otherwise it would close us processed = !Close(); break; case WM_SIZE: // the Windows dialogs unfortunately are not meant to be resizeable // at all and their standard class doesn't include CS_[VH]REDRAW // styles which means that the window is not refreshed properly // after the resize and no amount of WS_CLIPCHILDREN/SIBLINGS can // help with it - so we have to refresh it manually which certainly // creates flicker but at least doesn't show garbage on the screen rc = wxWindow::MSWWindowProc(message, wParam, lParam); processed = true; if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) ) { ::InvalidateRect(GetHwnd(), NULL, false /* erase bg */); } break; #ifndef __WXMICROWIN__ case WM_SETCURSOR: // we want to override the busy cursor for modal dialogs: // typically, wxBeginBusyCursor() is called and then a modal dialog // is shown, but the modal dialog shouldn't have hourglass cursor if ( IsModal() && wxIsBusy() ) { // set our cursor for all windows (but see below) wxCursor cursor = m_cursor; if ( !cursor.Ok() ) cursor = wxCURSOR_ARROW; ::SetCursor(GetHcursorOf(cursor)); // in any case, stop here and don't let wxWindow process this // message (it would set the busy cursor) processed = true; // but return false to tell the child window (if the event // comes from one of them and not from ourselves) that it can // set its own cursor if it has one: thus, standard controls // (e.g. text ctrl) still have correct cursors in a dialog // invoked while wxIsBusy() rc = false; } break; #endif // __WXMICROWIN__ } if ( !processed ) rc = wxWindow::MSWWindowProc(message, wParam, lParam); return rc; }
bool wxExVariable::ExpandInput(std::string& expanded) { if (m_AskForInput || m_Value.empty()) { if (m_Dialog == nullptr) { m_Dialog = new wxExSTCEntryDialog( wxTheApp->GetTopWindow(), m_Name, m_Value, _("Input") + ":"); m_Dialog->GetSTC()->GetVi().Use(false); } else { m_Dialog->SetTitle(m_Name); m_Dialog->GetSTC()->SetText(m_Value); } m_Dialog->GetSTC()->SetFocus(); bool ended = false; if (wxIsBusy()) { ended = true; wxEndBusyCursor(); } const int result = m_Dialog->ShowModal(); if (ended) { wxBeginBusyCursor(); } if (result == wxID_CANCEL) { return false; } const wxString value = m_Dialog->GetSTC()->GetText(); if (value.empty()) { return false; } expanded = value; if (m_Value != value) { m_Value = value; m_IsModified = true; } if (m_Type == VARIABLE_INPUT_ONCE) { m_AskForInput = false; } } else { expanded = m_Value; } return true; }