X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/670f9935630beb2123a5ca62894ae92a3f0efa4f..c91922129fbedcb65905d148b7e2393e56dbdf4a:/src/motif/window.cpp diff --git a/src/motif/window.cpp b/src/motif/window.cpp index 865e4272fb..a99a8bb706 100644 --- a/src/motif/window.cpp +++ b/src/motif/window.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/motif/windows.cpp +// Name: src/motif/window.cpp // Purpose: wxWindow // Author: Julian Smart // Modified by: @@ -30,19 +30,19 @@ #include "wx/hash.h" #include "wx/log.h" #include "wx/app.h" + #include "wx/utils.h" + #include "wx/frame.h" + #include "wx/dc.h" + #include "wx/dcclient.h" + #include "wx/button.h" + #include "wx/menu.h" + #include "wx/settings.h" + #include "wx/scrolwin.h" + #include "wx/layout.h" + #include "wx/menuitem.h" + #include "wx/module.h" #endif -#include "wx/menu.h" -#include "wx/dc.h" -#include "wx/dcclient.h" -#include "wx/utils.h" -#include "wx/layout.h" -#include "wx/button.h" -#include "wx/settings.h" -#include "wx/frame.h" -#include "wx/scrolwin.h" -#include "wx/module.h" -#include "wx/menuitem.h" #include "wx/evtloop.h" #if wxUSE_DRAG_AND_DROP @@ -65,7 +65,7 @@ // 2) call DoMoveWindow from DoSetSize, allowing controls to override it #ifdef __VMS__ -#pragma message disable nosimpint + #pragma message disable nosimpint #endif #include @@ -76,7 +76,7 @@ #include #include // for XmMenuPosition #ifdef __VMS__ -#pragma message enable nosimpint + #pragma message enable nosimpint #endif #include "wx/motif/private.h" @@ -636,7 +636,7 @@ void wxWindow::Lower() void wxWindow::SetLabel(const wxString& label) { - XtVaSetValues((Widget)GetMainWidget(), XmNtitle, label.c_str(), NULL); + XtVaSetValues((Widget)GetMainWidget(), XmNtitle, label.mb_str(), NULL); } wxString wxWindow::GetLabel() const @@ -1212,9 +1212,11 @@ void wxWindow::DoScreenToClient(int *x, int *y) const Window thisWindow = XtWindow(widget); Window childWindow; - int xx = *x; - int yy = *y; - XTranslateCoordinates(display, rootWindow, thisWindow, xx, yy, x, y, &childWindow); + int xx = x ? *x : 0; + int yy = y ? *y : 0; + XTranslateCoordinates(display, rootWindow, thisWindow, + xx, yy, x ? x : &xx, y ? y : &yy, + &childWindow); } void wxWindow::DoClientToScreen(int *x, int *y) const @@ -1225,9 +1227,11 @@ void wxWindow::DoClientToScreen(int *x, int *y) const Window thisWindow = XtWindow(widget); Window childWindow; - int xx = *x; - int yy = *y; - XTranslateCoordinates(display, thisWindow, rootWindow, xx, yy, x, y, &childWindow); + int xx = x ? *x : 0; + int yy = y ? *y : 0; + XTranslateCoordinates(display, thisWindow, rootWindow, + xx, yy, x ? x : &xx, y ? y : &yy, + &childWindow); } @@ -1259,10 +1263,10 @@ void wxWindow::DoSetSizeIntr(int x, int y, int width, int height, if ( !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) { - if ( x == -1 ) - x = oldX; - if ( y == -1 ) - y = oldY; + if ( width == -1 ) + width = oldW; + if ( height == -1 ) + height = oldH; } wxSize size(wxDefaultSize); @@ -1299,10 +1303,10 @@ void wxWindow::DoSetSizeIntr(int x, int y, int width, int height, { int flags = 0; - if (x > -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (x != oldX) flags |= wxMOVE_X; - if (y > -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (y != oldY) flags |= wxMOVE_Y; if (width > 0) @@ -1429,8 +1433,6 @@ void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h, } else { - if( xx < 0 ) xx = 0; - if( yy < 0 ) yy = 0; if( w < 1 ) w = 1; if( h < 1 ) h = 1; @@ -2086,6 +2088,8 @@ static void wxScrollBarCallback(Widget scrollbar, XmScrollBarCallbackStruct *cbs) { wxWindow *win = wxGetWindowFromTable(scrollbar); + wxCHECK_RET( win, _T("invalid widget in scrollbar callback") ); + wxOrientation orientation = (wxOrientation)wxPtrToUInt(clientData); wxEventType eventType = wxEVT_NULL; @@ -2526,21 +2530,51 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt) return wxFindWindowAtPoint(pt); } -// Get the current mouse position. -wxPoint wxGetMousePosition() +void wxGetMouseState(int& rootX, int& rootY, unsigned& maskReturn) { Display *display = wxGlobalDisplay(); Window rootWindow = RootWindowOfScreen (DefaultScreenOfDisplay(display)); Window rootReturn, childReturn; - int rootX, rootY, winX, winY; - unsigned int maskReturn; + int winX, winY; XQueryPointer (display, rootWindow, &rootReturn, &childReturn, &rootX, &rootY, &winX, &winY, &maskReturn); - return wxPoint(rootX, rootY); +} + +// Get the current mouse position. +wxPoint wxGetMousePosition() +{ + int x, y; + unsigned mask; + + wxGetMouseState(x, y, mask); + return wxPoint(x, y); +} + +wxMouseState wxGetMouseState() +{ + wxMouseState ms; + int x, y; + unsigned mask; + + wxGetMouseState(x, y, mask); + + ms.SetX(x); + ms.SetY(y); + + ms.SetLeftDown(mask & Button1Mask); + ms.SetMiddleDown(mask & Button2Mask); + ms.SetRightDown(mask & Button3Mask); + + ms.SetControlDown(mask & ControlMask); + ms.SetShiftDown(mask & ShiftMask); + ms.SetAltDown(mask & Mod3Mask); + ms.SetMetaDown(mask & Mod1Mask); + + return ms; }