Advertisement
venkat_330

GTK dispText thread Hang

Aug 25th, 2013
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <glib.h>
  3. #include <gtk/gtk.h>
  4. //#include "dispimage.h"
  5. #include <windows.h>
  6. #define sleep(n) Sleep(1000 * n)
  7. GtkWidget* window;
  8. void dispInit(int argc, char* argv[]);
  9. void dispInfoPage(char* fileName, int duration);
  10.  
  11.  
  12. gpointer main_callback(gpointer data)
  13. {
  14.     gtk_main();
  15.     return 0;
  16. }
  17.  
  18. void dispInit(int argc, char* argv[])
  19. {
  20.     gdk_threads_init();
  21.     gdk_threads_enter();
  22.     printf("Initializing the display library\n");
  23.     gtk_init(&argc, &argv);
  24.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  25.     gtk_window_resize(GTK_WINDOW(window), 640, 480);
  26.     gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
  27.     gtk_widget_realize( window );
  28.     gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
  29.     g_thread_create(main_callback, NULL, FALSE, NULL);
  30.     gdk_threads_leave();
  31. }
  32.  
  33. void dispInfoPage(char* fileName, int duration)
  34. {
  35.     int index;
  36.     gdk_threads_enter();
  37.     printf("Initializing dispInfoPage\n");
  38.     destroyWidget();
  39.     printf("Initializing dispInfoPage1\n");
  40.     GtkWidget *image;
  41.     image = gtk_image_new_from_file(fileName);
  42.     printf("Initializing dispInfoPage2\n");
  43.     gtk_container_add(GTK_CONTAINER(window), image);
  44.     gtk_widget_show(image);
  45.     gtk_widget_show(window);
  46.     printf("Initializing dispInfoPage4\n");
  47.     printf("Initializing dispInfoPage5\n");
  48.     gdk_threads_leave();
  49.     printf("Initializing dispInfoPage6\n");
  50. }
  51.  
  52. void destroyWidget()
  53. {
  54.     GList *children, *iter;
  55.     struct WidgetsAlive *temp, *prev, *next, *depTemp;
  56.     children = gtk_container_get_children(GTK_CONTAINER(window));
  57.     for(iter = children; iter != NULL; iter = g_list_next(iter)){
  58.         gtk_container_remove(GTK_CONTAINER(window),GTK_WIDGET(iter->data));
  59.         printf("Deleting Widget\n");
  60.     }
  61.     g_list_free(iter);
  62.     g_list_free(children);
  63.  
  64. }
  65.  
  66.  
  67. int dispTextPage(char* fileName, int isJustifyCenter)
  68. {
  69.     int index;
  70.     GtkWidget *textv;
  71.     GdkWindow *textv_window;
  72.     GdkPixmap *pixmap = NULL;
  73.     GtkTextBuffer *textBuffer;
  74.     gdk_threads_enter();
  75.     GdkColor color;
  76.     char debugBuf[128] = { '\0' };
  77.     char newfName[100]={'\0'};
  78.     char ext[4]={'\0'};
  79.     char temp[100]={'\0'};
  80.     int i;
  81.     FILE * fd;
  82.     destroyWidget();
  83.     textBuffer = gtk_text_buffer_new(NULL);
  84.     textv = gtk_text_view_new_with_buffer(textBuffer);
  85.     gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textv), 22);
  86.     gtk_text_view_set_right_margin(GTK_TEXT_VIEW(textv), 20);
  87.     gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(textv),1);
  88.     gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textv), GTK_WRAP_CHAR);
  89.     if (isJustifyCenter == 1)
  90.     {
  91.         gtk_text_view_set_justification(GTK_TEXT_VIEW(textv), GTK_JUSTIFY_CENTER);
  92.     }
  93.     else
  94.     {
  95.         gtk_text_view_set_justification(GTK_TEXT_VIEW(textv), GTK_JUSTIFY_LEFT);
  96.     }
  97.     gtk_text_view_set_editable(GTK_TEXT_VIEW(textv), FALSE);
  98.     gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textv), FALSE);
  99.     printf("tttt0");
  100.     gtk_container_add(GTK_CONTAINER(window), textv);
  101.     printf("tttt1");
  102.     textv_window = gtk_text_view_get_window (GTK_TEXT_VIEW (textv),
  103.                                            GTK_TEXT_WINDOW_TEXT);
  104.     gdk_color_parse ("#68604d", &color);
  105.     pixmap = gdk_pixmap_create_from_xpm ((GdkDrawable *) textv_window, NULL,
  106.                                        &color, fileName);
  107.     gdk_window_set_back_pixmap (textv_window, pixmap, FALSE);
  108.     g_object_unref(pixmap);
  109.  
  110.     textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textv));
  111.  
  112.     gtk_text_buffer_create_tag (textBuffer, "Red", "foreground", "Red", NULL);
  113.     gtk_text_buffer_create_tag (textBuffer, "RedBold","foreground", "Red",NULL);
  114.       gtk_text_buffer_create_tag(textBuffer, "gray_bg", "background", "gray", NULL);
  115.       gtk_text_buffer_create_tag(textBuffer, "italic",  "style", PANGO_STYLE_ITALIC, NULL);
  116.       gtk_text_buffer_create_tag(textBuffer, "bold","weight", PANGO_WEIGHT_BOLD, NULL);
  117.     gtk_text_buffer_create_tag (textBuffer, "RedFontWeight", "weight", 1000,NULL);
  118.     gtk_text_buffer_create_tag (textBuffer, "RedBoldFontWeight","weight", 1000,NULL);
  119.     gtk_widget_show(textv);
  120.     gtk_widget_show(window);
  121.     gdk_threads_leave();
  122.     return index;
  123. }
  124.  
  125. void *fsmThread_RunFunction()
  126. {
  127.     int pollMsgRetVal = -1;
  128.     printf("Now enter into for image");
  129.     dispInfoPage("../images/givefp.gif",1);
  130.     sleep(5);
  131.     dispInfoPage("../images/bootup.gif",1);
  132.     sleep(5);
  133.     dispInfoPage("../images/givefp.gif",1);
  134.     sleep(5);
  135.     dispInfoPage("../images/bootup.gif",1);
  136.     sleep(5);
  137.     printf("Now enter into for disptext");
  138.     dispTextPage("",0);
  139.     printf("Now exit for disptext");
  140. }
  141.  
  142. int main(int argc, char *argv[])
  143. {
  144.     GThread *fsmThreadId;
  145.     GError *error = NULL;
  146.     g_thread_init(NULL);
  147.     dispInit(argc, argv);
  148.     dispInfoPage("../images/bootup.gif",1);
  149.     sleep(5);
  150.     printf("Now creat ethread ");
  151.     fsmThreadId = g_thread_create(fsmThread_RunFunction,NULL,TRUE,&error);
  152.     if (error) {
  153.       fflush(stderr);
  154.       exit(1);
  155.     }
  156.     g_thread_join(fsmThreadId);
  157.     sleep(2);
  158.  
  159.     printf("ENd of main");
  160.     return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement