{"action":"created","issue":{"url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/3007","labels_url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/3007/labels{/name}","comments_url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/3007/comments","events_url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/3007/events","html_url":"https://github.com/Beep6581/RawTherapee/pull/3007","id":120547311,"number":3007,"title":"[RFC] Use signals and slots instead of listeners","user":{"login":"adamreichold","id":12997846,"avatar_url":"https://avatars.githubusercontent.com/u/12997846?v=3","gravatar_id":"","url":"https://api.github.com/users/adamreichold","html_url":"https://github.com/adamreichold","followers_url":"https://api.github.com/users/adamreichold/followers","following_url":"https://api.github.com/users/adamreichold/following{/other_user}","gists_url":"https://api.github.com/users/adamreichold/gists{/gist_id}","starred_url":"https://api.github.com/users/adamreichold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamreichold/subscriptions","organizations_url":"https://api.github.com/users/adamreichold/orgs","repos_url":"https://api.github.com/users/adamreichold/repos","events_url":"https://api.github.com/users/adamreichold/events{/privacy}","received_events_url":"https://api.github.com/users/adamreichold/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Beep6581/RawTherapee/labels/patch","name":"patch","color":"5319e7"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":19,"created_at":"2015-12-05T11:03:19Z","updated_at":"2015-12-18T23:25:38Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/Beep6581/RawTherapee/pulls/3007","html_url":"https://github.com/Beep6581/RawTherapee/pull/3007","diff_url":"https://github.com/Beep6581/RawTherapee/pull/3007.diff","patch_url":"https://github.com/Beep6581/RawTherapee/pull/3007.patch"},"body":"RT currently uses various helper interfaces to provide coupling of event producers and their interested consumers. It also uses such helper interfaces to provide interface segregation for complicated components.\r\nSince RT uses libsigc++ already, we can use its signals and slots mechanisms to reduce the number of utility types and decrease coupling among the components. This PR make such changes for the `DirBrowser` to open a discussion about whether this should be aimed for throughout the code base.\r\nFor the listener and event emission case, replacement by a signal is straight-forward yielding the same performance and type safety with less boiler plate and less coupling.\r\nThe case for the slot is probably less clear, since the amount of boiler plate does not decrease and the intention encoded in the explicit interface name is gone. But then again this is intentional since any compatibly typed functor can be used to provide the slot without usage of a predefined utility type."},"comment":{"url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/comments/165919668","html_url":"https://github.com/Beep6581/RawTherapee/pull/3007#issuecomment-165919668","issue_url":"https://api.github.com/repos/Beep6581/RawTherapee/issues/3007","id":165919668,"user":{"login":"adamreichold","id":12997846,"avatar_url":"https://avatars.githubusercontent.com/u/12997846?v=3","gravatar_id":"","url":"https://api.github.com/users/adamreichold","html_url":"https://github.com/adamreichold","followers_url":"https://api.github.com/users/adamreichold/followers","following_url":"https://api.github.com/users/adamreichold/following{/other_user}","gists_url":"https://api.github.com/users/adamreichold/gists{/gist_id}","starred_url":"https://api.github.com/users/adamreichold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamreichold/subscriptions","organizations_url":"https://api.github.com/users/adamreichold/orgs","repos_url":"https://api.github.com/users/adamreichold/repos","events_url":"https://api.github.com/users/adamreichold/events{/privacy}","received_events_url":"https://api.github.com/users/adamreichold/received_events","type":"User","site_admin":false},"created_at":"2015-12-18T23:25:38Z","updated_at":"2015-12-18T23:25:38Z","body":"@heckflosse I grabbed a fresh IE11/Win7 32-bit VM from [Modern IE](https://dev.windows.com/en-us/microsoft-edge/tools/vms/linux/) and the gtkmm packages from [MSYS2](https://wiki.gnome.org/Projects/gtkmm/MSWindows) to begin building the `gtk3` branch on `win32` using GCC 5.2. So far it seems to be relatively straight forward as only `libiptcdata` needs to be built from source (and I can even use the same package manager as on my Linux box ;-))\r\n\r\nThe only thing I needed to do differently when building RT itself was adding `-G \"Unix Makefiles\"` and `-DCMAKE_MAKE_PROGRAM=mingw32-make` to the CMake command line (and of course disable some sub directories of the `libiptcdata` build). I have only done a debug build so far, but developing a sample file using the neutral profile seems to work fine."}}