int IupGetColor(int x, int y, unsigned char *r, unsigned char *g, unsigned char *b) { int ret; Ihandle* dlg = IupColorDlg(); IupSetAttribute(dlg, "TITLE", iupStrMessageGet("IUP_GETCOLOR")); IupSetfAttribute(dlg, "VALUE", "%d %d %d", *r, *g, *b); IupSetAttribute(dlg, "PARENTDIALOG", IupGetGlobal("PARENTDIALOG")); IupSetAttribute(dlg, "ICON", IupGetGlobal("ICON")); IupPopup(dlg, x, y); ret = IupGetInt(dlg, "STATUS"); if (ret) iupStrToRGB(IupGetAttribute(dlg, "VALUE"), r, g, b); IupDestroy(dlg); return ret; }
static void winTabsDrawPageBackground(Ihandle* ih, HDC hDC, RECT* rect) { unsigned char r=0, g=0, b=0; char* color = iupAttribGetInheritNativeParent(ih, "BGCOLOR"); if (!color) color = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); if (!color) color = iupAttribGet(ih, "BACKGROUND"); if (!color) color = IupGetGlobal("DLGBGCOLOR"); iupStrToRGB(color, &r, &g, &b); SetDCBrushColor(hDC, RGB(r,g,b)); FillRect(hDC, rect, (HBRUSH)GetStockObject(DC_BRUSH)); }
void IupMessage(const char* title, const char* message) { Ihandle* dlg = IupCreate("messagedlg"); IupSetAttribute(dlg, "TITLE", (char*)title); IupSetAttribute(dlg, "VALUE", (char*)message); IupSetAttribute(dlg, "PARENTDIALOG", IupGetGlobal("PARENTDIALOG")); IupPopup(dlg, IUP_CENTER, IUP_CENTER); IupDestroy(dlg); }
static void iDialogListCheckLastVisible() { if (iupDlgListVisibleCount() <= 0) { /* if this is the last window visible, exit message loop except when LOCKLOOP==YES */ if (!iupStrBoolean(IupGetGlobal("LOCKLOOP"))) { IupExitLoop(); } } }
static int k_any(Ihandle *ih, int c) { if (c == K_a) IupSetAttribute(ih, "POSX", "100"); if (iup_isprint(c)) printf("K_ANY(%d = %s \'%c\')\n", c, iupKeyCodeToName(c), (char)c); else printf("K_ANY(%d = %s)\n", c, iupKeyCodeToName(c)); printf(" MODKEYSTATE(%s)\n", IupGetGlobal("MODKEYSTATE")); return IUP_DEFAULT; }
void iuplua_plugstate(lua_State *L, Ihandle *ih) { IupSetAttribute(ih, "_IUPLUA_STATE_CONTEXT",(char *) L); if (IupGetGlobal("IUPLUA_THREADED")) { int ref; lua_pushthread(L); ref = luaL_ref(L, LUA_REGISTRYINDEX); /* keep ref for L, L maybe a thread */ IupSetInt(ih, "_IUPLUA_STATE_THREAD", ref); } }
char* iupMatrixGetFgColor(Ihandle* ih, int lin, int col) { unsigned char r = 0, g = 0, b = 0; /* called from Edit only */ if (!ih->data->fgcolor_cb || (iMatrixCallColorCB(ih, ih->data->fgcolor_cb, lin, col, &r, &g, &b) == IUP_IGNORE)) { char* fgcolor = iMatrixGetCellAttrib(ih, IMAT_HAS_FGCOLOR, lin, col, 0); if (!fgcolor) { if (lin ==0 || col == 0) fgcolor = IupGetGlobal("DLGFGCOLOR"); else fgcolor = IupGetGlobal("TXTFGCOLOR"); } return fgcolor; } else { char* buffer = iupStrGetMemory(30); sprintf(buffer, "%d %d %d", r, g, b); return buffer; } }
int IupOleControlOpen(void) { if (IupGetGlobal("_IUP_OLECONTROL_OPEN")) return IUP_OPENED; HRESULT retval = OleInitialize(NULL); if (retval != S_OK && retval != S_FALSE) return IUP_ERROR; iupRegisterClass(iOleControlNewClass()); IupSetGlobal("_IUP_OLECONTROL_OPEN", "1"); return IUP_NOERROR; }
int IupGetFile(char* filename) { Ihandle *dlg = 0; int ret; char filter[4096] = "*.*"; static char dir[4096] = ""; /* static will make the dir persist from one call to another if not defined */ if (!filename) return -1; dlg = IupFileDlg(); iupStrSplitFileName(filename, dir, filter); IupSetAttribute(dlg, "FILTER", filter); IupSetAttribute(dlg, "DIRECTORY", dir); IupSetAttribute(dlg, "ALLOWNEW", "YES"); IupSetAttribute(dlg, "NOCHANGEDIR", "YES"); IupSetAttribute(dlg, "PARENTDIALOG", IupGetGlobal("PARENTDIALOG")); IupSetAttribute(dlg, "ICON", IupGetGlobal("ICON")); IupPopup(dlg, IUP_CENTERPARENT, IUP_CENTERPARENT); ret = IupGetInt(dlg, "STATUS"); if (ret != -1) { char* value = IupGetAttribute(dlg, "VALUE"); if (value) { strcpy(filename, value); iupStrSplitFileName(filename, dir, NULL); } } IupDestroy(dlg); return ret; }
void iuplua_show_error_message(const char *pname, const char* msg) { Ihandle *multi_text, *lbl, *copy, *button, *box, *dlg, *abort, *buttonbox; char* value = IupGetGlobal("LUA_ERROR_LABEL"); if (!pname) pname = "_@IUP_ERROR"; lbl = IupLabel("_@IUP_LUAERROR"); IupSetAttribute(lbl, "EXPAND", "HORIZONTAL"); if (value) IupSetStrAttribute(lbl, "TITLE", value); copy = IupButton("_@IUP_COPY", NULL); IupSetStrAttribute(copy, "TIP", "_@IUP_COPYTOCLIPBOARD"); IupSetStrAttribute(copy, "PADDING", IupGetGlobal("DEFAULTBUTTONPADDING")); IupSetCallback(copy, "ACTION", show_error_copy_action); button = IupButton("_@IUP_CONTINUE", NULL); IupSetStrAttribute(button, "PADDING", IupGetGlobal("DEFAULTBUTTONPADDING")); IupSetCallback(button, "ACTION", show_error_continue_action); abort = IupButton("_@IUP_EXIT", NULL); IupSetStrAttribute(abort, "PADDING", IupGetGlobal("DEFAULTBUTTONPADDING")); IupSetCallback(abort, "ACTION", show_error_exit_action); multi_text = IupMultiLine(NULL); IupSetAttribute(multi_text, "EXPAND", "YES"); IupSetAttribute(multi_text, "READONLY", "YES"); IupSetAttribute(multi_text, "FONT", "Courier, 12"); IupSetAttribute(multi_text, "VISIBLELINES", "10"); IupSetAttribute(multi_text, "VISIBLECOLUMNS", "50"); IupSetAttribute(multi_text, "NAME", "TEXT"); IupSetStrAttribute(multi_text, "VALUE", msg); buttonbox = IupHbox(copy, button, abort, NULL); IupSetAttribute(buttonbox, "GAP", "50"); IupSetAttribute(IupNormalizer(button, abort, NULL), "NORMALIZE", "HORIZONTAL"); box = IupVbox(lbl, multi_text, buttonbox, NULL); IupSetAttribute(box, "ALIGNMENT", "ACENTER"); IupSetAttribute(box, "NMARGIN", "10x10"); IupSetAttribute(box, "GAP", "10"); dlg = IupDialog(box); IupSetStrAttribute(dlg, "TITLE", pname); IupSetAttribute(dlg, "MINBOX", "NO"); IupSetAttribute(dlg, "MAXBOX", "NO"); IupSetAttribute(dlg, "PARENTDIALOG", IupGetGlobal("PARENTDIALOG")); IupSetAttribute(dlg, "ICON", IupGetGlobal("ICON")); IupSetAttributeHandle(dlg, "DEFAULTESC", button); IupSetAttributeHandle(dlg, "DEFAULTENTER", button); IupSetAttributeHandle(dlg, "STARTFOCUS", button); IupPopup(dlg, IUP_CENTERPARENT, IUP_CENTERPARENT); IupDestroy(dlg); }
void IupGLMakeCurrent(Ihandle* ih) { IGlControlData* gldata; iupASSERT(iupObjectCheck(ih)); if (!iupObjectCheck(ih)) return; /* must be an IupGLCanvas */ if (ih->iclass->nativetype != IUP_TYPECANVAS || !IupClassMatch(ih, "glcanvas")) return; /* must be mapped */ gldata = (IGlControlData*)iupAttribGet(ih, "_IUP_GLCONTROLDATA"); if (!gldata->window) return; if (wglMakeCurrent(gldata->device, gldata->context)==FALSE) { iupAttribSet(ih, "ERROR", "Failed to set new current context."); iupAttribSetStr(ih, "LASTERROR", IupGetGlobal("LASTERROR")); } else { iupAttribSet(ih, "ERROR", NULL); iupAttribSet(ih, "LASTERROR", NULL); if (!IupGetGlobal("GL_VERSION")) { IupSetStrGlobal("GL_VENDOR", (char*)glGetString(GL_VENDOR)); IupSetStrGlobal("GL_RENDERER", (char*)glGetString(GL_RENDERER)); IupSetStrGlobal("GL_VERSION", (char*)glGetString(GL_VERSION)); } } }
static char* iMatrixGetBgColorAttrib(Ihandle* ih, int lin, int col) { if (lin==-1 && col==-1) /* empty id */ { /* check the hash table */ char *color = iupAttribGet(ih, "BGCOLOR"); /* If not defined return the default for normal cells */ if (!color) color = IupGetGlobal("TXTBGCOLOR"); return color; } return NULL; }
static char* iMatrixGetBgColorAttrib(Ihandle* ih, const char* name_id) { if (name_id[0]==0) { /* check the hash table */ char *color = iupAttribGet(ih, "BGCOLOR"); /* If not defined return the default for normal cells */ if (!color) color = IupGetGlobal("TXTBGCOLOR"); return color; } return NULL; }
static int iSplitMotion_CB(Ihandle* bar, int x, int y, char *status) { Ihandle* ih = bar->parent; if (ih->data->is_holding) { if (iup_isbutton1(status)) { int cur_x, cur_y; iupStrToIntInt(IupGetGlobal("CURSORPOS"), &cur_x, &cur_y, 'x'); if (ih->data->orientation == ISPLIT_VERT) { int width1 = iSplitGetWidth1(ih); width1 = ih->data->start_size + (cur_x - ih->data->start_pos); ih->data->val = (width1*1000)/(ih->currentwidth-ih->data->barsize); } else { int height1 = iSplitGetHeight1(ih); height1 = ih->data->start_size + (cur_y - ih->data->start_pos); ih->data->val = (height1*1000)/(ih->currentheight-ih->data->barsize); } iSplitCropVal(ih); if (ih->data->layoutdrag) { if (ih->data->autohide) { iSplitSetBarPosition(ih, cur_x, cur_y, 0); iSplitAutoHideXY(ih); } IupRefreshChildren(ih); } else iSplitSetBarPosition(ih, cur_x, cur_y, 1); } else ih->data->is_holding = 0; } (void)x; (void)y; return IUP_DEFAULT; }
static char* winToggleGetBgColorAttrib(Ihandle* ih) { /* the most important use of this is to provide the correct background for images */ if (iupwin_comctl32ver6 && ih->data->type==IUP_TOGGLE_IMAGE) { COLORREF cr; if (iupwinDrawGetThemeButtonBgColor(ih->handle, &cr)) return iupStrReturnStrf("%d %d %d", (int)GetRValue(cr), (int)GetGValue(cr), (int)GetBValue(cr)); } if (ih->data->type == IUP_TOGGLE_TEXT) return iupBaseNativeParentGetBgColorAttrib(ih); else return IupGetGlobal("DLGBGCOLOR"); }
static int motToggleSetBgColorAttrib(Ihandle* ih, const char* value) { if (ih->data->type == IUP_TOGGLE_TEXT) { char* parent_value = iupAttribGetInheritNativeParent(ih, "BGCOLOR"); if (!parent_value) { /* if not defined at a native parent, then change the toggle button color to the given color instead using the default */ if (iupdrvBaseSetBgColorAttrib(ih, value)) /* let XmChangeColor do its job */ { parent_value = IupGetGlobal("DLGBGCOLOR"); XtVaSetValues(ih->handle, XmNbackground, iupmotColorGetPixelStr(parent_value), NULL); /* reset just the background */ if (ih->data->is_radio) XtVaSetValues(ih->handle, XmNselectColor, iupmotColorGetPixel(0, 0, 0), NULL); XtVaSetValues(ih->handle, XmNunselectColor, iupmotColorGetPixelStr(value), NULL); return 1; } } else { /* ignore given value, must use only from parent */ if (iupdrvBaseSetBgColorAttrib(ih, parent_value)) { if (ih->data->is_radio) XtVaSetValues(ih->handle, XmNselectColor, iupmotColorGetPixel(0, 0, 0), NULL); XtVaSetValues(ih->handle, XmNunselectColor, iupmotColorGetPixelStr(parent_value), NULL); return 1; } } return 0; } else { if (ih->data->flat) { /* ignore given value, must use only from parent */ value = iupBaseNativeParentGetBgColor(ih); if (iupdrvBaseSetBgColorAttrib(ih, value)) return 1; } return iupdrvBaseSetBgColorAttrib(ih, value); } }
static char* winTabsGetBgColorAttrib(Ihandle* ih) { /* the most important use of this is to provide the correct background for images */ if (iupwin_comctl32ver6) { COLORREF cr; if (iupwinDrawGetThemeTabsBgColor(ih->handle, &cr)) { char* str = iupStrGetMemory(20); sprintf(str, "%d %d %d", (int)GetRValue(cr), (int)GetGValue(cr), (int)GetBValue(cr)); return str; } } return IupGetGlobal("DLGBGCOLOR"); }
int IupControlsOpen(void) { if (IupGetGlobal("_IUP_CONTROLS_OPEN")) return IUP_OPENED; iupRegisterClass(iupDialNewClass()); iupRegisterClass(iupCellsNewClass()); iupRegisterClass(iupColorbarNewClass()); iupRegisterClass(iupColorBrowserNewClass()); iupRegisterClass(iupMatrixNewClass()); iupRegisterClass(iupGaugeNewClass()); iupRegisterClass(iupColorBrowserDlgNewClass()); iupRegisterClass(iupMatrixListNewClass()); IupSetGlobal("_IUP_CONTROLS_OPEN", "1"); return IUP_NOERROR; }
int main(int argc, char* argv[]) { IupOpen(&argc, &argv); IupSetGlobal("SINGLEINSTANCE", "Iup Sample"); if (!IupGetGlobal("SINGLEINSTANCE")) { IupClose(); return EXIT_SUCCESS; } SampleTest(); IupMainLoop(); IupClose(); return EXIT_SUCCESS; }
char* IupGetAttribute(Ihandle *ih, const char* name) { iupASSERT(name!=NULL); if (!name) return NULL; if (!ih) return IupGetGlobal(name); iupASSERT(iupObjectCheck(ih)); if (!iupObjectCheck(ih)) return NULL; if (iupATTRIB_ISINTERNAL(name)) return iupAttribGet(ih, name); else { int inherit; char *value, *def_value; value = iupClassObjectGetAttribute(ih, name, &def_value, &inherit); if (!value) value = iupAttribGet(ih, name); if (!value && inherit) { while (!value) { ih = ih->parent; if (!ih) break; value = iupAttribGet(ih, name); } } if (!value) value = def_value; return value; } }
static void iSboxGetFinalSize(Ihandle* ih, int direction, int *w, int *h) { int final_x, final_y; int diff_x, diff_y; iupStrToIntInt(IupGetGlobal("CURSORPOS"), &final_x, &final_y, 'x'); diff_x = final_x - ih->data->start_x; diff_y = final_y - ih->data->start_y; if(direction == ISBOX_WEST) diff_x = -diff_x; if(direction == ISBOX_NORTH) diff_y = -diff_y; *w = diff_x + ih->data->start_w; *h = diff_y + ih->data->start_h; }
char* iupGetDefaultFontSizeGlobalAttrib(void) { int size = 0; int is_bold = 0, is_italic = 0, is_underline = 0, is_strikeout = 0; char typeface[1024]; char *str; char* standardfont; standardfont = IupGetGlobal("DEFAULTFONT"); if (!iupGetFontInfo(standardfont, typeface, &size, &is_bold, &is_italic, &is_underline, &is_strikeout)) return NULL; str = iupStrGetMemory(50); sprintf(str, "%d", size); return str; }
static int iMatrixEditKillFocus_CB(Ihandle* ih) { Ihandle* ih_matrix = ih->parent; if (IupGetGlobal("MOTIFVERSION")) { if (iupAttribGet(ih_matrix, "_IUPMAT_DROPDOWN") || /* from iMatrixEditDropDown_CB, in Motif */ iupAttribGet(ih_matrix, "_IUPMAT_DOUBLECLICK")) /* from iMatrixMouseLeftPress, in Motif */ { iupAttribSetStr(ih_matrix, "_IUPMAT_DOUBLECLICK", NULL); iupAttribSetStr(ih_matrix, "_IUPMAT_DROPDOWN", NULL); return IUP_DEFAULT; } } if (iupAttribGet(ih_matrix, "_IUPMAT_IGNOREFOCUS")) return IUP_DEFAULT; iupMatrixEditForceHidden(ih_matrix); return IUP_DEFAULT; }
static int iListSetMaskFloatAttrib(Ihandle* ih, const char* value) { if (!ih->data->has_editbox) return 0; if (!value) { if (ih->data->mask) { iupMaskDestroy(ih->data->mask); ih->data->mask = NULL; } } else { Imask* mask; float min, max; char* decimal_symbol = iupAttribGet(ih, "MASKDECIMALSYMBOL"); if (!decimal_symbol) decimal_symbol = IupGetGlobal("DEFAULTDECIMALSYMBOL"); if (iupStrToFloatFloat(value, &min, &max, ':')!=2) return 0; mask = iupMaskCreateFloat(min, max, decimal_symbol); if (mask) { int val = iupAttribGetInt(ih, "MASKNOEMPTY"); iupMaskSetNoEmpty(mask, val); if (ih->data->mask) iupMaskDestroy(ih->data->mask); ih->data->mask = mask; } } return 0; }
void iupDialogHide(Ihandle* ih) { /* hidden at the system and marked hidden in IUP */ if (!iupdrvDialogIsVisible(ih) && ih->data->show_state == IUP_HIDE) return; /* marked hidden in IUP */ ih->data->show_state = IUP_HIDE; /* if called IupHide for a Popup window */ if (iupAttribGetBoolean(ih, "MODAL")) { iDialogUnSetModal(ih); IupExitLoop(); } ih->data->ignore_resize = 1; /* actually hide the window */ iupdrvDialogSetVisible(ih, 0); ih->data->ignore_resize = 0; /* decrement visible count */ iupDlgListVisibleDec(); if (iupDlgListVisibleCount() <= 0) { /* if this is the last window visible, exit message loop except when LOCKLOOP==YES */ if (!iupStrBoolean(IupGetGlobal("LOCKLOOP"))) IupExitLoop(); } /* flush, then process show_cb and startfocus */ iDialogAfterShow(ih); }
void iupSetDefaultFontSizeGlobalAttrib(const char* value) { int size = 0; int is_bold = 0, is_italic = 0, is_underline = 0, is_strikeout = 0; char typeface[1024]; char new_standardfont[1024]; char* standardfont; if (!value) return; standardfont = IupGetGlobal("DEFAULTFONT"); if (!iupGetFontInfo(standardfont, typeface, &size, &is_bold, &is_italic, &is_underline, &is_strikeout)) return; sprintf(new_standardfont, "%s, %s%s%s%s%s", typeface, is_bold?"Bold ":"", is_italic?"Italic ":"", is_underline?"Underline ":"", is_strikeout?"Strikeout ":"", value); IupStoreGlobal("DEFAULTFONT", new_standardfont); return; }
static int iExpanderGlobalMotion_cb(int x, int y) { int child_x, child_y; Ihandle* ih = (Ihandle*)IupGetGlobal("_IUP_EXPANDER_GLOBAL"); Ihandle *child = ih->firstchild->brother; if (ih->data->state != IEXPANDER_OPEN_FLOAT) { IupSetGlobal("_IUP_EXPANDER_GLOBAL", NULL); IupSetFunction("GLOBALMOTION_CB", IupGetFunction("_IUP_OLD_GLOBALMOTION_CB")); IupSetFunction("_IUP_OLD_GLOBALMOTION_CB", NULL); IupSetGlobal("INPUTCALLBACKS", "No"); return IUP_DEFAULT; } child_x = 0, child_y = 0; iupdrvClientToScreen(ih->firstchild, &child_x, &child_y); if (x > child_x && x < child_x+ih->firstchild->currentwidth && y > child_y && y < child_y+ih->firstchild->currentheight) return IUP_DEFAULT; /* ignore if inside the bar */ child_x = 0, child_y = 0; iupdrvClientToScreen(child, &child_x, &child_y); if (x < child_x || x > child_x+child->currentwidth || y < child_y || y > child_y+child->currentheight) { ih->data->state = IEXPANDER_CLOSE; iExpanderOpenCloseChild(ih, 0); IupSetGlobal("_IUP_EXPANDER_GLOBAL", NULL); IupSetFunction("GLOBALMOTION_CB", IupGetFunction("_IUP_OLD_GLOBALMOTION_CB")); IupSetFunction("_IUP_OLD_GLOBALMOTION_CB", NULL); IupSetGlobal("INPUTCALLBACKS", "No"); } return IUP_DEFAULT; }
static int iMatrixFocus_CB(Ihandle* ih, int focus) { int rc = IUP_DEFAULT; if (!iupMatrixIsValid(ih, 1)) return IUP_DEFAULT; if (IupGetGlobal("MOTIFVERSION")) { if (iupAttribGet(ih, "_IUPMAT_DROPDOWN") || /* from iMatrixEditDropDown_CB, in Motif */ iupAttribGet(ih, "_IUPMAT_DOUBLECLICK")) /* from iMatrixMouseLeftPress, in Motif */ return IUP_DEFAULT; } ih->data->has_focus = focus; iupMatrixDrawUpdate(ih); if (focus) iupMatrixAuxCallEnterCellCb(ih); else iupMatrixAuxCallLeaveCellCb(ih); return rc; }
static void winFileDlgGetFolder(Ihandle *ih) { InativeHandle* parent = iupDialogGetNativeParent(ih); BROWSEINFO browseinfo; TCHAR filename[MAX_PATH]; LPITEMIDLIST selecteditem; /* if NOT set will NOT be Modal */ /* anyway it will be modal only relative to its parent */ if (!parent) parent = GetActiveWindow(); ZeroMemory(&browseinfo, sizeof(BROWSEINFO)); browseinfo.lpszTitle = iupwinStrToSystem(iupAttribGet(ih, "TITLE")); browseinfo.pszDisplayName = filename; browseinfo.lpfn = winFileDlgBrowseCallback; browseinfo.lParam = (LPARAM)ih; browseinfo.ulFlags = IupGetGlobal("_IUPWIN_COINIT_MULTITHREADED")? 0: BIF_NEWDIALOGSTYLE; browseinfo.hwndOwner = parent; selecteditem = SHBrowseForFolder(&browseinfo); if (!selecteditem) { iupAttribSet(ih, "VALUE", NULL); iupAttribSet(ih, "STATUS", "-1"); } else { SHGetPathFromIDList(selecteditem, filename); iupAttribSetStr(ih, "VALUE", iupwinStrFromSystemFilename(filename)); iupAttribSet(ih, "STATUS", "0"); } iupAttribSet(ih, "FILEEXIST", NULL); iupAttribSet(ih, "FILTERUSED", NULL); }
static int gtkDialogMapMethod(Ihandle* ih) { int decorations = 0; int functions = 0; InativeHandle* parent; GtkWidget* fixed; int has_titlebar = 0; #ifdef HILDON if (iupAttribGetBoolean(ih, "HILDONWINDOW")) { HildonProgram *program = HILDON_PROGRAM(hildon_program_get_instance()); ih->handle = hildon_window_new(); if (ih->handle) hildon_program_add_window(program, HILDON_WINDOW(ih->handle)); } else { iupAttribSetStr(ih, "DIALOGHINT", "YES"); /* otherwise not displayed correctly */ ih->handle = gtk_window_new(GTK_WINDOW_TOPLEVEL); } #else ih->handle = gtk_window_new(GTK_WINDOW_TOPLEVEL); #endif if (!ih->handle) return IUP_ERROR; parent = iupDialogGetNativeParent(ih); if (parent) { gtk_window_set_transient_for((GtkWindow*)ih->handle, (GtkWindow*)parent); /* manually remove child windows when parent is destroyed */ g_signal_connect(G_OBJECT(parent), "destroy", G_CALLBACK(gtkDialogChildDestroyEvent), ih); } g_signal_connect(G_OBJECT(ih->handle), "focus-in-event", G_CALLBACK(iupgtkFocusInOutEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "focus-out-event", G_CALLBACK(iupgtkFocusInOutEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "enter-notify-event", G_CALLBACK(iupgtkEnterLeaveEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "leave-notify-event", G_CALLBACK(iupgtkEnterLeaveEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "show-help", G_CALLBACK(iupgtkShowHelp), ih); /* The iupgtkKeyPressEvent of the control with the focus will propagate the key up to the dialog. */ /* Inside iupgtkKeyPressEvent we test this to avoid duplicate calls. */ g_signal_connect(G_OBJECT(ih->handle), "key-press-event", G_CALLBACK(iupgtkKeyPressEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "configure-event", G_CALLBACK(gtkDialogConfigureEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "window-state-event", G_CALLBACK(gtkDialogWindowStateEvent), ih); g_signal_connect(G_OBJECT(ih->handle), "delete-event", G_CALLBACK(iupgtkDialogDeleteEvent), ih); gtk_window_set_default_size((GtkWindow*)ih->handle, 100, 100); /* set this to avoid size calculation problems */ if (iupAttribGetBoolean(ih, "DIALOGHINT")) gtk_window_set_type_hint(GTK_WINDOW(ih->handle), GDK_WINDOW_TYPE_HINT_DIALOG); /* the container that will receive the child element. */ fixed = gtk_fixed_new(); gtk_container_add((GtkContainer*)ih->handle, fixed); gtk_widget_show(fixed); /* initialize the widget */ gtk_widget_realize(ih->handle); if (iupAttribGet(ih, "TITLE")) has_titlebar = 1; if (iupAttribGetBoolean(ih, "RESIZE")) { functions |= GDK_FUNC_RESIZE; decorations |= GDK_DECOR_RESIZEH; decorations |= GDK_DECOR_BORDER; /* has_border */ } else iupAttribSetStr(ih, "MAXBOX", "NO"); if (iupAttribGetBoolean(ih, "MENUBOX")) { functions |= GDK_FUNC_CLOSE; decorations |= GDK_DECOR_MENU; has_titlebar = 1; } if (iupAttribGetBoolean(ih, "MAXBOX")) { functions |= GDK_FUNC_MAXIMIZE; decorations |= GDK_DECOR_MAXIMIZE; has_titlebar = 1; } if (iupAttribGetBoolean(ih, "MINBOX")) { functions |= GDK_FUNC_MINIMIZE; decorations |= GDK_DECOR_MINIMIZE; has_titlebar = 1; } if (has_titlebar) { functions |= GDK_FUNC_MOVE; decorations |= GDK_DECOR_TITLE; gtk_window_set_title((GtkWindow*)ih->handle, ""); } if (iupAttribGetBoolean(ih, "BORDER") || has_titlebar) decorations |= GDK_DECOR_BORDER; /* has_border */ if (decorations == 0) gtk_window_set_decorated((GtkWindow*)ih->handle, FALSE); else { GdkWindow* window = iupgtkGetWindow(ih->handle); if (window) { gdk_window_set_decorations(window, (GdkWMDecoration)decorations); gdk_window_set_functions(window, (GdkWMFunction)functions); } } /* configure for DRAG&DROP */ if (IupGetCallback(ih, "DROPFILES_CB")) iupAttribSetStr(ih, "DROPFILESTARGET", "YES"); { /* Reset the DLGBGCOLOR global attribute if it is the first time a dialog is created. The value returned by gtk_style_new is not accurate. */ GtkStyle* style = gtk_widget_get_style(ih->handle); if (style && IupGetGlobal("_IUP_RESET_GLOBALCOLORS")) { iupgtkUpdateGlobalColors(style); IupSetGlobal("_IUP_RESET_GLOBALCOLORS", NULL); } } /* configure the size range */ gtkDialogSetMinMax(ih, 1, 1, 65535, 65535); /* MINSIZE and MAXSIZE default values */ /* Ignore VISIBLE before mapping */ iupAttribSetStr(ih, "VISIBLE", NULL); if (iupStrBoolean(IupGetGlobal("INPUTCALLBACKS"))) gtk_widget_add_events(ih->handle, GDK_POINTER_MOTION_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_BUTTON_MOTION_MASK); return IUP_NOERROR; }