{"action":"created","comment":{"url":"https://api.github.com/repos/reactos/reactos/pulls/comments/238061718","pull_request_review_id":180521542,"id":238061718,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzODA2MTcxOA==","diff_hunk":"@@ -0,0 +1,582 @@\n+/*\n+ * PROJECT:     ReactOS user32.dll\n+ * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)\n+ * PURPOSE:     Ghost window class\n+ * COPYRIGHT:   Copyright 2018 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)\n+ */\n+\n+#include <user32.h>\n+#include <strsafe.h>\n+\n+WINE_DEFAULT_DEBUG_CHANNEL(ghost);\n+\n+#define GHOST_TIMER_ID  0xFACEDEAD\n+#define GHOST_INTERVAL  1000        // one second\n+\n+extern HINSTANCE User32Instance;\n+\n+const struct builtin_class_descr GHOST_builtin_class =\n+{\n+    L\"Ghost\",                   /* name */\n+    0,                          /* style  */\n+    GhostWndProcA,              /* procA */\n+    GhostWndProcW,              /* procW */\n+    0,                          /* extra */\n+    IDC_WAIT,                   /* cursor */\n+    (HBRUSH)(COLOR_3DFACE + 1)  /* brush */\n+};\n+\n+static HBITMAP\n+IntCreate32BppBitmap(INT cx, INT cy)\n+{\n+    HBITMAP hbm = NULL;\n+    BITMAPINFO bi;\n+    HDC hdc;\n+    LPVOID pvBits;\n+\n+    ZeroMemory(&bi, sizeof(bi));\n+    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n+    bi.bmiHeader.biWidth = cx;\n+    bi.bmiHeader.biHeight = cy;\n+    bi.bmiHeader.biPlanes = 1;\n+    bi.bmiHeader.biBitCount = 32;\n+\n+    hdc = CreateCompatibleDC(NULL);\n+    if (hdc)\n+    {\n+        hbm = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, &pvBits, NULL, 0);\n+        DeleteDC(hdc);\n+    }\n+    return hbm;\n+}\n+\n+static HBITMAP\n+IntGetWindowBitmap(HWND hwnd, INT cx, INT cy)\n+{\n+    HBITMAP hbm = NULL;\n+    HDC hdc, hdcMem;\n+    HGDIOBJ hbmOld;\n+\n+    hdc = GetWindowDC(hwnd);\n+    if (hdc)\n+    {\n+        hbm = IntCreate32BppBitmap(cx, cy);\n+        if (hbm)\n+        {\n+            hdcMem = CreateCompatibleDC(hdc);\n+            if (hdcMem)\n+            {\n+                hbmOld = SelectObject(hdcMem, hbm);\n+                {\n+                    BitBlt(hdcMem, 0, 0, cx, cy, hdc, 0, 0, SRCCOPY | CAPTUREBLT);\n+                }\n+                SelectObject(hdcMem, hbmOld);\n+                DeleteDC(hdcMem);\n+            }\n+        }\n+        ReleaseDC(hwnd, hdc);\n+    }\n+    return hbm;\n+}\n+\n+static VOID\n+IntMakeGhostImage(HBITMAP hbm)\n+{\n+    BITMAP bm;\n+    DWORD i, *pdw;\n+\n+    GetObject(hbm, sizeof(bm), &bm);\n+\n+    if (bm.bmBitsPixel != 32 || !bm.bmBits)\n+        return;\n+\n+    pdw = bm.bmBits;\n+    for (i = 0; i < bm.bmWidth * bm.bmHeight; ++i)\n+    {\n+        *pdw = *pdw | 0x00C0C0C0;   // bitwise-OR with ARGB #C0C0C0\n+        ++pdw;\n+    }\n+}\n+\n+/****************************************************************************/\n+\n+typedef struct GHOST_DATA\n+{\n+    HWND hwndTarget;\n+    HBITMAP hbm32bpp;\n+} GHOST_DATA;\n+\n+static GHOST_DATA *\n+Ghost_GetData(HWND hwnd)\n+{\n+    if (IsWindowUnicode(hwnd))\n+        return (GHOST_DATA *)GetWindowLongPtrW(hwnd, GWLP_USERDATA);\n+    else\n+        return (GHOST_DATA *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);\n+}\n+\n+static HWND\n+Ghost_GetTarget(HWND hwnd)\n+{\n+    GHOST_DATA *pData = Ghost_GetData(hwnd);\n+    if (!pData)\n+        return NULL;\n+    return pData->hwndTarget;\n+}\n+\n+static BOOL\n+Ghost_OnCreate(HWND hwnd, CREATESTRUCTW *lpcs)\n+{\n+    HBITMAP hbm32bpp;\n+    HWND hwndTarget, hwndPrev;\n+    GHOST_DATA *pData;\n+    RECT rc;\n+    DWORD style, exstyle;\n+    CHAR szTextA[128], szNotRespondingA[64];\n+    WCHAR szTextW[128], szNotRespondingW[64];\n+    PWND pWnd = ValidateHwnd(hwnd);\n+    if (pWnd)\n+    {\n+        if (!pWnd->fnid)\n+        {\n+            NtUserSetWindowFNID(hwnd, FNID_GHOST);\n+        }\n+        else if (pWnd->fnid != FNID_GHOST)\n+        {\n+             ERR(\"Wrong window class for Ghost! fnId 0x%x\\n\", pWnd->fnid);\n+             return 0;\n+        }\n+    }\n+\n+    // get the target\n+    hwndTarget = (HWND)lpcs->lpCreateParams;\n+    if (!hwndTarget || !IsWindowVisible(hwndTarget) || IsIconic(hwndTarget) ||\n+        GetParent(hwndTarget))\n+    {\n+        return FALSE;\n+    }\n+\n+    // create data\n+    pData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GHOST_DATA));\n+    if (!pData)\n+        return FALSE;\n+\n+    // get window image\n+    GetWindowRect(hwndTarget, &rc);\n+    hbm32bpp = IntGetWindowBitmap(hwndTarget, rc.right - rc.left, rc.bottom - rc.top);\n+    if (!hbm32bpp)\n+    {\n+        HeapFree(GetProcessHeap(), 0, pData);\n+        return FALSE;\n+    }\n+    // make a ghost image\n+    IntMakeGhostImage(hbm32bpp);\n+\n+    // get style and text\n+    if (IsWindowUnicode(hwnd))\n+    {\n+        style = GetWindowLongPtrW(hwndTarget, GWL_STYLE);\n+        exstyle = GetWindowLongPtrW(hwndTarget, GWL_EXSTYLE);\n+        GetWindowTextW(hwndTarget, szTextW, ARRAYSIZE(szTextW));\n+    }\n+    else\n+    {\n+        style = GetWindowLongPtrA(hwndTarget, GWL_STYLE);\n+        exstyle = GetWindowLongPtrA(hwndTarget, GWL_EXSTYLE);\n+        GetWindowTextA(hwndTarget, szTextA, ARRAYSIZE(szTextA));\n+    }\n+\n+    style &= ~(WS_HSCROLL | WS_VSCROLL | WS_VISIBLE);\n+\n+    // set style and text\n+    if (IsWindowUnicode(hwnd))\n+    {\n+        SetWindowLongPtrW(hwnd, GWL_STYLE, style);\n+        SetWindowLongPtrW(hwnd, GWL_EXSTYLE, exstyle);\n+\n+        LoadStringW(User32Instance, IDS_NOT_RESPONDING,\n+                    szNotRespondingW, ARRAYSIZE(szNotRespondingW));\n+        StringCbCatW(szTextW, sizeof(szTextW), szNotRespondingW);\n+        SetWindowTextW(hwnd, szTextW);\n+    }\n+    else\n+    {\n+        SetWindowLongPtrA(hwnd, GWL_STYLE, style);\n+        SetWindowLongPtrA(hwnd, GWL_EXSTYLE, exstyle);\n+\n+        LoadStringA(User32Instance, IDS_NOT_RESPONDING,\n+                    szNotRespondingA, ARRAYSIZE(szNotRespondingA));\n+        StringCbCatA(szTextA, sizeof(szTextA), szNotRespondingA);\n+        SetWindowTextA(hwnd, szTextA);\n+    }\n+\n+    hwndPrev = GetWindow(hwndTarget, GW_HWNDPREV);\n+\n+    // hide target\n+    ShowWindowAsync(hwndTarget, SW_HIDE);\n+\n+    // shrink the ghost to zero size and insert\n+    SetWindowPos(hwnd, hwndPrev, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_DRAWFRAME);\n+\n+    // resume the position and size of ghost\n+    MoveWindow(hwnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);\n+\n+    // make ghost visible\n+    if (IsWindowUnicode(hwnd))\n+        SetWindowLongPtrW(hwnd, GWL_STYLE, style | WS_VISIBLE);\n+    else\n+        SetWindowLongPtrA(hwnd, GWL_STYLE, style | WS_VISIBLE);\n+\n+    // redraw\n+    InvalidateRect(hwnd, NULL, TRUE);\n+\n+    // set user data\n+    pData->hwndTarget = hwndTarget;\n+    pData->hbm32bpp = hbm32bpp;\n+    if (IsWindowUnicode(hwnd))\n+        SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)pData);\n+    else\n+        SetWindowLongPtrA(hwnd, GWLP_USERDATA, (LONG_PTR)pData);\n+\n+    SetPropW(hwndTarget, L\"GhostProp\", hwnd);\n+\n+    SetTimer(hwnd, GHOST_TIMER_ID, GHOST_INTERVAL, NULL);\n+\n+    return TRUE;\n+}\n+\n+static void\n+Ghost_Unenchant(HWND hwnd, BOOL bDestroyTarget)\n+{\n+    DWORD pid;\n+    HANDLE hProcess;\n+    GHOST_DATA *pData;\n+    RECT rc;\n+\n+    pData = Ghost_GetData(hwnd);\n+    if (!pData)\n+        return;\n+\n+    RemovePropW(pData->hwndTarget, L\"GhostProp\");\n+\n+    DeleteObject(pData->hbm32bpp);\n+    pData->hbm32bpp = NULL;\n+\n+    if (bDestroyTarget)\n+    {\n+        GetWindowThreadProcessId(pData->hwndTarget, &pid);\n+        hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);\n+        if (hProcess)\n+        {\n+            TerminateProcess(hProcess, -1);\n+            CloseHandle(hProcess);\n+        }\n+\n+        DestroyWindow(hwnd);\n+        ShowWindowAsync(pData->hwndTarget, SW_SHOWNOACTIVATE);\n+\n+        DestroyWindow(pData->hwndTarget);\n+        pData->hwndTarget = NULL;\n+    }\n+    else\n+    {\n+        GetWindowRect(hwnd, &rc);\n+        SetWindowPos(pData->hwndTarget, NULL, rc.left, rc.top, 0, 0,\n+            SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOSENDCHANGING);\n+\n+        ShowWindowAsync(pData->hwndTarget, SW_SHOWNOACTIVATE);\n+        DestroyWindow(hwnd);\n+    }\n+}\n+\n+static void\n+Ghost_OnDraw(HWND hwnd, HDC hdc)\n+{\n+    BITMAP bm;\n+    HDC hdcMem;\n+    GHOST_DATA *pData = Ghost_GetData(hwnd);\n+\n+    if (!pData || !GetObject(pData->hbm32bpp, sizeof(bm), &bm))\n+        return;\n+\n+    hdcMem = CreateCompatibleDC(hdc);\n+    if (hdcMem)\n+    {\n+        HGDIOBJ hbmOld = SelectObject(hdcMem, pData->hbm32bpp);\n+        {\n+            BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY | CAPTUREBLT);\n+        }\n+        SelectObject(hdcMem, hbmOld);\n+        DeleteDC(hdcMem);\n+    }\n+}\n+\n+static void\n+Ghost_OnNCPaint(HWND hwnd, HRGN hrgn)","path":"win32ss/user/user32/controls/ghost.c","position":315,"original_position":315,"commit_id":"dc40d48fb8cf674e7c7ee7b6388b2f135d2c0317","original_commit_id":"dc40d48fb8cf674e7c7ee7b6388b2f135d2c0317","user":{"login":"learn-more","id":610685,"node_id":"MDQ6VXNlcjYxMDY4NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/610685?v=4","gravatar_id":"","url":"https://api.github.com/users/learn-more","html_url":"https://github.com/learn-more","followers_url":"https://api.github.com/users/learn-more/followers","following_url":"https://api.github.com/users/learn-more/following{/other_user}","gists_url":"https://api.github.com/users/learn-more/gists{/gist_id}","starred_url":"https://api.github.com/users/learn-more/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/learn-more/subscriptions","organizations_url":"https://api.github.com/users/learn-more/orgs","repos_url":"https://api.github.com/users/learn-more/repos","events_url":"https://api.github.com/users/learn-more/events{/privacy}","received_events_url":"https://api.github.com/users/learn-more/received_events","type":"User","site_admin":false},"body":"This function is also called from `Ghost_OnEraseBkgnd`, is it allowed to call `WM_NCPAINT` in here directly?","created_at":"2018-12-01T12:10:32Z","updated_at":"2018-12-01T12:11:38Z","html_url":"https://github.com/reactos/reactos/pull/1082#discussion_r238061718","pull_request_url":"https://api.github.com/repos/reactos/reactos/pulls/1082","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/reactos/reactos/pulls/comments/238061718"},"html":{"href":"https://github.com/reactos/reactos/pull/1082#discussion_r238061718"},"pull_request":{"href":"https://api.github.com/repos/reactos/reactos/pulls/1082"}}},"pull_request":{"url":"https://api.github.com/repos/reactos/reactos/pulls/1082","id":235178544,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM1MTc4NTQ0","html_url":"https://github.com/reactos/reactos/pull/1082","diff_url":"https://github.com/reactos/reactos/pull/1082.diff","patch_url":"https://github.com/reactos/reactos/pull/1082.patch","issue_url":"https://api.github.com/repos/reactos/reactos/issues/1082","number":1082,"state":"open","locked":false,"title":"[USER32] Add Ghost window class","user":{"login":"katahiromz","id":2107452,"node_id":"MDQ6VXNlcjIxMDc0NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/2107452?v=4","gravatar_id":"","url":"https://api.github.com/users/katahiromz","html_url":"https://github.com/katahiromz","followers_url":"https://api.github.com/users/katahiromz/followers","following_url":"https://api.github.com/users/katahiromz/following{/other_user}","gists_url":"https://api.github.com/users/katahiromz/gists{/gist_id}","starred_url":"https://api.github.com/users/katahiromz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katahiromz/subscriptions","organizations_url":"https://api.github.com/users/katahiromz/orgs","repos_url":"https://api.github.com/users/katahiromz/repos","events_url":"https://api.github.com/users/katahiromz/events{/privacy}","received_events_url":"https://api.github.com/users/katahiromz/received_events","type":"User","site_admin":false},"body":"## Purpose\r\nThis PR will add the Ghost window class to the system.\r\nJIRA issue: [CORE-11944](https://jira.reactos.org/browse/CORE-11944)","created_at":"2018-12-01T08:00:05Z","updated_at":"2018-12-01T12:11:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e5624a92982493dbe8cec477d6fa3f0adeef7b22","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/reactos/reactos/pulls/1082/commits","review_comments_url":"https://api.github.com/repos/reactos/reactos/pulls/1082/comments","review_comment_url":"https://api.github.com/repos/reactos/reactos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/reactos/reactos/issues/1082/comments","statuses_url":"https://api.github.com/repos/reactos/reactos/statuses/dc40d48fb8cf674e7c7ee7b6388b2f135d2c0317","head":{"label":"katahiromz:ghost-window","ref":"ghost-window","sha":"dc40d48fb8cf674e7c7ee7b6388b2f135d2c0317","user":{"login":"katahiromz","id":2107452,"node_id":"MDQ6VXNlcjIxMDc0NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/2107452?v=4","gravatar_id":"","url":"https://api.github.com/users/katahiromz","html_url":"https://github.com/katahiromz","followers_url":"https://api.github.com/users/katahiromz/followers","following_url":"https://api.github.com/users/katahiromz/following{/other_user}","gists_url":"https://api.github.com/users/katahiromz/gists{/gist_id}","starred_url":"https://api.github.com/users/katahiromz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katahiromz/subscriptions","organizations_url":"https://api.github.com/users/katahiromz/orgs","repos_url":"https://api.github.com/users/katahiromz/repos","events_url":"https://api.github.com/users/katahiromz/events{/privacy}","received_events_url":"https://api.github.com/users/katahiromz/received_events","type":"User","site_admin":false},"repo":{"id":123541775,"node_id":"MDEwOlJlcG9zaXRvcnkxMjM1NDE3NzU=","name":"reactos","full_name":"katahiromz/reactos","private":false,"owner":{"login":"katahiromz","id":2107452,"node_id":"MDQ6VXNlcjIxMDc0NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/2107452?v=4","gravatar_id":"","url":"https://api.github.com/users/katahiromz","html_url":"https://github.com/katahiromz","followers_url":"https://api.github.com/users/katahiromz/followers","following_url":"https://api.github.com/users/katahiromz/following{/other_user}","gists_url":"https://api.github.com/users/katahiromz/gists{/gist_id}","starred_url":"https://api.github.com/users/katahiromz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katahiromz/subscriptions","organizations_url":"https://api.github.com/users/katahiromz/orgs","repos_url":"https://api.github.com/users/katahiromz/repos","events_url":"https://api.github.com/users/katahiromz/events{/privacy}","received_events_url":"https://api.github.com/users/katahiromz/received_events","type":"User","site_admin":false},"html_url":"https://github.com/katahiromz/reactos","description":"A free Windows-compatible Operating System","fork":true,"url":"https://api.github.com/repos/katahiromz/reactos","forks_url":"https://api.github.com/repos/katahiromz/reactos/forks","keys_url":"https://api.github.com/repos/katahiromz/reactos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/katahiromz/reactos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/katahiromz/reactos/teams","hooks_url":"https://api.github.com/repos/katahiromz/reactos/hooks","issue_events_url":"https://api.github.com/repos/katahiromz/reactos/issues/events{/number}","events_url":"https://api.github.com/repos/katahiromz/reactos/events","assignees_url":"https://api.github.com/repos/katahiromz/reactos/assignees{/user}","branches_url":"https://api.github.com/repos/katahiromz/reactos/branches{/branch}","tags_url":"https://api.github.com/repos/katahiromz/reactos/tags","blobs_url":"https://api.github.com/repos/katahiromz/reactos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/katahiromz/reactos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/katahiromz/reactos/git/refs{/sha}","trees_url":"https://api.github.com/repos/katahiromz/reactos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/katahiromz/reactos/statuses/{sha}","languages_url":"https://api.github.com/repos/katahiromz/reactos/languages","stargazers_url":"https://api.github.com/repos/katahiromz/reactos/stargazers","contributors_url":"https://api.github.com/repos/katahiromz/reactos/contributors","subscribers_url":"https://api.github.com/repos/katahiromz/reactos/subscribers","subscription_url":"https://api.github.com/repos/katahiromz/reactos/subscription","commits_url":"https://api.github.com/repos/katahiromz/reactos/commits{/sha}","git_commits_url":"https://api.github.com/repos/katahiromz/reactos/git/commits{/sha}","comments_url":"https://api.github.com/repos/katahiromz/reactos/comments{/number}","issue_comment_url":"https://api.github.com/repos/katahiromz/reactos/issues/comments{/number}","contents_url":"https://api.github.com/repos/katahiromz/reactos/contents/{+path}","compare_url":"https://api.github.com/repos/katahiromz/reactos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/katahiromz/reactos/merges","archive_url":"https://api.github.com/repos/katahiromz/reactos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/katahiromz/reactos/downloads","issues_url":"https://api.github.com/repos/katahiromz/reactos/issues{/number}","pulls_url":"https://api.github.com/repos/katahiromz/reactos/pulls{/number}","milestones_url":"https://api.github.com/repos/katahiromz/reactos/milestones{/number}","notifications_url":"https://api.github.com/repos/katahiromz/reactos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/katahiromz/reactos/labels{/name}","releases_url":"https://api.github.com/repos/katahiromz/reactos/releases{/id}","deployments_url":"https://api.github.com/repos/katahiromz/reactos/deployments","created_at":"2018-03-02T06:48:58Z","updated_at":"2018-09-17T04:57:35Z","pushed_at":"2018-12-01T11:59:12Z","git_url":"git://github.com/katahiromz/reactos.git","ssh_url":"git@github.com:katahiromz/reactos.git","clone_url":"https://github.com/katahiromz/reactos.git","svn_url":"https://github.com/katahiromz/reactos","homepage":null,"size":464876,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"reactos:master","ref":"master","sha":"792dd0dac5686c86485f16eeec93783f88cd08bb","user":{"login":"reactos","id":1056157,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNTYxNTc=","avatar_url":"https://avatars0.githubusercontent.com/u/1056157?v=4","gravatar_id":"","url":"https://api.github.com/users/reactos","html_url":"https://github.com/reactos","followers_url":"https://api.github.com/users/reactos/followers","following_url":"https://api.github.com/users/reactos/following{/other_user}","gists_url":"https://api.github.com/users/reactos/gists{/gist_id}","starred_url":"https://api.github.com/users/reactos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reactos/subscriptions","organizations_url":"https://api.github.com/users/reactos/orgs","repos_url":"https://api.github.com/users/reactos/repos","events_url":"https://api.github.com/users/reactos/events{/privacy}","received_events_url":"https://api.github.com/users/reactos/received_events","type":"Organization","site_admin":false},"repo":{"id":105627846,"node_id":"MDEwOlJlcG9zaXRvcnkxMDU2Mjc4NDY=","name":"reactos","full_name":"reactos/reactos","private":false,"owner":{"login":"reactos","id":1056157,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNTYxNTc=","avatar_url":"https://avatars0.githubusercontent.com/u/1056157?v=4","gravatar_id":"","url":"https://api.github.com/users/reactos","html_url":"https://github.com/reactos","followers_url":"https://api.github.com/users/reactos/followers","following_url":"https://api.github.com/users/reactos/following{/other_user}","gists_url":"https://api.github.com/users/reactos/gists{/gist_id}","starred_url":"https://api.github.com/users/reactos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reactos/subscriptions","organizations_url":"https://api.github.com/users/reactos/orgs","repos_url":"https://api.github.com/users/reactos/repos","events_url":"https://api.github.com/users/reactos/events{/privacy}","received_events_url":"https://api.github.com/users/reactos/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/reactos/reactos","description":"A free Windows-compatible Operating System","fork":false,"url":"https://api.github.com/repos/reactos/reactos","forks_url":"https://api.github.com/repos/reactos/reactos/forks","keys_url":"https://api.github.com/repos/reactos/reactos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/reactos/reactos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/reactos/reactos/teams","hooks_url":"https://api.github.com/repos/reactos/reactos/hooks","issue_events_url":"https://api.github.com/repos/reactos/reactos/issues/events{/number}","events_url":"https://api.github.com/repos/reactos/reactos/events","assignees_url":"https://api.github.com/repos/reactos/reactos/assignees{/user}","branches_url":"https://api.github.com/repos/reactos/reactos/branches{/branch}","tags_url":"https://api.github.com/repos/reactos/reactos/tags","blobs_url":"https://api.github.com/repos/reactos/reactos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/reactos/reactos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/reactos/reactos/git/refs{/sha}","trees_url":"https://api.github.com/repos/reactos/reactos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/reactos/reactos/statuses/{sha}","languages_url":"https://api.github.com/repos/reactos/reactos/languages","stargazers_url":"https://api.github.com/repos/reactos/reactos/stargazers","contributors_url":"https://api.github.com/repos/reactos/reactos/contributors","subscribers_url":"https://api.github.com/repos/reactos/reactos/subscribers","subscription_url":"https://api.github.com/repos/reactos/reactos/subscription","commits_url":"https://api.github.com/repos/reactos/reactos/commits{/sha}","git_commits_url":"https://api.github.com/repos/reactos/reactos/git/commits{/sha}","comments_url":"https://api.github.com/repos/reactos/reactos/comments{/number}","issue_comment_url":"https://api.github.com/repos/reactos/reactos/issues/comments{/number}","contents_url":"https://api.github.com/repos/reactos/reactos/contents/{+path}","compare_url":"https://api.github.com/repos/reactos/reactos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/reactos/reactos/merges","archive_url":"https://api.github.com/repos/reactos/reactos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/reactos/reactos/downloads","issues_url":"https://api.github.com/repos/reactos/reactos/issues{/number}","pulls_url":"https://api.github.com/repos/reactos/reactos/pulls{/number}","milestones_url":"https://api.github.com/repos/reactos/reactos/milestones{/number}","notifications_url":"https://api.github.com/repos/reactos/reactos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/reactos/reactos/labels{/name}","releases_url":"https://api.github.com/repos/reactos/reactos/releases{/id}","deployments_url":"https://api.github.com/repos/reactos/reactos/deployments","created_at":"2017-10-03T08:04:52Z","updated_at":"2018-12-01T12:09:44Z","pushed_at":"2018-12-01T12:09:28Z","git_url":"git://github.com/reactos/reactos.git","ssh_url":"git@github.com:reactos/reactos.git","clone_url":"https://github.com/reactos/reactos.git","svn_url":"https://github.com/reactos/reactos","homepage":null,"size":464483,"stargazers_count":5574,"watchers_count":5574,"language":"C","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":488,"mirror_url":null,"archived":false,"open_issues_count":86,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":488,"open_issues":86,"watchers":5574,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/reactos/reactos/pulls/1082"},"html":{"href":"https://github.com/reactos/reactos/pull/1082"},"issue":{"href":"https://api.github.com/repos/reactos/reactos/issues/1082"},"comments":{"href":"https://api.github.com/repos/reactos/reactos/issues/1082/comments"},"review_comments":{"href":"https://api.github.com/repos/reactos/reactos/pulls/1082/comments"},"review_comment":{"href":"https://api.github.com/repos/reactos/reactos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/reactos/reactos/pulls/1082/commits"},"statuses":{"href":"https://api.github.com/repos/reactos/reactos/statuses/dc40d48fb8cf674e7c7ee7b6388b2f135d2c0317"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"learn-more"}}