gwenhywfar  5.14.1
gtk3_gui_dialog.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Sun May 16 2010
3  copyright : (C) 2010 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * Please see toplevel file COPYING for license details *
8  ***************************************************************************/
9 
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13 
14 
15 #include "gtk3_gui_dialog_p.h"
16 #include <assert.h>
17 
18 #include <gwenhywfar/inherit.h>
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/gui_be.h>
21 #include <gwenhywfar/i18n.h>
22 
23 #include <gwenhywfar/text.h>
24 #include <gwenhywfar/mdigest.h>
25 #include <gwenhywfar/debug.h>
26 #include <gwenhywfar/directory.h>
27 
28 #include <ctype.h>
29 
30 
31 #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg)
32 
33 
34 #define GTK3_DIALOG_WIDGET_REAL 0
35 #define GTK3_DIALOG_WIDGET_CONTENT 1
36 #define GTK3_DIALOG_WIDGET_DATA 2
37 
38 #define GTK3_DIALOG_STRING_TITLE 0
39 #define GTK3_DIALOG_STRING_VALUE 1
40 
41 
42 #include "w_combobox.c"
43 #include "w_label.c"
44 #include "w_dialog.c"
45 #include "w_gridlayout.c"
46 #include "w_hlayout.c"
47 #include "w_hline.c"
48 #include "w_hspacer.c"
49 #include "w_vlayout.c"
50 #include "w_vline.c"
51 #include "w_vspacer.c"
52 #include "w_pushbutton.c"
53 #include "w_lineedit.c"
54 #include "w_textedit.c"
55 #include "w_textbrowser.c"
56 #include "w_stack.c"
57 #include "w_tabbook.c"
58 #include "w_groupbox.c"
59 #include "w_progressbar.c"
60 #include "w_listbox.c"
61 #include "w_checkbox.c"
62 #include "w_scrollarea.c"
63 #include "w_radiobutton.c"
64 #include "w_spinbox.c"
65 #include "w_vsplitter.c"
66 #include "w_hsplitter.c"
67 
68 
69 
70 GWEN_INHERIT(GWEN_DIALOG, GTK3_GUI_DIALOG)
71 
72 
73 
74 
76 {
77  GTK3_GUI_DIALOG *xdlg;
78 
79  GWEN_NEW_OBJECT(GTK3_GUI_DIALOG, xdlg);
80  GWEN_INHERIT_SETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg, xdlg, Gtk3Gui_Dialog_FreeData);
81 
82  /* set virtual functions */
87 
88 }
89 
90 
91 
93 {
94  GTK3_GUI_DIALOG *xdlg;
95 
96  assert(dlg);
97  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
98  assert(xdlg);
99 
100  /* reset virtual functions */
101  GWEN_Dialog_SetSetIntPropertyFn(dlg, xdlg->setIntPropertyFn);
102  GWEN_Dialog_SetGetIntPropertyFn(dlg, xdlg->getIntPropertyFn);
103  GWEN_Dialog_SetSetCharPropertyFn(dlg, xdlg->setCharPropertyFn);
104  GWEN_Dialog_SetGetCharPropertyFn(dlg, xdlg->getCharPropertyFn);
105 
106  GWEN_INHERIT_UNLINK(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
107 }
108 
109 
110 
112 {
113  GTK3_GUI_DIALOG *xdlg;
114 
115  xdlg=(GTK3_GUI_DIALOG *) p;
116 
117  if (xdlg->mainWidget)
118  gtk_widget_destroy(xdlg->mainWidget);
119 
120  GWEN_FREE_OBJECT(xdlg);
121 }
122 
123 
124 
126 {
127  GTK3_GUI_DIALOG *xdlg;
128 
129  assert(dlg);
130  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
131  assert(xdlg);
132 
133  return xdlg->mainWidget;
134 }
135 
136 
137 
139  GWEN_WIDGET *w,
141  int index,
142  int value,
143  int doSignal)
144 {
145  return GWEN_Widget_SetIntProperty(w, prop, index, value, doSignal);
146 }
147 
148 
149 
151  GWEN_WIDGET *w,
153  int index,
154  int defaultValue)
155 {
156  return GWEN_Widget_GetIntProperty(w, prop, index, defaultValue);
157 }
158 
159 
160 
162  GWEN_WIDGET *w,
164  int index,
165  const char *value,
166  int doSignal)
167 {
168  return GWEN_Widget_SetCharProperty(w, prop, index, value, doSignal);
169 }
170 
171 
172 
174  GWEN_WIDGET *w,
176  int index,
177  const char *defaultValue)
178 {
179  return GWEN_Widget_GetCharProperty(w, prop, index, defaultValue);
180 }
181 
182 
183 
184 int Gtk3Gui_Dialog_Setup(GWEN_DIALOG *dlg, GWEN_UNUSED GtkWidget *parentWindow)
185 {
186  GTK3_GUI_DIALOG *xdlg;
187  GWEN_WIDGET_TREE *wtree;
188  GWEN_WIDGET *w;
189  GtkWindow *gw;
190  int rv;
191  GList *tll;
192 
193  assert(dlg);
194  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
195  assert(xdlg);
196 
197  wtree=GWEN_Dialog_GetWidgets(dlg);
198  if (wtree==NULL) {
199  DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog");
200  return GWEN_ERROR_NOT_FOUND;
201  }
202  w=GWEN_Widget_Tree_GetFirst(wtree);
203  if (w==NULL) {
204  DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog");
205  return GWEN_ERROR_NOT_FOUND;
206  }
207 
209  if (rv<0) {
210  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
211  return rv;
212  }
213 
215  gtk_window_set_type_hint(GTK_WINDOW(gw), GDK_WINDOW_TYPE_HINT_DIALOG);
216  gtk_window_set_position(GTK_WINDOW(gw), GTK_WIN_POS_CENTER_ON_PARENT);
217  /*gtk_window_set_keep_above(GTK_WINDOW(gw), TRUE);*/
218  xdlg->mainWidget=GTK_WIDGET(gw);
219 
220  tll=gtk_window_list_toplevels();
221  if (tll) {
222  GList *element;
223  GtkWindow *topLevel=NULL;
224 
225  for (element = tll; element; element = g_list_next(element)) {
226  GtkWindow *win = GTK_WINDOW(element->data);
227  if (gtk_window_is_active(win)) {
228  topLevel=win;
229  break;
230  }
231  }
232  g_list_free(tll);
233 
234  if (topLevel) {
235  DBG_NOTICE(GWEN_LOGDOMAIN, "Found active window [%s]",
236  gtk_window_get_title(topLevel));
237  gtk_window_set_transient_for(gw, topLevel);
238  }
239  else {
240  DBG_ERROR(GWEN_LOGDOMAIN, "No active window found...");
241  }
242  }
243 
244  return 0;
245 }
246 
247 
248 
249 void Gtk3Gui_Dialog_Leave(GWEN_DIALOG *dlg, int result)
250 {
251  GTK3_GUI_DIALOG *xdlg;
252  GWEN_DIALOG *parent;
253 
254  /* get toplevel dialog, the one which actually is the GUI dialog */
255  while ((parent=GWEN_Dialog_GetParentDialog(dlg)))
256  dlg=parent;
257 
258  assert(dlg);
259  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
260  assert(xdlg);
261 
262  xdlg->response=result;
263  if (g_main_loop_is_running(xdlg->loop))
264  g_main_loop_quit(xdlg->loop);
265 }
266 
267 
268 
269 static void run_unmap_handler(GWEN_UNUSED GtkWindow *window, gpointer data)
270 {
271  GWEN_DIALOG *dlg;
272  GTK3_GUI_DIALOG *xdlg;
273 
274  dlg=data;
275  assert(dlg);
276  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
277  assert(xdlg);
278 
279  Gtk3Gui_Dialog_Leave(dlg, 0);
280 }
281 
282 
283 
284 static gint run_delete_handler(GWEN_UNUSED GtkWindow *window,
285  GWEN_UNUSED GdkEventAny *event,
286  gpointer data)
287 {
288  GWEN_DIALOG *dlg;
289  GTK3_GUI_DIALOG *xdlg;
290 
291  dlg=data;
292  assert(dlg);
293  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
294  assert(xdlg);
295 
296  Gtk3Gui_Dialog_Leave(dlg, 0);
297  return TRUE; /* Do not destroy */
298 }
299 
300 
301 
302 static void run_destroy_handler(GWEN_UNUSED GtkWindow *window, gpointer data)
303 {
304  GWEN_DIALOG *dlg;
305  GTK3_GUI_DIALOG *xdlg;
306 
307  dlg=data;
308  assert(dlg);
309  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
310  assert(xdlg);
311 
312  xdlg->destroyed=1;
313 }
314 
315 
316 
317 int GTK3_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd)
318 {
319  GTK3_GUI_DIALOG *xdlg;
320  GtkWidget *g;
321 
322  assert(dlg);
323  xdlg=GWEN_INHERIT_GETDATA(GWEN_DIALOG, GTK3_GUI_DIALOG, dlg);
324  assert(xdlg);
325 
327  if (g==NULL) {
328  DBG_ERROR(GWEN_LOGDOMAIN, "No main widget");
330  return GWEN_ERROR_INVALID;
331  }
332 
333  xdlg->unmap_handler =
334  g_signal_connect(g,
335  "unmap",
336  G_CALLBACK(run_unmap_handler),
337  dlg);
338 
339  xdlg->delete_handler =
340  g_signal_connect(g,
341  "delete-event",
342  G_CALLBACK(run_delete_handler),
343  dlg);
344 
345  xdlg->destroy_handler =
346  g_signal_connect(g,
347  "destroy",
348  G_CALLBACK(run_destroy_handler),
349  dlg);
350 
351  xdlg->loop=g_main_loop_new(NULL, FALSE);
352  if (untilEnd)
353  g_main_loop_run(xdlg->loop);
354  else {
355  GMainContext *ctx;
356 
357  ctx=g_main_loop_get_context(xdlg->loop);
358  while (g_main_context_pending(ctx))
359  g_main_context_iteration(ctx, FALSE);
360  }
361  g_main_loop_unref(xdlg->loop);
362 
363  if (!xdlg->destroyed) {
364  g_signal_handler_disconnect(g, xdlg->unmap_handler);
365  g_signal_handler_disconnect(g, xdlg->delete_handler);
366  g_signal_handler_disconnect(g, xdlg->destroy_handler);
367  }
368 
369  return xdlg->response;
370 }
371 
372 
373 
375 {
376  int rv;
377 
378  switch (GWEN_Widget_GetType(w)) {
380  rv=Gtk3Gui_WDialog_Setup(w);
381  break;
383  rv=Gtk3Gui_WLabel_Setup(w);
384  break;
387  break;
390  break;
393  break;
396  break;
399  break;
401  rv=Gtk3Gui_WHLine_Setup(w);
402  break;
404  rv=Gtk3Gui_WVLine_Setup(w);
405  break;
408  break;
411  break;
414  break;
417  break;
419  rv=Gtk3Gui_WStack_Setup(w);
420  break;
423  break;
425  /* just re-use vbox */
428  break;
431  break;
434  break;
437  break;
440  break;
443  break;
446  break;
449  break;
452  break;
455  break;
458  break;
459  default:
460  DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled widget type %d", GWEN_Widget_GetType(w));
462  break;
463  }
464 
465  if (rv<0) {
466  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
467  return rv;
468  }
469  else {
470  GWEN_WIDGET *wChild;
471 
472  /* handle children */
473  wChild=GWEN_Widget_Tree_GetFirstChild(w);
474  while (wChild) {
475  /* recursion */
476  rv=Gtk3Gui_Dialog_SetupTree(wChild);
477  if (rv<0) {
478  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
479  return rv;
480  }
481  wChild=GWEN_Widget_Tree_GetNext(wChild);
482  }
483  }
484 
485  return 0;
486 }
487 
488 
489 
490 
491 int Gtk3Gui_GetRawText(const char *text, GWEN_BUFFER *tbuf)
492 {
493  const char *p=0;
494  const char *p2=0;
495 
496  if (text==NULL)
497  return 0;
498 
499  /* find begin of HTML area */
500  p=text;
501  while ((p=strchr(p, '<'))) {
502  const char *t;
503 
504  t=p;
505  t++;
506  if (toupper(*t)=='H') {
507  t++;
508  if (toupper(*t)=='T') {
509  t++;
510  if (toupper(*t)=='M') {
511  t++;
512  if (toupper(*t)=='L') {
513  t++;
514  if (toupper(*t)=='>') {
515  break;
516  }
517  }
518  }
519  }
520  }
521  p++;
522  } /* while */
523 
524  /* find end of HTML area */
525  if (p) {
526  p2=p;
527  p2+=6; /* skip "<html>" */
528  while ((p2=strchr(p2, '<'))) {
529  const char *t;
530 
531  t=p2;
532  t++;
533  if (toupper(*t)=='/') {
534  t++;
535  if (toupper(*t)=='H') {
536  t++;
537  if (toupper(*t)=='T') {
538  t++;
539  if (toupper(*t)=='M') {
540  t++;
541  if (toupper(*t)=='L') {
542  t++;
543  if (toupper(*t)=='>') {
544  break;
545  }
546  }
547  }
548  }
549  }
550  }
551  p2++;
552  } /* while */
553  }
554 
555  if (p && p2) {
556  int startPos;
557 
558  p2+=7; /* skip "</html>" */
559 
560  startPos=(p-text);
561 
562  /* append stuff before startPos */
563  if (startPos)
564  GWEN_Buffer_AppendBytes(tbuf, text, startPos);
565  if (*p2)
566  GWEN_Buffer_AppendString(tbuf, p2);
567  return 0;
568  }
569  else {
570  GWEN_Buffer_AppendString(tbuf, text);
571  return 0;
572  }
573 }
574 
575 
576 
577 void Gtk3Gui_ApplyFlags(GtkWidget *g, uint32_t flags)
578 {
579  gtk_widget_set_hexpand(g, (flags & GWEN_WIDGET_FLAGS_FILLX)?TRUE:FALSE);
580  gtk_widget_set_vexpand(g, (flags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE);
581 
582 }
583 
584 
void GWENHYWFAR_CB Gtk3Gui_Dialog_FreeData(GWEN_UNUSED void *bp, void *p)
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition: widget.c:185
#define DBG_ERROR(dbg_logger, format,...)
Definition: debug.h:97
const char * GWEN_Widget_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
Definition: widget.c:820
int Gtk3Gui_WComboBox_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WLineEdit_Setup(GWEN_WIDGET *w)
GtkWidget * Gtk3Gui_Dialog_GetMainWidget(const GWEN_DIALOG *dlg)
int Gtk3Gui_WPushButton_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WLabel_Setup(GWEN_WIDGET *w)
Definition: gtk3/w_label.c:150
int GWEN_Widget_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
Definition: widget.c:803
#define GWEN_ERROR_INVALID
Definition: error.h:67
#define GTK3_DIALOG_WIDGET_REAL
int Gtk3Gui_WProgressBar_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WTabBook_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WScrollArea_Setup(GWEN_WIDGET *w)
#define DBG_NOTICE(dbg_logger, format,...)
Definition: debug.h:152
int Gtk3Gui_Dialog_SetupTree(GWEN_WIDGET *w)
int Gtk3Gui_WSpinBox_Setup(GWEN_WIDGET *w)
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
Definition: dialog.c:629
int Gtk3Gui_WStack_Setup(GWEN_WIDGET *w)
Definition: gtk3/w_stack.c:154
GWEN_DIALOG_SETINTPROPERTY_FN GWEN_Dialog_SetSetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETINTPROPERTY_FN fn)
Definition: dialog.c:640
int Gtk3Gui_GetRawText(const char *text, GWEN_BUFFER *tbuf)
GWEN_DIALOG_PROPERTY
Definition: dialog.h:260
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
GWENHYWFAR_CB const char * Gtk3Gui_Dialog_GetCharProperty(GWEN_UNUSED GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
int Gtk3Gui_WGroupBox_Setup(GWEN_WIDGET *w)
#define GWEN_LOGDOMAIN
Definition: logger.h:32
void Gtk3Gui_Dialog_Extend(GWEN_DIALOG *dlg)
int Gtk3Gui_WTextBrowser_Setup(GWEN_WIDGET *w)
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
int Gtk3Gui_WHLayout_Setup(GWEN_WIDGET *w)
void Gtk3Gui_Dialog_Unextend(GWEN_DIALOG *dlg)
int Gtk3Gui_WVLine_Setup(GWEN_WIDGET *w)
Definition: gtk3/w_vline.c:79
static void run_unmap_handler(GWEN_UNUSED GtkWindow *window, gpointer data)
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition: widget.c:122
int Gtk3Gui_WHLine_Setup(GWEN_WIDGET *w)
Definition: gtk3/w_hline.c:79
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
#define GWEN_INHERIT_UNLINK(bt, t, element)
Definition: inherit.h:326
int Gtk3Gui_WGridLayout_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WHSplitter_Setup(GWEN_WIDGET *w)
Definition: w_hsplitter.c:107
void Gtk3Gui_ApplyFlags(GtkWidget *g, uint32_t flags)
struct GWEN_WIDGET GWEN_WIDGET
Definition: widget_be.h:34
GWEN_DIALOG_SETCHARPROPERTY_FN GWEN_Dialog_SetSetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_SETCHARPROPERTY_FN fn)
Definition: dialog.c:670
#define GWEN_WIDGET_FLAGS_FILLY
Definition: dialog.h:62
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
int Gtk3Gui_WVSplitter_Setup(GWEN_WIDGET *w)
Definition: w_vsplitter.c:107
int Gtk3Gui_WRadioButton_Setup(GWEN_WIDGET *w)
#define GWEN_WIDGET_FLAGS_FILLX
Definition: dialog.h:61
int Gtk3Gui_Dialog_Setup(GWEN_DIALOG *dlg, GWEN_UNUSED GtkWidget *parentWindow)
static gint run_delete_handler(GWEN_UNUSED GtkWindow *window, GWEN_UNUSED GdkEventAny *event, gpointer data)
int Gtk3Gui_WVSpacer_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WDialog_Setup(GWEN_WIDGET *w)
GWENHYWFAR_CB int Gtk3Gui_Dialog_SetCharProperty(GWEN_UNUSED GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
#define GWEN_ERROR_NOT_FOUND
Definition: error.h:89
void GWEN_Widget_AddFlags(GWEN_WIDGET *w, uint32_t fl)
Definition: widget.c:167
int GTK3_Gui_Dialog_Run(GWEN_DIALOG *dlg, int untilEnd)
int GWEN_Widget_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
Definition: widget.c:770
int Gtk3Gui_WVLayout_Setup(GWEN_WIDGET *w)
int Gtk3Gui_WHSpacer_Setup(GWEN_WIDGET *w)
GWEN_DIALOG * GWEN_Dialog_GetParentDialog(const GWEN_DIALOG *dlg)
Definition: dialog.c:172
int GWEN_Widget_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
Definition: widget.c:787
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
Definition: buffer.c:360
static void run_destroy_handler(GWEN_UNUSED GtkWindow *window, gpointer data)
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
#define DBG_INFO(dbg_logger, format,...)
Definition: debug.h:181
GWEN_DIALOG_GETINTPROPERTY_FN GWEN_Dialog_SetGetIntPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETINTPROPERTY_FN fn)
Definition: dialog.c:655
int Gtk3Gui_WCheckBox_Setup(GWEN_WIDGET *w)
void Gtk3Gui_Dialog_Leave(GWEN_DIALOG *dlg, int result)
int Gtk3Gui_WListBox_Setup(GWEN_WIDGET *w)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:300
GWEN_DIALOG_GETCHARPROPERTY_FN GWEN_Dialog_SetGetCharPropertyFn(GWEN_DIALOG *dlg, GWEN_DIALOG_GETCHARPROPERTY_FN fn)
Definition: dialog.c:685
GWENHYWFAR_CB int Gtk3Gui_Dialog_SetIntProperty(GWEN_UNUSED GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:992
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:279
GWENHYWFAR_CB int Gtk3Gui_Dialog_GetIntProperty(GWEN_UNUSED GWEN_DIALOG *dlg, GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
int Gtk3Gui_WTextEdit_Setup(GWEN_WIDGET *w)