Overview
Comment: | Make it possible to handle common signals in OFApplicationDelegate. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
83ad0894c02a804916d7ac6342fb9097 |
User & Date: | js on 2012-02-17 17:13:22 |
Other Links: | manifest | tags |
Context
2012-02-20
| ||
22:40 | Set version to 0.7-dev in default branch. check-in: 584a8dccec user: js tags: trunk | |
22:38 | Create branch for 0.6. check-in: 01ca5677b9 user: js tags: 0.6 | |
2012-02-17
| ||
21:15 | Create a branch for a bridge to Foundation, integrated into ObjFW. check-in: 7746f5f864 user: js tags: bridge | |
17:13 | Make it possible to handle common signals in OFApplicationDelegate. check-in: 83ad0894c0 user: js tags: trunk | |
16:25 | Fix a very bad typo in OFStreamObserver_poll. check-in: e9b0575094 user: js tags: trunk | |
Changes
Modified src/OFApplication.h from [3eec16fb74] to [1bcf3be869].
︙ | ︙ | |||
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /** * \brief A method which is called when the application will terminate. */ - (void)applicationWillTerminate; @end /** * \brief Represents the application as an object. */ @interface OFApplication: OFObject { OFString *programName; OFMutableArray *arguments; OFMutableDictionary *environment; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /** * \brief A method which is called when the application will terminate. */ - (void)applicationWillTerminate; /** * \brief A method which is called when the application received a SIGINT. * * \warning You are not allowed to send any messages inside this method, as * message dispatching is not signal-safe! You are only allowed to do * signal-safe operations like setting a variable or calling a * signal-safe function! */ - (void)applicationDidReceiveSIGINT; /** * \brief A method which is called when the application received a SIGHUP. * * \warning You are not allowed to send any messages inside this method, as * message dispatching is not signal-safe! You are only allowed to do * signal-safe operations like setting a variable or calling a * signal-safe function! */ - (void)applicationDidReceiveSIGHUP; /** * \brief A method which is called when the application received a SIGUSR1. * * \warning You are not allowed to send any messages inside this method, as * message dispatching is not signal-safe! You are only allowed to do * signal-safe operations like setting a variable or calling a * signal-safe function! */ - (void)applicationDidReceiveSIGUSR1; /** * \brief A method which is called when the application received a SIGUSR2. * * \warning You are not allowed to send any messages inside this method, as * message dispatching is not signal-safe! You are only allowed to do * signal-safe operations like setting a variable or calling a * signal-safe function! */ - (void)applicationDidReceiveSIGUSR2; @end /** * \brief Represents the application as an object. */ @interface OFApplication: OFObject { OFString *programName; OFMutableArray *arguments; OFMutableDictionary *environment; int *argc; char ***argv; @public id <OFApplicationDelegate> delegate; void (*SIGINTHandler)(id, SEL); void (*SIGHUPHandler)(id, SEL); void (*SIGUSR1Handler)(id, SEL); void (*SIGUSR2Handler)(id, SEL); } #ifdef OF_HAVE_PROPERTIES @property (readonly, assign) OFString *programName; @property (readonly, assign) OFArray *arguments; @property (readonly, assign) OFDictionary *environment; @property (assign) id <OFApplicationDelegate> delegate; |
︙ | ︙ |
Modified src/OFApplication.m from [8f063b7bf5] to [14e0a7d129].
︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 53 54 55 56 | id <OFApplicationDelegate> delegate = [app delegate]; [delegate applicationWillTerminate]; [(id)delegate release]; } int of_application_main(int *argc, char **argv[], Class cls) { OFApplication *app = [OFApplication sharedApplication]; id <OFApplicationDelegate> delegate = [[cls alloc] init]; [app setArgumentCount: argc | > > > > > > > > > > > > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | id <OFApplicationDelegate> delegate = [app delegate]; [delegate applicationWillTerminate]; [(id)delegate release]; } #define SIGNAL_HANDLER(sig) \ static void \ handle##sig(int signal) \ { \ app->sig##Handler(app->delegate, \ @selector(applicationDidReceive##sig)); \ } SIGNAL_HANDLER(SIGINT) SIGNAL_HANDLER(SIGHUP) SIGNAL_HANDLER(SIGUSR1) SIGNAL_HANDLER(SIGUSR2) #undef SIGNAL_HANDLER int of_application_main(int *argc, char **argv[], Class cls) { OFApplication *app = [OFApplication sharedApplication]; id <OFApplicationDelegate> delegate = [[cls alloc] init]; [app setArgumentCount: argc |
︙ | ︙ | |||
232 233 234 235 236 237 238 239 240 241 242 243 244 245 | { return delegate; } - (void)setDelegate: (id <OFApplicationDelegate>)delegate_ { delegate = delegate_; } - (void)run { [delegate applicationDidFinishLaunching]; } | > > > > > > > > > > > > > > > | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | { return delegate; } - (void)setDelegate: (id <OFApplicationDelegate>)delegate_ { delegate = delegate_; #define REGISTER_SIGNAL(sig) \ sig##Handler = (void(*)(id, SEL))[(id)delegate methodForSelector: \ @selector(applicationDidReceive##sig)]; \ if (sig##Handler != (void(*)(id, SEL))[OFObject \ instanceMethodForSelector: \ @selector(applicationDidReceive##sig)]) \ signal(sig, handle##sig); \ else \ signal(sig, SIG_DFL); REGISTER_SIGNAL(SIGINT) REGISTER_SIGNAL(SIGHUP) REGISTER_SIGNAL(SIGUSR1) REGISTER_SIGNAL(SIGUSR2) #undef REGISTER_SIGNAL } - (void)run { [delegate applicationDidFinishLaunching]; } |
︙ | ︙ | |||
268 269 270 271 272 273 274 275 | @throw [OFNotImplementedException exceptionWithClass: isa selector: _cmd]; } - (void)applicationWillTerminate { } @end | > > > > > > > > > > > > > > > > | 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | @throw [OFNotImplementedException exceptionWithClass: isa selector: _cmd]; } - (void)applicationWillTerminate { } - (void)applicationDidReceiveSIGINT { } - (void)applicationDidReceiveSIGHUP { } - (void)applicationDidReceiveSIGUSR1 { } - (void)applicationDidReceiveSIGUSR2 { } @end |