Mercurial > dwindows
diff gtk/dw.c @ 37:360bc6a5f1c9
Sync with latest Dynamic Windows code.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 14 Oct 2001 23:27:37 +0000 |
parents | cddb02f847e1 |
children | 3aa9ef0b3996 |
line wrap: on
line diff
--- a/gtk/dw.c Mon Sep 17 09:15:40 2001 +0000 +++ b/gtk/dw.c Sun Oct 14 23:27:37 2001 +0000 @@ -53,6 +53,8 @@ int _dw_file_active = 0, _dw_ignore_click = 0; pthread_t _dw_thread = (pthread_t)-1; int _dw_mutex_locked = FALSE; +/* Use default border size for the default enlightenment theme */ +int _dw_border_width = 12, _dw_border_height = 28; #define DW_MUTEX_LOCK { if(pthread_self() != _dw_thread && _dw_mutex_locked == FALSE) { gdk_threads_enter(); _dw_mutex_locked = TRUE; _locked_by_me = TRUE; } } #define DW_MUTEX_UNLOCK { if(pthread_self() != _dw_thread && _locked_by_me == TRUE) { gdk_threads_leave(); _dw_mutex_locked = FALSE; _locked_by_me = FALSE; } } @@ -84,6 +86,8 @@ void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); +void msleep(long period); + typedef struct { void *func; @@ -469,6 +473,7 @@ int dw_int_init(DWResources *res, int newthread, int argc, char *argv[]) { int z; + char *tmp; if(res) { @@ -487,6 +492,14 @@ _dw_cmap = gdk_colormap_get_system(); for(z=0;z<16;z++) gdk_color_alloc(_dw_cmap, &_colors[z]); + + tmp = getenv("DW_BORDER_WIDTH"); + if(tmp) + _dw_border_width = atoi(tmp); + tmp = getenv("DW_BORDER_HEIGHT"); + if(tmp) + _dw_border_height = atoi(tmp); + return TRUE; } @@ -506,6 +519,31 @@ } /* + * Runs a message loop for Dynamic Windows, for a period of seconds. + * Parameters: + * seconds: Number of seconds to run the loop for. + */ +void dw_main_sleep(int seconds) +{ + time_t start = time(NULL); + + if(_dw_thread == (pthread_t)-1 || _dw_thread == pthread_self()) + { + while(time(NULL) - start <= seconds) + { + gdk_threads_enter(); + if(gtk_events_pending()) + gtk_main_iteration(); + else + msleep(1); + gdk_threads_leave(); + } + } + else + msleep(seconds * 1000); +} + +/* * Free's memory allocated by dynamic windows. * Parameters: * ptr: Pointer to dynamic windows allocated @@ -998,7 +1036,7 @@ int _locked_by_me = FALSE; DW_MUTEX_LOCK; - gdk_pointer_grab(handle->window, TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK, NULL, NULL, GDK_CURRENT_TIME); + gdk_pointer_grab(handle->window, TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK, NULL, NULL, GDK_CURRENT_TIME); DW_MUTEX_UNLOCK; } @@ -1100,7 +1138,22 @@ */ HWND dw_groupbox_new(int type, int pad, char *title) { - return dw_box_new(type, pad); + GtkWidget *tmp, *frame; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_frame_set_label(GTK_FRAME(frame), title && *title ? title : NULL); + tmp = gtk_table_new(1, 1, FALSE); + gtk_object_set_data(GTK_OBJECT(tmp), "boxtype", (gpointer)type); + gtk_object_set_data(GTK_OBJECT(tmp), "boxpad", (gpointer)pad); + gtk_object_set_data(GTK_OBJECT(frame), "boxhandle", (gpointer)tmp); + gtk_container_add(GTK_CONTAINER(frame), tmp); + gtk_widget_show(tmp); + gtk_widget_show(frame); + DW_MUTEX_UNLOCK; + return frame; } /* @@ -1535,6 +1588,7 @@ gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f); gtk_widget_show(tmp); gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); + gtk_misc_set_alignment(GTK_MISC(tmp), DW_LEFT, DW_LEFT); DW_MUTEX_UNLOCK; return tmp; } @@ -3612,12 +3666,16 @@ void dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { int _locked_by_me = FALSE; + GtkWidget *tmp; if(!box) return; DW_MUTEX_LOCK; + if((tmp = gtk_object_get_data(GTK_OBJECT(box), "boxhandle"))) + box = tmp; + if(!item) { item = gtk_label_new(""); @@ -3771,7 +3829,7 @@ _size_allocate(GTK_WINDOW(handle)); gtk_widget_set_uposition(handle, x, y); - gtk_window_set_default_size(GTK_WINDOW(handle), width, height); + gtk_window_set_default_size(GTK_WINDOW(handle), width - _dw_border_width, height - _dw_border_height); } else if(handle && handle->window) { @@ -3805,10 +3863,20 @@ *x = gx; if(y) *y = gy; - if(width) - *width = gwidth; - if(height) - *height = gheight; + if(GTK_IS_WINDOW(handle)) + { + if(width) + *width = gwidth + _dw_border_width; + if(height) + *height = gheight + _dw_border_height; + } + else + { + if(width) + *width = gwidth; + if(height) + *height = gheight; + } DW_MUTEX_UNLOCK; } } @@ -3841,17 +3909,22 @@ } if(GTK_IS_LABEL(handle2)) { - gfloat x, y; - - x = y = DW_LEFT; - - if(style & DW_DT_CENTER) - x = DW_CENTER; - - if(style & DW_DT_VCENTER) - y = DW_CENTER; - - gtk_misc_set_alignment(GTK_MISC(handle2), x, y); + if(style & DW_DT_CENTER || style & DW_DT_VCENTER) + { + gfloat x, y; + + x = y = DW_LEFT; + + if(style & DW_DT_CENTER) + x = DW_CENTER; + + if(style & DW_DT_VCENTER) + y = DW_CENTER; + + gtk_misc_set_alignment(GTK_MISC(handle2), x, y); + } + if(style & DW_DT_WORDBREAK) + gtk_label_set_line_wrap(GTK_LABEL(handle), TRUE); } DW_MUTEX_UNLOCK; } @@ -4429,12 +4502,16 @@ void dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { int _locked_by_me = FALSE; + GtkWidget *tmp; if(!box) return; DW_MUTEX_LOCK; + if((tmp = gtk_object_get_data(GTK_OBJECT(box), "boxhandle"))) + box = tmp; + if(!item) { item = gtk_label_new(""); @@ -4738,7 +4815,12 @@ */ void dw_window_function(HWND handle, void *function, void *data) { - /* TODO */ + void (* windowfunc)(void *); + + windowfunc = function; + + if(windowfunc) + windowfunc(data); } #ifndef NO_SIGNALS @@ -4788,7 +4870,7 @@ { thisname = "select_child"; } - else if(GTK_IS_WINDOW(thiswindow) && strcmp(signame, "set-focus") == 0) + else if(strcmp(signame, "set-focus") == 0) { thisname = "focus-in-event"; }