winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
March 2015
----- 2025 -----
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
775 discussions
Start a n
N
ew thread
Nikolay Sivov : comctl32/tooltips: Allow NULL hinst value when fetching text from resources.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 9d0ebc13ac7e0dad17ff104c38f8ebd7b9326aa6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9d0ebc13ac7e0dad17ff104c3…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Mar 24 00:10:06 2015 +0300 comctl32/tooltips: Allow NULL hinst value when fetching text from resources. --- dlls/comctl32/tests/tooltips.c | 26 ++++++++++++++++++++++++++ dlls/comctl32/tooltips.c | 6 +++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c index 271009d..a07a054 100644 --- a/dlls/comctl32/tests/tooltips.c +++ b/dlls/comctl32/tests/tooltips.c @@ -20,6 +20,8 @@ #include <windows.h> #include <commctrl.h> +#include "resources.h" + #include "wine/test.h" #define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got) @@ -326,6 +328,30 @@ static void test_gettext(void) SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); ok(toolinfoA.lpszText == NULL, "expected NULL, got %p\n", toolinfoA.lpszText); + + /* NULL hinst, valid resource id for text */ + toolinfoA.cbSize = sizeof(TTTOOLINFOA); + toolinfoA.hwnd = NULL; + toolinfoA.hinst = NULL; + toolinfoA.uFlags = 0; + toolinfoA.uId = 0x1233ABCD; + toolinfoA.lpszText = MAKEINTRESOURCEA(IDS_TBADD1); + toolinfoA.lParam = 0xdeadbeef; + GetClientRect(hwnd, &toolinfoA.rect); + r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); + ok(r, "failed to add a tool\n"); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1233ABCD; + toolinfoA.lpszText = bufA; + SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(strcmp(toolinfoA.lpszText, "abc") == 0, "lpszText should be an empty string\n"); + + toolinfoA.hinst = (HINSTANCE)0xdeadbee; + SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); + ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst); + + SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA); } else { diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c index 7564c3f..5423ca5 100644 --- a/dlls/comctl32/tooltips.c +++ b/dlls/comctl32/tooltips.c @@ -484,12 +484,12 @@ TOOLTIPS_GetTipText (const TOOLTIPS_INFO *infoPtr, INT nTool, WCHAR *buffer) { TTTOOL_INFO *toolPtr = &infoPtr->tools[nTool]; - if (IS_INTRESOURCE(toolPtr->lpszText) && toolPtr->hinst) { + if (IS_INTRESOURCE(toolPtr->lpszText)) { /* load a resource */ TRACE("load res string %p %x\n", toolPtr->hinst, LOWORD(toolPtr->lpszText)); - LoadStringW (toolPtr->hinst, LOWORD(toolPtr->lpszText), - buffer, INFOTIPSIZE); + if (!LoadStringW (toolPtr->hinst, LOWORD(toolPtr->lpszText), buffer, INFOTIPSIZE)) + buffer[0] = '\0'; } else if (toolPtr->lpszText) { if (toolPtr->lpszText == LPSTR_TEXTCALLBACKW) {
1
0
0
0
André Hentschel : include: Add more header guards.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 75fc891340daa7c9a06e8c41e545c13989410ce8 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=75fc891340daa7c9a06e8c41e…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Mon Mar 23 21:33:35 2015 +0100 include: Add more header guards. --- include/aviriff.h | 5 +++++ include/knownfolders.h | 5 +++++ include/rasdlg.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/include/aviriff.h b/include/aviriff.h index d2cfa41..9fea63a 100644 --- a/include/aviriff.h +++ b/include/aviriff.h @@ -17,6 +17,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef AVIRIFF_H +#define AVIRIFF_H + /* All definitions here are packed structures of on-disk formats */ #include <pshpack2.h> @@ -322,3 +325,5 @@ typedef struct _avifieldindex_chunk { } AVIFIELDINDEX, * PAVIFIELDINDEX; #include <poppack.h> + +#endif /* AVIRIFF_H */ diff --git a/include/knownfolders.h b/include/knownfolders.h index 2fa5664..28e867c 100644 --- a/include/knownfolders.h +++ b/include/knownfolders.h @@ -16,6 +16,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef __WINE_KNOWNFOLDERS_H +#define __WINE_KNOWNFOLDERS_H + #ifdef DEFINE_KNOWN_FOLDER #undef DEFINE_KNOWN_FOLDER #endif @@ -140,3 +143,5 @@ DEFINE_KNOWN_FOLDER(FOLDERID_UsersLibraries, 0xa302545d, 0xdeff, 0x464b, DEFINE_KNOWN_FOLDER(FOLDERID_Videos, 0x18989b1d, 0x99b5, 0x455b, 0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc); DEFINE_KNOWN_FOLDER(FOLDERID_VideosLibrary, 0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74); DEFINE_KNOWN_FOLDER(FOLDERID_Windows, 0xf38bf404, 0x1d43, 0x42f2, 0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23); + +#endif /* __WINE_KNOWNFOLDERS_H */ diff --git a/include/rasdlg.h b/include/rasdlg.h index 7f2a6d8..6d2aa85 100644 --- a/include/rasdlg.h +++ b/include/rasdlg.h @@ -16,6 +16,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef _RASDLG_H_ +#define _RASDLG_H_ + #include <ras.h> typedef struct tagRASENTRYDLGW @@ -30,3 +33,5 @@ typedef struct tagRASENTRYDLGW ULONG_PTR reserved; ULONG_PTR reserved2; } RASENTRYDLGW; + +#endif /* _RASDLG_H_ */
1
0
0
0
Vincent Povirk : gdiplus: Handle large input rect in GdipMeasureCharacterRanges.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 6b97abf930ac40dd9a668ec1fed588fcefd192fb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6b97abf930ac40dd9a668ec1f…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Mon Mar 23 15:12:06 2015 -0500 gdiplus: Handle large input rect in GdipMeasureCharacterRanges. --- dlls/gdiplus/graphics.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 34022cb..ae530a9 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -4739,6 +4739,9 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, scaled_rect.Width = layoutRect->Width * args.rel_width; scaled_rect.Height = layoutRect->Height * args.rel_height; + if (scaled_rect.Width >= 1 << 23) scaled_rect.Width = 1 << 23; + if (scaled_rect.Height >= 1 << 23) scaled_rect.Height = 1 << 23; + get_font_hfont(graphics, font, stringFormat, &gdifont, NULL); oldfont = SelectObject(hdc, gdifont);
1
0
0
0
Vincent Povirk : gdiplus: Apply page scale to pen thickness.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 6ee26aca16cdfdfa175108d28b49aca6aba7e1e0 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6ee26aca16cdfdfa175108d28…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Mon Mar 23 15:05:25 2015 -0500 gdiplus: Apply page scale to pen thickness. --- dlls/gdiplus/graphics.c | 1 + dlls/gdiplus/tests/graphics.c | 123 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 7485a3c..34022cb 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -251,6 +251,7 @@ static INT prepare_dc(GpGraphics *graphics, GpPen *pen) (pt[1].Y - pt[0].Y) * (pt[1].Y - pt[0].Y)) / sqrt(2.0); width *= units_to_pixels(pen->width, pen->unit == UnitWorld ? graphics->unit : pen->unit, graphics->xres); + width *= graphics->scale; } if(pen->dash == DashStyleCustom){ diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index f237090..3ee3363 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -3813,6 +3813,128 @@ static void test_transform(void) } } +static void test_pen_thickness(void) +{ + static const struct test_data + { + REAL res_x, res_y, scale; + GpUnit pen_unit, page_unit; + REAL pen_width; + INT cx, cy; + } td[] = + { + { 10.0, 10.0, 1.0, UnitPixel, UnitPixel, 1.0, 1, 1 }, + { 10.0, 10.0, 3.0, UnitPixel, UnitPixel, 2.0, 2, 2 }, + { 10.0, 10.0, 30.0, UnitPixel, UnitInch, 1.0, 1, 1 }, + { 10.0, 10.0, 1.0, UnitWorld, UnitPixel, 1.0, 1, 1 }, + { 10.0, 10.0, 3.0, UnitWorld, UnitPixel, 2.0, 6, 6 }, + { 10.0, 10.0, 2.0, UnitWorld, UnitInch, 1.0, 20, 20 }, + }; + GpStatus status; + int i, j; + GpGraphics *graphics; + union + { + GpBitmap *bitmap; + GpImage *image; + } u; + GpPen *pen; + GpPointF corner; + BitmapData bd; + INT min, max, size; + + for (i = 0; i < sizeof(td)/sizeof(td[0]); i++) + { + status = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat24bppRGB, NULL, &u.bitmap); + expect(Ok, status); + + status = GdipBitmapSetResolution(u.bitmap, td[i].res_x, td[i].res_y); + expect(Ok, status); + + status = GdipGetImageGraphicsContext(u.image, &graphics); + expect(Ok, status); + + status = GdipSetPageUnit(graphics, td[i].page_unit); + expect(Ok, status); + + status = GdipSetPageScale(graphics, td[i].scale); + expect(Ok, status); + + status = GdipCreatePen1(0xffffffff, td[i].pen_width, td[i].pen_unit, &pen); + expect(Ok, status); + + corner.X = corner.Y = 100.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, &corner, 1); + expect(Ok, status); + + status = GdipDrawLine(graphics, pen, corner.X/2, 0, corner.X/2, corner.Y); + expect(Ok, status); + + status = GdipDrawLine(graphics, pen, 0, corner.Y/2, corner.X, corner.Y/2); + expect(Ok, status); + + status = GdipBitmapLockBits(u.bitmap, NULL, ImageLockModeRead, PixelFormat24bppRGB, &bd); + expect(Ok, status); + + min = -1; + max = -2; + + for (j=0; j<100; j++) + { + if (((BYTE*)bd.Scan0)[j*3] == 0xff) + { + min = j; + break; + } + } + + for (j=99; j>=0; j--) + { + if (((BYTE*)bd.Scan0)[j*3] == 0xff) + { + max = j; + break; + } + } + + size = max-min+1; + + ok(size == td[i].cx, "%u: expected %d, got %d\n", i, td[i].cx, size); + + min = -1; + max = -2; + + for (j=0; j<100; j++) + { + if (((BYTE*)bd.Scan0)[bd.Stride*j] == 0xff) + { + min = j; + break; + } + } + + for (j=99; j>=0; j--) + { + if (((BYTE*)bd.Scan0)[bd.Stride*j] == 0xff) + { + max = j; + break; + } + } + + size = max-min+1; + + ok(size == td[i].cy, "%u: expected %d, got %d\n", i, td[i].cy, size); + + status = GdipBitmapUnlockBits(u.bitmap, &bd); + expect(Ok, status); + + GdipDeletePen(pen); + GdipDeleteGraphics(graphics); + GdipDisposeImage(u.image); + } +} + /* Many people on the net ask why there is so much difference in rendered * text height between gdiplus and gdi32, this test suggests an answer to * that question. Important: this test assumes that font dpi == device dpi. @@ -5728,6 +5850,7 @@ START_TEST(graphics) test_measure_string(); test_font_height_scaling(); test_transform(); + test_pen_thickness(); test_GdipMeasureString(); test_constructor_destructor(); test_save_restore();
1
0
0
0
Ken Thomases : winemac: Restore a maximized window if a user tries to move it by dragging its title bar.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 792b47ad3b89d51f17ef311ccaa62fc2016af793 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=792b47ad3b89d51f17ef311cc…
Author: Ken Thomases <ken(a)codeweavers.com> Date: Mon Mar 23 18:58:11 2015 -0500 winemac: Restore a maximized window if a user tries to move it by dragging its title bar. OS X doesn't have the same concept of maximized windows as Windows does. There's no mode that prevents a normally-movable window from being moved. If a window is "zoomed", it mostly fills the screen but the user can still move or resize it, at which point it ceases to be in the zoomed state. So, users are confused and frustrated when they can't move a window that's maximized. To get similar behavior while still respecting Win32 semantics, we detect when the user tries to move a maximized window. When they start, a request is submitted to the app to restore the window. Unless and until the window is restored, we don't actually allow the window to move. The user expects to move the window from its current (maximized) position. It should not jump to its normal position upon being restored. So, we set the window's normal position to its current position before restoring it. --- dlls/winemac.drv/cocoa_app.h | 2 + dlls/winemac.drv/cocoa_app.m | 9 +++ dlls/winemac.drv/cocoa_window.h | 4 ++ dlls/winemac.drv/cocoa_window.m | 129 +++++++++++++++++++++++++++++++++++++--- 4 files changed, 135 insertions(+), 9 deletions(-) diff --git a/dlls/winemac.drv/cocoa_app.h b/dlls/winemac.drv/cocoa_app.h index fc6c1ec..6ca3fcb 100644 --- a/dlls/winemac.drv/cocoa_app.h +++ b/dlls/winemac.drv/cocoa_app.h @@ -119,6 +119,8 @@ enum { - (void) keyboardSelectionDidChange; - (void) noteKey:(uint16_t)keyCode pressed:(BOOL)pressed; + - (void) window:(WineWindow*)window isBeingDragged:(BOOL)dragged; + - (void) flipRect:(NSRect*)rect; - (WineWindow*) frontWineWindow; diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 5afb7f8..82925c8 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -1436,6 +1436,15 @@ int macdrv_err_on; pressedKeyCodes[index] &= ~mask; } + - (void) window:(WineWindow*)window isBeingDragged:(BOOL)dragged + { + if (dragged) + [windowsBeingDragged addObject:window]; + else + [windowsBeingDragged removeObject:window]; + [self updateCursorClippingState]; + } + - (void) handleMouseMove:(NSEvent*)anEvent { WineWindow* targetWindow; diff --git a/dlls/winemac.drv/cocoa_window.h b/dlls/winemac.drv/cocoa_window.h index 574ff75..f5ff3b7 100644 --- a/dlls/winemac.drv/cocoa_window.h +++ b/dlls/winemac.drv/cocoa_window.h @@ -69,6 +69,10 @@ NSRect nonFullscreenFrame; NSTimeInterval enteredFullScreenTime; + int draggingPhase; + NSPoint dragStartPosition; + NSPoint dragWindowStartPosition; + BOOL ignore_windowDeminiaturize; BOOL ignore_windowResize; BOOL fakingClose; diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 1bb99a9..f68a1c5 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -653,6 +653,16 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif return ([self styleMask] & NSResizableWindowMask) && (disabled || !resizable || preventForClipping); } + - (BOOL) allowsMovingWithMaximized:(BOOL)inMaximized + { + if (allow_immovable_windows && (disabled || inMaximized)) + return NO; + else if (cursor_clipping_locks_windows && [[WineApplicationController sharedController] clippingCursor]) + return NO; + else + return YES; + } + - (void) adjustFeaturesForState { NSUInteger style = [self styleMask]; @@ -682,14 +692,7 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif } if (allow_immovable_windows || cursor_clipping_locks_windows) - { - if (allow_immovable_windows && (disabled || maximized)) - [self setMovable:NO]; - else if (cursor_clipping_locks_windows && [[WineApplicationController sharedController] clippingCursor]) - [self setMovable:NO]; - else - [self setMovable:YES]; - } + [self setMovable:[self allowsMovingWithMaximized:maximized]]; } - (void) adjustFullScreenBehavior:(NSWindowCollectionBehavior)behavior @@ -1543,6 +1546,22 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif [self adjustFeaturesForState]; } + - (void) endWindowDragging + { + if (draggingPhase) + { + if (draggingPhase == 3) + { + macdrv_event* event = macdrv_create_event(WINDOW_DRAG_END, self); + [queue postEvent:event]; + macdrv_release_event(event); + } + + draggingPhase = 0; + [[WineApplicationController sharedController] window:self isBeingDragged:NO]; + } + } + /* * ---------- NSWindow method overrides ---------- @@ -1603,14 +1622,104 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif - (void) sendEvent:(NSEvent*)event { + NSEventType type = event.type; + /* NSWindow consumes certain key-down events as part of Cocoa's keyboard interface control. For example, Control-Tab switches focus among views. We want to bypass that feature, so directly route key-down events to -keyDown:. */ - if ([event type] == NSKeyDown) + if (type == NSKeyDown) [[self firstResponder] keyDown:event]; else + { + if (!draggingPhase && maximized && ![self isMovable] && + ![self allowsMovingWithMaximized:YES] && [self allowsMovingWithMaximized:NO] && + type == NSLeftMouseDown && (self.styleMask & NSTitledWindowMask)) + { + NSRect titleBar = self.frame; + NSRect contentRect = [self contentRectForFrameRect:titleBar]; + titleBar.size.height = NSMaxY(titleBar) - NSMaxY(contentRect); + titleBar.origin.y = NSMaxY(contentRect); + + dragStartPosition = [self convertBaseToScreen:event.locationInWindow]; + + if (NSMouseInRect(dragStartPosition, titleBar, NO)) + { + static const NSWindowButton buttons[] = { + NSWindowCloseButton, + NSWindowMiniaturizeButton, + NSWindowZoomButton, + NSWindowFullScreenButton, + }; + BOOL hitButton = NO; + int i; + + for (i = 0; i < sizeof(buttons) / sizeof(buttons[0]); i++) + { + NSButton* button; + + if (buttons[i] == NSWindowFullScreenButton && ![self respondsToSelector:@selector(toggleFullScreen:)]) + continue; + + button = [self standardWindowButton:buttons[i]]; + if ([button hitTest:[button.superview convertPoint:event.locationInWindow fromView:nil]]) + { + hitButton = YES; + break; + } + } + + if (!hitButton) + { + draggingPhase = 1; + dragWindowStartPosition = NSMakePoint(NSMinX(titleBar), NSMaxY(titleBar)); + [[WineApplicationController sharedController] window:self isBeingDragged:YES]; + } + } + } + else if (draggingPhase && (type == NSLeftMouseDragged || type == NSLeftMouseUp)) + { + if ([self isMovable]) + { + NSPoint point = [self convertBaseToScreen:event.locationInWindow]; + NSPoint newTopLeft = dragWindowStartPosition; + + newTopLeft.x += point.x - dragStartPosition.x; + newTopLeft.y += point.y - dragStartPosition.y; + + if (draggingPhase == 2) + { + macdrv_event* event = macdrv_create_event(WINDOW_DRAG_BEGIN, self); + [queue postEvent:event]; + macdrv_release_event(event); + + draggingPhase = 3; + } + + [self setFrameTopLeftPoint:newTopLeft]; + } + else if (draggingPhase == 1 && type == NSLeftMouseDragged) + { + macdrv_event* event; + NSRect frame = [self contentRectForFrameRect:self.frame]; + + [[WineApplicationController sharedController] flipRect:&frame]; + + event = macdrv_create_event(WINDOW_RESTORE_REQUESTED, self); + event->window_restore_requested.keep_frame = TRUE; + event->window_restore_requested.frame = NSRectToCGRect(frame); + [queue postEvent:event]; + macdrv_release_event(event); + + draggingPhase = 2; + } + + if (type == NSLeftMouseUp) + [self endWindowDragging]; + } + [super sendEvent:event]; + } } - (void) miniaturize:(id)sender @@ -2011,6 +2120,8 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif - (void) windowWillStartLiveResize:(NSNotification *)notification { + [self endWindowDragging]; + if (maximized) { macdrv_event* event;
1
0
0
0
Ken Thomases : winemac: Allow the user to attempt to resize a maximized window and try to restore it if they do.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 8d581d0e489c6bf7d54674adc0ea695e8adc978f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8d581d0e489c6bf7d54674adc…
Author: Ken Thomases <ken(a)codeweavers.com> Date: Mon Mar 23 18:58:06 2015 -0500 winemac: Allow the user to attempt to resize a maximized window and try to restore it if they do. OS X doesn't have the same concept of maximized windows as Windows does. There's no mode that prevents a normally-resizable window from being resized. If a window is "zoomed", it mostly fills the screen but the user can still move or resize it, at which point it ceases to be in the zoomed state. So, users are confused and frustrated when they can't resize a window that's maximized. To get similar behavior while still respecting Win32 semantics, we now let the user try to resize maximized windows. (The resize cursors are shown at the edges of the window frame.) When they start, a request is submitted to the app to restore the window. Unless and until the window is restored, we don't actually allow the window to change its size. The user expects to resize the window from its current (maximized) position. It should not jump to its normal position upon being restored. So, we set the window's normal position to its current position before restoring it. --- dlls/winemac.drv/cocoa_window.m | 46 +++++++++++++++++++++++++++++++++-------- dlls/winemac.drv/event.c | 2 +- dlls/winemac.drv/macdrv.h | 2 +- dlls/winemac.drv/macdrv_cocoa.h | 4 ++++ dlls/winemac.drv/window.c | 22 +++++++++++++++++++- 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 7f71fea..1bb99a9 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -650,7 +650,7 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif - (BOOL) preventResizing { BOOL preventForClipping = cursor_clipping_locks_windows && [[WineApplicationController sharedController] clippingCursor]; - return ([self styleMask] & NSResizableWindowMask) && (disabled || !resizable || maximized || preventForClipping); + return ([self styleMask] & NSResizableWindowMask) && (disabled || !resizable || preventForClipping); } - (void) adjustFeaturesForState @@ -814,6 +814,16 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif macdrv_release_event(event); } + - (void) sendResizeStartQuery + { + macdrv_query* query = macdrv_create_query(); + query->type = QUERY_RESIZE_START; + query->window = (macdrv_window)[self retain]; + + [self.queue query:query timeout:0.3]; + macdrv_release_query(query); + } + - (void) setMacDrvState:(const struct macdrv_window_state*)state { NSWindowCollectionBehavior behavior; @@ -892,6 +902,9 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif { maximized = state->maximized; [self adjustFeaturesForState]; + + if (!maximized && [self inLiveResize]) + [self sendResizeStartQuery]; } behavior = NSWindowCollectionBehaviorDefault; @@ -1797,9 +1810,12 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif - (void) windowDidEndLiveResize:(NSNotification *)notification { - macdrv_event* event = macdrv_create_event(WINDOW_RESIZE_ENDED, self); - [queue postEvent:event]; - macdrv_release_event(event); + if (!maximized) + { + macdrv_event* event = macdrv_create_event(WINDOW_RESIZE_ENDED, self); + [queue postEvent:event]; + macdrv_release_event(event); + } self.liveResizeDisplayTimer = nil; } @@ -1958,6 +1974,9 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif { if ([self inLiveResize]) { + if (maximized) + return self.frame.size; + NSRect rect; macdrv_query* query; @@ -1992,12 +2011,21 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif - (void) windowWillStartLiveResize:(NSNotification *)notification { - macdrv_query* query = macdrv_create_query(); - query->type = QUERY_RESIZE_START; - query->window = (macdrv_window)[self retain]; + if (maximized) + { + macdrv_event* event; + NSRect frame = [self contentRectForFrameRect:self.frame]; - [self.queue query:query timeout:0.3]; - macdrv_release_query(query); + [[WineApplicationController sharedController] flipRect:&frame]; + + event = macdrv_create_event(WINDOW_RESTORE_REQUESTED, self); + event->window_restore_requested.keep_frame = TRUE; + event->window_restore_requested.frame = NSRectToCGRect(frame); + [queue postEvent:event]; + macdrv_release_event(event); + } + else + [self sendResizeStartQuery]; frameAtResizeStart = [self frame]; resizingFromLeft = resizingFromTop = FALSE; diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 8e03080..58b507c 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -280,7 +280,7 @@ void macdrv_handle_event(const macdrv_event *event) macdrv_window_resize_ended(hwnd); break; case WINDOW_RESTORE_REQUESTED: - macdrv_window_restore_requested(hwnd); + macdrv_window_restore_requested(hwnd, event); break; default: TRACE(" ignoring\n"); diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index cf0fc64..a874dfb 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -172,7 +172,7 @@ extern void macdrv_window_minimize_requested(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_did_unminimize(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_brought_forward(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_resize_ended(HWND hwnd) DECLSPEC_HIDDEN; -extern void macdrv_window_restore_requested(HWND hwnd) DECLSPEC_HIDDEN; +extern void macdrv_window_restore_requested(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN; extern void macdrv_window_drag_begin(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_drag_end(HWND hwnd) DECLSPEC_HIDDEN; extern BOOL query_resize_size(HWND hwnd, macdrv_query *query) DECLSPEC_HIDDEN; diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index 30b6b64..4b68adc 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -291,6 +291,10 @@ typedef struct macdrv_event { unsigned long serial; void *tried_windows; } window_got_focus; + struct { + int keep_frame; + CGRect frame; + } window_restore_requested; }; } macdrv_event; diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index 54bd56e..7a777e6 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -2139,8 +2139,28 @@ void macdrv_window_resize_ended(HWND hwnd) * Handler for WINDOW_RESTORE_REQUESTED events. This is specifically * for restoring from maximized, not from minimized. */ -void macdrv_window_restore_requested(HWND hwnd) +void macdrv_window_restore_requested(HWND hwnd, const macdrv_event *event) { + if (event->window_restore_requested.keep_frame && hwnd) + { + DWORD style = GetWindowLongW(hwnd, GWL_STYLE); + struct macdrv_win_data *data; + + if ((style & WS_MAXIMIZE) && (style & WS_VISIBLE) && (data = get_win_data(hwnd))) + { + RECT rect; + HWND parent = GetAncestor(hwnd, GA_PARENT); + + rect = rect_from_cgrect(event->window_restore_requested.frame); + macdrv_mac_to_window_rect(data, &rect); + MapWindowPoints(0, parent, (POINT *)&rect, 2); + + release_win_data(data); + + SetInternalWindowPos(hwnd, SW_SHOW, &rect, NULL); + } + } + perform_window_command(hwnd, WS_MAXIMIZE, 0, SC_RESTORE, HTMAXBUTTON); }
1
0
0
0
Jacek Caban : dxgi1_2.idl: Added IDXGIFactory2 declaration.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 0a923299144e84ef8b1acdd81949ef99ad43f581 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0a923299144e84ef8b1acdd81…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Mar 23 18:57:48 2015 +0100 dxgi1_2.idl: Added IDXGIFactory2 declaration. Modified version of patch by Erik van Pienbroek. --- include/dxgi1_2.idl | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/include/dxgi1_2.idl b/include/dxgi1_2.idl index bba4ab8..775b81c 100644 --- a/include/dxgi1_2.idl +++ b/include/dxgi1_2.idl @@ -130,3 +130,63 @@ interface IDXGISwapChain1 : IDXGISwapChain HRESULT GetRotation( [out] DXGI_MODE_ROTATION *pRotation); } + +[ + object, + uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0), + local, + pointer_default(unique) +] +interface IDXGIFactory2 : IDXGIFactory1 +{ + BOOL IsWindowedStereoEnabled(); + + HRESULT CreateSwapChainForHwnd( + [in] IUnknown *pDevice, + [in] HWND hWnd, + [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, + [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, + [in] IDXGIOutput *pRestrictToOutput, + [out] IDXGISwapChain1 **ppSwapChain); + + HRESULT CreateSwapChainForCoreWindow( + [in] IUnknown *pDevice, + [in] IUnknown *pWindow, + [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, + [in] IDXGIOutput *pRestrictToOutput, + [out] IDXGISwapChain1 **ppSwapChain); + + HRESULT GetSharedResourceAdapterLuid( + [in] HANDLE hResource, + [out] LUID *pLuid); + + HRESULT RegisterOcclusionStatusWindow( + [in] HWND WindowHandle, + [in] UINT wMsg, + [out] DWORD *pdwCookie); + + HRESULT RegisterStereoStatusEvent( + [in] HANDLE hEvent, + [out] DWORD *pdwCookie); + + void UnregisterStereoStatus( + [in] DWORD dwCookie); + + HRESULT RegisterStereoStatusWindow( + [in] HWND WindowHandle, + [in] UINT wMsg, + [out] DWORD *pdwCookie); + + HRESULT RegisterOcclusionStatusEvent( + [in] HANDLE hEvent, + [out] DWORD *pdwCookie); + + void UnregisterOcclusionStatus( + [in] DWORD dwCookie); + + HRESULT CreateSwapChainForComposition( + [in] IUnknown *pDevice, + [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, + [in] IDXGIOutput *pRestrictToOutput, + [out] IDXGISwapChain1 **ppSwapChain); +}
1
0
0
0
Jacek Caban : d3d11_1.idl: Added some missing declarations.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: 824bbb388466b4e01150783e2d9ca9fb826f59bd URL:
http://source.winehq.org/git/wine.git/?a=commit;h=824bbb388466b4e01150783e2…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Mar 23 18:57:23 2015 +0100 d3d11_1.idl: Added some missing declarations. Modified version of patch by Erik van Pienbroek. --- include/d3d11_1.idl | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/include/d3d11_1.idl b/include/d3d11_1.idl index 928548f..1ebfc5a 100644 --- a/include/d3d11_1.idl +++ b/include/d3d11_1.idl @@ -22,6 +22,69 @@ import "dxgi1_2.idl"; import "d3dcommon.idl"; import "d3d11.idl"; +typedef enum D3D11_LOGIC_OP { + D3D11_LOGIC_OP_CLEAR = 0, + D3D11_LOGIC_OP_SET, + D3D11_LOGIC_OP_COPY, + D3D11_LOGIC_OP_COPY_INVERTED, + D3D11_LOGIC_OP_NOOP, + D3D11_LOGIC_OP_INVERT, + D3D11_LOGIC_OP_AND, + D3D11_LOGIC_OP_NAND, + D3D11_LOGIC_OP_OR, + D3D11_LOGIC_OP_NOR, + D3D11_LOGIC_OP_XOR, + D3D11_LOGIC_OP_EQUIV, + D3D11_LOGIC_OP_AND_REVERSE, + D3D11_LOGIC_OP_AND_INVERTED, + D3D11_LOGIC_OP_OR_REVERSE, + D3D11_LOGIC_OP_OR_INVERTED +} D3D11_LOGIC_OP; + +typedef struct _D3D11_RENDER_TARGET_BLEND_DESC1 { + BOOL BlendEnable; + BOOL LogicOpEnable; + D3D11_BLEND SrcBlend; + D3D11_BLEND DestBlend; + D3D11_BLEND_OP BlendOp; + D3D11_BLEND SrcBlendAlpha; + D3D11_BLEND DestBlendAlpha; + D3D11_BLEND_OP BlendOpAlpha; + D3D11_LOGIC_OP LogicOp; + UINT8 RenderTargetWriteMask; +} D3D11_RENDER_TARGET_BLEND_DESC1; + +typedef struct _D3D11_BLEND_DESC1 { + BOOL AlphaToCoverageEnable; + BOOL IndependentBlendEnable; + D3D11_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT]; +} D3D11_BLEND_DESC1; + +typedef struct _D3D11_RASTERIZER_DESC1 { + D3D11_FILL_MODE FillMode; + D3D11_CULL_MODE CullMode; + BOOL FrontCounterClockwise; + INT DepthBias; + FLOAT DepthBiasClamp; + FLOAT SlopeScaledDepthBias; + BOOL DepthClipEnable; + BOOL ScissorEnable; + BOOL MultisampleEnable; + BOOL AntialiasedLineEnable; + UINT ForcedSampleCount; +} D3D11_RASTERIZER_DESC1; + +[ + uuid(cc86fabe-da55-401d-85e7-e3c9de2877e9), + object, + local, + pointer_default(unique) +] +interface ID3D11BlendState1 : ID3D11BlendState +{ + void GetDesc1(D3D11_BLEND_DESC1 *pDesc); +} + [ uuid(5c1e0d8a-7c23-48f9-8c59-a92958ceff11), object, @@ -177,3 +240,58 @@ interface ID3DUserDefinedAnnotation : IUnknown void SetMarker(LPCWSTR Name); BOOL GetStatus(); } + +[ + uuid(1217d7a6-5039-418c-b042-9cbe256afd6e), + object, + local, + pointer_default(unique) +] +interface ID3D11RasterizerState1 : ID3D11RasterizerState +{ + void GetDesc1(D3D11_RASTERIZER_DESC1 *pDesc); +} + +[ + uuid(a04bfb29-08ef-43d6-a49c-a9bdbdcbe686), + object, + local, + pointer_default(unique) +] +interface ID3D11Device1 : ID3D11Device +{ + void GetImmediateContext1( + ID3D11DeviceContext1 **ppImmediateContext); + + HRESULT CreateDeferredContext1( + UINT ContextFlags, + ID3D11DeviceContext1 **ppDeferredContext); + + HRESULT CreateBlendState1( + const D3D11_BLEND_DESC1 *pBlendStateDesc, + ID3D11BlendState1 **ppBlendState); + + HRESULT CreateRasterizerState1( + const D3D11_RASTERIZER_DESC1 *pRasterizerDesc, + ID3D11RasterizerState1 **ppRasterizerState); + + HRESULT CreateDeviceContextState( + UINT Flags, + const D3D_FEATURE_LEVEL *pFeatureLevels, + UINT FeatureLevels, + UINT SDKVersion, + REFIID EmulatedInterface, + D3D_FEATURE_LEVEL *pChosenFeatureLevel, + ID3DDeviceContextState **ppContextState); + + HRESULT OpenSharedResource1( + HANDLE hResource, + REFIID returnedInterface, + void **ppResource); + + HRESULT OpenSharedResourceByName( + LPCWSTR lpName, + DWORD dwDesiredAccess, + REFIID returnedInterface, + void **ppResource); +}
1
0
0
0
Jacek Caban : dxgi.idl: Added DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL declaration.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: df904b60f4deb0ceeb1b9f60f7ccdbe8157dcfa7 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=df904b60f4deb0ceeb1b9f60f…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Mar 23 18:57:30 2015 +0100 dxgi.idl: Added DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL declaration. --- include/dxgi.idl | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dxgi.idl b/include/dxgi.idl index bc9538e..009a6b5 100644 --- a/include/dxgi.idl +++ b/include/dxgi.idl @@ -67,6 +67,7 @@ const UINT DXGI_ENUM_MODES_SCALING = 2; typedef enum DXGI_SWAP_EFFECT { DXGI_SWAP_EFFECT_DISCARD = 0, DXGI_SWAP_EFFECT_SEQUENTIAL = 1, + DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3 } DXGI_SWAP_EFFECT; typedef enum DXGI_RESIDENCY {
1
0
0
0
Ken Thomases : winmm: For Mac, fix joyGetPosEx() to put number of buttons pressed in dwButtonNumber field.
by Alexandre Julliard
24 Mar '15
24 Mar '15
Module: wine Branch: master Commit: edad520235881be74090dfdcca9e8a3d1823c770 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=edad520235881be74090dfdcc…
Author: Ken Thomases <ken(a)codeweavers.com> Date: Mon Mar 23 16:40:51 2015 -0500 winmm: For Mac, fix joyGetPosEx() to put number of buttons pressed in dwButtonNumber field. Based on behavior of Windows revealed by interactive tests added by Bruno Jesus. --- dlls/winejoystick.drv/joystick_osx.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dlls/winejoystick.drv/joystick_osx.c b/dlls/winejoystick.drv/joystick_osx.c index cb66c47..da45450 100644 --- a/dlls/winejoystick.drv/joystick_osx.c +++ b/dlls/winejoystick.drv/joystick_osx.c @@ -678,8 +678,7 @@ LRESULT driver_joyGetPosEx(DWORD_PTR device_id, JOYINFOEX* info) if (value) { info->dwButtons |= 1 << i; - if (!info->dwButtonNumber) - info->dwButtonNumber = i + 1; + info->dwButtonNumber++; } } }
1
0
0
0
← Newer
1
...
19
20
21
22
23
24
25
...
78
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Results per page:
10
25
50
100
200