{"action":"created","comment":{"url":"https://api.github.com/repos/reactos/reactos/pulls/comments/167430528","pull_request_review_id":95651136,"id":167430528,"diff_hunk":"@@ -0,0 +1,108 @@\n+/*\n+ * Copyright 2018 Hermes Belusca-Maito\n+ *\n+ * Pass on icon notification messages to the systray implementation\n+ * in the currently running shell.\n+ *\n+ * This library is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU Lesser General Public\n+ * License as published by the Free Software Foundation; either\n+ * version 2.1 of the License, or (at your option) any later version.\n+ *\n+ * This library is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+ * Lesser General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public\n+ * License along with this library; if not, write to the Free Software\n+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n+ */\n+\n+#ifndef _USERNOTIFICATION_H_\n+#define _USERNOTIFICATION_H_\n+\n+#undef PlaySound\n+\n+class CUserNotification :\n+    public CComCoClass<CUserNotification, &CLSID_UserNotification>,\n+    public CComObjectRootEx<CComMultiThreadModelNoCS>,\n+    public IUserNotification","path":"dll/win32/shell32/CUserNotification.h","position":30,"original_position":30,"commit_id":"b894e676a6dc0bd8e88ce9819931305010cb5cf6","original_commit_id":"b894e676a6dc0bd8e88ce9819931305010cb5cf6","user":{"login":"learn-more","id":610685,"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":"Why not use `CWindowImpl`? You can use the `m_thunk` then for the WorkerWndProc, without having to toy around with `GetWindowLongPtr` etc","created_at":"2018-02-11T11:15:33Z","updated_at":"2018-02-11T11:29:29Z","html_url":"https://github.com/reactos/reactos/pull/367#discussion_r167430528","pull_request_url":"https://api.github.com/repos/reactos/reactos/pulls/367","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/reactos/reactos/pulls/comments/167430528"},"html":{"href":"https://github.com/reactos/reactos/pull/367#discussion_r167430528"},"pull_request":{"href":"https://api.github.com/repos/reactos/reactos/pulls/367"}}},"pull_request":{"url":"https://api.github.com/repos/reactos/reactos/pulls/367","id":167576528,"html_url":"https://github.com/reactos/reactos/pull/367","diff_url":"https://github.com/reactos/reactos/pull/367.diff","patch_url":"https://github.com/reactos/reactos/pull/367.patch","issue_url":"https://api.github.com/repos/reactos/reactos/issues/367","number":367,"state":"open","locked":false,"title":"WIP - Shell user notifications","user":{"login":"HBelusca","id":1969829,"avatar_url":"https://avatars1.githubusercontent.com/u/1969829?v=4","gravatar_id":"","url":"https://api.github.com/users/HBelusca","html_url":"https://github.com/HBelusca","followers_url":"https://api.github.com/users/HBelusca/followers","following_url":"https://api.github.com/users/HBelusca/following{/other_user}","gists_url":"https://api.github.com/users/HBelusca/gists{/gist_id}","starred_url":"https://api.github.com/users/HBelusca/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HBelusca/subscriptions","organizations_url":"https://api.github.com/users/HBelusca/orgs","repos_url":"https://api.github.com/users/HBelusca/repos","events_url":"https://api.github.com/users/HBelusca/events{/privacy}","received_events_url":"https://api.github.com/users/HBelusca/received_events","type":"User","site_admin":false},"body":"## Purpose\r\n\r\nI provide a simple implementation of the shell32 CUserNotification class (aka. CLSID_UserNotification) that implements the [IUserNotification](https://msdn.microsoft.com/en-us/library/windows/desktop/bb774424(v=vs.85).aspx) interface.\r\nThis COM interface manages shell notifications (appearing as an icon + balloon tooltip).\r\nExample of usage can be found at:\r\nhttp://stackoverflow.com/questions/6270539/how-to-shell-notifyicon-without-adding-an-icon-in-the-notification-area\r\nor:\r\nhttps://github.com/ma-vysotskiy/reminder.tray/blob/master/Reminder.h\r\n\r\nThis functionality could be useful for implementing the balloon popups for hard errors (in which case the COM interface would be instanced from explorer.exe, after receiving a hard-error notification from WINSRV).\r\n\r\nJIRA issue: [CORE-13177](https://jira.reactos.org/browse/CORE-13177)\r\n\r\n## TODO\r\n\r\n- [ ] Add a shell32 apitest that sends notifications.\r\n- [X] Fill out the class method stubs.\r\n","created_at":"2018-02-07T01:35:59Z","updated_at":"2018-02-11T11:29:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7f05fd843e6fdc96b98a8d87d8402c5f8d81cc4","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":730524222,"url":"https://api.github.com/repos/reactos/reactos/labels/WIP","name":"WIP","color":"548ee5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/reactos/reactos/pulls/367/commits","review_comments_url":"https://api.github.com/repos/reactos/reactos/pulls/367/comments","review_comment_url":"https://api.github.com/repos/reactos/reactos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/reactos/reactos/issues/367/comments","statuses_url":"https://api.github.com/repos/reactos/reactos/statuses/b894e676a6dc0bd8e88ce9819931305010cb5cf6","head":{"label":"HBelusca:shell_user_notifications","ref":"shell_user_notifications","sha":"b894e676a6dc0bd8e88ce9819931305010cb5cf6","user":{"login":"HBelusca","id":1969829,"avatar_url":"https://avatars1.githubusercontent.com/u/1969829?v=4","gravatar_id":"","url":"https://api.github.com/users/HBelusca","html_url":"https://github.com/HBelusca","followers_url":"https://api.github.com/users/HBelusca/followers","following_url":"https://api.github.com/users/HBelusca/following{/other_user}","gists_url":"https://api.github.com/users/HBelusca/gists{/gist_id}","starred_url":"https://api.github.com/users/HBelusca/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HBelusca/subscriptions","organizations_url":"https://api.github.com/users/HBelusca/orgs","repos_url":"https://api.github.com/users/HBelusca/repos","events_url":"https://api.github.com/users/HBelusca/events{/privacy}","received_events_url":"https://api.github.com/users/HBelusca/received_events","type":"User","site_admin":false},"repo":{"id":105653436,"name":"reactos","full_name":"HBelusca/reactos","owner":{"login":"HBelusca","id":1969829,"avatar_url":"https://avatars1.githubusercontent.com/u/1969829?v=4","gravatar_id":"","url":"https://api.github.com/users/HBelusca","html_url":"https://github.com/HBelusca","followers_url":"https://api.github.com/users/HBelusca/followers","following_url":"https://api.github.com/users/HBelusca/following{/other_user}","gists_url":"https://api.github.com/users/HBelusca/gists{/gist_id}","starred_url":"https://api.github.com/users/HBelusca/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HBelusca/subscriptions","organizations_url":"https://api.github.com/users/HBelusca/orgs","repos_url":"https://api.github.com/users/HBelusca/repos","events_url":"https://api.github.com/users/HBelusca/events{/privacy}","received_events_url":"https://api.github.com/users/HBelusca/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/HBelusca/reactos","description":"A free Windows-compatible Operating System","fork":true,"url":"https://api.github.com/repos/HBelusca/reactos","forks_url":"https://api.github.com/repos/HBelusca/reactos/forks","keys_url":"https://api.github.com/repos/HBelusca/reactos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HBelusca/reactos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HBelusca/reactos/teams","hooks_url":"https://api.github.com/repos/HBelusca/reactos/hooks","issue_events_url":"https://api.github.com/repos/HBelusca/reactos/issues/events{/number}","events_url":"https://api.github.com/repos/HBelusca/reactos/events","assignees_url":"https://api.github.com/repos/HBelusca/reactos/assignees{/user}","branches_url":"https://api.github.com/repos/HBelusca/reactos/branches{/branch}","tags_url":"https://api.github.com/repos/HBelusca/reactos/tags","blobs_url":"https://api.github.com/repos/HBelusca/reactos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HBelusca/reactos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HBelusca/reactos/git/refs{/sha}","trees_url":"https://api.github.com/repos/HBelusca/reactos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HBelusca/reactos/statuses/{sha}","languages_url":"https://api.github.com/repos/HBelusca/reactos/languages","stargazers_url":"https://api.github.com/repos/HBelusca/reactos/stargazers","contributors_url":"https://api.github.com/repos/HBelusca/reactos/contributors","subscribers_url":"https://api.github.com/repos/HBelusca/reactos/subscribers","subscription_url":"https://api.github.com/repos/HBelusca/reactos/subscription","commits_url":"https://api.github.com/repos/HBelusca/reactos/commits{/sha}","git_commits_url":"https://api.github.com/repos/HBelusca/reactos/git/commits{/sha}","comments_url":"https://api.github.com/repos/HBelusca/reactos/comments{/number}","issue_comment_url":"https://api.github.com/repos/HBelusca/reactos/issues/comments{/number}","contents_url":"https://api.github.com/repos/HBelusca/reactos/contents/{+path}","compare_url":"https://api.github.com/repos/HBelusca/reactos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HBelusca/reactos/merges","archive_url":"https://api.github.com/repos/HBelusca/reactos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HBelusca/reactos/downloads","issues_url":"https://api.github.com/repos/HBelusca/reactos/issues{/number}","pulls_url":"https://api.github.com/repos/HBelusca/reactos/pulls{/number}","milestones_url":"https://api.github.com/repos/HBelusca/reactos/milestones{/number}","notifications_url":"https://api.github.com/repos/HBelusca/reactos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HBelusca/reactos/labels{/name}","releases_url":"https://api.github.com/repos/HBelusca/reactos/releases{/id}","deployments_url":"https://api.github.com/repos/HBelusca/reactos/deployments","created_at":"2017-10-03T13:12:41Z","updated_at":"2017-10-06T13:47:31Z","pushed_at":"2018-02-10T23:12:48Z","git_url":"git://github.com/HBelusca/reactos.git","ssh_url":"git@github.com:HBelusca/reactos.git","clone_url":"https://github.com/HBelusca/reactos.git","svn_url":"https://github.com/HBelusca/reactos","homepage":null,"size":386987,"stargazers_count":1,"watchers_count":1,"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":null,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"reactos:master","ref":"master","sha":"bd709879097ca09224a4c1d6680cec3e7f5a4598","user":{"login":"reactos","id":1056157,"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,"name":"reactos","full_name":"reactos/reactos","owner":{"login":"reactos","id":1056157,"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},"private":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-02-11T09:22:04Z","pushed_at":"2018-02-11T01:29:13Z","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":463168,"stargazers_count":3208,"watchers_count":3208,"language":"C","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":202,"mirror_url":null,"archived":false,"open_issues_count":43,"license":null,"forks":202,"open_issues":43,"watchers":3208,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/reactos/reactos/pulls/367"},"html":{"href":"https://github.com/reactos/reactos/pull/367"},"issue":{"href":"https://api.github.com/repos/reactos/reactos/issues/367"},"comments":{"href":"https://api.github.com/repos/reactos/reactos/issues/367/comments"},"review_comments":{"href":"https://api.github.com/repos/reactos/reactos/pulls/367/comments"},"review_comment":{"href":"https://api.github.com/repos/reactos/reactos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/reactos/reactos/pulls/367/commits"},"statuses":{"href":"https://api.github.com/repos/reactos/reactos/statuses/b894e676a6dc0bd8e88ce9819931305010cb5cf6"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"learn-more"}}