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)