comparison gtk/dw.c @ 1933:758f49e54566

Enable dw_windows_get_text() to return value of label under GTK. Support for fullscreen display on GTK.
author mhessling@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 11 Sep 2017 05:56:04 +0000
parents 3c60066cb16f
children a17cc1958369
comparison
equal deleted inserted replaced
1932:bf34d9f9dabe 1933:758f49e54566
1225 } 1225 }
1226 1226
1227 static SignalHandler _get_signal_handler(gpointer data) 1227 static SignalHandler _get_signal_handler(gpointer data)
1228 { 1228 {
1229 SignalHandler sh = {0}; 1229 SignalHandler sh = {0};
1230 1230
1231 if(data) 1231 if(data)
1232 { 1232 {
1233 void **params = (void **)data; 1233 void **params = (void **)data;
1234 int counter = GPOINTER_TO_INT(params[0]); 1234 int counter = GPOINTER_TO_INT(params[0]);
1235 GtkWidget *widget = (GtkWidget *)params[2]; 1235 GtkWidget *widget = (GtkWidget *)params[2];
2398 */ 2398 */
2399 void *dw_dialog_wait(DWDialog *dialog) 2399 void *dw_dialog_wait(DWDialog *dialog)
2400 { 2400 {
2401 void *tmp; 2401 void *tmp;
2402 int newprocess = 0; 2402 int newprocess = 0;
2403 2403
2404 if(!dialog) 2404 if(!dialog)
2405 return NULL; 2405 return NULL;
2406 2406
2407 /* _dw_thread will be -1 if dw_main hasn't been run yet. */ 2407 /* _dw_thread will be -1 if dw_main hasn't been run yet. */
2408 if(_dw_thread == (pthread_t)-1) 2408 if(_dw_thread == (pthread_t)-1)
3603 3603
3604 if(flStyle & (DW_FCF_BORDER | DW_FCF_DLGBORDER)) 3604 if(flStyle & (DW_FCF_BORDER | DW_FCF_DLGBORDER))
3605 flags |= GDK_DECOR_BORDER; 3605 flags |= GDK_DECOR_BORDER;
3606 3606
3607 #if GTK_MAJOR_VERSION > 1 3607 #if GTK_MAJOR_VERSION > 1
3608 if(flStyle & DW_FCF_MAXIMIZE) 3608 if(flStyle & DW_FCF_FULLSCREEN)
3609 gtk_window_maximize(GTK_WINDOW(tmp)); 3609 gtk_window_fullscreen(GTK_WINDOW(tmp));
3610 3610 else
3611 if(flStyle & DW_FCF_MINIMIZE) 3611 {
3612 gtk_window_iconify(GTK_WINDOW(tmp)); 3612 if(flStyle & DW_FCF_MAXIMIZE)
3613 gtk_window_maximize(GTK_WINDOW(tmp));
3614 if(flStyle & DW_FCF_MINIMIZE)
3615 gtk_window_iconify(GTK_WINDOW(tmp));
3616 }
3613 #endif 3617 #endif
3614 3618
3615 #if GTK_CHECK_VERSION(2,10,0) 3619 #if GTK_CHECK_VERSION(2,10,0)
3616 /* Either the CLOSEBUTTON or SYSMENU flags should make it deletable */ 3620 /* Either the CLOSEBUTTON or SYSMENU flags should make it deletable */
3617 gtk_window_set_deletable(GTK_WINDOW(tmp), (flStyle & (DW_FCF_CLOSEBUTTON | DW_FCF_SYSMENU)) ? TRUE : FALSE); 3621 gtk_window_set_deletable(GTK_WINDOW(tmp), (flStyle & (DW_FCF_CLOSEBUTTON | DW_FCF_SYSMENU)) ? TRUE : FALSE);
4899 */ 4903 */
4900 void dw_window_set_bitmap(HWND handle, unsigned long id, char *filename) 4904 void dw_window_set_bitmap(HWND handle, unsigned long id, char *filename)
4901 { 4905 {
4902 #if GTK_MAJOR_VERSION > 1 4906 #if GTK_MAJOR_VERSION > 1
4903 GdkPixbuf *pixbuf = NULL; 4907 GdkPixbuf *pixbuf = NULL;
4904 #else 4908 #else
4905 GdkBitmap *bitmap = NULL; 4909 GdkBitmap *bitmap = NULL;
4906 GdkPixmap *tmp = NULL; 4910 GdkPixmap *tmp = NULL;
4907 #endif 4911 #endif
4908 int found_ext = 0; 4912 int found_ext = 0;
4909 int i; 4913 int i;
4916 if(id) 4920 if(id)
4917 #if GTK_MAJOR_VERSION > 1 4921 #if GTK_MAJOR_VERSION > 1
4918 pixbuf = _find_pixbuf((HICN)id); 4922 pixbuf = _find_pixbuf((HICN)id);
4919 #else 4923 #else
4920 tmp = _find_pixmap(&bitmap, (HICN)id, handle, NULL, NULL); 4924 tmp = _find_pixmap(&bitmap, (HICN)id, handle, NULL, NULL);
4921 #endif 4925 #endif
4922 else 4926 else
4923 { 4927 {
4924 char *file = alloca(strlen(filename) + 6); 4928 char *file = alloca(strlen(filename) + 6);
4925 #if defined(USE_IMLIB) 4929 #if defined(USE_IMLIB)
4926 GdkImlibImage *image; 4930 GdkImlibImage *image;
4967 #endif 4971 #endif
4968 } 4972 }
4969 4973
4970 #if GTK_MAJOR_VERSION > 1 4974 #if GTK_MAJOR_VERSION > 1
4971 if (pixbuf) 4975 if (pixbuf)
4972 #else 4976 #else
4973 if (tmp) 4977 if (tmp)
4974 #endif 4978 #endif
4975 { 4979 {
4976 if ( GTK_IS_BUTTON(handle) ) 4980 if ( GTK_IS_BUTTON(handle) )
4977 { 4981 {
4978 #if GTK_MAJOR_VERSION > 1 4982 #if GTK_MAJOR_VERSION > 1
4979 GtkWidget *pixmap = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(handle), "_dw_bitmap" ); 4983 GtkWidget *pixmap = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(handle), "_dw_bitmap" );
4996 } 5000 }
4997 } 5001 }
4998 #if GTK_MAJOR_VERSION > 1 5002 #if GTK_MAJOR_VERSION > 1
4999 if(pixbuf) 5003 if(pixbuf)
5000 g_object_unref(pixbuf); 5004 g_object_unref(pixbuf);
5001 #endif 5005 #endif
5002 DW_MUTEX_UNLOCK; 5006 DW_MUTEX_UNLOCK;
5003 } 5007 }
5004 5008
5005 /* 5009 /*
5006 * Sets the bitmap used for a given static window. 5010 * Sets the bitmap used for a given static window.
5015 */ 5019 */
5016 void dw_window_set_bitmap_from_data(HWND handle, unsigned long id, char *data, int len) 5020 void dw_window_set_bitmap_from_data(HWND handle, unsigned long id, char *data, int len)
5017 { 5021 {
5018 #if GTK_MAJOR_VERSION > 1 5022 #if GTK_MAJOR_VERSION > 1
5019 GdkPixbuf *pixbuf = NULL; 5023 GdkPixbuf *pixbuf = NULL;
5020 #else 5024 #else
5021 GdkBitmap *bitmap = NULL; 5025 GdkBitmap *bitmap = NULL;
5022 GdkPixmap *tmp = NULL; 5026 GdkPixmap *tmp = NULL;
5023 #endif 5027 #endif
5024 int _locked_by_me = FALSE; 5028 int _locked_by_me = FALSE;
5025 char *file; 5029 char *file;
5067 else if (id) 5071 else if (id)
5068 #if GTK_MAJOR_VERSION > 1 5072 #if GTK_MAJOR_VERSION > 1
5069 pixbuf = _find_pixbuf((HICN)id); 5073 pixbuf = _find_pixbuf((HICN)id);
5070 #else 5074 #else
5071 tmp = _find_pixmap(&bitmap, (HICN)id, handle, NULL, NULL); 5075 tmp = _find_pixmap(&bitmap, (HICN)id, handle, NULL, NULL);
5072 #endif 5076 #endif
5073 5077
5074 #if GTK_MAJOR_VERSION > 1 5078 #if GTK_MAJOR_VERSION > 1
5075 if (pixbuf) 5079 if (pixbuf)
5076 #else 5080 #else
5077 if (tmp) 5081 if (tmp)
5078 #endif 5082 #endif
5079 { 5083 {
5080 if ( GTK_IS_BUTTON(handle) ) 5084 if ( GTK_IS_BUTTON(handle) )
5081 { 5085 {
5082 #if GTK_MAJOR_VERSION > 1 5086 #if GTK_MAJOR_VERSION > 1
5083 GtkWidget *pixmap = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(handle), "_dw_bitmap" ); 5087 GtkWidget *pixmap = (GtkWidget *)gtk_object_get_data( GTK_OBJECT(handle), "_dw_bitmap" );
5100 } 5104 }
5101 } 5105 }
5102 #if GTK_MAJOR_VERSION > 1 5106 #if GTK_MAJOR_VERSION > 1
5103 if(pixbuf) 5107 if(pixbuf)
5104 g_object_unref(pixbuf); 5108 g_object_unref(pixbuf);
5105 #endif 5109 #endif
5106 DW_MUTEX_UNLOCK; 5110 DW_MUTEX_UNLOCK;
5107 } 5111 }
5108 5112
5109 /* 5113 /*
5110 * Sets the text used for a given window. 5114 * Sets the text used for a given window.
5187 DW_MUTEX_LOCK; 5191 DW_MUTEX_LOCK;
5188 if(GTK_IS_ENTRY(handle)) 5192 if(GTK_IS_ENTRY(handle))
5189 possible = gtk_entry_get_text(GTK_ENTRY(handle)); 5193 possible = gtk_entry_get_text(GTK_ENTRY(handle));
5190 else if(GTK_IS_COMBO(handle)) 5194 else if(GTK_IS_COMBO(handle))
5191 possible = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(handle)->entry)); 5195 possible = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(handle)->entry));
5196 else if(GTK_IS_LABEL(handle))
5197 possible = gtk_label_get_text(GTK_LABEL(handle));
5192 5198
5193 DW_MUTEX_UNLOCK; 5199 DW_MUTEX_UNLOCK;
5194 return strdup(possible); 5200 return strdup(possible);
5195 } 5201 }
5196 5202
6240 { 6246 {
6241 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); 6247 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func");
6242 void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); 6248 void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data");
6243 void **params = calloc(sizeof(void *), 3): 6249 void **params = calloc(sizeof(void *), 3):
6244 SignalHandler work; 6250 SignalHandler work;
6245 6251
6246 params[0] = mydata; 6252 params[0] = mydata;
6247 params[2] = (void *)tree; 6253 params[2] = (void *)tree;
6248 work = _get_signal_handler(mydata); 6254 work = _get_signal_handler(mydata);
6249 6255
6250 if(thisfunc && work.window) 6256 if(thisfunc && work.window)
6396 { 6402 {
6397 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); 6403 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func");
6398 void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); 6404 void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data");
6399 void **params = calloc(sizeof(void *), 3): 6405 void **params = calloc(sizeof(void *), 3):
6400 SignalHandler work; 6406 SignalHandler work;
6401 6407
6402 params[0] = mydata; 6408 params[0] = mydata;
6403 params[2] = (void *)tree; 6409 params[2] = (void *)tree;
6404 work = _get_signal_handler(mydata); 6410 work = _get_signal_handler(mydata);
6405 6411
6406 if(thisfunc && work.window) 6412 if(thisfunc && work.window)
6634 (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) 6640 (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store")))
6635 { 6641 {
6636 GtkTreeIter iter; 6642 GtkTreeIter iter;
6637 6643
6638 if(gtk_tree_model_iter_parent(store, &iter, (GtkTreeIter *)item)) 6644 if(gtk_tree_model_iter_parent(store, &iter, (GtkTreeIter *)item))
6639 gtk_tree_model_get(store, &iter, 3, &parent, -1); 6645 gtk_tree_model_get(store, &iter, 3, &parent, -1);
6640 } 6646 }
6641 #else 6647 #else
6642 parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); 6648 parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent");
6643 #endif 6649 #endif
6644 DW_MUTEX_UNLOCK; 6650 DW_MUTEX_UNLOCK;
7679 } 7685 }
7680 7686
7681 void _dw_container_row_data_destroy(gpointer data) 7687 void _dw_container_row_data_destroy(gpointer data)
7682 { 7688 {
7683 void **params = (void **)data; 7689 void **params = (void **)data;
7684 7690
7685 if(params) 7691 if(params)
7686 { 7692 {
7687 if(params[0]) 7693 if(params[0])
7688 free(params[0]); 7694 free(params[0]);
7689 free(params); 7695 free(params);
7707 } 7713 }
7708 7714
7709 if(clist) 7715 if(clist)
7710 { 7716 {
7711 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), row); 7717 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), row);
7712 7718
7713 if(!params) 7719 if(!params)
7714 { 7720 {
7715 params = (void **)calloc(2, sizeof(void *)); 7721 params = (void **)calloc(2, sizeof(void *));
7716 gtk_clist_set_row_data_full(GTK_CLIST(clist), row, (gpointer)params, _dw_container_row_data_destroy); 7722 gtk_clist_set_row_data_full(GTK_CLIST(clist), row, (gpointer)params, _dw_container_row_data_destroy);
7717 } 7723 }
7966 GList *list; 7972 GList *list;
7967 void *retval = NULL; 7973 void *retval = NULL;
7968 int _locked_by_me = FALSE; 7974 int _locked_by_me = FALSE;
7969 int type = _DW_DATA_TYPE_STRING; 7975 int type = _DW_DATA_TYPE_STRING;
7970 void **params = NULL; 7976 void **params = NULL;
7971 7977
7972 if(flags & DW_CR_RETDATA) 7978 if(flags & DW_CR_RETDATA)
7973 type = _DW_DATA_TYPE_POINTER; 7979 type = _DW_DATA_TYPE_POINTER;
7974 7980
7975 DW_MUTEX_LOCK; 7981 DW_MUTEX_LOCK;
7976 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); 7982 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle));
8043 rowcount = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount")); 8049 rowcount = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"));
8044 8050
8045 for(z=0;z<rowcount;z++) 8051 for(z=0;z<rowcount;z++)
8046 { 8052 {
8047 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), z); 8053 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), z);
8048 8054
8049 if ( params && ((textcomp && params[0] && strcmp((char *)params[0], (char *)data) == 0) || (!textcomp && params[1] == data)) ) 8055 if ( params && ((textcomp && params[0] && strcmp((char *)params[0], (char *)data) == 0) || (!textcomp && params[1] == data)) )
8050 { 8056 {
8051 gfloat pos; 8057 gfloat pos;
8052 GtkAdjustment *adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); 8058 GtkAdjustment *adj = gtk_clist_get_vadjustment(GTK_CLIST(clist));
8053 8059
8104 rowcount = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount")); 8110 rowcount = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"));
8105 8111
8106 for(z=0;z<rowcount;z++) 8112 for(z=0;z<rowcount;z++)
8107 { 8113 {
8108 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), z); 8114 void **params = (void **)gtk_clist_get_row_data(GTK_CLIST(clist), z);
8109 8115
8110 if ( params && ((textcomp && params[0] && strcmp((char *)params[0], (char *)data) == 0) || (!textcomp && params[1] == data)) ) 8116 if ( params && ((textcomp && params[0] && strcmp((char *)params[0], (char *)data) == 0) || (!textcomp && params[1] == data)) )
8111 { 8117 {
8112 _dw_unselect(clist); 8118 _dw_unselect(clist);
8113 8119
8114 gtk_clist_remove(GTK_CLIST(clist), z); 8120 gtk_clist_remove(GTK_CLIST(clist), z);
10115 */ 10121 */
10116 close(GPOINTER_TO_INT(eve)); 10122 close(GPOINTER_TO_INT(eve));
10117 return DW_ERROR_NONE; 10123 return DW_ERROR_NONE;
10118 } 10124 }
10119 10125
10120 /* 10126 /*
10121 * Generally an internal function called from a newly created 10127 * Generally an internal function called from a newly created
10122 * thread to setup the Dynamic Windows environment for the thread. 10128 * thread to setup the Dynamic Windows environment for the thread.
10123 * However it is exported so language bindings can call it when 10129 * However it is exported so language bindings can call it when
10124 * they create threads that require access to Dynamic Windows. 10130 * they create threads that require access to Dynamic Windows.
10125 */ 10131 */
10130 foreground->pixel = foreground->red = foreground->green = foreground->blue = 0; 10136 foreground->pixel = foreground->red = foreground->green = foreground->blue = 0;
10131 pthread_setspecific(_dw_fg_color_key, foreground); 10137 pthread_setspecific(_dw_fg_color_key, foreground);
10132 pthread_setspecific(_dw_bg_color_key, NULL); 10138 pthread_setspecific(_dw_bg_color_key, NULL);
10133 } 10139 }
10134 10140
10135 /* 10141 /*
10136 * Generally an internal function called from a terminating 10142 * Generally an internal function called from a terminating
10137 * thread to cleanup the Dynamic Windows environment for the thread. 10143 * thread to cleanup the Dynamic Windows environment for the thread.
10138 * However it is exported so language bindings can call it when 10144 * However it is exported so language bindings can call it when
10139 * they exit threads that require access to Dynamic Windows. 10145 * they exit threads that require access to Dynamic Windows.
10140 */ 10146 */
10141 void API _dw_deinit_thread(void) 10147 void API _dw_deinit_thread(void)
10142 { 10148 {
10143 GdkColor *foreground, *background; 10149 GdkColor *foreground, *background;
10144 10150
10145 if((foreground = pthread_getspecific(_dw_fg_color_key))) 10151 if((foreground = pthread_getspecific(_dw_fg_color_key)))
10146 free(foreground); 10152 free(foreground);
10147 if((background = pthread_getspecific(_dw_bg_color_key))) 10153 if((background = pthread_getspecific(_dw_bg_color_key)))
10148 free(background); 10154 free(background);
10149 } 10155 }
13666 void (*discfunc)(HWND, void *) = params[1]; 13672 void (*discfunc)(HWND, void *) = params[1];
13667 13673
13668 if(discfunc) 13674 if(discfunc)
13669 { 13675 {
13670 SignalHandler work = _get_signal_handler(data); 13676 SignalHandler work = _get_signal_handler(data);
13671 13677
13672 if(work.window) 13678 if(work.window)
13673 { 13679 {
13674 discfunc(work.window, work.data); 13680 discfunc(work.window, work.data);
13675 } 13681 }
13676 } 13682 }
13780 params[2] = (void *)thiswindow; 13786 params[2] = (void *)thiswindow;
13781 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc); 13787 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc);
13782 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", params); 13788 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", params);
13783 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), params); 13789 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), params);
13784 _set_signal_handler_id(thiswindow, sigid, cid); 13790 _set_signal_handler_id(thiswindow, sigid, cid);
13785 13791
13786 params = calloc(sizeof(void *), 3); 13792 params = calloc(sizeof(void *), 3);
13787 sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); 13793 sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc);
13788 params[0] = GINT_TO_POINTER(sigid); 13794 params[0] = GINT_TO_POINTER(sigid);
13789 params[2] = (void *)thiswindow; 13795 params[2] = (void *)thiswindow;
13790 cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), params); 13796 cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), params);
13904 thisfunc = _findsigfunc(signame); 13910 thisfunc = _findsigfunc(signame);
13905 13911
13906 for(z=0;z<count;z++) 13912 for(z=0;z<count;z++)
13907 { 13913 {
13908 SignalHandler sh; 13914 SignalHandler sh;
13909 13915
13910 params[0] = GINT_TO_POINTER(z); 13916 params[0] = GINT_TO_POINTER(z);
13911 sh = _get_signal_handler(params); 13917 sh = _get_signal_handler(params);
13912 13918
13913 if(sh.intfunc == thisfunc) 13919 if(sh.intfunc == thisfunc)
13914 _remove_signal_handler((HWND)params[2], z); 13920 _remove_signal_handler((HWND)params[2], z);
13954 count = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(params[2]), "_dw_sigcounter")); 13960 count = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(params[2]), "_dw_sigcounter"));
13955 13961
13956 for(z=0;z<count;z++) 13962 for(z=0;z<count;z++)
13957 { 13963 {
13958 SignalHandler sh; 13964 SignalHandler sh;
13959 13965
13960 params[0] = GINT_TO_POINTER(z); 13966 params[0] = GINT_TO_POINTER(z);
13961 sh = _get_signal_handler(params); 13967 sh = _get_signal_handler(params);
13962 13968
13963 if(sh.data == data) 13969 if(sh.data == data)
13964 _remove_signal_handler((HWND)params[2], z); 13970 _remove_signal_handler((HWND)params[2], z);