/platform/unix/main.d

http://github.com/wilkie/djehuty · D · 122 lines · 71 code · 33 blank · 18 comment · 0 complexity · 1c2564f1857243ee88b8c7b6c7034e4f MD5 · raw file

  1. /*
  2. * main.d
  3. *
  4. * This file implements the main routines for the Linux system.
  5. * This file is the entry point for a Linux application.
  6. *
  7. * Author: Dave Wilkinson
  8. *
  9. */
  10. module platform.unix.main;
  11. import platform.unix.common;
  12. import platform.application;
  13. import scaffold.console;
  14. import scaffold.directory;
  15. import platform.vars.window;
  16. import gui.application;
  17. import gui.window;
  18. import core.definitions;
  19. import core.main;
  20. import core.string;
  21. import core.arguments;
  22. import graphics.view;
  23. import synch.thread;
  24. import analyzing.debugger;
  25. import io.console;
  26. import cui.application;
  27. import cui.window;
  28. struct DjehutyPlatformVars {
  29. X.Display* display;
  30. X.Visual* visual;
  31. int screen;
  32. X.Atom wm_destroy_window;
  33. X.Atom wm_name;
  34. X.Atom wm_hints;
  35. X.Atom utf8string;
  36. X.Atom private_data;
  37. //for mouse double click timer
  38. static sigevent clickTimerevp = {{0}};
  39. static timer_t clickTimerId = null;
  40. static const itimerspec clickTimertime = {{0, 0}, {0, 250000000}};
  41. //for keys
  42. static const int numSysKeys = 6;
  43. static const X.KeySym[6] sysKey = [Key.Backspace, Key.Delete, Key.Left, Key.Right, Key.Down, Key.Up];
  44. //GTK IMPLEMENTATION:
  45. //for xsettings - GTK
  46. X.Atom x_settings;
  47. X.Window x_manager;
  48. bool running = false;
  49. int argc;
  50. char** argv;
  51. }
  52. DjehutyPlatformVars* _pfvars() {
  53. static DjehutyPlatformVars pfvars;
  54. return &pfvars;
  55. }
  56. extern(C) void mousetimerproc(sigval val) {
  57. Mouse* p_mouseProps;
  58. p_mouseProps = cast(Mouse*)val.sival_ptr;
  59. p_mouseProps.clicks = 1;
  60. }
  61. // segfault handler
  62. extern(C) void segfault_handler(int signum) {
  63. throw new Exception("Access Violation");
  64. }
  65. void AppInit()
  66. {
  67. // ------------- */
  68. // UTF-8 SUPPORT
  69. // _pfvars.wm_name = X.XInternAtom(_pfvars.display, "_NET_WM_NAME\0"c.ptr, X.Bool.True);
  70. setlocale(LC_CTYPE, "");
  71. // segfault handler
  72. signal(SIGSEGV, &segfault_handler);
  73. }
  74. int main(char[][] args){
  75. try {
  76. AppInit();
  77. Arguments argList = Arguments.instance();
  78. foreach(arg; args) {
  79. argList.add(arg);
  80. }
  81. ConsoleInit();
  82. Djehuty.application.run();
  83. ConsoleUninit();
  84. }
  85. catch(Object o) {
  86. Debugger.raiseException(cast(Exception)o);
  87. }
  88. return ApplicationController.instance.exitCode;
  89. }