Mercurial > dwindows
comparison gtk/dw.c @ 636:f6f887d2c5aa
Add _dw_log() internal logging function
Preliminary support for building with GTK+ on Windows with MinGW
Deprecate dw_menu_item_set_check(); use dw_menu_item_set_state()
Support dw_window_set_text() from groupbox
Support transparent bitmaps( GTK+ already did by default)
author | mhessling@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 10 Apr 2009 22:55:56 +0000 |
parents | 87db549e79bc |
children | 06be879f5137 |
comparison
equal
deleted
inserted
replaced
635:6cec85b90635 | 636:f6f887d2c5aa |
---|---|
5 * | 5 * |
6 * (C) 2000-2004 Brian Smith <dbsoft@technologist.com> | 6 * (C) 2000-2004 Brian Smith <dbsoft@technologist.com> |
7 * (C) 2003-2004 Mark Hessling <m.hessling@qut.edu.au> | 7 * (C) 2003-2004 Mark Hessling <m.hessling@qut.edu.au> |
8 * (C) 2002 Nickolay V. Shmyrev <shmyrev@yandex.ru> | 8 * (C) 2002 Nickolay V. Shmyrev <shmyrev@yandex.ru> |
9 */ | 9 */ |
10 #include "config.h" | |
10 #include "dw.h" | 11 #include "dw.h" |
11 #include <string.h> | 12 #include <string.h> |
12 #include <stdlib.h> | 13 #include <stdlib.h> |
13 #include <sys/utsname.h> | 14 #if !defined(GDK_WINDOWING_WIN32) |
15 # include <sys/utsname.h> | |
16 # include <sys/socket.h> | |
17 # include <sys/un.h> | |
18 # include <sys/mman.h> | |
19 #endif | |
14 #include <stdarg.h> | 20 #include <stdarg.h> |
15 #include <stdio.h> | 21 #include <stdio.h> |
16 #include <unistd.h> | 22 #include <unistd.h> |
17 #include <errno.h> | 23 #include <errno.h> |
18 #include <sys/time.h> | 24 #include <sys/time.h> |
19 #include <dirent.h> | 25 #include <dirent.h> |
20 #include <sys/stat.h> | 26 #include <sys/stat.h> |
21 #include <signal.h> | 27 #include <signal.h> |
22 #include <sys/socket.h> | |
23 #include <sys/un.h> | |
24 #include <sys/mman.h> | |
25 #include <fcntl.h> | 28 #include <fcntl.h> |
26 #include <unistd.h> | 29 #include <unistd.h> |
27 #include "config.h" | |
28 #include <gdk/gdkkeysyms.h> | 30 #include <gdk/gdkkeysyms.h> |
29 #ifdef USE_IMLIB | 31 #ifdef USE_IMLIB |
30 #include <gdk_imlib.h> | 32 #include <gdk_imlib.h> |
31 #endif | 33 #endif |
32 #ifdef USE_GTKMOZEMBED | 34 #ifdef USE_GTKMOZEMBED |
34 #undef GTK_TYPE_MOZ_EMBED | 36 #undef GTK_TYPE_MOZ_EMBED |
35 #define GTK_TYPE_MOZ_EMBED (_dw_moz_embed_get_type()) | 37 #define GTK_TYPE_MOZ_EMBED (_dw_moz_embed_get_type()) |
36 #endif | 38 #endif |
37 #if GTK_MAJOR_VERSION > 1 | 39 #if GTK_MAJOR_VERSION > 1 |
38 #include <gdk-pixbuf/gdk-pixbuf.h> | 40 #include <gdk-pixbuf/gdk-pixbuf.h> |
41 #endif | |
42 | |
43 #if __STDC_VERSION__ < 199901L | |
44 # if __GNUC__ >= 2 | |
45 # define __func__ __FUNCTION__ | |
46 # else | |
47 # define __func__ "<unknown>" | |
48 # endif | |
39 #endif | 49 #endif |
40 | 50 |
41 #include "gtk/messagebox_error.xpm" | 51 #include "gtk/messagebox_error.xpm" |
42 #include "gtk/messagebox_warning.xpm" | 52 #include "gtk/messagebox_warning.xpm" |
43 #include "gtk/messagebox_information.xpm" | 53 #include "gtk/messagebox_information.xpm" |
90 #endif | 100 #endif |
91 | 101 |
92 #ifndef min | 102 #ifndef min |
93 # define min(a,b) (((a) < (b)) ? (a) : (b)) | 103 # define min(a,b) (((a) < (b)) ? (a) : (b)) |
94 #endif | 104 #endif |
105 | |
106 FILE *dbgfp = NULL; | |
95 | 107 |
96 DWTID _dw_thread_list[DW_THREAD_LIMIT]; | 108 DWTID _dw_thread_list[DW_THREAD_LIMIT]; |
97 GdkColor _foreground[DW_THREAD_LIMIT]; | 109 GdkColor _foreground[DW_THREAD_LIMIT]; |
98 GdkColor _background[DW_THREAD_LIMIT]; | 110 GdkColor _background[DW_THREAD_LIMIT]; |
99 int _transparent[DW_THREAD_LIMIT]; | 111 int _transparent[DW_THREAD_LIMIT]; |
302 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget); | 314 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget); |
303 static void gtk_mdi_remove_true(GtkContainer *container, GtkWidget *widget); | 315 static void gtk_mdi_remove_true(GtkContainer *container, GtkWidget *widget); |
304 static void gtk_mdi_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); | 316 static void gtk_mdi_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); |
305 | 317 |
306 static GtkMdiChild *get_child(GtkMdi *mdi, GtkWidget * widget); | 318 static GtkMdiChild *get_child(GtkMdi *mdi, GtkWidget * widget); |
319 | |
320 static void _dw_log( char *format, ... ) | |
321 { | |
322 va_list args; | |
323 va_start(args, format); | |
324 if ( dbgfp != NULL ) | |
325 { | |
326 vfprintf( dbgfp, format, args ); | |
327 fflush( dbgfp ); | |
328 } | |
329 va_end(args); | |
330 } | |
307 | 331 |
308 static GtkType gtk_mdi_get_type(void) | 332 static GtkType gtk_mdi_get_type(void) |
309 { | 333 { |
310 static GType mdi_type = 0; | 334 static GType mdi_type = 0; |
311 | 335 |
1209 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) | 1233 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) |
1210 { | 1234 { |
1211 SignalHandler work = _get_signal_handler((GtkWidget *)window, data); | 1235 SignalHandler work = _get_signal_handler((GtkWidget *)window, data); |
1212 int retval = FALSE; | 1236 int retval = FALSE; |
1213 | 1237 |
1238 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1214 if(work.window) | 1239 if(work.window) |
1215 { | 1240 { |
1216 int (*setfocusfunc)(HWND, void *) = work.func; | 1241 int (*setfocusfunc)(HWND, void *) = work.func; |
1217 | 1242 |
1218 retval = setfocusfunc(work.window, work.data); | 1243 retval = setfocusfunc(work.window, work.data); |
1223 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | 1248 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
1224 { | 1249 { |
1225 SignalHandler work = _get_signal_handler(widget, data); | 1250 SignalHandler work = _get_signal_handler(widget, data); |
1226 int retval = FALSE; | 1251 int retval = FALSE; |
1227 | 1252 |
1253 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1228 if(work.window) | 1254 if(work.window) |
1229 { | 1255 { |
1230 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; | 1256 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; |
1231 int mybutton = event->button; | 1257 int mybutton = event->button; |
1232 | 1258 |
1243 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | 1269 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
1244 { | 1270 { |
1245 SignalHandler work = _get_signal_handler(widget, data); | 1271 SignalHandler work = _get_signal_handler(widget, data); |
1246 int retval = FALSE; | 1272 int retval = FALSE; |
1247 | 1273 |
1274 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1248 if(work.window) | 1275 if(work.window) |
1249 { | 1276 { |
1250 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; | 1277 int (*buttonfunc)(HWND, int, int, int, void *) = work.func; |
1251 int mybutton = event->button; | 1278 int mybutton = event->button; |
1252 | 1279 |
1263 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) | 1290 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) |
1264 { | 1291 { |
1265 SignalHandler work = _get_signal_handler(widget, data); | 1292 SignalHandler work = _get_signal_handler(widget, data); |
1266 int retval = FALSE; | 1293 int retval = FALSE; |
1267 | 1294 |
1295 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1268 if(work.window) | 1296 if(work.window) |
1269 { | 1297 { |
1270 int (*motionfunc)(HWND, int, int, int, void *) = work.func; | 1298 int (*motionfunc)(HWND, int, int, int, void *) = work.func; |
1271 int keys = 0, x, y; | 1299 int keys = 0, x, y; |
1272 GdkModifierType state; | 1300 GdkModifierType state; |
1295 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) | 1323 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) |
1296 { | 1324 { |
1297 SignalHandler work = _get_signal_handler(widget, data); | 1325 SignalHandler work = _get_signal_handler(widget, data); |
1298 int retval = FALSE; | 1326 int retval = FALSE; |
1299 | 1327 |
1328 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1300 if(work.window) | 1329 if(work.window) |
1301 { | 1330 { |
1302 int (*closefunc)(HWND, void *) = work.func; | 1331 int (*closefunc)(HWND, void *) = work.func; |
1303 | 1332 |
1304 retval = closefunc(work.window, work.data); | 1333 retval = closefunc(work.window, work.data); |
1309 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) | 1338 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) |
1310 { | 1339 { |
1311 SignalHandler work = _get_signal_handler(widget, data); | 1340 SignalHandler work = _get_signal_handler(widget, data); |
1312 int retval = FALSE; | 1341 int retval = FALSE; |
1313 | 1342 |
1343 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1314 if(work.window) | 1344 if(work.window) |
1315 { | 1345 { |
1316 int (*keypressfunc)(HWND, char, int, int, void *) = work.func; | 1346 int (*keypressfunc)(HWND, char, int, int, void *) = work.func; |
1317 | 1347 |
1318 retval = keypressfunc(work.window, *event->string, event->keyval, | 1348 retval = keypressfunc(work.window, *event->string, event->keyval, |
1324 static gint _generic_event(GtkWidget *widget, gpointer data) | 1354 static gint _generic_event(GtkWidget *widget, gpointer data) |
1325 { | 1355 { |
1326 SignalHandler work = _get_signal_handler(widget, data); | 1356 SignalHandler work = _get_signal_handler(widget, data); |
1327 int retval = FALSE; | 1357 int retval = FALSE; |
1328 | 1358 |
1359 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1329 if(work.window) | 1360 if(work.window) |
1330 { | 1361 { |
1331 int (*genericfunc)(HWND, void *) = work.func; | 1362 int (*genericfunc)(HWND, void *) = work.func; |
1332 | 1363 |
1333 retval = genericfunc(work.window, work.data); | 1364 retval = genericfunc(work.window, work.data); |
1338 static gint _activate_event(GtkWidget *widget, gpointer data) | 1369 static gint _activate_event(GtkWidget *widget, gpointer data) |
1339 { | 1370 { |
1340 SignalHandler work = _get_signal_handler(widget, data); | 1371 SignalHandler work = _get_signal_handler(widget, data); |
1341 int retval = FALSE; | 1372 int retval = FALSE; |
1342 | 1373 |
1374 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1343 if(work.window && !_dw_ignore_click) | 1375 if(work.window && !_dw_ignore_click) |
1344 { | 1376 { |
1345 int (*activatefunc)(HWND, void *) = work.func; | 1377 int (*activatefunc)(HWND, void *) = work.func; |
1346 | 1378 |
1347 retval = activatefunc(popup ? popup : work.window, work.data); | 1379 retval = activatefunc(popup ? popup : work.window, work.data); |
1380 popup = NULL; | |
1348 } | 1381 } |
1349 return retval; | 1382 return retval; |
1350 } | 1383 } |
1351 | 1384 |
1352 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) | 1385 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) |
1353 { | 1386 { |
1354 SignalHandler work = _get_signal_handler(widget, data); | 1387 SignalHandler work = _get_signal_handler(widget, data); |
1355 int retval = FALSE; | 1388 int retval = FALSE; |
1356 | 1389 |
1390 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1357 if(work.window) | 1391 if(work.window) |
1358 { | 1392 { |
1359 int (*sizefunc)(HWND, int, int, void *) = work.func; | 1393 int (*sizefunc)(HWND, int, int, void *) = work.func; |
1360 | 1394 |
1361 retval = sizefunc(work.window, event->width, event->height, work.data); | 1395 retval = sizefunc(work.window, event->width, event->height, work.data); |
1366 static gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) | 1400 static gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) |
1367 { | 1401 { |
1368 SignalHandler work = _get_signal_handler(widget, data); | 1402 SignalHandler work = _get_signal_handler(widget, data); |
1369 int retval = FALSE; | 1403 int retval = FALSE; |
1370 | 1404 |
1405 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1371 if(work.window) | 1406 if(work.window) |
1372 { | 1407 { |
1373 DWExpose exp; | 1408 DWExpose exp; |
1374 int (*exposefunc)(HWND, DWExpose *, void *) = work.func; | 1409 int (*exposefunc)(HWND, DWExpose *, void *) = work.func; |
1375 | 1410 |
1386 { | 1421 { |
1387 SignalHandler work = _get_signal_handler(widget, data); | 1422 SignalHandler work = _get_signal_handler(widget, data); |
1388 static int _dw_recursing = 0; | 1423 static int _dw_recursing = 0; |
1389 int retval = FALSE; | 1424 int retval = FALSE; |
1390 | 1425 |
1426 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1391 if(_dw_recursing) | 1427 if(_dw_recursing) |
1392 return FALSE; | 1428 return FALSE; |
1393 | 1429 |
1394 if(work.window) | 1430 if(work.window) |
1395 { | 1431 { |
1429 static gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | 1465 static gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
1430 { | 1466 { |
1431 SignalHandler work = _get_signal_handler(widget, data); | 1467 SignalHandler work = _get_signal_handler(widget, data); |
1432 int retval = FALSE; | 1468 int retval = FALSE; |
1433 | 1469 |
1470 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1434 if(work.window) | 1471 if(work.window) |
1435 { | 1472 { |
1436 if(event->button == 3) | 1473 if(event->button == 3) |
1437 { | 1474 { |
1438 int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; | 1475 int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; |
1451 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | 1488 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
1452 { | 1489 { |
1453 SignalHandler work = _get_signal_handler(widget, data); | 1490 SignalHandler work = _get_signal_handler(widget, data); |
1454 int retval = FALSE; | 1491 int retval = FALSE; |
1455 | 1492 |
1493 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1456 if(work.window) | 1494 if(work.window) |
1457 { | 1495 { |
1458 if(event->button == 3) | 1496 if(event->button == 3) |
1459 { | 1497 { |
1460 #if GTK_MAJOR_VERSION > 1 | 1498 #if GTK_MAJOR_VERSION > 1 |
1507 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data) | 1545 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data) |
1508 { | 1546 { |
1509 GtkWidget *item, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); | 1547 GtkWidget *item, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); |
1510 int retval = FALSE; | 1548 int retval = FALSE; |
1511 | 1549 |
1550 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1512 if(widget) | 1551 if(widget) |
1513 { | 1552 { |
1514 SignalHandler work = _get_signal_handler(widget, data); | 1553 SignalHandler work = _get_signal_handler(widget, data); |
1515 | 1554 |
1516 if(work.window) | 1555 if(work.window) |
1534 static gint _tree_expand_event(GtkTreeView *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer data) | 1573 static gint _tree_expand_event(GtkTreeView *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer data) |
1535 { | 1574 { |
1536 SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); | 1575 SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); |
1537 int retval = FALSE; | 1576 int retval = FALSE; |
1538 | 1577 |
1578 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1539 if(!_dw_ignore_expand && work.window) | 1579 if(!_dw_ignore_expand && work.window) |
1540 { | 1580 { |
1541 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; | 1581 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; |
1542 retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data); | 1582 retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data); |
1543 } | 1583 } |
1548 { | 1588 { |
1549 SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); | 1589 SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); |
1550 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); | 1590 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); |
1551 int retval = FALSE; | 1591 int retval = FALSE; |
1552 | 1592 |
1593 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1553 if(treeroot && GTK_IS_TREE(treeroot)) | 1594 if(treeroot && GTK_IS_TREE(treeroot)) |
1554 { | 1595 { |
1555 GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "_dw_lastselect"); | 1596 GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "_dw_lastselect"); |
1556 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) | 1597 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) |
1557 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); | 1598 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); |
1571 static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data) | 1612 static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data) |
1572 { | 1613 { |
1573 SignalHandler work = _get_signal_handler((GtkWidget *)treeitem, data); | 1614 SignalHandler work = _get_signal_handler((GtkWidget *)treeitem, data); |
1574 int retval = FALSE; | 1615 int retval = FALSE; |
1575 | 1616 |
1617 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1576 if(!_dw_ignore_expand && work.window) | 1618 if(!_dw_ignore_expand && work.window) |
1577 { | 1619 { |
1578 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; | 1620 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; |
1579 retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); | 1621 retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); |
1580 } | 1622 } |
1585 static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | 1627 static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
1586 { | 1628 { |
1587 SignalHandler work = _get_signal_handler(widget, data); | 1629 SignalHandler work = _get_signal_handler(widget, data); |
1588 int retval = FALSE; | 1630 int retval = FALSE; |
1589 | 1631 |
1632 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1590 if(work.window) | 1633 if(work.window) |
1591 { | 1634 { |
1592 if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) | 1635 if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) |
1593 { | 1636 { |
1594 int (*contextfunc)(HWND, char *, void *) = work.func; | 1637 int (*contextfunc)(HWND, char *, void *) = work.func; |
1608 static gint _container_enter_event(GtkWidget *widget, GdkEventKey *event, gpointer data) | 1651 static gint _container_enter_event(GtkWidget *widget, GdkEventKey *event, gpointer data) |
1609 { | 1652 { |
1610 SignalHandler work = _get_signal_handler(widget, data); | 1653 SignalHandler work = _get_signal_handler(widget, data); |
1611 int retval = FALSE; | 1654 int retval = FALSE; |
1612 | 1655 |
1656 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1613 if(work.window && event->keyval == VK_RETURN) | 1657 if(work.window && event->keyval == VK_RETURN) |
1614 { | 1658 { |
1615 int (*contextfunc)(HWND, char *, void *) = work.func; | 1659 int (*contextfunc)(HWND, char *, void *) = work.func; |
1616 char *text; | 1660 char *text; |
1617 | 1661 |
1643 static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data) | 1687 static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data) |
1644 { | 1688 { |
1645 SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); | 1689 SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); |
1646 int retval = FALSE; | 1690 int retval = FALSE; |
1647 | 1691 |
1692 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1648 if(work.window) | 1693 if(work.window) |
1649 { | 1694 { |
1650 int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; | 1695 int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; |
1651 retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data); | 1696 retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data); |
1652 } | 1697 } |
1656 static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data) | 1701 static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data) |
1657 { | 1702 { |
1658 SignalHandler work = _get_signal_handler(widget, data); | 1703 SignalHandler work = _get_signal_handler(widget, data); |
1659 int retval = FALSE; | 1704 int retval = FALSE; |
1660 | 1705 |
1706 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1661 if(work.window) | 1707 if(work.window) |
1662 { | 1708 { |
1663 int (*clickcolumnfunc)(HWND, int, void *) = work.func; | 1709 int (*clickcolumnfunc)(HWND, int, void *) = work.func; |
1664 retval = clickcolumnfunc(work.window, column_num, work.data); | 1710 retval = clickcolumnfunc(work.window, column_num, work.data); |
1665 } | 1711 } |
1670 { | 1716 { |
1671 SignalHandler work = _get_signal_handler(widget, data); | 1717 SignalHandler work = _get_signal_handler(widget, data); |
1672 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | 1718 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); |
1673 int (*contextfunc)(HWND, HWND, char *, void *, void *) = work.func; | 1719 int (*contextfunc)(HWND, HWND, char *, void *, void *) = work.func; |
1674 | 1720 |
1721 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1675 if(!work.window) | 1722 if(!work.window) |
1676 return TRUE; | 1723 return TRUE; |
1677 | 1724 |
1678 if(gtk_object_get_data(GTK_OBJECT(widget), "_dw_double_click")) | 1725 if(gtk_object_get_data(GTK_OBJECT(widget), "_dw_double_click")) |
1679 { | 1726 { |
1699 int val = _round_value(adjustment->value); | 1746 int val = _round_value(adjustment->value); |
1700 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); | 1747 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); |
1701 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); | 1748 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); |
1702 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); | 1749 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); |
1703 | 1750 |
1751 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1704 if (slider) | 1752 if (slider) |
1705 { | 1753 { |
1706 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); | 1754 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); |
1707 | 1755 |
1708 if (work.window) | 1756 if (work.window) |
1731 | 1779 |
1732 static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) | 1780 static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) |
1733 { | 1781 { |
1734 GtkWidget *next = (GtkWidget *)data; | 1782 GtkWidget *next = (GtkWidget *)data; |
1735 | 1783 |
1784 if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); | |
1736 if(next) | 1785 if(next) |
1737 { | 1786 { |
1738 if(event->keyval == GDK_Return) | 1787 if(event->keyval == GDK_Return) |
1739 { | 1788 { |
1740 if(GTK_IS_BUTTON(next)) | 1789 if(GTK_IS_BUTTON(next)) |
1829 return gdk_pixbuf_new_from_xpm_data((const char **)data); | 1878 return gdk_pixbuf_new_from_xpm_data((const char **)data); |
1830 return NULL; | 1879 return NULL; |
1831 } | 1880 } |
1832 #endif | 1881 #endif |
1833 | 1882 |
1883 #if defined(GDK_WINDOWING_X11) | |
1834 static void _size_allocate(GtkWindow *window) | 1884 static void _size_allocate(GtkWindow *window) |
1835 { | 1885 { |
1836 XSizeHints sizehints; | 1886 XSizeHints sizehints; |
1837 | 1887 |
1838 sizehints.base_width = 1; | 1888 sizehints.base_width = 1; |
1847 XSetWMNormalHints (GDK_DISPLAY(), | 1897 XSetWMNormalHints (GDK_DISPLAY(), |
1848 GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window), | 1898 GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window), |
1849 &sizehints); | 1899 &sizehints); |
1850 gdk_flush (); | 1900 gdk_flush (); |
1851 } | 1901 } |
1902 #endif | |
1852 | 1903 |
1853 /* Find the index of a given thread */ | 1904 /* Find the index of a given thread */ |
1854 static int _find_thread_index(DWTID tid) | 1905 static int _find_thread_index(DWTID tid) |
1855 { | 1906 { |
1856 int z; | 1907 int z; |
1952 */ | 2003 */ |
1953 int dw_int_init(DWResources *res, int newthread, int *argc, char **argv[]) | 2004 int dw_int_init(DWResources *res, int newthread, int *argc, char **argv[]) |
1954 { | 2005 { |
1955 int z; | 2006 int z; |
1956 char *tmp; | 2007 char *tmp; |
2008 char *fname; | |
1957 | 2009 |
1958 if(res) | 2010 if(res) |
1959 { | 2011 { |
1960 _resources.resource_max = res->resource_max; | 2012 _resources.resource_max = res->resource_max; |
1961 _resources.resource_id = res->resource_id; | 2013 _resources.resource_id = res->resource_id; |
1989 gtk_rc_parse_string("style \"gtk-tooltips-style\" { bg[NORMAL] = \"#eeee00\" } widget \"gtk-tooltips\" style \"gtk-tooltips-style\""); | 2041 gtk_rc_parse_string("style \"gtk-tooltips-style\" { bg[NORMAL] = \"#eeee00\" } widget \"gtk-tooltips\" style \"gtk-tooltips-style\""); |
1990 | 2042 |
1991 #ifdef USE_GTKMOZEMBED | 2043 #ifdef USE_GTKMOZEMBED |
1992 init_mozembed(); | 2044 init_mozembed(); |
1993 #endif | 2045 #endif |
2046 /* | |
2047 * Setup logging/debugging | |
2048 */ | |
2049 if ( (fname = getenv( "DWINDOWS_DEBUGFILE" ) ) != NULL ) | |
2050 { | |
2051 dbgfp = fopen( fname, "w" ); | |
2052 } | |
1994 | 2053 |
1995 return TRUE; | 2054 return TRUE; |
1996 } | 2055 } |
1997 | 2056 |
1998 /* | 2057 /* |
2972 gtk_widget_show(tmp); | 3031 gtk_widget_show(tmp); |
2973 DW_MUTEX_UNLOCK; | 3032 DW_MUTEX_UNLOCK; |
2974 return tmp; | 3033 return tmp; |
2975 } | 3034 } |
2976 | 3035 |
3036 #ifdef INCOMPLETE | |
3037 /* | |
3038 * Create a new scrollable Box to be packed. | |
3039 * Parameters: | |
3040 * type: Either DW_VERT (vertical) or DW_HORZ (horizontal). | |
3041 * pad: Number of pixels to pad around the box. | |
3042 * This works fine under GTK+, but is incomplete on other platforms | |
3043 */ | |
3044 HWND dw_scrollbox_new( int type, int pad ) | |
3045 { | |
3046 GtkWidget *tmp, *box, *eventbox; | |
3047 int _locked_by_me = FALSE; | |
3048 | |
3049 DW_MUTEX_LOCK; | |
3050 tmp = gtk_scrolled_window_new(NULL, NULL); | |
3051 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
3052 | |
3053 box = gtk_table_new(1, 1, FALSE); | |
3054 eventbox = gtk_event_box_new(); | |
3055 | |
3056 gtk_widget_show(eventbox); | |
3057 gtk_object_set_data(GTK_OBJECT(box), "_dw_eventbox", (gpointer)eventbox); | |
3058 gtk_object_set_data(GTK_OBJECT(box), "_dw_boxtype", GINT_TO_POINTER(type)); | |
3059 gtk_object_set_data(GTK_OBJECT(box), "_dw_boxpad", GINT_TO_POINTER(pad)); | |
3060 gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxhandle", (gpointer)box); | |
3061 | |
3062 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp),box); | |
3063 gtk_object_set_user_data(GTK_OBJECT(tmp), box); | |
3064 gtk_widget_show(box); | |
3065 gtk_widget_show(tmp); | |
3066 | |
3067 DW_MUTEX_UNLOCK; | |
3068 return tmp; | |
3069 } | |
3070 #endif | |
3071 | |
2977 /* | 3072 /* |
2978 * Create a new Group Box to be packed. | 3073 * Create a new Group Box to be packed. |
2979 * Parameters: | 3074 * Parameters: |
2980 * type: Either DW_VERT (vertical) or DW_HORZ (horizontal). | 3075 * type: Either DW_VERT (vertical) or DW_HORZ (horizontal). |
2981 * pad: Number of pixels to pad around the box. | 3076 * pad: Number of pixels to pad around the box. |
3318 * Sets the state of a menu item check. | 3413 * Sets the state of a menu item check. |
3319 * Parameters: | 3414 * Parameters: |
3320 * menu: The handle the the existing menu. | 3415 * menu: The handle the the existing menu. |
3321 * id: Menuitem id. | 3416 * id: Menuitem id. |
3322 * check: TRUE for checked FALSE for not checked. | 3417 * check: TRUE for checked FALSE for not checked. |
3418 * deprecated: use dw_menu_item_set_state() | |
3323 */ | 3419 */ |
3324 void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) | 3420 void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) |
3325 { | 3421 { |
3326 char numbuf[10]; | 3422 char numbuf[10]; |
3327 GtkWidget *tmphandle; | 3423 GtkWidget *tmphandle; |
3447 void dw_pointer_set_pos(long x, long y) | 3543 void dw_pointer_set_pos(long x, long y) |
3448 { | 3544 { |
3449 int _locked_by_me = FALSE; | 3545 int _locked_by_me = FALSE; |
3450 | 3546 |
3451 DW_MUTEX_LOCK; | 3547 DW_MUTEX_LOCK; |
3548 #if GTK_CHECK_VERSION(2,8,0) | |
3549 gdk_display_warp_pointer( gdk_display_get_default(), gdk_screen_get_default(), x, y ); | |
3550 // gdk_display_warp_pointer( GDK_DISPLAY(), gdk_screen_get_default(), x, y ); | |
3551 #else | |
3552 # if GDK_WINDOWING_X11 | |
3452 XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); | 3553 XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); |
3554 # endif | |
3555 #endif | |
3453 DW_MUTEX_UNLOCK; | 3556 DW_MUTEX_UNLOCK; |
3454 } | 3557 } |
3455 | 3558 |
3456 /* | 3559 /* |
3457 * Create a container object to be packed. | 3560 * Create a container object to be packed. |
4249 gtk_button_set_label(GTK_BUTTON(handle), text); | 4352 gtk_button_set_label(GTK_BUTTON(handle), text); |
4250 #endif | 4353 #endif |
4251 } | 4354 } |
4252 else if(GTK_WIDGET_TOPLEVEL(handle)) | 4355 else if(GTK_WIDGET_TOPLEVEL(handle)) |
4253 gtk_window_set_title(GTK_WINDOW(handle), text); | 4356 gtk_window_set_title(GTK_WINDOW(handle), text); |
4254 else if(GTK_IS_FRAME(handle)) | 4357 else if ( GTK_IS_FRAME(handle) ) |
4255 { | 4358 { |
4359 /* | |
4360 * This is a groupbox or status_text | |
4361 */ | |
4256 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); | 4362 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); |
4257 if(tmp && GTK_IS_LABEL(tmp)) | 4363 if ( tmp && GTK_IS_LABEL(tmp) ) |
4258 gtk_label_set_text(GTK_LABEL(tmp), text); | 4364 gtk_label_set_text(GTK_LABEL(tmp), text); |
4365 else /* assume groupbox */ | |
4366 gtk_frame_set_label(GTK_FRAME(handle), text && *text ? text : NULL); | |
4259 } | 4367 } |
4260 DW_MUTEX_UNLOCK; | 4368 DW_MUTEX_UNLOCK; |
4261 } | 4369 } |
4262 | 4370 |
4263 /* | 4371 /* |
7251 void dw_draw_polygon(HWND handle, HPIXMAP pixmap, int fill, int npoints, int *x, int *y) | 7359 void dw_draw_polygon(HWND handle, HPIXMAP pixmap, int fill, int npoints, int *x, int *y) |
7252 { | 7360 { |
7253 int _locked_by_me = FALSE; | 7361 int _locked_by_me = FALSE; |
7254 int i; | 7362 int i; |
7255 GdkGC *gc = NULL; | 7363 GdkGC *gc = NULL; |
7256 GdkPoint *points; | 7364 GdkPoint *points = NULL; |
7257 | 7365 |
7258 DW_MUTEX_LOCK; | 7366 DW_MUTEX_LOCK; |
7259 if ( handle ) | 7367 if ( handle ) |
7260 gc = _set_colors( handle->window ); | 7368 gc = _set_colors( handle->window ); |
7261 else if ( pixmap ) | 7369 else if ( pixmap ) |
7485 | 7593 |
7486 /* | 7594 /* |
7487 * Creates a pixmap with given parameters. | 7595 * Creates a pixmap with given parameters. |
7488 * Parameters: | 7596 * Parameters: |
7489 * handle: Window handle the pixmap is associated with. | 7597 * handle: Window handle the pixmap is associated with. |
7598 * or zero to enable this pixmap to be written | |
7599 * off the screen to reduce flicker | |
7490 * width: Width of the pixmap in pixels. | 7600 * width: Width of the pixmap in pixels. |
7491 * height: Height of the pixmap in pixels. | 7601 * height: Height of the pixmap in pixels. |
7492 * depth: Color depth of the pixmap. | 7602 * depth: Color depth of the pixmap. |
7493 * Returns: | 7603 * Returns: |
7494 * A handle to a pixmap or NULL on failure. | 7604 * A handle to a pixmap or NULL on failure. |
7507 pixmap->width = width; pixmap->height = height; | 7617 pixmap->width = width; pixmap->height = height; |
7508 | 7618 |
7509 | 7619 |
7510 DW_MUTEX_LOCK; | 7620 DW_MUTEX_LOCK; |
7511 pixmap->handle = handle; | 7621 pixmap->handle = handle; |
7512 pixmap->pixmap = gdk_pixmap_new(handle->window, width, height, depth); | 7622 if ( handle ) |
7623 pixmap->pixmap = gdk_pixmap_new( handle->window, width, height, depth ); | |
7624 else | |
7625 pixmap->pixmap = gdk_pixmap_new( NULL, width, height, depth ); | |
7513 DW_MUTEX_UNLOCK; | 7626 DW_MUTEX_UNLOCK; |
7514 return pixmap; | 7627 return pixmap; |
7515 } | 7628 } |
7516 | 7629 |
7517 /* | 7630 /* |
7639 /* remove our temporary file */ | 7752 /* remove our temporary file */ |
7640 unlink (file ); | 7753 unlink (file ); |
7641 pixmap->handle = handle; | 7754 pixmap->handle = handle; |
7642 DW_MUTEX_UNLOCK; | 7755 DW_MUTEX_UNLOCK; |
7643 return pixmap; | 7756 return pixmap; |
7757 } | |
7758 | |
7759 /* | |
7760 * Sets the transparent color for a pixmap | |
7761 * Parameters: | |
7762 * pixmap: Handle to a pixmap returned by | |
7763 * dw_pixmap_new.. | |
7764 * color: transparent color | |
7765 * Note: This does nothing on GTK+ as transparency | |
7766 * is handled automatically | |
7767 */ | |
7768 void dw_pixmap_set_transparent_color(HPIXMAP pixmap, unsigned long color) | |
7769 { | |
7770 int _locked_by_me = FALSE; | |
7771 | |
7772 DW_MUTEX_LOCK; | |
7773 pixmap = pixmap; | |
7774 color = color; | |
7775 DW_MUTEX_UNLOCK; | |
7644 } | 7776 } |
7645 | 7777 |
7646 /* | 7778 /* |
7647 * Creates a pixmap from internal resource graphic specified by id. | 7779 * Creates a pixmap from internal resource graphic specified by id. |
7648 * Parameters: | 7780 * Parameters: |
8526 * Parameters: | 8658 * Parameters: |
8527 * exitcode: Exit code reported to the operating system. | 8659 * exitcode: Exit code reported to the operating system. |
8528 */ | 8660 */ |
8529 void dw_exit(int exitcode) | 8661 void dw_exit(int exitcode) |
8530 { | 8662 { |
8663 if ( dbgfp != NULL ) | |
8664 { | |
8665 fclose( dbgfp ); | |
8666 } | |
8531 exit(exitcode); | 8667 exit(exitcode); |
8532 } | 8668 } |
8533 | 8669 |
8534 #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL) | 8670 #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL) |
8535 | 8671 |
8697 { | 8833 { |
8698 if ( width == 0 ) | 8834 if ( width == 0 ) |
8699 default_width = -1; | 8835 default_width = -1; |
8700 if ( height == 0 ) | 8836 if ( height == 0 ) |
8701 default_height = -1; | 8837 default_height = -1; |
8838 #if defined(GDK_WINDOWING_X11) | |
8839 | |
8702 _size_allocate(GTK_WINDOW(handle)); | 8840 _size_allocate(GTK_WINDOW(handle)); |
8841 #endif | |
8703 if(handle->window) | 8842 if(handle->window) |
8704 gdk_window_resize(handle->window, default_width , default_height ); | 8843 gdk_window_resize(handle->window, default_width , default_height ); |
8705 gtk_window_set_default_size(GTK_WINDOW(handle), default_width , default_height ); | 8844 gtk_window_set_default_size(GTK_WINDOW(handle), default_width , default_height ); |
8706 if(!gtk_object_get_data(GTK_OBJECT(handle), "_dw_size")) | 8845 if(!gtk_object_get_data(GTK_OBJECT(handle), "_dw_size")) |
8707 { | 8846 { |
8761 * Parameters: | 8900 * Parameters: |
8762 * handle: Window (widget) handle. | 8901 * handle: Window (widget) handle. |
8763 * x: X location from the bottom left. | 8902 * x: X location from the bottom left. |
8764 * y: Y location from the bottom left. | 8903 * y: Y location from the bottom left. |
8765 */ | 8904 */ |
8766 void dw_window_set_pos(HWND handle, unsigned long x, unsigned long y) | 8905 void dw_window_set_pos(HWND handle, long x, long y) |
8767 { | 8906 { |
8768 int _locked_by_me = FALSE; | 8907 int _locked_by_me = FALSE; |
8769 #if GTK_MAJOR_VERSION > 1 | 8908 #if GTK_MAJOR_VERSION > 1 |
8770 GtkWidget *mdi; | 8909 GtkWidget *mdi; |
8771 #endif | 8910 #endif |
8792 * x: X location from the bottom left. | 8931 * x: X location from the bottom left. |
8793 * y: Y location from the bottom left. | 8932 * y: Y location from the bottom left. |
8794 * width: Width of the widget. | 8933 * width: Width of the widget. |
8795 * height: Height of the widget. | 8934 * height: Height of the widget. |
8796 */ | 8935 */ |
8797 void dw_window_set_pos_size(HWND handle, unsigned long x, unsigned long y, unsigned long width, unsigned long height) | 8936 void dw_window_set_pos_size(HWND handle, long x, long y, unsigned long width, unsigned long height) |
8798 { | 8937 { |
8799 int _locked_by_me = FALSE; | 8938 int _locked_by_me = FALSE; |
8800 #if GTK_MAJOR_VERSION > 1 | 8939 #if GTK_MAJOR_VERSION > 1 |
8801 GtkWidget *mdi; | 8940 GtkWidget *mdi; |
8802 #endif | 8941 #endif |
8803 | 8942 |
8804 if(!handle) | 8943 if(!handle) |
8805 return; | 8944 return; |
8806 | |
8807 DW_MUTEX_LOCK; | 8945 DW_MUTEX_LOCK; |
8808 #if GTK_MAJOR_VERSION > 1 | 8946 #if GTK_MAJOR_VERSION > 1 |
8809 if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) | 8947 if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) |
8810 { | 8948 { |
8811 gtk_mdi_move(GTK_MDI(mdi), handle, x, y); | 8949 gtk_mdi_move(GTK_MDI(mdi), handle, x, y); |
8834 * x: X location from the bottom left. | 8972 * x: X location from the bottom left. |
8835 * y: Y location from the bottom left. | 8973 * y: Y location from the bottom left. |
8836 * width: Width of the widget. | 8974 * width: Width of the widget. |
8837 * height: Height of the widget. | 8975 * height: Height of the widget. |
8838 */ | 8976 */ |
8839 void dw_window_get_pos_size(HWND handle, ULONG *x, ULONG *y, ULONG *width, ULONG *height) | 8977 void dw_window_get_pos_size(HWND handle, long *x, long *y, ULONG *width, ULONG *height) |
8840 { | 8978 { |
8841 int _locked_by_me = FALSE; | 8979 int _locked_by_me = FALSE; |
8842 gint gx, gy, gwidth, gheight, gdepth; | 8980 gint gx, gy, gwidth, gheight, gdepth; |
8843 #if GTK_MAJOR_VERSION > 1 | 8981 #if GTK_MAJOR_VERSION > 1 |
8844 GtkWidget *mdi; | 8982 GtkWidget *mdi; |
9225 void dw_listbox_list_append(HWND handle, char **text, int count) | 9363 void dw_listbox_list_append(HWND handle, char **text, int count) |
9226 { | 9364 { |
9227 GtkWidget *handle2 = handle; | 9365 GtkWidget *handle2 = handle; |
9228 int _locked_by_me = FALSE; | 9366 int _locked_by_me = FALSE; |
9229 | 9367 |
9368 if ( count == 0 ) | |
9369 return; | |
9370 | |
9230 DW_MUTEX_LOCK; | 9371 DW_MUTEX_LOCK; |
9231 if(GTK_IS_SCROLLED_WINDOW(handle)) | 9372 if(GTK_IS_SCROLLED_WINDOW(handle)) |
9232 { | 9373 { |
9233 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | 9374 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
9234 if(tmp) | 9375 if(tmp) |