]> Pileus Git - ~andy/gtk/commitdiff
win32: fix pasting screenshots taken with PrintScreen or Alt+PrintScreen
authorDieter Verfaillie <dieterv@optionexplicit.be>
Fri, 4 Nov 2011 08:44:35 +0000 (09:44 +0100)
committerAlexander Larsson <alexl@redhat.com>
Thu, 10 Nov 2011 16:41:12 +0000 (17:41 +0100)
These are found on the clipboard in the biCompression == BI_BITFIELDS &&
biBitCount >= 16 format. In this case the BITMAPINFOHEADER is followed
by three DWORD specifying the masks of the red green and blue components,
but bfOffBits was not being adjusted accordingly.

Based on Massimo's comment on bug 631384 and verified on
http://msdn.microsoft.com/en-us/library/dd183386%28v=VS.85%29.aspx

https://bugzilla.gnome.org/show_bug.cgi?id=631384

gdk/win32/gdkselection-win32.c

index f4e600b4fe288ceb5c5c6e736e898782bdd4710a..c734b0be46f45a19e7141db851cc8ca4234a4ffc 100644 (file)
@@ -721,6 +721,17 @@ _gdk_win32_display_convert_selection (GdkDisplay *display,
                                       bi->biSize +
                                       bi->biClrUsed * sizeof (RGBQUAD));
 
+                     if (bi->biCompression == BI_BITFIELDS && bi->biBitCount >= 16)
+                       {
+                          /* Screenshots taken with PrintScreen or
+                           * Alt + PrintScreen are found on the clipboard in
+                           * this format. In this case the BITMAPINFOHEADER is
+                           * followed by three DWORD specifying the masks of the
+                           * red green and blue components, so adjust the offset
+                           * accordingly. */
+                         bf->bfOffBits += (3 * sizeof (DWORD));
+                       }
+
                      memcpy ((char *) data + sizeof (BITMAPFILEHEADER),
                              bi,
                              data_length);