Mercurial > dwindows
comparison gtk/dw.c @ 626:ad7a4335f1f1
Make spinbutton VALUE_CHANGE callback work properly
Add updated support for file and directory browser.
Specified directory and extension filter now works.
author | mhessling@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 12 Apr 2008 06:48:38 +0000 |
parents | fb59f9eeeecd |
children | 77cc62375fee |
comparison
equal
deleted
inserted
replaced
625:21c321ec0810 | 626:ad7a4335f1f1 |
---|---|
100 GtkClipboard *_clipboard_object[DW_THREAD_LIMIT]; | 100 GtkClipboard *_clipboard_object[DW_THREAD_LIMIT]; |
101 gchar *_clipboard_contents[DW_THREAD_LIMIT]; | 101 gchar *_clipboard_contents[DW_THREAD_LIMIT]; |
102 | 102 |
103 GtkWidget *last_window = NULL, *popup = NULL; | 103 GtkWidget *last_window = NULL, *popup = NULL; |
104 | 104 |
105 static int _dw_file_active = 0, _dw_ignore_click = 0, _dw_ignore_expand = 0, _dw_color_active = 0; | 105 #if GTK_MAJOR_VERSION < 2 |
106 static int _dw_file_active = 0; | |
107 #endif | |
108 static int _dw_ignore_click = 0, _dw_ignore_expand = 0, _dw_color_active = 0; | |
106 static pthread_t _dw_thread = (pthread_t)-1; | 109 static pthread_t _dw_thread = (pthread_t)-1; |
107 static int _dw_mutex_locked[DW_THREAD_LIMIT]; | 110 static int _dw_mutex_locked[DW_THREAD_LIMIT]; |
108 /* Use default border size for the default enlightenment theme */ | 111 /* Use default border size for the default enlightenment theme */ |
109 static int _dw_border_width = 12, _dw_border_height = 28; | 112 static int _dw_border_width = 12, _dw_border_height = 28; |
110 | 113 |
1696 int val = _round_value(adjustment->value); | 1699 int val = _round_value(adjustment->value); |
1697 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); | 1700 GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); |
1698 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); | 1701 GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); |
1699 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); | 1702 GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); |
1700 | 1703 |
1701 if(slider) | 1704 if (slider) |
1702 { | 1705 { |
1703 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); | 1706 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); |
1704 | 1707 |
1705 if(work.window) | 1708 if (work.window) |
1706 { | 1709 { |
1707 int (*valuechangedfunc)(HWND, int, void *) = work.func; | 1710 int (*valuechangedfunc)(HWND, int, void *) = work.func; |
1708 | 1711 |
1709 if(GTK_IS_VSCALE(slider)) | 1712 if(GTK_IS_VSCALE(slider)) |
1710 valuechangedfunc(work.window, (max - val) - 1, work.data); | 1713 valuechangedfunc(work.window, (max - val) - 1, work.data); |
1711 else | 1714 else |
1712 valuechangedfunc(work.window, val, work.data); | 1715 valuechangedfunc(work.window, val, work.data); |
1713 } | 1716 } |
1714 } | 1717 } |
1715 else if(scrollbar || spinbutton) | 1718 else if (scrollbar || spinbutton) |
1716 { | 1719 { |
1717 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); | 1720 SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); |
1718 | 1721 |
1719 if(work.window) | 1722 if (work.window) |
1720 { | 1723 { |
1721 int (*valuechangedfunc)(HWND, int, void *) = work.func; | 1724 int (*valuechangedfunc)(HWND, int, void *) = work.func; |
1722 | 1725 |
1723 valuechangedfunc(work.window, val, work.data); | 1726 valuechangedfunc(work.window, val, work.data); |
1724 } | 1727 } |
5120 | 5123 |
5121 curval = dw_spinbutton_get_pos(handle); | 5124 curval = dw_spinbutton_get_pos(handle); |
5122 DW_MUTEX_LOCK; | 5125 DW_MUTEX_LOCK; |
5123 adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); | 5126 adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); |
5124 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj); | 5127 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj); |
5128 /* | |
5129 * Set our internal relationships between the adjustment and the spinbutton | |
5130 */ | |
5131 gtk_object_set_data(GTK_OBJECT(handle), "_dw_adjustment", (gpointer)adj); | |
5132 gtk_object_set_data(GTK_OBJECT(adj), "_dw_spinbutton", (gpointer)handle); | |
5125 DW_MUTEX_UNLOCK; | 5133 DW_MUTEX_UNLOCK; |
5126 } | 5134 } |
5127 | 5135 |
5128 /* | 5136 /* |
5129 * Sets the entryfield character limit. | 5137 * Sets the entryfield character limit. |
10076 } | 10084 } |
10077 env->MajorVersion = atoi(tempbuf); | 10085 env->MajorVersion = atoi(tempbuf); |
10078 env->MinorVersion = 0; | 10086 env->MinorVersion = 0; |
10079 } | 10087 } |
10080 | 10088 |
10089 #if GTK_MAJOR_VERSION < 2 | |
10081 /* Internal function to handle the file OK press */ | 10090 /* Internal function to handle the file OK press */ |
10082 static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) | 10091 static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) |
10083 { | 10092 { |
10084 #if GTK_MAJOR_VERSION > 1 | |
10085 const char *tmp; | |
10086 #else | |
10087 char *tmp; | 10093 char *tmp; |
10088 #endif | |
10089 char *tmpdup=NULL; | 10094 char *tmpdup=NULL; |
10090 | 10095 |
10091 if(!dwwait) | 10096 if(!dwwait) |
10092 return FALSE; | 10097 return FALSE; |
10093 | 10098 |
10239 free(folder); | 10244 free(folder); |
10240 } | 10245 } |
10241 | 10246 |
10242 return FALSE; | 10247 return FALSE; |
10243 } | 10248 } |
10249 #endif | |
10244 | 10250 |
10245 /* | 10251 /* |
10246 * Opens a file dialog and queries user selection. | 10252 * Opens a file dialog and queries user selection. |
10247 * Parameters: | 10253 * Parameters: |
10248 * title: Title bar text for dialog. | 10254 * title: Title bar text for dialog. |
10255 * | 10261 * |
10256 */ | 10262 */ |
10257 char *dw_file_browse(char *title, char *defpath, char *ext, int flags) | 10263 char *dw_file_browse(char *title, char *defpath, char *ext, int flags) |
10258 { | 10264 { |
10259 GtkWidget *filew; | 10265 GtkWidget *filew; |
10266 | |
10267 #if GTK_MAJOR_VERSION > 1 | |
10268 GtkFileChooserAction action; | |
10269 GtkFileFilter *filter1 = NULL; | |
10270 GtkFileFilter *filter2 = NULL; | |
10271 gchar *button; | |
10272 char *filename = NULL; | |
10273 char buf[1000]; | |
10274 | |
10275 switch (flags ) | |
10276 { | |
10277 case DW_DIRECTORY_OPEN: | |
10278 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; | |
10279 button = GTK_STOCK_OPEN; | |
10280 break; | |
10281 case DW_FILE_OPEN: | |
10282 action = GTK_FILE_CHOOSER_ACTION_OPEN; | |
10283 button = GTK_STOCK_OPEN; | |
10284 break; | |
10285 case DW_FILE_SAVE: | |
10286 action = GTK_FILE_CHOOSER_ACTION_SAVE; | |
10287 button = GTK_STOCK_SAVE; | |
10288 break; | |
10289 default: | |
10290 dw_messagebox( "Coding error", DW_MB_OK|DW_MB_ERROR, "dw_file_browse() flags argument invalid."); | |
10291 return NULL; | |
10292 break; | |
10293 } | |
10294 | |
10295 filew = gtk_file_chooser_dialog_new ( title, | |
10296 NULL, | |
10297 action, | |
10298 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
10299 button, GTK_RESPONSE_ACCEPT, | |
10300 NULL); | |
10301 | |
10302 if ( flags == DW_FILE_SAVE ) | |
10303 gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER( filew ), TRUE ); | |
10304 | |
10305 if ( ext ) | |
10306 { | |
10307 filter1 = gtk_file_filter_new(); | |
10308 sprintf( buf, "*.%s", ext ); | |
10309 gtk_file_filter_add_pattern( filter1, (gchar *)buf ); | |
10310 sprintf( buf, "\"%s\" files", ext ); | |
10311 gtk_file_filter_set_name( filter1, (gchar *)buf ); | |
10312 filter2 = gtk_file_filter_new(); | |
10313 gtk_file_filter_add_pattern( filter2, (gchar *)"*" ); | |
10314 gtk_file_filter_set_name( filter2, (gchar *)"All Files" ); | |
10315 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter1 ); | |
10316 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter2 ); | |
10317 } | |
10318 | |
10319 if ( defpath ) | |
10320 { | |
10321 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filew ), defpath ); | |
10322 } | |
10323 | |
10324 if ( gtk_dialog_run( GTK_DIALOG( filew ) ) == GTK_RESPONSE_ACCEPT ) | |
10325 { | |
10326 filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( filew ) ); | |
10327 // g_free (filename); | |
10328 } | |
10329 | |
10330 gtk_widget_destroy( filew ); | |
10331 return filename; | |
10332 #else | |
10260 int _locked_by_me = FALSE; | 10333 int _locked_by_me = FALSE; |
10261 DWDialog *dwwait; | 10334 DWDialog *dwwait; |
10262 | |
10263 if(flags == DW_DIRECTORY_OPEN) | 10335 if(flags == DW_DIRECTORY_OPEN) |
10264 { | 10336 { |
10265 HWND window, hbox, vbox, tree, button; | 10337 HWND window, hbox, vbox, tree, button; |
10266 HTREEITEM item, tempitem; | 10338 HTREEITEM item, tempitem; |
10267 | 10339 |
10328 gtk_widget_show(filew); | 10400 gtk_widget_show(filew); |
10329 | 10401 |
10330 DW_MUTEX_UNLOCK; | 10402 DW_MUTEX_UNLOCK; |
10331 } | 10403 } |
10332 return (char *)dw_dialog_wait(dwwait); | 10404 return (char *)dw_dialog_wait(dwwait); |
10405 #endif | |
10333 } | 10406 } |
10334 | 10407 |
10335 | 10408 |
10336 /* | 10409 /* |
10337 * Execute and external program in a seperate session. | 10410 * Execute and external program in a seperate session. |
10807 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) | 10880 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) |
10808 thiswindow = GTK_COMBO(thiswindow)->list; | 10881 thiswindow = GTK_COMBO(thiswindow)->list; |
10809 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) | 10882 else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) |
10810 thiswindow = GTK_COMBO(thiswindow)->entry; | 10883 thiswindow = GTK_COMBO(thiswindow)->entry; |
10811 else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || | 10884 else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || |
10812 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) | 10885 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow) || |
10886 GTK_IS_SPIN_BUTTON(thiswindow)) | |
10813 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); | 10887 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); |
10814 #if GTK_MAJOR_VERSION > 1 | 10888 #if GTK_MAJOR_VERSION > 1 |
10815 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) | 10889 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) |
10816 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); | 10890 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); |
10817 #endif | 10891 #endif |
10833 HWND thiswindow = window; | 10907 HWND thiswindow = window; |
10834 int sigid, _locked_by_me = FALSE; | 10908 int sigid, _locked_by_me = FALSE; |
10835 gint cid; | 10909 gint cid; |
10836 | 10910 |
10837 DW_MUTEX_LOCK; | 10911 DW_MUTEX_LOCK; |
10838 /* | 10912 /* |
10839 * If the window we are setting the signal on is a scrolled window we need to get | 10913 * If the window we are setting the signal on is a scrolled window we need to get |
10840 * the "real" widget type. thiswindow is the "real" widget type | 10914 * the "real" widget type. thiswindow is the "real" widget type |
10841 */ | 10915 */ |
10842 if (GTK_IS_SCROLLED_WINDOW(thiswindow)) | 10916 if (GTK_IS_SCROLLED_WINDOW(thiswindow)) |
10843 { | 10917 { |
10844 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); | 10918 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); |
10845 } | 10919 } |
10846 | 10920 |
10963 if(GTK_IS_COMBO(thiswindow)) | 11037 if(GTK_IS_COMBO(thiswindow)) |
10964 thiswindow = GTK_COMBO(thiswindow)->entry; | 11038 thiswindow = GTK_COMBO(thiswindow)->entry; |
10965 } | 11039 } |
10966 #endif | 11040 #endif |
10967 else if (GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || | 11041 else if (GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || |
10968 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) | 11042 GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow) || |
11043 GTK_IS_SPIN_BUTTON(thiswindow) ) | |
10969 { | 11044 { |
10970 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); | 11045 thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); |
10971 } | 11046 } |
10972 else if (GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0) | 11047 else if (GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0) |
10973 { | 11048 { |