comparison gtk3/dw.c @ 1306:dbd507f42947

Added dw_debug() logging function which will output a message to the debugging console. On Windows this uses OutputDebugMessage(), on Mac it uses NSLog() ... The other platforms currently just dump it to stderr. Maybe more enhancements to come.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 03 Nov 2011 23:34:10 +0000
parents 9c8de9cccc07
children 224893b5b868
comparison
equal deleted inserted replaced
1305:18a31ab94e3d 1306:dbd507f42947
117 117
118 #ifndef min 118 #ifndef min
119 # define min(a,b) (((a) < (b)) ? (a) : (b)) 119 # define min(a,b) (((a) < (b)) ? (a) : (b))
120 #endif 120 #endif
121 121
122 FILE *dbgfp = NULL;
123
124 pthread_key_t _dw_fg_color_key; 122 pthread_key_t _dw_fg_color_key;
125 pthread_key_t _dw_bg_color_key; 123 pthread_key_t _dw_bg_color_key;
126 pthread_key_t _dw_mutex_key; 124 pthread_key_t _dw_mutex_key;
127 125
128 GtkWidget *last_window = NULL, *popup = NULL; 126 GtkWidget *last_window = NULL, *popup = NULL;
341 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget); 339 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget);
342 static void gtk_mdi_remove_true(GtkContainer *container, GtkWidget *widget); 340 static void gtk_mdi_remove_true(GtkContainer *container, GtkWidget *widget);
343 static void gtk_mdi_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); 341 static void gtk_mdi_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
344 342
345 static GtkMdiChild *get_child(GtkMdi *mdi, GtkWidget * widget); 343 static GtkMdiChild *get_child(GtkMdi *mdi, GtkWidget * widget);
346
347 static void _dw_log( char *format, ... )
348 {
349 va_list args;
350 va_start(args, format);
351 if ( dbgfp != NULL )
352 {
353 vfprintf( dbgfp, format, args );
354 fflush( dbgfp );
355 }
356 va_end(args);
357 }
358 344
359 static GType gtk_mdi_get_type(void) 345 static GType gtk_mdi_get_type(void)
360 { 346 {
361 static GType mdi_type = 0; 347 static GType mdi_type = 0;
362 348
1206 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) 1192 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data)
1207 { 1193 {
1208 SignalHandler work = _get_signal_handler((GtkWidget *)window, data); 1194 SignalHandler work = _get_signal_handler((GtkWidget *)window, data);
1209 int retval = FALSE; 1195 int retval = FALSE;
1210 1196
1211 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1212 if(work.window) 1197 if(work.window)
1213 { 1198 {
1214 int (*setfocusfunc)(HWND, void *) = work.func; 1199 int (*setfocusfunc)(HWND, void *) = work.func;
1215 1200
1216 retval = setfocusfunc(work.window, work.data); 1201 retval = setfocusfunc(work.window, work.data);
1221 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 1206 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
1222 { 1207 {
1223 SignalHandler work = _get_signal_handler(widget, data); 1208 SignalHandler work = _get_signal_handler(widget, data);
1224 int retval = FALSE; 1209 int retval = FALSE;
1225 1210
1226 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1227 if(work.window) 1211 if(work.window)
1228 { 1212 {
1229 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; 1213 int (*buttonfunc)(HWND, int, int, int, void *) = work.func;
1230 int mybutton = event->button; 1214 int mybutton = event->button;
1231 1215
1242 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 1226 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
1243 { 1227 {
1244 SignalHandler work = _get_signal_handler(widget, data); 1228 SignalHandler work = _get_signal_handler(widget, data);
1245 int retval = FALSE; 1229 int retval = FALSE;
1246 1230
1247 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1248 if(work.window) 1231 if(work.window)
1249 { 1232 {
1250 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; 1233 int (*buttonfunc)(HWND, int, int, int, void *) = work.func;
1251 int mybutton = event->button; 1234 int mybutton = event->button;
1252 1235
1263 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) 1246 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
1264 { 1247 {
1265 SignalHandler work = _get_signal_handler(widget, data); 1248 SignalHandler work = _get_signal_handler(widget, data);
1266 int retval = FALSE; 1249 int retval = FALSE;
1267 1250
1268 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1269 if(work.window) 1251 if(work.window)
1270 { 1252 {
1271 int (*motionfunc)(HWND, int, int, int, void *) = work.func; 1253 int (*motionfunc)(HWND, int, int, int, void *) = work.func;
1272 int keys = 0, x, y; 1254 int keys = 0, x, y;
1273 GdkModifierType state; 1255 GdkModifierType state;
1296 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) 1278 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
1297 { 1279 {
1298 SignalHandler work = _get_signal_handler(widget, data); 1280 SignalHandler work = _get_signal_handler(widget, data);
1299 int retval = FALSE; 1281 int retval = FALSE;
1300 1282
1301 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1302 if(work.window) 1283 if(work.window)
1303 { 1284 {
1304 int (*closefunc)(HWND, void *) = work.func; 1285 int (*closefunc)(HWND, void *) = work.func;
1305 1286
1306 retval = closefunc(work.window, work.data); 1287 retval = closefunc(work.window, work.data);
1311 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) 1292 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
1312 { 1293 {
1313 SignalHandler work = _get_signal_handler(widget, data); 1294 SignalHandler work = _get_signal_handler(widget, data);
1314 int retval = FALSE; 1295 int retval = FALSE;
1315 1296
1316 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1317 if(work.window) 1297 if(work.window)
1318 { 1298 {
1319 int (*keypressfunc)(HWND, char, int, int, void *) = work.func; 1299 int (*keypressfunc)(HWND, char, int, int, void *) = work.func;
1320 1300
1321 retval = keypressfunc(work.window, *event->string, event->keyval, 1301 retval = keypressfunc(work.window, *event->string, event->keyval,
1327 static gint _generic_event(GtkWidget *widget, gpointer data) 1307 static gint _generic_event(GtkWidget *widget, gpointer data)
1328 { 1308 {
1329 SignalHandler work = _get_signal_handler(widget, data); 1309 SignalHandler work = _get_signal_handler(widget, data);
1330 int retval = FALSE; 1310 int retval = FALSE;
1331 1311
1332 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1333 if(work.window) 1312 if(work.window)
1334 { 1313 {
1335 int (*genericfunc)(HWND, void *) = work.func; 1314 int (*genericfunc)(HWND, void *) = work.func;
1336 1315
1337 retval = genericfunc(work.window, work.data); 1316 retval = genericfunc(work.window, work.data);
1342 static gint _activate_event(GtkWidget *widget, gpointer data) 1321 static gint _activate_event(GtkWidget *widget, gpointer data)
1343 { 1322 {
1344 SignalHandler work = _get_signal_handler(widget, data); 1323 SignalHandler work = _get_signal_handler(widget, data);
1345 int retval = FALSE; 1324 int retval = FALSE;
1346 1325
1347 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1348 if(work.window && !_dw_ignore_click) 1326 if(work.window && !_dw_ignore_click)
1349 { 1327 {
1350 int (*activatefunc)(HWND, void *) = work.func; 1328 int (*activatefunc)(HWND, void *) = work.func;
1351 1329
1352 retval = activatefunc(popup ? popup : work.window, work.data); 1330 retval = activatefunc(popup ? popup : work.window, work.data);
1358 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) 1336 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
1359 { 1337 {
1360 SignalHandler work = _get_signal_handler(widget, data); 1338 SignalHandler work = _get_signal_handler(widget, data);
1361 int retval = FALSE; 1339 int retval = FALSE;
1362 1340
1363 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1364 if(work.window) 1341 if(work.window)
1365 { 1342 {
1366 int (*sizefunc)(HWND, int, int, void *) = work.func; 1343 int (*sizefunc)(HWND, int, int, void *) = work.func;
1367 1344
1368 retval = sizefunc(work.window, event->width, event->height, work.data); 1345 retval = sizefunc(work.window, event->width, event->height, work.data);
1373 static gint _expose_event(GtkWidget *widget, cairo_t *cr, gpointer data) 1350 static gint _expose_event(GtkWidget *widget, cairo_t *cr, gpointer data)
1374 { 1351 {
1375 SignalHandler work = _get_signal_handler(widget, data); 1352 SignalHandler work = _get_signal_handler(widget, data);
1376 int retval = FALSE; 1353 int retval = FALSE;
1377 1354
1378 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1379 if(work.window) 1355 if(work.window)
1380 { 1356 {
1381 DWExpose exp; 1357 DWExpose exp;
1382 int (*exposefunc)(HWND, DWExpose *, void *) = work.func; 1358 int (*exposefunc)(HWND, DWExpose *, void *) = work.func;
1383 1359
1393 { 1369 {
1394 SignalHandler work = _get_signal_handler(widget, data); 1370 SignalHandler work = _get_signal_handler(widget, data);
1395 static int _dw_recursing = 0; 1371 static int _dw_recursing = 0;
1396 int retval = FALSE; 1372 int retval = FALSE;
1397 1373
1398 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1399 if(_dw_recursing) 1374 if(_dw_recursing)
1400 return FALSE; 1375 return FALSE;
1401 1376
1402 if(work.window && GTK_IS_COMBO_BOX(widget)) 1377 if(work.window && GTK_IS_COMBO_BOX(widget))
1403 { 1378 {
1437 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 1412 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
1438 { 1413 {
1439 SignalHandler work = _get_signal_handler(widget, data); 1414 SignalHandler work = _get_signal_handler(widget, data);
1440 int retval = FALSE; 1415 int retval = FALSE;
1441 1416
1442 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1443 if(work.window) 1417 if(work.window)
1444 { 1418 {
1445 if(event->button == 3) 1419 if(event->button == 3)
1446 { 1420 {
1447 int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; 1421 int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func;
1500 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data) 1474 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data)
1501 { 1475 {
1502 GtkWidget *item = NULL, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); 1476 GtkWidget *item = NULL, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel);
1503 int retval = FALSE; 1477 int retval = FALSE;
1504 1478
1505 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1506 if(widget) 1479 if(widget)
1507 { 1480 {
1508 SignalHandler work = _get_signal_handler(widget, data); 1481 SignalHandler work = _get_signal_handler(widget, data);
1509 1482
1510 if(work.window) 1483 if(work.window)
1596 static gint _tree_expand_event(GtkTreeView *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer data) 1569 static gint _tree_expand_event(GtkTreeView *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer data)
1597 { 1570 {
1598 SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); 1571 SignalHandler work = _get_signal_handler((GtkWidget *)widget, data);
1599 int retval = FALSE; 1572 int retval = FALSE;
1600 1573
1601 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1602 if(!_dw_ignore_expand && work.window) 1574 if(!_dw_ignore_expand && work.window)
1603 { 1575 {
1604 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; 1576 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func;
1605 retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data); 1577 retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data);
1606 } 1578 }
1612 SignalHandler work = _get_signal_handler(widget, data); 1584 SignalHandler work = _get_signal_handler(widget, data);
1613 GdkEventKey *keyevent = (GdkEventKey *)event; 1585 GdkEventKey *keyevent = (GdkEventKey *)event;
1614 GdkEventButton *buttonevent = (GdkEventButton *)event; 1586 GdkEventButton *buttonevent = (GdkEventButton *)event;
1615 int retval = FALSE; 1587 int retval = FALSE;
1616 1588
1617 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1618 if(work.window) 1589 if(work.window)
1619 { 1590 {
1620 /* Handle both key and button events together */ 1591 /* Handle both key and button events together */
1621 if((event->type == GDK_2BUTTON_PRESS && buttonevent->button == 1) || 1592 if((event->type == GDK_2BUTTON_PRESS && buttonevent->button == 1) ||
1622 (event->type == GDK_KEY_PRESS && keyevent->keyval == VK_RETURN)) 1593 (event->type == GDK_KEY_PRESS && keyevent->keyval == VK_RETURN))
1679 static gint _switch_page_event(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer data) 1650 static gint _switch_page_event(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer data)
1680 { 1651 {
1681 SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); 1652 SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data);
1682 int retval = FALSE; 1653 int retval = FALSE;
1683 1654
1684 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1685 if(work.window) 1655 if(work.window)
1686 { 1656 {
1687 int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; 1657 int (*switchpagefunc)(HWND, unsigned long, void *) = work.func;
1688 retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data); 1658 retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data);
1689 } 1659 }
1699 1669
1700 if(handlerdata) 1670 if(handlerdata)
1701 { 1671 {
1702 work = _get_signal_handler(tree, GINT_TO_POINTER(handlerdata-1)); 1672 work = _get_signal_handler(tree, GINT_TO_POINTER(handlerdata-1));
1703 1673
1704 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1705 if(work.window) 1674 if(work.window)
1706 { 1675 {
1707 int column_num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "_dw_column")); 1676 int column_num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "_dw_column"));
1708 int (*clickcolumnfunc)(HWND, int, void *) = work.func; 1677 int (*clickcolumnfunc)(HWND, int, void *) = work.func;
1709 retval = clickcolumnfunc(work.window, column_num, work.data); 1678 retval = clickcolumnfunc(work.window, column_num, work.data);
1728 int val = _round_value(gtk_adjustment_get_value(adjustment)); 1697 int val = _round_value(gtk_adjustment_get_value(adjustment));
1729 GtkWidget *slider = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_slider"); 1698 GtkWidget *slider = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_slider");
1730 GtkWidget *spinbutton = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_spinbutton"); 1699 GtkWidget *spinbutton = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_spinbutton");
1731 GtkWidget *scrollbar = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_scrollbar"); 1700 GtkWidget *scrollbar = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_scrollbar");
1732 1701
1733 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1734 if (slider) 1702 if (slider)
1735 { 1703 {
1736 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); 1704 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data);
1737 1705
1738 if (work.window) 1706 if (work.window)
1761 1729
1762 static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) 1730 static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
1763 { 1731 {
1764 GtkWidget *next = (GtkWidget *)data; 1732 GtkWidget *next = (GtkWidget *)data;
1765 1733
1766 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__);
1767 if(next) 1734 if(next)
1768 { 1735 {
1769 if(event->keyval == GDK_KEY_Return) 1736 if(event->keyval == GDK_KEY_Return)
1770 { 1737 {
1771 if(GTK_IS_BUTTON(next)) 1738 if(GTK_IS_BUTTON(next))
1971 #endif 1938 #endif
1972 1939
1973 #ifdef USE_WEBKIT 1940 #ifdef USE_WEBKIT
1974 init_webkit(); 1941 init_webkit();
1975 #endif 1942 #endif
1976 /*
1977 * Setup logging/debugging
1978 */
1979 if ( (fname = getenv( "DWINDOWS_DEBUGFILE" ) ) != NULL )
1980 {
1981 dbgfp = fopen( fname, "w" );
1982 }
1983 1943
1984 return TRUE; 1944 return TRUE;
1985 } 1945 }
1986 1946
1987 /* 1947 /*
2188 dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_CANCEL); 2148 dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_CANCEL);
2189 return FALSE; 2149 return FALSE;
2190 } 2150 }
2191 2151
2192 /* 2152 /*
2153 * Displays a debug message on the console...
2154 * Parameters:
2155 * format: printf style format string.
2156 * ...: Additional variables for use in the format.
2157 */
2158 void API dw_debug(char *format, ...)
2159 {
2160 va_list args;
2161 char outbuf[1025] = {0};
2162
2163 va_start(args, format);
2164 vsnprintf(outbuf, 1024, format, args);
2165 va_end(args);
2166
2167 fprintf(stderr, "%s", outbuf);
2168 }
2169
2170 /*
2193 * Displays a Message Box with given text and title.. 2171 * Displays a Message Box with given text and title..
2194 * Parameters: 2172 * Parameters:
2195 * title: The title of the message box. 2173 * title: The title of the message box.
2196 * flags: Defines buttons and icons to display 2174 * flags: Defines buttons and icons to display
2197 * format: printf style format string. 2175 * format: printf style format string.
2201 { 2179 {
2202 HWND entrywindow, texttargetbox, imagetextbox, mainbox, okbutton, nobutton, yesbutton, cancelbutton, buttonbox, stext; 2180 HWND entrywindow, texttargetbox, imagetextbox, mainbox, okbutton, nobutton, yesbutton, cancelbutton, buttonbox, stext;
2203 ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_SIZEBORDER; 2181 ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_SIZEBORDER;
2204 DWDialog *dwwait; 2182 DWDialog *dwwait;
2205 va_list args; 2183 va_list args;
2206 char outbuf[1000]; 2184 char outbuf[1025] = {0};
2207 char **xpm_data = NULL; 2185 char **xpm_data = NULL;
2208 int x, y, extra_width=0,text_width,text_height; 2186 int x, y, extra_width=0,text_width,text_height;
2209 int width,height; 2187 int width,height;
2210 2188
2211 va_start(args, format); 2189 va_start(args, format);
2212 vsnprintf(outbuf, 999, format, args); 2190 vsnprintf(outbuf, 1024, format, args);
2213 va_end(args); 2191 va_end(args);
2214 2192
2215 entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle); 2193 entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle);
2216 mainbox = dw_box_new(DW_VERT, 10); 2194 mainbox = dw_box_new(DW_VERT, 10);
2217 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); 2195 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0);
3348 3326
3349 if (strlen(tempbuf) == 0) 3327 if (strlen(tempbuf) == 0)
3350 tmphandle=gtk_menu_item_new(); 3328 tmphandle=gtk_menu_item_new();
3351 else 3329 else
3352 { 3330 {
3331 char numbuf[11] = {0};
3332
3353 if (check) 3333 if (check)
3354 { 3334 {
3355 char numbuf[10];
3356
3357 tmphandle = gtk_check_menu_item_new_with_label(tempbuf); 3335 tmphandle = gtk_check_menu_item_new_with_label(tempbuf);
3358 if (accel && accel_group) 3336 if (accel && accel_group)
3359 { 3337 {
3360 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(tmphandle))), TRUE); 3338 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(tmphandle))), TRUE);
3361 #if 0 /* TODO: This isn't working right */ 3339 #if 0 /* TODO: This isn't working right */
3362 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); 3340 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0);
3363 #endif 3341 #endif
3364 } 3342 }
3365 sprintf(numbuf, "%lu", id); 3343 snprintf(numbuf, 10, "%lu", id);
3366 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle); 3344 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle);
3367 } 3345 }
3368 else 3346 else
3369 { 3347 {
3370 char numbuf[10];
3371
3372 tmphandle=gtk_menu_item_new_with_label(tempbuf); 3348 tmphandle=gtk_menu_item_new_with_label(tempbuf);
3373 if (accel && accel_group) 3349 if (accel && accel_group)
3374 { 3350 {
3375 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(tmphandle))), TRUE); 3351 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(tmphandle))), TRUE);
3376 #if 0 /* TODO: This isn't working right */ 3352 #if 0 /* TODO: This isn't working right */
3377 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); 3353 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0);
3378 #endif 3354 #endif
3379 } 3355 }
3380 sprintf(numbuf, "%lu", id); 3356 snprintf(numbuf, 10, "%lu", id);
3381 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle); 3357 g_object_set_data(G_OBJECT(menu), numbuf, (gpointer)tmphandle);
3382 } 3358 }
3383 } 3359 }
3384 3360
3385 gtk_widget_show(tmphandle); 3361 gtk_widget_show(tmphandle);
3386 3362
3387 if (submenu) 3363 if (submenu)
3388 { 3364 {
3389 char tempbuf[100]; 3365 char tempbuf[101] = {0};
3390 3366
3391 sprintf(tempbuf, "_dw_submenu%d", submenucount); 3367 snprintf(tempbuf, 100, "_dw_submenu%d", submenucount);
3392 submenucount++; 3368 submenucount++;
3393 gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu); 3369 gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu);
3394 g_object_set_data(G_OBJECT(menu), tempbuf, (gpointer)submenu); 3370 g_object_set_data(G_OBJECT(menu), tempbuf, (gpointer)submenu);
3395 g_object_set_data(G_OBJECT(menu), "_dw_submenucount", GINT_TO_POINTER(submenucount)); 3371 g_object_set_data(G_OBJECT(menu), "_dw_submenucount", GINT_TO_POINTER(submenucount));
3396 } 3372 }
3427 if((tmp = g_object_get_data(G_OBJECT(start), name))) 3403 if((tmp = g_object_get_data(G_OBJECT(start), name)))
3428 return tmp; 3404 return tmp;
3429 3405
3430 for(z=0;z<submenucount;z++) 3406 for(z=0;z<submenucount;z++)
3431 { 3407 {
3432 char tempbuf[100]; 3408 char tempbuf[101] = {0};
3433 GtkWidget *submenu, *menuitem; 3409 GtkWidget *submenu, *menuitem;
3434 3410
3435 sprintf(tempbuf, "_dw_submenu%d", z); 3411 snprintf(tempbuf, 100, "_dw_submenu%d", z);
3436 3412
3437 if((submenu = g_object_get_data(G_OBJECT(start), tempbuf))) 3413 if((submenu = g_object_get_data(G_OBJECT(start), tempbuf)))
3438 { 3414 {
3439 if((menuitem = _find_submenu_id(submenu, name))) 3415 if((menuitem = _find_submenu_id(submenu, name)))
3440 return menuitem; 3416 return menuitem;
3451 * check: TRUE for checked FALSE for not checked. 3427 * check: TRUE for checked FALSE for not checked.
3452 * deprecated: use dw_menu_item_set_state() 3428 * deprecated: use dw_menu_item_set_state()
3453 */ 3429 */
3454 void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) 3430 void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check)
3455 { 3431 {
3456 char numbuf[10]; 3432 char numbuf[11];
3457 GtkWidget *tmphandle; 3433 GtkWidget *tmphandle;
3458 int _locked_by_me = FALSE; 3434 int _locked_by_me = FALSE;
3459 3435
3460 if(!menu) 3436 if(!menu)
3461 return; 3437 return;
3462 3438
3463 DW_MUTEX_LOCK; 3439 DW_MUTEX_LOCK;
3464 sprintf(numbuf, "%lu", id); 3440 snprintf(numbuf, 10, "%lu", id);
3465 tmphandle = _find_submenu_id(menu, numbuf); 3441 tmphandle = _find_submenu_id(menu, numbuf);
3466 3442
3467 if(tmphandle) 3443 if(tmphandle)
3468 { 3444 {
3469 _dw_ignore_click = 1; 3445 _dw_ignore_click = 1;
3481 * id: Menuitem id. 3457 * id: Menuitem id.
3482 * state: TRUE for checked FALSE for not checked. 3458 * state: TRUE for checked FALSE for not checked.
3483 */ 3459 */
3484 void dw_menu_item_set_state(HMENUI menu, unsigned long id, unsigned long state) 3460 void dw_menu_item_set_state(HMENUI menu, unsigned long id, unsigned long state)
3485 { 3461 {
3486 char numbuf[10]; 3462 char numbuf[11] = {0};
3487 GtkWidget *tmphandle; 3463 GtkWidget *tmphandle;
3488 int check; 3464 int check;
3489 int _locked_by_me = FALSE; 3465 int _locked_by_me = FALSE;
3490 3466
3491 if(!menu) 3467 if(!menu)
3492 return; 3468 return;
3493 3469
3494 DW_MUTEX_LOCK; 3470 DW_MUTEX_LOCK;
3495 sprintf(numbuf, "%lu", id); 3471 snprintf(numbuf, 10, "%lu", id);
3496 tmphandle = _find_submenu_id(menu, numbuf); 3472 tmphandle = _find_submenu_id(menu, numbuf);
3497 3473
3498 if ( (state & DW_MIS_CHECKED) || (state & DW_MIS_UNCHECKED) ) 3474 if ( (state & DW_MIS_CHECKED) || (state & DW_MIS_UNCHECKED) )
3499 { 3475 {
3500 if ( state & DW_MIS_CHECKED ) 3476 if ( state & DW_MIS_CHECKED )
5430 } 5406 }
5431 5407
5432 static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) 5408 static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
5433 { 5409 {
5434 int z; 5410 int z;
5435 char numbuf[20]; 5411 char numbuf[21];
5436 GtkWidget *tree; 5412 GtkWidget *tree;
5437 GtkListStore *store; 5413 GtkListStore *store;
5438 GtkTreeViewColumn *col; 5414 GtkTreeViewColumn *col;
5439 GtkCellRenderer *rend; 5415 GtkCellRenderer *rend;
5440 GtkTreeSelection *sel; 5416 GtkTreeSelection *sel;
5483 tree = _tree_setup(handle, GTK_TREE_MODEL(store)); 5459 tree = _tree_setup(handle, GTK_TREE_MODEL(store));
5484 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)); 5460 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER));
5485 /* Second loop... create the columns */ 5461 /* Second loop... create the columns */
5486 for(z=0;z<count;z++) 5462 for(z=0;z<count;z++)
5487 { 5463 {
5488 sprintf(numbuf, "_dw_cont_col%d", z); 5464 snprintf(numbuf, 20, "_dw_cont_col%d", z);
5489 g_object_set_data(G_OBJECT(tree), numbuf, GINT_TO_POINTER(flags[z])); 5465 g_object_set_data(G_OBJECT(tree), numbuf, GINT_TO_POINTER(flags[z]));
5490 col = gtk_tree_view_column_new(); 5466 col = gtk_tree_view_column_new();
5491 rend = NULL; 5467 rend = NULL;
5492 5468
5493 if(z == 0 && flags[z] & DW_CFA_STRINGANDICON) 5469 if(z == 0 && flags[z] & DW_CFA_STRINGANDICON)
5758 * Internal representation of dw_container_set_item() extracted so we can pass 5734 * Internal representation of dw_container_set_item() extracted so we can pass
5759 * two data pointers; icon and text for dw_filesystem_set_item(). 5735 * two data pointers; icon and text for dw_filesystem_set_item().
5760 */ 5736 */
5761 void _dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) 5737 void _dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data)
5762 { 5738 {
5763 char numbuf[20], textbuffer[100]; 5739 char numbuf[21], textbuffer[101];
5764 int flag = 0; 5740 int flag = 0;
5765 GtkWidget *cont; 5741 GtkWidget *cont;
5766 GtkListStore *store = NULL; 5742 GtkListStore *store = NULL;
5767 int _locked_by_me = FALSE; 5743 int _locked_by_me = FALSE;
5768 5744
5775 5751
5776 if(store) 5752 if(store)
5777 { 5753 {
5778 GtkTreeIter iter; 5754 GtkTreeIter iter;
5779 5755
5780 sprintf(numbuf, "_dw_cont_col%d", column); 5756 snprintf(numbuf, 20, "_dw_cont_col%d", column);
5781 flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), numbuf)); 5757 flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), numbuf));
5782 if(pointer) 5758 if(pointer)
5783 { 5759 {
5784 row += GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), "_dw_insertpos")); 5760 row += GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), "_dw_insertpos"));
5785 } 5761 }
5950 { 5926 {
5951 DW_MUTEX_UNLOCK; 5927 DW_MUTEX_UNLOCK;
5952 return 0; 5928 return 0;
5953 } 5929 }
5954 5930
5955 sprintf(numbuf, "_dw_cont_col%d", column); 5931 snprintf(numbuf, 20, "_dw_cont_col%d", column);
5956 flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), numbuf)); 5932 flag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cont), numbuf));
5957 5933
5958 if(flag & DW_CFA_BITMAPORICON) 5934 if(flag & DW_CFA_BITMAPORICON)
5959 rc = DW_CFA_BITMAPORICON; 5935 rc = DW_CFA_BITMAPORICON;
5960 else if(flag & DW_CFA_STRING) 5936 else if(flag & DW_CFA_STRING)
7489 */ 7465 */
7490 int dw_module_load(char *name, HMOD *handle) 7466 int dw_module_load(char *name, HMOD *handle)
7491 { 7467 {
7492 int len; 7468 int len;
7493 char *newname; 7469 char *newname;
7494 char errorbuf[1024]; 7470 char errorbuf[1025] = {0};
7495 7471
7496 7472
7497 if(!handle) 7473 if(!handle)
7498 return -1; 7474 return -1;
7499 7475
8110 * size: Size in bytes of the shared memory region to allocate. 8086 * size: Size in bytes of the shared memory region to allocate.
8111 * name: A string pointer to a unique memory name. 8087 * name: A string pointer to a unique memory name.
8112 */ 8088 */
8113 HSHM dw_named_memory_new(void **dest, int size, char *name) 8089 HSHM dw_named_memory_new(void **dest, int size, char *name)
8114 { 8090 {
8115 char namebuf[1024]; 8091 char namebuf[1025];
8116 struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); 8092 struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm));
8117 8093
8118 mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); 8094 mkdir("/tmp/.dw", S_IWGRP|S_IWOTH);
8119 sprintf(namebuf, "/tmp/.dw/%s", name); 8095 snprintf(namebuf, 1024, "/tmp/.dw/%s", name);
8120 8096
8121 if((handle->fd = open(namebuf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) 8097 if((handle->fd = open(namebuf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0)
8122 { 8098 {
8123 free(handle); 8099 free(handle);
8124 return NULL; 8100 return NULL;
8156 * size: Size in bytes of the shared memory region to requested. 8132 * size: Size in bytes of the shared memory region to requested.
8157 * name: A string pointer to a unique memory name. 8133 * name: A string pointer to a unique memory name.
8158 */ 8134 */
8159 HSHM dw_named_memory_get(void **dest, int size, char *name) 8135 HSHM dw_named_memory_get(void **dest, int size, char *name)
8160 { 8136 {
8161 char namebuf[1024]; 8137 char namebuf[1025];
8162 struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); 8138 struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm));
8163 8139
8164 mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); 8140 mkdir("/tmp/.dw", S_IWGRP|S_IWOTH);
8165 sprintf(namebuf, "/tmp/.dw/%s", name); 8141 snprintf(namebuf, 1024, "/tmp/.dw/%s", name);
8166 8142
8167 if((handle->fd = open(namebuf, O_RDWR)) < 0) 8143 if((handle->fd = open(namebuf, O_RDWR)) < 0)
8168 { 8144 {
8169 free(handle); 8145 free(handle);
8170 return NULL; 8146 return NULL;
8255 * Parameters: 8231 * Parameters:
8256 * exitcode: Exit code reported to the operating system. 8232 * exitcode: Exit code reported to the operating system.
8257 */ 8233 */
8258 void dw_exit(int exitcode) 8234 void dw_exit(int exitcode)
8259 { 8235 {
8260 if ( dbgfp != NULL )
8261 {
8262 fclose( dbgfp );
8263 }
8264 exit(exitcode); 8236 exit(exitcode);
8265 } 8237 }
8266 8238
8267 /* Internal box packing function called by the other 3 functions */ 8239 /* Internal box packing function called by the other 3 functions */
8268 void _dw_box_pack(HWND box, HWND item, int index, int width, int height, int hsize, int vsize, int pad, char *funcname) 8240 void _dw_box_pack(HWND box, HWND item, int index, int width, int height, int hsize, int vsize, int pad, char *funcname)
8804 { 8776 {
8805 for(z=0;z<256;z++) 8777 for(z=0;z<256;z++)
8806 { 8778 {
8807 if(!pagearray[z]) 8779 if(!pagearray[z])
8808 { 8780 {
8809 char text[100]; 8781 char text[101] = {0};
8810 int num = z; 8782 int num = z;
8811 8783
8812 if(front) 8784 if(front)
8813 num |= 1 << 16; 8785 num |= 1 << 16;
8814 8786
8815 sprintf(text, "_dw_page%d", z); 8787 snprintf(text, 100, "_dw_page%d", z);
8816 /* Save the real id and the creation flags */ 8788 /* Save the real id and the creation flags */
8817 g_object_set_data(G_OBJECT(handle), text, GINT_TO_POINTER(num)); 8789 g_object_set_data(G_OBJECT(handle), text, GINT_TO_POINTER(num));
8818 DW_MUTEX_UNLOCK; 8790 DW_MUTEX_UNLOCK;
8819 return z; 8791 return z;
8820 } 8792 }
8917 8889
8918 DW_MUTEX_LOCK; 8890 DW_MUTEX_LOCK;
8919 realpage = _get_physical_page(handle, pageid); 8891 realpage = _get_physical_page(handle, pageid);
8920 if(realpage < 0 || realpage > 255) 8892 if(realpage < 0 || realpage > 255)
8921 { 8893 {
8922 char ptext[100]; 8894 char ptext[101] = {0};
8923 int num; 8895 int num;
8924 8896
8925 sprintf(ptext, "_dw_page%d", (int)pageid); 8897 snprintf(ptext, 100, "_dw_page%d", (int)pageid);
8926 num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(handle), ptext)); 8898 num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(handle), ptext));
8927 realpage = 0xFF & num; 8899 realpage = 0xFF & num;
8928 } 8900 }
8929 8901
8930 if(realpage > -1 && realpage < 256) 8902 if(realpage > -1 && realpage < 256)
8958 void dw_notebook_pack(HWND handle, unsigned long pageid, HWND page) 8930 void dw_notebook_pack(HWND handle, unsigned long pageid, HWND page)
8959 { 8931 {
8960 GtkWidget *label, *child, *oldlabel, **pagearray; 8932 GtkWidget *label, *child, *oldlabel, **pagearray;
8961 const gchar *text = NULL; 8933 const gchar *text = NULL;
8962 int num, z, realpage = -1, pad, _locked_by_me = FALSE; 8934 int num, z, realpage = -1, pad, _locked_by_me = FALSE;
8963 char ptext[100]; 8935 char ptext[101] = {0};
8964 8936
8965 DW_MUTEX_LOCK; 8937 DW_MUTEX_LOCK;
8966 sprintf(ptext, "_dw_page%d", (int)pageid); 8938 snprintf(ptext, 100, "_dw_page%d", (int)pageid);
8967 num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(handle), ptext)); 8939 num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(handle), ptext));
8968 g_object_set_data(G_OBJECT(handle), ptext, NULL); 8940 g_object_set_data(G_OBJECT(handle), ptext, NULL);
8969 pagearray = (GtkWidget **)g_object_get_data(G_OBJECT(handle), "_dw_pagearray"); 8941 pagearray = (GtkWidget **)g_object_get_data(G_OBJECT(handle), "_dw_pagearray");
8970 8942
8971 if(!pagearray) 8943 if(!pagearray)
10683 /* Internal function to get the state of the timer before firing */ 10655 /* Internal function to get the state of the timer before firing */
10684 gboolean _dw_timer_func(gpointer data) 10656 gboolean _dw_timer_func(gpointer data)
10685 { 10657 {
10686 void (*sigfunc)(void *data) = NULL; 10658 void (*sigfunc)(void *data) = NULL;
10687 void *sdata; 10659 void *sdata;
10688 char tmpbuf[30]; 10660 char tmpbuf[31] = {0};
10689 int *tag = data; 10661 int *tag = data;
10690 10662
10691 if(tag) 10663 if(tag)
10692 { 10664 {
10693 snprintf(tmpbuf, 30, "_dw_timer%d", *tag); 10665 snprintf(tmpbuf, 30, "_dw_timer%d", *tag);
10715 * Timer ID for use with dw_timer_disconnect(), 0 on error. 10687 * Timer ID for use with dw_timer_disconnect(), 0 on error.
10716 */ 10688 */
10717 int API dw_timer_connect(int interval, void *sigfunc, void *data) 10689 int API dw_timer_connect(int interval, void *sigfunc, void *data)
10718 { 10690 {
10719 int *tag, _locked_by_me = FALSE; 10691 int *tag, _locked_by_me = FALSE;
10720 char tmpbuf[30]; 10692 char tmpbuf[31] = {0};
10721 10693
10722 tag = calloc(1, sizeof(int)); 10694 tag = calloc(1, sizeof(int));
10723 10695
10724 DW_MUTEX_LOCK; 10696 DW_MUTEX_LOCK;
10725 *tag = g_timeout_add(interval, (GSourceFunc)_dw_timer_func, (gpointer)tag); 10697 *tag = g_timeout_add(interval, (GSourceFunc)_dw_timer_func, (gpointer)tag);
10737 * id: Timer ID returned by dw_timer_connect(). 10709 * id: Timer ID returned by dw_timer_connect().
10738 */ 10710 */
10739 void API dw_timer_disconnect(int id) 10711 void API dw_timer_disconnect(int id)
10740 { 10712 {
10741 int _locked_by_me = FALSE; 10713 int _locked_by_me = FALSE;
10742 char tmpbuf[30]; 10714 char tmpbuf[31] = {0};
10743 10715
10744 snprintf(tmpbuf, 30, "_dw_timer%d", id); 10716 snprintf(tmpbuf, 30, "_dw_timer%d", id);
10745 DW_MUTEX_LOCK; 10717 DW_MUTEX_LOCK;
10746 g_object_set_data(G_OBJECT(_DWObject), tmpbuf, NULL); 10718 g_object_set_data(G_OBJECT(_DWObject), tmpbuf, NULL);
10747 snprintf(tmpbuf, 30, "_dw_timerdata%d", id); 10719 snprintf(tmpbuf, 30, "_dw_timerdata%d", id);