|
1 | | -#include <stdlib.h> |
2 | | -#include <string.h> |
| 1 | +#define WIN32_LEAN_AND_MEAN |
3 | 2 | #include <windows.h> |
| 3 | +#include <shellapi.h> |
4 | 4 |
|
5 | | -#define sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0) |
| 5 | +#define sb_free(a) ((a) ? HeapFree(GetProcessHeap(), 0, stb__sbraw(a)),0 : 0) |
6 | 6 | #define sb_push(a,v) (stb__sbmaybegrow(a,1), (a)[stb__sbn(a)++] = (v)) |
7 | 7 | #define sb_count(a) ((a) ? stb__sbn(a) : 0) |
8 | 8 |
|
|
14 | 14 | #define stb__sbmaybegrow(a,n) (stb__sbneedgrow(a,(n)) ? stb__sbgrow(a,n) : 0) |
15 | 15 | #define stb__sbgrow(a,n) ((a) = stb__sbgrowf((a), (n), sizeof(*(a)))) |
16 | 16 |
|
| 17 | +#ifdef __MINGW32__ |
| 18 | +#ifdef RtlMoveMemory |
| 19 | +#undef RtlMoveMemory |
| 20 | +extern __stdcall void RtlMoveMemory(void *, void *, size_t); |
| 21 | +#endif |
| 22 | +#endif |
| 23 | + |
17 | 24 | #ifndef MOD_NOREPEAT |
18 | 25 | #define MOD_NOREPEAT 0x4000 |
19 | 26 | #endif |
@@ -45,7 +52,13 @@ static void *stb__sbgrowf(void *arr, int increment, int itemsize) |
45 | 52 | int dbl_cur = arr ? 2*stb__sbm(arr) : 0; |
46 | 53 | int min_needed = sb_count(arr) + increment; |
47 | 54 | int m = dbl_cur > min_needed ? dbl_cur : min_needed; |
48 | | - int *p = realloc(arr ? stb__sbraw(arr) : 0, itemsize * m + sizeof(int)*2); |
| 55 | + int *p; |
| 56 | + if(arr) { |
| 57 | + p = HeapReAlloc(GetProcessHeap(), 0, stb__sbraw(arr), |
| 58 | + itemsize*m + sizeof(int)*2); |
| 59 | + } else { |
| 60 | + p = HeapAlloc(GetProcessHeap(), 0, itemsize*m + sizeof(int)*2); |
| 61 | + } |
49 | 62 | if(p) { |
50 | 63 | if(!arr) { |
51 | 64 | p[1] = 0; |
@@ -86,14 +99,13 @@ static HICON trayicon_draw(Trayicon *t, char *text, int len) |
86 | 99 | static void trayicon_init(Trayicon *t) |
87 | 100 | { |
88 | 101 | t->dummyHWND = CreateWindowA( |
89 | | - "STATIC", "dummy", |
| 102 | + "STATIC", "virgo", |
90 | 103 | 0, 0, 0, 0, 0, |
91 | 104 | NULL, NULL, NULL, NULL |
92 | 105 | ); |
93 | 106 | t->hdc = GetDC(t->dummyHWND); |
94 | 107 | t->bitmapWidth = GetSystemMetrics(SM_CXSMICON); |
95 | 108 | t->hBitmap = CreateCompatibleBitmap(t->hdc, t->bitmapWidth, t->bitmapWidth); |
96 | | - memset(&t->nid, 0, sizeof(t->nid)); |
97 | 109 | t->nid.cbSize = sizeof(t->nid); |
98 | 110 | t->nid.hWnd = t->dummyHWND; |
99 | 111 | t->nid.uID = 100; |
@@ -159,7 +171,7 @@ static void windows_del(Windows *wins, HWND hwnd) |
159 | 171 | } |
160 | 172 | m = wins->count-i-1; |
161 | 173 | if(m > 0) { |
162 | | - memcpy( |
| 174 | + RtlMoveMemory( |
163 | 175 | &(wins->windows[i]), |
164 | 176 | &(wins->windows[i+1]), |
165 | 177 | sizeof(HWND)*m |
@@ -252,11 +264,8 @@ static void virgo_toggle_hotkeys(Virgo *v) |
252 | 264 | static void virgo_init(Virgo *v) |
253 | 265 | { |
254 | 266 | int i; |
255 | | - v->current = 0; |
256 | 267 | v->handle_hotkeys = 1; |
257 | 268 | for(i=0; i<NUM_DESKTOPS; i++) { |
258 | | - v->desktops[i].windows = NULL; |
259 | | - v->desktops[i].count = 0; |
260 | 269 | register_hotkey(i*2, MOD_ALT|MOD_NOREPEAT, i+1+0x30); |
261 | 270 | register_hotkey(i*2+1, MOD_CONTROL|MOD_NOREPEAT, i+1+0x30); |
262 | 271 | } |
@@ -306,7 +315,7 @@ static void virgo_go_to_desk(Virgo *v, int desk) |
306 | 315 | void __main(void) asm("__main"); |
307 | 316 | void __main(void) |
308 | 317 | { |
309 | | - Virgo v; |
| 318 | + Virgo v = {0}; |
310 | 319 | MSG msg; |
311 | 320 | virgo_init(&v); |
312 | 321 | while(GetMessage(&msg, NULL, 0, 0)) { |
|
0 commit comments