Advertisement
dsreyes1014

g_timeout_add () callback funtion

Apr 23rd, 2014
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. DSP_LOAD.C
  2. /* Declared in `server_switch.c`. */
  3. extern GPid pid;
  4.  
  5. gboolean
  6. dsp_load (gpointer data)
  7. {
  8. float dsp;
  9. jack_client_t *client;
  10. jack_status_t *status;
  11. gchar print_dsp[6];
  12. //gboolean check;
  13.  
  14. //check = gtk_switch_get_active (sw);
  15. client = jack_client_open ("default", JackNullOption, status);
  16.  
  17. if (pid == 0)
  18. {
  19. return FALSE;
  20. }
  21. else
  22. {
  23. dsp = jack_cpu_load (client);
  24. sprintf (print_dsp, "%.2f", dsp);
  25. gtk_label_set_text (GTK_LABEL (label_dsp), print_dsp);
  26.  
  27. return TRUE;
  28. }
  29. }
  30.  
  31. SERVER_SWITCH.C
  32. gchar driver_arg1[20];
  33. gchar driver_arg2[20];
  34.  
  35. extern GtkWidget *box;
  36.  
  37. GPid pid;
  38.  
  39. /* `switch_pos` will start JACK when switched on and terminate it when switched off. */
  40. void
  41. switch_pos_new_cb (GtkSwitch *sw, gpointer data)
  42. {
  43. gboolean check;
  44. gchar *jack_args[10];
  45.  
  46. /* Declared with static or else `pid` will reset to 0 in the else command. */
  47. //static GPid pid;
  48.  
  49. check = gtk_switch_get_active (sw);
  50. jack_args[0] = "jackd";
  51. jack_args[1] = rt_arg ();
  52. jack_args[2] = "-P75";
  53. jack_args[3] = driver_arg1;
  54. jack_args[4] = driver_arg2;
  55. jack_args[5] = NULL;
  56.  
  57. if (check == TRUE)
  58. {
  59. gtk_widget_set_tooltip_text (GTK_WIDGET (sw) , "Shutdown Server");
  60. g_spawn_async (NULL, jack_args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, NULL);
  61.  
  62. g_timeout_add (2000, (GSourceFunc) dsp_load, (gpointer) sw); //<-- g_timeout_add () function call
  63. }
  64. else
  65. {
  66. gtk_widget_set_tooltip_text (GTK_WIDGET (sw) , "Start Server");
  67. kill (pid, SIGTERM);
  68. }
  69. }
  70.  
  71. void
  72. server_switch (GtkWidget *box_main)
  73. {
  74. GtkWidget *jack_switch;
  75. GtkWidget *vbox;
  76. GtkWidget *label;
  77. gchar result[10];
  78. gboolean check;
  79. PangoAttrList *list;
  80. PangoAttribute *underline;
  81. FILE *cmd;
  82.  
  83. cmd = popen ("pgrep jackd", "r");
  84. jack_switch = gtk_switch_new ();
  85. vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
  86. label = gtk_label_new ("JACK");
  87. check = gtk_switch_get_active (GTK_SWITCH (jack_switch));
  88. list = pango_attr_list_new ();
  89. underline = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
  90.  
  91. pango_attr_list_insert (list, underline);
  92.  
  93. //gtk_label_set_attributes (GTK_LABEL (label), list);
  94.  
  95. while (fgets (result, sizeof (result), cmd) != NULL)
  96. {
  97. g_print ("%s\n", result);
  98. pid = atoi (result);
  99. g_print ("%d\n", pid);
  100. }
  101.  
  102. gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 6);
  103. gtk_box_pack_start (GTK_BOX (vbox), jack_switch, FALSE, TRUE, 0);
  104. drivers (vbox);
  105. gtk_box_pack_start (GTK_BOX (box_main), vbox, FALSE, TRUE, 2);
  106. rt_box (box_main);
  107.  
  108.  
  109.  
  110. /* Signal that works here for the `GtkSwitch` is `notify::active` which is a
  111. different convention used for other widget's signals that I've used. */
  112. if (pid != 0)
  113. {
  114. gtk_switch_set_active (GTK_SWITCH (jack_switch), TRUE);
  115.  
  116. g_signal_connect (jack_switch, "notify::active", G_CALLBACK (switch_pos_new_cb), NULL);
  117. }
  118. else
  119. {
  120. g_signal_connect (jack_switch, "notify::active", G_CALLBACK (switch_pos_new_cb), NULL);
  121. }
  122.  
  123. /* Initiate tooltip for `jack_switch` here or else it won't show when app first starts. */
  124. if (check == TRUE)
  125. {
  126. gtk_widget_set_tooltip_text (GTK_WIDGET (jack_switch) , "Shutdown Server");
  127. }
  128. else
  129. {
  130. gtk_widget_set_tooltip_text (GTK_WIDGET (jack_switch) , "Start Server");
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement