comparison gtk/dw.c @ 258:b2c436c84e5d

Added code to create a lookup table for icon data loaded in dw_icon_load_from_file() on Unix.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 20 Feb 2003 23:33:08 +0000
parents 9ea4ac9a097f
children 22a215209887
comparison
equal deleted inserted replaced
257:9ea4ac9a097f 258:b2c436c84e5d
55 GdkColor _foreground[DW_THREAD_LIMIT]; 55 GdkColor _foreground[DW_THREAD_LIMIT];
56 GdkColor _background[DW_THREAD_LIMIT]; 56 GdkColor _background[DW_THREAD_LIMIT];
57 57
58 GtkWidget *last_window = NULL, *popup = NULL; 58 GtkWidget *last_window = NULL, *popup = NULL;
59 59
60 int _dw_file_active = 0, _dw_ignore_click = 0, _dw_unselecting = 0; 60 static int _dw_file_active = 0, _dw_ignore_click = 0, _dw_unselecting = 0;
61 pthread_t _dw_thread = (pthread_t)-1; 61 static pthread_t _dw_thread = (pthread_t)-1;
62 int _dw_mutex_locked[DW_THREAD_LIMIT]; 62 static int _dw_mutex_locked[DW_THREAD_LIMIT];
63 /* Use default border size for the default enlightenment theme */ 63 /* Use default border size for the default enlightenment theme */
64 int _dw_border_width = 12, _dw_border_height = 28; 64 static int _dw_border_width = 12, _dw_border_height = 28;
65 65
66 #define DW_MUTEX_LOCK { int index = _find_thread_index(dw_thread_id()); if(pthread_self() != _dw_thread && _dw_mutex_locked[index] == FALSE) { gdk_threads_enter(); _dw_mutex_locked[index] = TRUE; _locked_by_me = TRUE; } } 66 #define DW_MUTEX_LOCK { int index = _find_thread_index(dw_thread_id()); if(pthread_self() != _dw_thread && _dw_mutex_locked[index] == FALSE) { gdk_threads_enter(); _dw_mutex_locked[index] = TRUE; _locked_by_me = TRUE; } }
67 #define DW_MUTEX_UNLOCK { if(pthread_self() != _dw_thread && _locked_by_me == TRUE) { gdk_threads_leave(); _dw_mutex_locked[_find_thread_index(dw_thread_id())] = FALSE; _locked_by_me = FALSE; } } 67 #define DW_MUTEX_UNLOCK { if(pthread_self() != _dw_thread && _locked_by_me == TRUE) { gdk_threads_leave(); _dw_mutex_locked[_find_thread_index(dw_thread_id())] = FALSE; _locked_by_me = FALSE; } }
68 68
69 #define DEFAULT_SIZE_WIDTH 12 69 #define DEFAULT_SIZE_WIDTH 12
70 #define DEFAULT_SIZE_HEIGHT 6 70 #define DEFAULT_SIZE_HEIGHT 6
71 #define DEFAULT_TITLEBAR_HEIGHT 22 71 #define DEFAULT_TITLEBAR_HEIGHT 22
72 72
73 GdkColormap *_dw_cmap = NULL; 73 static GdkColormap *_dw_cmap = NULL;
74 74
75 /* Signal forwarder prototypes */ 75 /* Signal forwarder prototypes */
76 gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 76 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
77 gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 77 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
78 gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data); 78 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data);
79 gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data); 79 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data);
80 gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data); 80 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data);
81 gint _generic_event(GtkWidget *widget, gpointer data); 81 static gint _generic_event(GtkWidget *widget, gpointer data);
82 gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data); 82 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
83 gint _activate_event(GtkWidget *widget, gpointer data); 83 static gint _activate_event(GtkWidget *widget, gpointer data);
84 gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 84 static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
85 gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 85 static gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
86 gint _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data); 86 static gint _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data);
87 gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); 87 static gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data);
88 gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); 88 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data);
89 gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 89 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
90 gint _value_changed_event(GtkAdjustment *adjustment, gpointer user_data); 90 static gint _value_changed_event(GtkAdjustment *adjustment, gpointer user_data);
91 #if GTK_MAJOR_VERSION > 1 91 #if GTK_MAJOR_VERSION > 1
92 gint _tree_select_event(GtkTreeSelection *sel, gpointer data); 92 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data);
93 #else 93 #else
94 gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); 94 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data);
95 #endif 95 #endif
96 96
97 typedef struct
98 {
99 GdkPixmap *pixmap;
100 GdkBitmap *mask;
101 int used;
102 unsigned long width, height;
103 } DWPrivatePixmap;
104
105 static DWPrivatePixmap *_PixmapArray = NULL;
106 static int _PixmapCount = 0;
97 107
98 typedef struct 108 typedef struct
99 { 109 {
100 void *func; 110 void *func;
101 char name[30]; 111 char name[30];
111 } SignalHandler; 121 } SignalHandler;
112 122
113 #define SIGNALMAX 16 123 #define SIGNALMAX 16
114 124
115 /* A list of signal forwarders, to account for paramater differences. */ 125 /* A list of signal forwarders, to account for paramater differences. */
116 SignalList SignalTranslate[SIGNALMAX] = { 126 static SignalList SignalTranslate[SIGNALMAX] = {
117 { _configure_event, "configure_event" }, 127 { _configure_event, "configure_event" },
118 { _key_press_event, "key_press_event" }, 128 { _key_press_event, "key_press_event" },
119 { _button_press_event, "button_press_event" }, 129 { _button_press_event, "button_press_event" },
120 { _button_release_event, "button_release_event" }, 130 { _button_release_event, "button_release_event" },
121 { _motion_notify_event, "motion_notify_event" }, 131 { _motion_notify_event, "motion_notify_event" },
135 /* Alignment flags */ 145 /* Alignment flags */
136 #define DW_CENTER 0.5f 146 #define DW_CENTER 0.5f
137 #define DW_LEFT 0.0f 147 #define DW_LEFT 0.0f
138 #define DW_RIGHT 1.0f 148 #define DW_RIGHT 1.0f
139 149
140 void _dw_msleep(long period) 150 static void _dw_msleep(long period)
141 { 151 {
142 #ifdef __sun__ 152 #ifdef __sun__
143 /* usleep() isn't threadsafe on Solaris */ 153 /* usleep() isn't threadsafe on Solaris */
144 struct timespec req; 154 struct timespec req;
145 155
151 usleep(period * 1000); 161 usleep(period * 1000);
152 #endif 162 #endif
153 } 163 }
154 164
155 /* Finds the translation function for a given signal name */ 165 /* Finds the translation function for a given signal name */
156 void *_findsigfunc(char *signame) 166 static void *_findsigfunc(char *signame)
157 { 167 {
158 int z; 168 int z;
159 169
160 for(z=0;z<SIGNALMAX;z++) 170 for(z=0;z<SIGNALMAX;z++)
161 { 171 {
163 return SignalTranslate[z].func; 173 return SignalTranslate[z].func;
164 } 174 }
165 return NULL; 175 return NULL;
166 } 176 }
167 177
168 gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) 178 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data)
169 { 179 {
170 SignalHandler *work = (SignalHandler *)data; 180 SignalHandler *work = (SignalHandler *)data;
171 int retval = FALSE; 181 int retval = FALSE;
172 182
173 if(work) 183 if(work)
177 retval = setfocusfunc((HWND)window, work->data); 187 retval = setfocusfunc((HWND)window, work->data);
178 } 188 }
179 return retval; 189 return retval;
180 } 190 }
181 191
182 gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 192 static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
183 { 193 {
184 SignalHandler *work = (SignalHandler *)data; 194 SignalHandler *work = (SignalHandler *)data;
185 int retval = FALSE; 195 int retval = FALSE;
186 196
187 if(work) 197 if(work)
197 retval = buttonfunc(widget, event->x, event->y, mybutton, work->data); 207 retval = buttonfunc(widget, event->x, event->y, mybutton, work->data);
198 } 208 }
199 return retval; 209 return retval;
200 } 210 }
201 211
202 gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 212 static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
203 { 213 {
204 SignalHandler *work = (SignalHandler *)data; 214 SignalHandler *work = (SignalHandler *)data;
205 int retval = FALSE; 215 int retval = FALSE;
206 216
207 if(work) 217 if(work)
217 retval = buttonfunc(widget, event->x, event->y, mybutton, work->data); 227 retval = buttonfunc(widget, event->x, event->y, mybutton, work->data);
218 } 228 }
219 return retval; 229 return retval;
220 } 230 }
221 231
222 gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) 232 static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
223 { 233 {
224 SignalHandler *work = (SignalHandler *)data; 234 SignalHandler *work = (SignalHandler *)data;
225 int retval = FALSE; 235 int retval = FALSE;
226 236
227 if(work) 237 if(work)
249 retval = motionfunc(widget, x, y, keys, work->data); 259 retval = motionfunc(widget, x, y, keys, work->data);
250 } 260 }
251 return retval; 261 return retval;
252 } 262 }
253 263
254 gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) 264 static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
255 { 265 {
256 SignalHandler *work = (SignalHandler *)data; 266 SignalHandler *work = (SignalHandler *)data;
257 int retval = FALSE; 267 int retval = FALSE;
258 268
259 if(work) 269 if(work)
263 retval = closefunc(widget, work->data); 273 retval = closefunc(widget, work->data);
264 } 274 }
265 return retval; 275 return retval;
266 } 276 }
267 277
268 gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) 278 static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
269 { 279 {
270 SignalHandler *work = (SignalHandler *)data; 280 SignalHandler *work = (SignalHandler *)data;
271 int retval = FALSE; 281 int retval = FALSE;
272 282
273 if(work) 283 if(work)
277 retval = keypressfunc(widget, *event->string, work->data); 287 retval = keypressfunc(widget, *event->string, work->data);
278 } 288 }
279 return retval; 289 return retval;
280 } 290 }
281 291
282 gint _generic_event(GtkWidget *widget, gpointer data) 292 static gint _generic_event(GtkWidget *widget, gpointer data)
283 { 293 {
284 SignalHandler *work = (SignalHandler *)data; 294 SignalHandler *work = (SignalHandler *)data;
285 int retval = FALSE; 295 int retval = FALSE;
286 296
287 if(work) 297 if(work)
291 retval = genericfunc(widget, work->data); 301 retval = genericfunc(widget, work->data);
292 } 302 }
293 return retval; 303 return retval;
294 } 304 }
295 305
296 gint _activate_event(GtkWidget *widget, gpointer data) 306 static gint _activate_event(GtkWidget *widget, gpointer data)
297 { 307 {
298 SignalHandler *work = (SignalHandler *)data; 308 SignalHandler *work = (SignalHandler *)data;
299 int retval = FALSE; 309 int retval = FALSE;
300 310
301 if(work && !_dw_ignore_click) 311 if(work && !_dw_ignore_click)
305 retval = activatefunc(popup ? popup : work->window, work->data); 315 retval = activatefunc(popup ? popup : work->window, work->data);
306 } 316 }
307 return retval; 317 return retval;
308 } 318 }
309 319
310 gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) 320 static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
311 { 321 {
312 SignalHandler *work = (SignalHandler *)data; 322 SignalHandler *work = (SignalHandler *)data;
313 int retval = FALSE; 323 int retval = FALSE;
314 324
315 if(work) 325 if(work)
319 retval = sizefunc(widget, event->width, event->height, work->data); 329 retval = sizefunc(widget, event->width, event->height, work->data);
320 } 330 }
321 return retval; 331 return retval;
322 } 332 }
323 333
324 gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) 334 static gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
325 { 335 {
326 SignalHandler *work = (SignalHandler *)data; 336 SignalHandler *work = (SignalHandler *)data;
327 int retval = FALSE; 337 int retval = FALSE;
328 338
329 if(work) 339 if(work)
338 retval = exposefunc(widget, &exp, work->data); 348 retval = exposefunc(widget, &exp, work->data);
339 } 349 }
340 return retval; 350 return retval;
341 } 351 }
342 352
343 gint _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data) 353 static gint _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data)
344 { 354 {
345 SignalHandler *work = (SignalHandler *)data; 355 SignalHandler *work = (SignalHandler *)data;
346 static int _dw_recursing = 0; 356 static int _dw_recursing = 0;
347 int retval = FALSE; 357 int retval = FALSE;
348 358
382 _dw_recursing = 0; 392 _dw_recursing = 0;
383 } 393 }
384 return retval; 394 return retval;
385 } 395 }
386 396
387 gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 397 static gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
388 { 398 {
389 SignalHandler *work = (SignalHandler *)data; 399 SignalHandler *work = (SignalHandler *)data;
390 int retval = FALSE; 400 int retval = FALSE;
391 401
392 if(work) 402 if(work)
404 } 414 }
405 } 415 }
406 return retval; 416 return retval;
407 } 417 }
408 418
409 gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 419 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
410 { 420 {
411 SignalHandler *work = (SignalHandler *)data; 421 SignalHandler *work = (SignalHandler *)data;
412 int retval = FALSE; 422 int retval = FALSE;
413 423
414 if(work) 424 if(work)
460 } 470 }
461 return retval; 471 return retval;
462 } 472 }
463 473
464 #if GTK_MAJOR_VERSION > 1 474 #if GTK_MAJOR_VERSION > 1
465 gint _tree_select_event(GtkTreeSelection *sel, gpointer data) 475 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data)
466 { 476 {
467 SignalHandler *work = (SignalHandler *)data; 477 SignalHandler *work = (SignalHandler *)data;
468 int retval = FALSE; 478 int retval = FALSE;
469 479
470 if(work) 480 if(work)
483 } 493 }
484 } 494 }
485 return retval; 495 return retval;
486 } 496 }
487 #else 497 #else
488 gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) 498 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data)
489 { 499 {
490 SignalHandler *work = (SignalHandler *)data; 500 SignalHandler *work = (SignalHandler *)data;
491 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree"); 501 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree");
492 int retval = FALSE; 502 int retval = FALSE;
493 503
508 } 518 }
509 return retval; 519 return retval;
510 } 520 }
511 #endif 521 #endif
512 522
513 gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 523 static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
514 { 524 {
515 SignalHandler *work = (SignalHandler *)data; 525 SignalHandler *work = (SignalHandler *)data;
516 int retval = FALSE; 526 int retval = FALSE;
517 527
518 if(work) 528 if(work)
530 } 540 }
531 } 541 }
532 return retval; 542 return retval;
533 } 543 }
534 544
535 gint _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) 545 static gint _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
536 { 546 {
537 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); 547 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist");
538 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); 548 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row);
539 int multi = (int)gtk_object_get_data(GTK_OBJECT(widget), "multi"); 549 int multi = (int)gtk_object_get_data(GTK_OBJECT(widget), "multi");
540 550
550 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); 560 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp);
551 } 561 }
552 return FALSE; 562 return FALSE;
553 } 563 }
554 564
555 gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) 565 static gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
556 { 566 {
557 SignalHandler *work = (SignalHandler *)data; 567 SignalHandler *work = (SignalHandler *)data;
558 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); 568 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row);
559 int (*contextfunc)(HWND, char *, void *) = work->func; 569 int (*contextfunc)(HWND, char *, void *) = work->func;
560 570
561 return contextfunc(work->window, rowdata, work->data);; 571 return contextfunc(work->window, rowdata, work->data);;
562 } 572 }
563 573
564 gint _unselect_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) 574 static gint _unselect_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
565 { 575 {
566 GList *tmp; 576 GList *tmp;
567 char *rowdata; 577 char *rowdata;
568 578
569 if(_dw_unselecting) 579 if(_dw_unselecting)
578 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); 588 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp);
579 } 589 }
580 return FALSE; 590 return FALSE;
581 } 591 }
582 592
583 int _round_value(gfloat val) 593 static int _round_value(gfloat val)
584 { 594 {
585 int newval = (int)val; 595 int newval = (int)val;
586 596
587 if(val >= 0.5 + (gfloat)newval) 597 if(val >= 0.5 + (gfloat)newval)
588 newval++; 598 newval++;
589 599
590 return newval; 600 return newval;
591 } 601 }
592 602
593 gint _value_changed_event(GtkAdjustment *adjustment, gpointer data) 603 static gint _value_changed_event(GtkAdjustment *adjustment, gpointer data)
594 { 604 {
595 SignalHandler *work = (SignalHandler *)data; 605 SignalHandler *work = (SignalHandler *)data;
596 606
597 if(work) 607 if(work)
598 { 608 {
615 } 625 }
616 } 626 }
617 return FALSE; 627 return FALSE;
618 } 628 }
619 629
620 gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) 630 static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
621 { 631 {
622 GtkWidget *next = (GtkWidget *)data; 632 GtkWidget *next = (GtkWidget *)data;
623 633
624 if(next) 634 if(next)
625 { 635 {
632 } 642 }
633 } 643 }
634 return FALSE; 644 return FALSE;
635 } 645 }
636 646
637 GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle, unsigned long *userwidth, unsigned long *userheight) 647 static GdkPixmap *_find_private_pixmap(GdkBitmap **bitmap, long id, unsigned long *userwidth, unsigned long *userheight)
648 {
649 if(id < _PixmapCount && _PixmapArray[id].used)
650 {
651 *bitmap = _PixmapArray[id].mask;
652 if(userwidth)
653 *userwidth = _PixmapArray[id].width;
654 if(userheight)
655 *userheight = _PixmapArray[id].height;
656 return _PixmapArray[id].pixmap;
657 }
658 return NULL;
659 }
660
661 static GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle, unsigned long *userwidth, unsigned long *userheight)
638 { 662 {
639 char *data = NULL; 663 char *data = NULL;
640 int z; 664 int z;
665
666 if(id & (1 << 31))
667 return _find_private_pixmap(bitmap, (id & 0xFFFFFF), userwidth, userheight);
641 668
642 for(z=0;z<_resources.resource_max;z++) 669 for(z=0;z<_resources.resource_max;z++)
643 { 670 {
644 if(_resources.resource_id[z] == id) 671 if(_resources.resource_id[z] == id)
645 { 672 {
670 } 697 }
671 return NULL; 698 return NULL;
672 } 699 }
673 700
674 #if GTK_MAJOR_VERSION > 1 701 #if GTK_MAJOR_VERSION > 1
675 GdkPixbuf *_find_pixbuf(long id) 702 static GdkPixbuf *_find_pixbuf(long id)
676 { 703 {
677 char *data = NULL; 704 char *data = NULL;
678 int z; 705 int z;
679 706
680 for(z=0;z<_resources.resource_max;z++) 707 for(z=0;z<_resources.resource_max;z++)
690 return gdk_pixbuf_new_from_xpm_data((const char **)data); 717 return gdk_pixbuf_new_from_xpm_data((const char **)data);
691 return NULL; 718 return NULL;
692 } 719 }
693 #endif 720 #endif
694 721
695 void _size_allocate(GtkWindow *window) 722 static void _size_allocate(GtkWindow *window)
696 { 723 {
697 XSizeHints sizehints; 724 XSizeHints sizehints;
698 725
699 sizehints.base_width = 1; 726 sizehints.base_width = 1;
700 sizehints.base_height = 1; 727 sizehints.base_height = 1;
710 &sizehints); 737 &sizehints);
711 gdk_flush (); 738 gdk_flush ();
712 } 739 }
713 740
714 /* Find the index of a given thread */ 741 /* Find the index of a given thread */
715 int _find_thread_index(DWTID tid) 742 static int _find_thread_index(DWTID tid)
716 { 743 {
717 int z; 744 int z;
718 745
719 for(z=0;z<DW_THREAD_LIMIT;z++) 746 for(z=0;z<DW_THREAD_LIMIT;z++)
720 { 747 {
723 } 750 }
724 return 0; 751 return 0;
725 } 752 }
726 753
727 /* Add a thread id to the thread list */ 754 /* Add a thread id to the thread list */
728 void _dw_thread_add(DWTID tid) 755 static void _dw_thread_add(DWTID tid)
729 { 756 {
730 int z; 757 int z;
731 758
732 for(z=0;z<DW_THREAD_LIMIT;z++) 759 for(z=0;z<DW_THREAD_LIMIT;z++)
733 { 760 {
743 } 770 }
744 } 771 }
745 } 772 }
746 773
747 /* Remove a thread id to the thread list */ 774 /* Remove a thread id to the thread list */
748 void _dw_thread_remove(DWTID tid) 775 static void _dw_thread_remove(DWTID tid)
749 { 776 {
750 int z; 777 int z;
751 778
752 for(z=0;z<DW_THREAD_LIMIT;z++) 779 for(z=0;z<DW_THREAD_LIMIT;z++)
753 { 780 {
938 tmp = dialog->result; 965 tmp = dialog->result;
939 free(dialog); 966 free(dialog);
940 return tmp; 967 return tmp;
941 } 968 }
942 969
943 int _delete(GtkWidget *widget, GtkWidget *event, gpointer param) 970 static int _dw_ok_func(HWND window, void *data)
944 {
945 gtk_widget_destroy(GTK_WIDGET(param));
946 return FALSE;
947 }
948
949 int _delete2(GtkWidget *widget, gpointer param)
950 {
951 gtk_widget_destroy(GTK_WIDGET(param));
952 return FALSE;
953 }
954
955
956 int _dw_ok_func(HWND window, void *data)
957 { 971 {
958 DWDialog *dwwait = (DWDialog *)data; 972 DWDialog *dwwait = (DWDialog *)data;
959 973
960 if(!dwwait) 974 if(!dwwait)
961 return FALSE; 975 return FALSE;
1242 DW_MUTEX_LOCK; 1256 DW_MUTEX_LOCK;
1243 gdk_window_reparent(GTK_WIDGET(handle)->window, newparent ? GTK_WIDGET(newparent)->window : GDK_ROOT_PARENT(), 0, 0); 1257 gdk_window_reparent(GTK_WIDGET(handle)->window, newparent ? GTK_WIDGET(newparent)->window : GDK_ROOT_PARENT(), 0, 0);
1244 DW_MUTEX_UNLOCK; 1258 DW_MUTEX_UNLOCK;
1245 } 1259 }
1246 1260
1247 int _set_font(HWND handle, char *fontname) 1261 static int _set_font(HWND handle, char *fontname)
1248 { 1262 {
1249 int retval = FALSE; 1263 int retval = FALSE;
1250 #if GTK_MAJOR_VERSION < 2 1264 #if GTK_MAJOR_VERSION < 2
1251 GtkStyle *style; 1265 GtkStyle *style;
1252 GdkFont *font = NULL; 1266 GdkFont *font = NULL;
1341 if(old) 1355 if(old)
1342 free(old); 1356 free(old);
1343 } 1357 }
1344 1358
1345 /* Free old color pointers and allocate new ones */ 1359 /* Free old color pointers and allocate new ones */
1346 void _save_gdk_colors(HWND handle, GdkColor fore, GdkColor back) 1360 static void _save_gdk_colors(HWND handle, GdkColor fore, GdkColor back)
1347 { 1361 {
1348 GdkColor *foregdk = malloc(sizeof(GdkColor)); 1362 GdkColor *foregdk = malloc(sizeof(GdkColor));
1349 GdkColor *backgdk = malloc(sizeof(GdkColor)); 1363 GdkColor *backgdk = malloc(sizeof(GdkColor));
1350 1364
1351 _free_gdk_colors(handle); 1365 _free_gdk_colors(handle);
1355 1369
1356 gtk_object_set_data(GTK_OBJECT(handle), "foregdk", (gpointer)foregdk); 1370 gtk_object_set_data(GTK_OBJECT(handle), "foregdk", (gpointer)foregdk);
1357 gtk_object_set_data(GTK_OBJECT(handle), "backgdk", (gpointer)backgdk); 1371 gtk_object_set_data(GTK_OBJECT(handle), "backgdk", (gpointer)backgdk);
1358 } 1372 }
1359 1373
1360 int _set_color(HWND handle, unsigned long fore, unsigned long back) 1374 static int _set_color(HWND handle, unsigned long fore, unsigned long back)
1361 { 1375 {
1362 /* Remember that each color component in X11 use 16 bit no matter 1376 /* Remember that each color component in X11 use 16 bit no matter
1363 * what the destination display supports. (and thus GDK) 1377 * what the destination display supports. (and thus GDK)
1364 */ 1378 */
1365 GdkColor forecolor, backcolor; 1379 GdkColor forecolor, backcolor;
3822 DW_MUTEX_UNLOCK; 3836 DW_MUTEX_UNLOCK;
3823 #endif 3837 #endif
3824 } 3838 }
3825 3839
3826 #if GTK_MAJOR_VERSION > 1 3840 #if GTK_MAJOR_VERSION > 1
3827 void _dw_recursive_free(GtkTreeModel *store, GtkTreeIter parent) 3841 static void _dw_recursive_free(GtkTreeModel *store, GtkTreeIter parent)
3828 { 3842 {
3829 void *data; 3843 void *data;
3830 GtkTreeIter iter; 3844 GtkTreeIter iter;
3831 3845
3832 gtk_tree_model_get(store, &parent, 3, &data, -1); 3846 gtk_tree_model_get(store, &parent, 3, &data, -1);
4026 gtk_container_remove(GTK_CONTAINER(parenttree), item); 4040 gtk_container_remove(GTK_CONTAINER(parenttree), item);
4027 DW_MUTEX_UNLOCK; 4041 DW_MUTEX_UNLOCK;
4028 #endif 4042 #endif
4029 } 4043 }
4030 4044
4031 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) 4045 static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
4032 { 4046 {
4033 GtkWidget *clist; 4047 GtkWidget *clist;
4034 char numbuf[10]; 4048 char numbuf[10];
4035 int z; 4049 int z;
4036 int _locked_by_me = FALSE; 4050 int _locked_by_me = FALSE;
4133 * DW pick the appropriate file extension. 4147 * DW pick the appropriate file extension.
4134 * (ICO on OS/2 or Windows, XPM on Unix) 4148 * (ICO on OS/2 or Windows, XPM on Unix)
4135 */ 4149 */
4136 unsigned long API dw_icon_load_from_file(char *filename) 4150 unsigned long API dw_icon_load_from_file(char *filename)
4137 { 4151 {
4152 int z, found = -1, _locked_by_me = FALSE;
4153 #if GTK_MAJOR_VERSION > 1
4154 GdkPixbuf *pixbuf;
4155 #elif defined(USE_IMLIB)
4156 GdkImlibImage *image;
4157 #endif
4138 char *file = alloca(strlen(filename) + 5); 4158 char *file = alloca(strlen(filename) + 5);
4139 4159
4140 if(!file) 4160 if (!file)
4141 return 0; 4161 return 0;
4142 4162
4143 strcpy(file, filename); 4163 strcpy(file, filename);
4144 4164
4145 /* check if we can read from this file (it exists and read permission) */ 4165 /* check if we can read from this file (it exists and read permission) */
4146 if(access(file, 04) != 0) 4166 if(access(file, 04) != 0)
4147 { 4167 {
4148 /* Try with .bmp extention */ 4168 /* Try with .xpm extention */
4149 strcat(file, ".xpm"); 4169 strcat(file, ".xpm");
4150 if(access(file, 04) != 0) 4170 if(access(file, 04) != 0)
4151 return 0; 4171 return 0;
4152 } 4172 }
4153 /* Need to add code to add to the internal pixmap lists */ 4173
4154 return 0; 4174 DW_MUTEX_LOCK;
4175 /* Find a free entry in the array */
4176 for(z=0;z<_PixmapCount;z++)
4177 {
4178 if(!_PixmapArray[z].used)
4179 {
4180 found = z;
4181 break;
4182 }
4183 }
4184
4185 /* If there are no free entries, expand the
4186 * array.
4187 */
4188 if(found == -1)
4189 {
4190 DWPrivatePixmap *old = _PixmapArray;
4191
4192 found = _PixmapCount;
4193 _PixmapCount++;
4194
4195 _PixmapArray = malloc(sizeof(DWPrivatePixmap) * _PixmapCount);
4196
4197 if(found)
4198 memcpy(_PixmapArray, old, sizeof(DWPrivatePixmap) * found);
4199 if(old)
4200 free(old);
4201 _PixmapArray[found].used = 1;
4202 _PixmapArray[found].pixmap = _PixmapArray[found].mask = NULL;
4203 }
4204
4205 #if GTK_MAJOR_VERSION > 1
4206 pixbuf = gdk_pixbuf_new_from_file(file, NULL);
4207
4208 _PixmapArray[found].width = gdk_pixbuf_get_width(pixbuf);
4209 _PixmapArray[found].height = gdk_pixbuf_get_height(pixbuf);
4210
4211 gdk_pixbuf_render_pixmap_and_mask(pixbuf, &_PixmapArray[found].pixmap, &_PixmapArray[found].mask, 1);
4212 g_object_unref(pixbuf);
4213 #elif defined(USE_IMLIB)
4214 image = gdk_imlib_load_image(file);
4215
4216 _PixmapArray[found].width = image->rgb_width;
4217 _PixmapArray[found].height = image->rgb_height;
4218
4219 gdk_imlib_render(image, image->rgb_width, image->rgb_height);
4220 _PixmapArray[found].pixmap = gdk_imlib_copy_image(image);
4221 gdk_imlib_destroy_image(image);
4222 #else
4223 _PixmapArray[found].pixmap = gdk_pixmap_create_from_xpm(handle->window, &_PixmapArray[found].mask, &_colors[DW_CLR_PALEGRAY], file);
4224 #endif
4225 DW_MUTEX_UNLOCK;
4226 return found | (1 << 31);
4155 } 4227 }
4156 4228
4157 /* 4229 /*
4158 * Frees a loaded resource in OS/2 and Windows. 4230 * Frees a loaded resource in OS/2 and Windows.
4159 * Parameters: 4231 * Parameters:
4160 * handle: Handle to icon returned by dw_icon_load(). 4232 * handle: Handle to icon returned by dw_icon_load().
4161 */ 4233 */
4162 void dw_icon_free(unsigned long handle) 4234 void dw_icon_free(unsigned long handle)
4163 { 4235 {
4236 /* If it is a private icon, find the item
4237 * free the associated structures and set
4238 * the entry to unused.
4239 */
4240 if(handle & (1 << 31))
4241 {
4242 unsigned long id = handle & 0xFFFFFF;
4243
4244 if(id < _PixmapCount && _PixmapArray[id].used)
4245 {
4246 if(_PixmapArray[id].mask)
4247 {
4248 gdk_bitmap_unref(_PixmapArray[id].mask);
4249 _PixmapArray[id].mask = NULL;
4250 }
4251 if(_PixmapArray[id].pixmap)
4252 {
4253 gdk_pixmap_unref(_PixmapArray[id].pixmap);
4254 _PixmapArray[id].pixmap = NULL;
4255 }
4256 _PixmapArray[id].used = 0;
4257 }
4258 }
4164 } 4259 }
4165 4260
4166 /* Clears a CList selection and associated selection list */ 4261 /* Clears a CList selection and associated selection list */
4167 void _dw_unselect(GtkWidget *clist) 4262 void _dw_unselect(GtkWidget *clist)
4168 { 4263 {
4764 DW_MUTEX_UNLOCK; 4859 DW_MUTEX_UNLOCK;
4765 return tmp; 4860 return tmp;
4766 } 4861 }
4767 4862
4768 /* Returns a GdkColor from a DW color */ 4863 /* Returns a GdkColor from a DW color */
4769 GdkColor _internal_color(unsigned long value) 4864 static GdkColor _internal_color(unsigned long value)
4770 { 4865 {
4771 if(DW_RGB_COLOR & value) 4866 if(DW_RGB_COLOR & value)
4772 { 4867 {
4773 GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 }; 4868 GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 };
4774 return color; 4869 return color;
6447 DW_MUTEX_UNLOCK; 6542 DW_MUTEX_UNLOCK;
6448 } 6543 }
6449 6544
6450 #if GTK_MAJOR_VERSION < 2 6545 #if GTK_MAJOR_VERSION < 2
6451 /* Check if a GList item is in another GList */ 6546 /* Check if a GList item is in another GList */
6452 int _dw_in_list(GList *item, GList *list) 6547 static int _dw_in_list(GList *item, GList *list)
6453 { 6548 {
6454 while(list) 6549 while(list)
6455 { 6550 {
6456 if(list->data == item->data) 6551 if(list->data == item->data)
6457 return TRUE; 6552 return TRUE;
6635 gtk_list_clear_items(GTK_LIST(handle2), index, index); 6730 gtk_list_clear_items(GTK_LIST(handle2), index, index);
6636 DW_MUTEX_UNLOCK; 6731 DW_MUTEX_UNLOCK;
6637 } 6732 }
6638 6733
6639 /* Reposition the bar according to the percentage */ 6734 /* Reposition the bar according to the percentage */
6640 gint _splitbar_size_allocate(GtkWidget *widget, GtkAllocation *event, gpointer data) 6735 static gint _splitbar_size_allocate(GtkWidget *widget, GtkAllocation *event, gpointer data)
6641 { 6736 {
6642 float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); 6737 float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent");
6643 int lastwidth = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastwidth"); 6738 int lastwidth = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastwidth");
6644 int lastheight = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastheight"); 6739 int lastheight = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastheight");
6645 6740
6660 return FALSE; 6755 return FALSE;
6661 } 6756 }
6662 6757
6663 #if GTK_MAJOR_VERSION > 1 6758 #if GTK_MAJOR_VERSION > 1
6664 /* Figure out the new percentage */ 6759 /* Figure out the new percentage */
6665 void _splitbar_accept_position(GObject *object, GParamSpec *pspec, gpointer data) 6760 static void _splitbar_accept_position(GObject *object, GParamSpec *pspec, gpointer data)
6666 { 6761 {
6667 GtkWidget *widget = (GtkWidget *)data; 6762 GtkWidget *widget = (GtkWidget *)data;
6668 float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); 6763 float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent");
6669 int size = 0, position = gtk_paned_get_position(GTK_PANED(widget)); 6764 int size = 0, position = gtk_paned_get_position(GTK_PANED(widget));
6670 6765
6942 env->MajorVersion = atoi(tempbuf); 7037 env->MajorVersion = atoi(tempbuf);
6943 env->MinorVersion = 0; 7038 env->MinorVersion = 0;
6944 } 7039 }
6945 7040
6946 /* Internal function to handle the file OK press */ 7041 /* Internal function to handle the file OK press */
6947 gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) 7042 static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait)
6948 { 7043 {
6949 #if GTK_MAJOR_VERSION > 1 7044 #if GTK_MAJOR_VERSION > 1
6950 const char *tmp; 7045 const char *tmp;
6951 #else 7046 #else
6952 char *tmp; 7047 char *tmp;
6963 dw_dialog_dismiss(dwwait, (void *)tmpdup); 7058 dw_dialog_dismiss(dwwait, (void *)tmpdup);
6964 return FALSE; 7059 return FALSE;
6965 } 7060 }
6966 7061
6967 /* Internal function to handle the file Cancel press */ 7062 /* Internal function to handle the file Cancel press */
6968 gint _gtk_file_cancel(GtkWidget *widget, DWDialog *dwwait) 7063 static gint _gtk_file_cancel(GtkWidget *widget, DWDialog *dwwait)
6969 { 7064 {
6970 if(!dwwait) 7065 if(!dwwait)
6971 return FALSE; 7066 return FALSE;
6972 7067
6973 gtk_widget_destroy(GTK_WIDGET(dwwait->data)); 7068 gtk_widget_destroy(GTK_WIDGET(dwwait->data));