Requires pkgconfig.
[fedora-mingw.git] / gtk-vnc / gtk-vnc-03-wsastartup.patch
1 diff -r 47135c91cd9c src/vncdisplay.c
2 --- a/src/vncdisplay.c  Thu Oct 09 11:23:09 2008 -0400
3 +++ b/src/vncdisplay.c  Wed Oct 29 14:52:36 2008 +0000
4 @@ -29,6 +29,13 @@
5  #ifdef HAVE_PWD_H
6  #include <pwd.h>
7  #endif
8 +
9 +#ifdef HAVE_WINSOCK2_H
10 +#include <winsock2.h>
11 +#endif
12 +
13 +static void winsock_startup (void);
14 +static void winsock_cleanup (void);
15  
16  #define VNC_DISPLAY_GET_PRIVATE(obj) \
17        (G_TYPE_INSTANCE_GET_PRIVATE((obj), VNC_TYPE_DISPLAY, VncDisplayPrivate))
18 @@ -243,6 +250,7 @@
19  
20  GtkWidget *vnc_display_new(void)
21  {
22 +       winsock_startup ();
23         return GTK_WIDGET(g_object_new(VNC_TYPE_DISPLAY, NULL));
24  }
25  
26 @@ -1255,6 +1263,9 @@
27         }
28  
29         g_object_unref(G_OBJECT(data));
30 +
31 +       winsock_cleanup ();
32 +
33         return FALSE;
34  }
35  
36 @@ -2188,6 +2199,49 @@
37    return group;
38  }
39  
40 +#ifdef WIN32
41 +
42 +/* On Windows, we must call WSAStartup before using any sockets and we
43 + * must call WSACleanup afterwards.  And we have to balance any calls
44 + * to WSAStartup with a corresponding call to WSACleanup.
45 + *
46 + * Note that Wine lets you do socket calls anyway, but real Windows
47 + * doesn't. (http://bugs.winehq.org/show_bug.cgi?id=11965)
48 + */
49 +
50 +static void
51 +winsock_startup (void)
52 +{
53 +       WORD winsock_version, err;
54 +       WSADATA winsock_data;
55 +
56 +       /* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
57 +       winsock_version = MAKEWORD (2, 2);
58 +       err = WSAStartup (winsock_version, &winsock_data);
59 +       if (err != 0)
60 +               GVNC_DEBUG ("ignored error %d from WSAStartup", err);
61 +}
62 +
63 +static void
64 +winsock_cleanup (void)
65 +{
66 +       WSACleanup ();
67 +}
68 +
69 +#else /* !WIN32 */
70 +
71 +static void
72 +winsock_startup (void)
73 +{
74 +}
75 +
76 +static void
77 +winsock_cleanup (void)
78 +{
79 +}
80 +
81 +#endif /* !WIN32 */
82 +
83  /*
84   * Local variables:
85   *  c-indent-level: 8